不知道 —-> 知道 (1)
不理解 —-> 理解 (2.3.4.5)
1.软件功能:先了解源码有哪些功能,最好先读一下readme
2.代码的组织结构:查看代码目录中每个目录都是什么功能,每个文档是干什么的
3.使用graphviz绘制出程序流程图,了解整套运行起来的机制(不要深入细节,单需要搞清楚整个业务流程是什么样的)
4.模块粘合层:每个模块之间的通信,了解中间件,模式,回调,设计模式,委托代理,模块之间的粘合技术是非常重要的,因为他们会把平铺直述的代码给分裂开来。让你不容易看明白他们的关系
5.具体实现:了解了以上的三方面的内容,已经对整个代码的架构和逻辑有了总体的认识。这个时候可以深入细节,开始阅读具体实现的代码了,对于代码的具体实现,一般来说,需要知道一些事实,这样有助于阅读代码中找到重点。
{
~ 代码逻辑:一种是业务逻辑,这种逻辑是真正的业务处理逻辑;另一种是控制逻辑,这种逻辑只是用来控制程序流转的。
~ 出错处理:根据2:8原则,20%的代码是正产的逻辑,80%的代码是在处理各种失误,所以在阅读代码时,可以把处理错误的代码全部删掉,这样就会留下比较干净和简单的正常逻辑代码,排除干扰因素,可以高效的阅读代码
~ 重要算法:筛选出算法,往往是技术含量的部分。
~ 底层交互:有一些代码适合底层系统交互的
~ 运行时调试: 很多时候代码运行起来,才知道具体发生了什么事,所以,让代码运行起来,打好日志,debug断点跟踪好,实际看一下运行的过程,是了解代码的一种很好的方式、
}
方法总结:
自顶向下,从总体到细节的”剥洋葱皮“的读法
画图是必要的,程序流程图,调用时序图,模块组织图。。。 (调用时序图使用graph自己画,模块组织图使用Drafter生成)
代码逻辑归一,排除杂音,主要程序才会凸显出来,更清晰
debug跟踪一下代码是了解代码在运行中发生什么的最好方式