如何熟悉一个开源项目?

你有个任务,需要用到某个开源项目;或者老大交代你一个事情,让你去了解某个东西。怎么下手呢?如何开始呢?我的习惯是这样:

1.首先,查找和阅读该项目的博客和资料,通过google你能找到某个项目大体介绍的博客,快速阅读一下就能对项目的目的、功能、基本使用有个大概的了解。

2.阅读项目的文档,重点关注类似Getting started、Example之类的文档,从中学习如何下载、安装、甚至基本使用该项目所需要的知识。

3.如果该项目有提供现成的example工程,首先尝试按照开始文档的介绍运行example,如果运行顺利,那么恭喜你顺利开了个好头;如果遇到问题,首先尝试在项目的FAQ等文档里查找答案,再次,可以将问题(例如异常信息)当成关键词去搜索,查找相关的解决办法,你遇到了,别人一般也会遇到,热心的朋友会记录下解决的过程;最后,可以将问题提交到项目的邮件列表,请大家帮你看看。在没有成功运行example之前,不要尝试修改example。

4.运行了第一个example之后,尝试根据你的理解和需要修改example,测试高级功能等。

5.在了解基本使用后,需要开始深入的了解该项目。例如项目的配置管理、高级功能以及最佳实践。通常一个运作良好的项目会提供一份从浅到深的用户指南,你并不需要从头到尾阅读这份指南,根据时间和兴趣,特别是你自己任务的需要,重点阅读部分章节并做笔记(推荐evernote)。

6.如果时间允许,尝试从源码构建该项目。通常开源项目都会提供一份构建指南,指导你如何搭建一个用于开发、调试和构建的环境。尝试构建一个版本。

7.如果时间允许并且有兴趣,可以尝试阅读源码:
(1)阅读源码之前,查看该项目是否提供架构和设计文档,阅读这些文档可以了解该项目的大体设计和结构,读源码的时候不会无从下手。
(2)阅读源码之前,一定要能构建并运行该项目,有个直观感受。
(3)阅读源码的第一步是抓主干,尝试理清一次正常运行的代码调用路径,这可以通过debug来观察运行时的变量和行为。修改源码加入日志和打印可以帮助你更好的理解源码。
(4)适当画图来帮助你理解源码,在理清主干后,可以将整个流程画成一张流程图或者标准的UML图,帮助记忆和下一步的阅读。
(5)挑选感兴趣的“枝干”代码来阅读,比如你对网络通讯感兴趣,就阅读网络层的代码,深入到实现细节,如它用了什么库,采用了什么设计模式,为什么这样做等。如果可以,debug细节代码。
(6)阅读源码的时候,重视单元测试,尝试去运行单元测试,基本上一个好的单元测试会将该代码的功能和边界描述清楚。
(7)在熟悉源码后,发现有可以改进的地方,有精力、有意愿可以向该项目的开发者提出改进的意见或者issue,甚至帮他修复和实现,参与该项目的发展。

8.通常在阅读文档和源码之后,你能对该项目有比较深入的了解了,但是该项目所在领域,你可能还想搜索相关的项目和资料,看看有没有其他的更好的项目或者解决方案。在广度和深度之间权衡。

    以上是我个人的一些习惯,我自己也并没有完全按照这个来,但是按照这个顺序,基本上能让你比较高效地学习和使用某个开源项目。

附:用 doxygen+graphviz 生成函数调用流程图

一、问题的产生

当分析一个很复杂的项目源代码时,如何有效的分析函数间的调用关系呢?从网上搜索到了如下方法:使用doxygen和graphviz来自动分析函数间的调用关系。

二、工具简介

doxygen:

Doxygen is the de facto standard tool for generating documentation from annotated C++ sources, but it also supports other popular programming languages such as C, Objective-C, C#, PHP, Java, Python, IDL (Corba, Microsoft, and UNO/OpenOffice flavors), Fortran, VHDL, Tcl, and to some extent D.

是一种从标记过的C++源代码生成文档的标准工具,也支持C,Objective-C,C#,PHP,Java,Python,IDL,Fortran,VHDL,Tcl等。

graphviz:

Graphviz is open source graph visualization software. Graph visualization is a way of representing structural information as diagrams of abstract graphs and networks. It has important applications in networking, bioinformatics,  software engineering, database and web design, machine learning, and in visual interfaces for other technical domains.

是一种开源的将结构化信息展示成抽象图和网络的工具,用于网络,生物信息,软件工程,数据库和网站设计,机器学习以及其他技术领域的可视性接口。

三、生成函数调用图

1、下载并安装以下两种工具

doxygen:(http://www.stack.nl/~dimitri/doxygen/index.html

graphviz:(http://www.graphviz.org/

注意下载时,选择的是windows版本,还是mac版本。

如果安装过程中弹出“打不开 XXX,因为它来自身份不明的开发者”请进入如下网址寻找解决办法:

http://jingyan.baidu.com/article/f71d60377960651ab741d140.html

2、运行DoxyWizard,弹出Doxygen配置界面

08195355_05x6.png

选择Scan recursively则递归分析源代码目录中的子目录内的源代码。

08195356_yeKr.png

08195356_YPQg.png

08195356_bkyh.png

08195356_jUGT.png

08195356_pHKv.png

08195356_XZdS.png

由于使用到了Graphviz,所以要设置Dot选项,勾选HAVE_DOT,并设置DOT_PATH为Graphviz的bin目录。(注意:MAC的Graphviz的bin目录不在安装包内,一般是在/usr/local/bin/,实在找不到就到终端用ls一层一层的查找)

 

08195357_8aXl.png

另外,若Doxygen出现中文乱码问题:

设置如下:

Expert选项卡-> Project:

DOXYFILE_ENCODING:UTF-8

OUTPUT_LANGUAGE:Chinese

Expert选项卡-> InPut:

INPUT_ENCODING:GB2312

这样生就可以正确生成含有中文的文档了。

Refer:

[1] 如何熟悉一个开源项目?

http://www.blogjava.net/killme2008/archive/2012/05/22/378885.html

[2] 用doxygen+graphviz生成函数调用流程图

http://www.jianshu.com/p/fe4b6b95dca5#

[3] 一款强大的分析java源代码的插件:MaintainJ

http://itcome.blog.51cto.com/1541534/958841

原文地址:http://www.blogjava.net/killme2008/archive/2012/05/22/378885.html

转载于:https://my.oschina.net/weiweiblog/blog/1563397

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值