开源:开源项目源码学习过程

Posted by Shoukai Huang on November 1, 2018

开源项目源码学习过程

1 准备工作

1.1 相关文档:

阅读代码时, 应该尽可能地利用任何能够得到的文档,如果已经有相关书籍,将会得到更大的帮助。

  • 使用文档:清楚目标项目的使用方法、功能列表;
  • 架构文档:一个系统可以(在重大的系统中也确实如此)同时出多种不同的构架类型. 以不同的方式检查同一系统,分析系统的不同部分,或使用不同级别的分解, 都有可能发现不同的构架类型
  • 对比选型:寻找同类竞品的对比文档,清楚目标项目的优势与特色
  • 社区讨论:顺着讨论思路,一个问题点切入,便于快速进入状态并找到归属感

1.2 相关工具:

  • 阅读工具:VS Code、IDEA
  • 版本工具:Git、SourceTree
  • UML工具:可以将源代码输入到建模工具中, 逆向推导出系统的构架,如:EnterpriseArchitecture、IDEA

1.3 心态

在阅读向导生成的代码时, 不要期望太高, 否则您会感到失望,阅读有收获即可

2 操作过程

2.1 安装

通过安装过程,获取如下关键信息:

  1. 依赖组件:目标项目的实现通过哪些工具;
  2. 安装目录:提供一些使用和运行的基本信息
  3. 工具类库:项目提供了哪些工具方便我们使用

2.2 运行

运行系统关注两个地方:

  1. 命令行或者API功能:目标项目的提供的功能,建议首先熟悉核心功能的基本使用方式
  2. 配置文件:目标项目预留的参数,建议首先学习各个配置文件都起到哪些作用。

2.3 原理

关键特性的基本实现原理

  1. 相关原理:理解理论基础,如果有必要,快速学习下目标项目的理论基础;
  2. 相关模式:如果核心功能使用了设计模式等,如果不熟悉或者遗忘,快速复习下基本知识点;
  3. 实现原理:通过文档快速理解项目的基本组成结构和设计思想;
  4. 对比分析:优缺点对比分析,得到项目在设计和实现过程中的取舍;

2.4 测试

测试用例很关键,优先查看项目的测试用例:单元测试、集成测试;

2.5 阅读

源码不是第一步,而是最后一步。不要一上来就去看源码,而是要基本掌握了功能、原理、关键设计之后再去看源码,看源码的主要目的是为了学习其代码的写作方式,以及关键技术的实现。

  1. 确定阅读范围:不建议通读所有源码。
  2. 跟踪核心流程:通过示例,查看具体的调用栈
  3. 不用只关注数据接口和算法:Nginx 使用红黑树来管理定时器,只要知道这点就够了,并不需要去研究 Nginx 实现红黑树的源码是如何写的,除非你需要修改这部分,但我认为极少人会有这个需求。

参考资料