`
tansitongba
  • 浏览: 504843 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多


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下,一搜一大把,图文教程,相当的详细。

分享到:
评论

相关推荐

    在开源一套UI界面-易语言

    尽管如此,开源项目的一大优点就是社区参与,其他开发者可能会接手并改进这个部分。 【标签】"2020开源大赛(第五届)" 这个标签表明该UI界面是作为2020年开源大赛的一部分发布的。开源大赛通常旨在鼓励开发者使用...

    phpSQLGen-开源

    `phpSQLGen` 是一个旨在简化 SQL 代码生成的 PHP 开源工具,虽然已被放弃,但对于想学习 PHP 和 SQL 交互、或者对开源项目维护感兴趣的开发者来说,它仍具有一定的学习价值。通过分析其源代码,你可以深入理解 PHP ...

    mutt-mb-开源

    1. **邮箱列表生成**:当邮件存储为maildir格式时,mutt-mb可以自动扫描并生成一个邮箱列表。这个列表包含了所有可用的maildir邮箱,使得用户在mutt中可以通过这个列表快速切换和访问不同的邮箱。 2. **一致性检查*...

    Think-master.zip

    ThinkPHP是中国较为流行的一个开源PHP框架,它为开发者提供了快速、稳定和易用的开发环境,使得开发过程更加高效。 【描述】中的“创业项目”暗示了这个项目可能是一个初创公司的核心产品,目的是为客户提供IT服务...

    Chromium Power Tray-开源

    开发者可以利用开源社区的力量改进软件,修复bug,添加新功能,或者将其与其他开源项目结合,构建更强大的工具。 开源软件的另一个优点是透明度和安全性。由于代码公开,用户和开发者可以检查潜在的安全漏洞,提高...

    Web Quickie-开源

    【Web Quickie - 开源应用】 Web Quickie是一款开源的应用程序,它的主要功能是...总的来说,Web Quickie作为一个开源的跨语言翻译工具,为用户提供了一个便捷、可定制化的解决方案,是多语言环境中值得尝试的工具。

    Open AOL instant messanger-开源

    这个项目起源于AOL内部的Tik Client,是一个高度可移植的解决方案,允许用户在各种操作系统上享受即时通讯的乐趣。然而,值得注意的是,由于AOL公司和Tik项目团队的终止支持,OpenAOL目前可能处于维护状态不明或未...

    Ruby-Annotate注释Rails类模式和路由信息

    通常,开源项目的源码能够帮助开发者更好地理解和扩展工具的功能。 总之,Ruby-Annotate是Rails开发中一个非常有用的工具,它简化了对模型和路由的理解,提高了代码的可维护性。通过定期更新和查看这些注释,开发者...

    基于Java的实例源码-Decompiler反编译器.zip

    在这个例子中,"code"可能包含了多个Java源代码文件,每个文件对应一个或多个类的反编译结果。通过阅读这些文件,我们可以深入了解程序的实现细节,包括类结构、方法定义、变量声明等。 在实际应用中,Decompiler有...

    sexyalice-开源

    总结起来,性感爱丽丝是一个基于IRC的开源聊天机器人,其独特的设计和开源特性使其成为一个富有活力的技术项目。通过连接alicebot的网站,它可以提供最新、最准确的信息,而开源模式则促进了社区参与和软件的持续...

    java反编译工具

    - **学习借鉴**:开源项目可能只提供了编译后的.jar文件,使用反编译工具可以学习其内部实现。 - **安全审计**:检测潜在的安全漏洞,理解恶意软件的工作方式。 - **逆向工程**:研究第三方库的功能,有时为了定制或...

    Egotistics-开源

    5. **持续维护**:开源项目通常有活跃的社区支持,即使原作者不再维护,其他开发者也可能接手继续发展。 ### 应用场景 Egotistics 可广泛应用于各种情境: - **学术研究**:社会学家和心理学家可以利用它来研究...

    elmo (ELectronic Mail Operator)-开源

    4. **社区支持**:开源项目通常有一个活跃的用户社区,提供问题解答、教程和第三方插件,丰富了软件的生态系统。 5. **持续更新和维护**:开源软件往往拥有更长久的生命力,即使原作者不再维护,社区也可能接手继续...

    SourceInsight代码阅读器

    - **学习新库或框架**:当需要学习新的开源项目或第三方库时,SourceInsight可以帮助快速理解其内部工作原理。 - **代码审查**:在团队协作中,SourceInsight可用于查看和评论他人提交的代码,提高代码质量。 - **...

    最强.net反编译工具reflector

    1. 学习开源:通过Reflector,开发者可以查看并学习开源项目的内部实现,提高自己的编程技能和解决问题的能力。 2. 代码审计:在接手已有项目或评估第三方组件时,Reflector可以帮助开发者快速理解代码逻辑,找出...

    java反编译工具(可以查看class文件的源代码了)

    1. **源码丢失**:当接手一个没有源代码的项目或者库时,JD-GUI可以帮助快速了解类的功能和实现细节。 2. **逆向工程**:开发者可能需要查看第三方库的内部工作原理,以解决兼容性问题或寻找潜在的优化点。 3. **...

    数据表结构打印程序未知

    标题中的“数据表结构打印程序未知”可能是指一个专门用于打印ACCESS数据库中表结构的工具,这个工具可能设计得不够直观或用户友好,因此被称为“未知”。在IT领域,这样的工具通常是由开发者或DBA(数据库管理员)...

    学习OBJECT-C必看

    - **GitHub**:参与开源项目可以提高自己的编码能力。 通过上述内容的学习,初学者可以系统地掌握Objective-C的基础知识,并能够独立完成简单的项目开发任务。随着经验的积累,逐步深入学习更高级的主题和技术将会...

    Reflector(.NET反编译工具)

    - **学习与研究**:开发者可以查看开源项目或购买的商业组件的内部实现,增进对.NET框架的理解。 - **调试辅助**:当源代码不可用时,Reflector可以帮助定位问题,通过查看调用堆栈上的其他模块来辅助调试。 - **...

Global site tag (gtag.js) - Google Analytics