如何读项目代码

给你某个项目代码,如何下手阅读呢
以下是收集的资料,出处来自于博客、帖子、问答。

--------------------------------------------------
--------------------------------------------------
先了解软件业务流程,弄清楚软件是干什么的,怎么干?
先得理清楚业务逻辑是怎样的~
俺一般是照着写一遍,把东西一个一个的移植到新工程中。
--------------------------------------------------
--------------------------------------------------
看设计和架构文档,尽可能把high level的文档全部看一遍
使用产品使用文档并实际操作
看系统测试,结合测试文档和代码
--------------------------------------------------
--------------------------------------------------
有效的途径是找到系统中模块之间的接口,特别是输入、输出、和内部模块之间通信时使用的数据结构的定义,
观察输入数据长什么样子,中间经过每一个模块之后大致变成了什么样子。
自己把程序跑起来,把各个模块暂时当做黑箱,在模块接口处把传入和传出的数据记录下来。
只要把整个系统里数据的流动和变化的情况看清楚,你也就摸到边了。
--------------------------------------------------
--------------------------------------------------
1.看操作说明书
目的:这个项目是干什么的?
2.看框架
目的:这个项目是什么架构?
3.跟代码【核心】
目的:每个方法是干什么的?先执行那个?在执行那个?
找一个小的模块,这把片代码彻底看懂。这个时候你需要的就是跟代码了,打断点;如果是B/S的,你可以再加脚本调试debugger。
告诉你一个小窍门:当跟代码的时候,旁边放一张纸,遇到主要的方法,要记下来,从头到尾记下来,等跟完了自己可以拿这张纸进行复述。这样这个功能大
概怎么跑的你就记下了。跟的时候遇到的方法一定要记下来,但是跟的时候一定不要去查,等跟完了在去查。如果是由于自己知识点的原因,应马上彻底补上来。
小结:这个是核心,一般人只是跟不记,等一下自己就不知道自己会那些,不会那些,大概怎么跑的都不知道了。所以一定要记。比如我之前开发全部是用户控件
,很抓狂,你根本不知道那个方法先加载,那个页面需要参数,但是你把它画出来了,一点点看下来了,感觉很有意思。
------------------------------------------------
------------------------------------------------
1.首先,项目的目的、功能、基本使用有个大概的了解
2.阅读项目的文档,重点关注类似Getting started、Example之类的文档,从中学习如何下载、安装、甚至基本使用该项目所需要的知识。
3.如果该项目有提供现成的example工程,首先尝试按照开始文档的介绍运行example,在没有成功运行example之前,不要尝试修改example。
4.运行了第一个example之后,尝试根据你的理解和需要修改example,测试高级功能等。
5. 在了解基本使用后,需要开始深入的了解该项目。例如项目的配置管理、高级功能以及最佳实践。通常一个运作良好的项目会提供一份从浅到深的用户指南,你并不 需要从头到尾阅读这份指南,根据时间和兴趣,特别是你自己任务的需要,重点阅读部分章节并做笔记(推荐evernote)。
6.如果时间允许,尝试从源码构建该项目。通常开源项目都会提供一份构建指南,指导你如何搭建一个用于开发、调试和构建的环境。尝试构建一个版本。
7.如果时间允许并且有兴趣,可以尝试阅读源码:
(1)阅读源码之前,查看该项目是否提供架构和设计文档,阅读这些文档可以了解该项目的大体设计和结构,读源码的时候不会无从下手。
(2)阅读源码之前,一定要能构建并运行该项目,有个直观感受。
(3)阅读源码的第一步是抓主干,尝试理清一次正常运行的代码调用路径,这可以通过debug来观察运行时的变量和行为。修改源码加入日志和打印可以帮助你更好的理解源码。
(4)适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的UML图,帮助记忆和下一步的阅读。
(5)挑选感兴趣的“枝干”代码来阅读,比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,debug细节代码。
(6)阅读源码的时候,重视单元测试,尝试去运行单元测试,基本上一个好的单元测试会将该代码的功能和边界描述清楚。
(7)在熟悉源码后,发现有可以改进的地方,有精力、有意愿可以向该项目的开发者提出改进的意见或者issue,甚至帮他修复和实现,参与该项目的发展。
8.通常在阅读文档和源码之后,你能对该项目有比较深入的了解了,但是该项目所在领域,你可能还想搜索相关的项目和资料,看看有没有其他的更好的项目或者解决方案。在广度和深度之间权衡。
以上是我个人的一些习惯,我自己也并没有完全按照这个来,但是按照这个顺序,基本上能让你比较高效地学习和使用某个开源项目。
-----------------------------------------------------------------------
-----------------------------------------------------------------------
1. 对于常用的系统函数进行追踪。
比如ReadFile,CreateDevice,CreateWindow,在这些函数处放几断点,
可以看到代码的调用过程。通过这种方式可以方便地把代码分为底层代码
和上层逻辑代码。
2.依据项目依赖关系进行阅读。
项目的依赖关系同时表明了项目的复杂程度。对于大型的项目通常都会
分割成若干子项目,根据项目的依赖关系,循序渐进的方式可以让阅读变的简单。
3.对于以lib形式提供的子项目。
在阅读时,可以先把lib的整个项目做为黑盒使用。根据_declspec(dllexport)或者
以头文件方式提供的调用接口,可以减少对于细节的阅读时间。根据模块进行大致的划分,
可以有效地对项目的结构有直接的感性认识。
4.识别项目中使用的设计模式。
对于大型项目来说,设计模式是必不可少的。在庞大的代码中识别设计模式,寻找代码
中使用相似手法的代码结构可以极大简化需要阅读的代码。
 5.根据数据流程分析。
动态职责划分。
6.修改部分代码,进行调试。
修改部分常数或者饶过某些程序执行流程,或者以简化的数据对程序进行追踪。
----------------------------------------------------------------------
----------------------------------------------------------------------
项目介绍,wiki,源码包的readme等。明确项目的目标,应用场景,甚至是用到的技术方案。
根据源码包的架构,以及了解到的用到的技术方案,大概猜测一下各个模块的功能。
同样浏览所有的源码文件,通过文件名字猜测其功能。推荐使用某些代码阅读工具,如source insight,开始通读代码。
阅读的顺序就比较灵活了,可以按照模块来阅读,可以先大致浏览核心部分再到外围代码,或者反过来从外围到核心包围。
经过第四步的通读,大概就能明确各个模块的功能以及各模块之间如何结合的了,这时在心里已经对整个代码结构有个大致的印象了。
如果做不到,就重做第四步。细读部分代码。
比如你感兴趣的部分是如何实现的,或者核心部分的细节。同样我认为,带有某种目的的阅读更有效,比如想借用某部分的实现思路,
想改进某部分,那就针对自己的目标部分进行重点攻破。经过以上几点,相信整份代码已经都理解的七七八八了。
再往下做什么相信都不会是障碍了!我也好久没看开源代码了,多看看开源代码,学习一下牛人的代码风格真的很有好处。
以后我也得多读一些,好好加强一下编码能力了,与君共勉吧~
----------------------------------------------------------------------
----------------------------------------------------------------------
有文档的尽量先看文档,特别是设计思想,代码结构等
然后粗略的看,理清项目的整体结构和逻辑,细节部分不比深究
整体把握好之后,再选择对自己有用的细节部分看一看
---------------------------------------------------------------------
---------------------------------------------------------------------
先文档,然后框架结构,然后公共模块,然后慢慢往上,不明白的地方,在回溯。
---------------------------------------------------------------------
---------------------------------------------------------------------
先问再看,有时候问一句顶自己看一天的
阅读更多

没有更多推荐了,返回首页