开始接手新的项目,学习别人写的代码,没有文档,没有资料。又一次要经历这痛苦的过程。细想想是不是应该有一些前人的经验可以借鉴的,所以在网上搜索了一下,将相关的精华整理下,作为相关源代码学习的指导。后续在相关的实践中,在不断的补充修改。
前期准备:
1、收集相关的文档、技术资料、业务流程文档等(尽可能多的收集相关文档);
2、找寻合适的分析工具,现在用source insight 进行源代码分析;
分析方法:
1、简化——将没有必要关注的代码去掉,例如废弃的代码和宏等
2、三幅图——函数调用图、数据 流图、配置图
函数调用图:(主线)按着模块的入口函数一层层分析函数如何进行相互调用;
数据流图:(辅线)目的是为了搞明白各个函数的入参是从哪里来的;
配置图:模块的配置信息,主要是一些全局结构变量,这个也是使用该模块时唯一需要修改的东西;
3、抽象——从宏观上把握模块,同时要搞清楚模块的设计思路。任何模块都是基于一定的设计思路,搞清楚其他人的设计思路可能比搞清楚代码调用过程对自己的帮助更大;
4、源码分析报告——在学习源码的时候,作为笔记本进行记录,主要记录难题、感想、启示、重大发现等。同时自己总结一些常用的设计模式的方法。
分析技术手段:
1、由上到下,逐步求精。先从整体上把握代码流程,然后在进行细分。(建议首先从类的角度进行分析)
2、利用相关的调试手段进行代码跟踪分析;
3、加入相关的打印,快速熟悉代码流程。
成果输出:三幅图和抽象的结果
同时在主要学习源代码的时候也要多关注一些开源的网址。不断积累相关的编程技巧。
主要的开源项目网站有:google Code、Sourceforge、github等。
很多人在开始一个软件项目之前都喜欢在sourceforge.net上去找一下,是否有人以前做过相同或者相似的软件,如果有则拿下来读一读,可以使自己对这个软件项目有更多更深入的认识。
学习开源项目的源码的好处有:
1、你读的越多,就越容易读懂。从而提高编程能力;
2、提高自己把握大规模源代码的能力;
3、获得一些好的思想;