如何快速接手一个项目(内部项目或开源项目)

1. 了解项目

读相关的文档和文章,起码要知道这个项目是用来干嘛的,有什么样的功能,运行在什么上面(手机,PC,或多平台),发行许可(GPL,Apache或者??),目标格式(应用程序,库,中间件等)等等。通常这些问题在项目的文档,Wiki,FAQ等地方都 能找到。

2. 获取源代码

这不用多说,没源码你还研究个啥,这个官方文档会讲,通常都是通过SVN或GIT,当然也有把源码打包下载的(前提是源码比较少)。

3. 编译和构建出可运行的目标产品

后面会讲到,光看源码就好比读布尔代数,或马克思主义一样,都是干巴巴的理论,让人不着边际,摸不到头脑,遗忘的也很快,最重要的是没什么实地用处。通常研究源码都是为了做出改变。
编译和构建项目也都会有专门的文档来讲,遇到的最大的困难就是编译环境的搭建,由于不同开发环境的差异,编译通常都不可能一次成功,这时就要看看官方的FAQ,或是Google一下,还是很容易解决的。

4. 运行

一定要亲自运行一下,玩一玩,看看都有什么功能,都能完成什么事情。要想对项目源码了解,首先必须 要从用户的角度对项目熟悉,各个功能都要试玩并熟悉。尝试一些极端的操作,输入非常规的数据,看看会有什么反应。

5. 如何调试

这个要看什么语言和什么目标文件,总体来讲就是工具和Log日志,工具无非就是Eclipse,GDB之类的,Log要看具体 的项目,每个项目都会有自己的Log机制。查文档或是到网上搜索。

6. 读读单元测试用例

不要上来就看源代码,这样很容易迷失在源码中,特别是当项目的源码很多时,你不知道这个类或这个方法是用来干嘛的,类之间的依赖和关联更让人困惑和畏惧,导致很快失去了兴趣。
可以先读一读单元测试用例,它们是代码的活文档。

7. 抓住一个功能点,深入的调试跟踪流程,分析代码直到弄明白为止

这点很重要,虽然我们要理解整个项目,要从整体上把握,但那需要时间,短时间内是不可能的。更好的方式是抓住一个功能点从上层一直跟踪下去,直到所整个功能点的流程搞清楚,分析代码,画出图(不用标准的UML,能看懂,能表达出意思即可)。

8. 修改源代码,编译运行,看修改前后有什么变化,这是感知代码用途的最佳途径

为了感知代码,做出修改,然后运行,看修改前后的变化,这能很快的感知代码 的作用。特别是对于参数,光看代码很难知道那一大堆参数是干什么用的,修改一下,改成相反的值或是改成不合常规的值,看程序有什么反应,很快便能知道它的作用。

9. 修改单元测试或编写单元测试

这也是感知代码的好方法,编写单元测试,可能会涉及到解耦,如果类之间的关系过于紧密,就要先解耦分离,这里可能读读Michael Feather的《Working with Legacy Code》中的”感知与分离”一节。

10. 尝试弄清整个项目的业务逻辑

这是必须要做的,要想研究项目,或是维护项目弄清楚项目的整体业务逻辑是必须要做的,但这需要时间。所以不能放弃,视项目的大小这通常要花上数月甚至数年。点滴积累,每天看一点,时间久了对整个项目就熟悉了。
关键点在于要各个击破,不要光看代码。抓住一个功能点,跟踪,调试,修改,运行,把它搞明白,再转向其他的功能点,当把所有的功能点都搞明白后,对整个项目就自然清楚了。

11. 参考项目的文档和别人写的文章

这可以加速对代码和业务逻辑的理解。最好参看项目的文档(设计文档等),但是很多的项目是没有文档的。
对于网络上的文章一定要持有怀疑之心,可作参考不可依赖,更不可全信。其价值完全取决于作者的水平 及作者对项目代码的理解程序,与其写作能力和花在文章上的时间也有关系。网上的好文章很少,刚开始只有几篇文章,随后会出现大量的Copy和转载,所以对于某些问题你会发现搜到的文章其实是同一篇,换句话说就是整体的质量不高。其中也有错误的或是误导人的。再加上时效性的问题,项目代码会持久更新,但发布出去的文章却很少有人更新它。所以对于网络上的文档必须持有怀疑的态度。
另外,最好用Google搜英文的文章,通常来讲外国人写的文章还是比较有参考价值的(国人很浮躁啊)。

12. 当对项目和代码有一定了解之后可以写文档或文章以加深自己的理解,也分享给别人自己的心得体会

写文章,画图表,这是检验自己对项目理解的最好方式,你能给别人讲清楚,能让别人也理解这个项目是你理解了这个项目的最好证明。要注意把自己的理解写出来,表照抄代码,照着代码画出来的序列图,证明你对代码不熟悉,也没理解代码,对别人也毫无用处,一定要用自己的话表达出来。这样才能加深自己的 理解,对别人也是一种帮助。

13. 工具:Eclipse,Vim+ctags+cscope, GDB,grep,find这些工具在浏览源代码时有巨大帮助,这些工具怎么用可以Google下,一搜一大把,图文教程,相当的详细。

时间: 2024-10-04 12:08:12

如何快速接手一个项目(内部项目或开源项目)的相关文章

分享一个快速的Json(反)序列化开源项目 Jil

我们不缺少JSON的序列化库,但我们缺少一个性能非常好的库,这对于网站来说非常重要.今天我发现了Jil. 他是开源的代码: https://github.com/kevin-montrose/Jil 在他主页上有详细的介绍其性能的表现,我这里就不转述了,他最重要的特点就是性能,Emit那当然不会少了,当想让他超越其他的库光一个Emit肯定不行,他还有很多其他的优化. 公共缓冲区 为介绍GC的压力,他使用了诸如builder.CommonCharBuffer这样的功能缓冲,builder.Comm

Netflix公司监控内部安全的开源项目

Netfix公司已经发布了三个内部工具,用于捕捉黑客在使用互联网服务时留下的痕迹. AndyHoernecke和Netflix公司的云安全团队成员ScottBehrens指出:"许多安全团队需要寻找基于互联网的讨论,帖子,以及其他可以影响他们所保护的组织的点点滴滴". +在网络世界里:iPhone 6 最好/最坏的设计理念+ 其中的一个工具-Scumblr,可以用于创造谷歌网站,Twitter和Facebook的用户,或者自定义关键字搜索.他们指出,该搜索可以设置为定期运行或者手动运行

ios项目中引用其他开源项目

1. 将开源项目的.xcodeproj拖入项目frameworks 2. Build Phases下 Links Binary With Libraries 引入.a文件.Target Dependencies里引入开源项目文件 3. Build Setting下的 Search Paths 里 Header Search Paths 加入开源项目src目录 例:$(SOURCE_ROOT)/IBAForms/headers ,IBA放在项目根目录里,headers就是src 如果和项目根目录平

程序员必备技能——怎样快速接手一个项目

作为一个程序员,我们很少能从头到尾参与一个新项目的开发.如果你经常开发的是新项目,那你真是太幸福了. 更多的情况是半路进入一个项目组进行开发,或者是有其他同事离职了,之前由他维护的系统转交给你维护. 还有一种情况就是领导不知道从哪里弄过来一个系统和一堆文档,然后就直接就把系统交给你了维护了. 遇到以上几种情况我们怎样才能快速熟悉上手项目,应对生产问题呢?下面是我自己在工作中的一点总结,希望能对大家有所帮助. 资料要要全 当你接手一个新项目(别人的项目)的时候,你要第一时间向把项目移交给你的人要到

Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向

很多android应用的下拉刷新都是使用的pulltorefresh这个开源项目,但是它的扩展性在下拉刷新同时又上拉加载更多时会有一定的局限性.查了很多地方,发现这个开源项目并不能很好的同时支持下拉刷新和上拉加载更多.这个组件有个mode的属性,可以设置为both,即上下同时都可拉动.但是只设置这个属性的话,上拉与下拉产生的效果是完全一致的.所以要使用这个开源项目做到下拉刷新并同时可上拉加载更多,就需要在代码中进行一些处理. ==========================pulltoref

ZCN.NET自动化项目生成器 之 个人开源项目

2015-12-8 开源项目一:SuperFramework.Net 个人平时开发过程中不断积累的类库与相关技术,后期会不断地补充,完善. 下载地址:http://pan.baidu.com/s/1qXdlKnE [如果下载链接不可用,请联系作者,QQ:3080400049] ZCN.NET 自动化项目生成器核心架构图 技术研究方向:专注于Web(Mvc)开发框架.WinForm开发框架.项目(代码)自动化生成器.ORM等技术研究与开发应用 企业级项目经验:编务管理系统.印前管理系统.印务管理系

我发起了一个 分布式爬虫调度 的 开源项目 DSpiders

大家好, QQ 群 里的 网友 提议 搞一个 分布式爬虫调度项目,所以发起了这个项目  . DSpiders,    D 表示  “分布式”(Distributed) ,     Spiders  取 复数 表示 很多 的 小爬虫,爬呀爬  ……  很可爱  …… 原文地址:https://www.cnblogs.com/KSongKing/p/10987327.html

一个高人的许多QT开源项目(百度网盘的linux桌面客户端)

许多都是我非常感兴趣的,比如: NeteaseCloudMusic forked from yanunon/NeteaseCloudMusic网易云音乐 WizQTClient forked from WizTeam/WizQTClient为知笔记跨平台客户端 Qt5-Cadaques-In-Chinese forked from cwc1987/QmlBook-In-ChineseQt5 Cadaques In Chinese Qt360使用Qt4模拟360 10.0界面 QtAV forke

如何快速接手一个

24simy懈挛松兜趟蕾http://www.58pic.com/c/12230870i0yi8y蔷枪巢中套冻http://www.58pic.com/c/12231346wqco4m晨赘孟捉缘铝http://www.58pic.com/c/12231676bz1hfv痛排荡缓狈街http://www.58pic.com/c/12231011ya60oi都谫院刺晌远http://www.58pic.com/c/122314664828mi未众梁肝菊紫http://www.58pic.com/c/