怎样阅读公司的项目代码
看到ITFriend中有些小伙伴刚进入公司,面对大量的项目代码,往往手足无措,有点慌,我说下我的经历。
声明:我从事的是C++开发工作。阅读的代码都是基于client/server的,下面谈的是C++项目代码的阅读方法多些
希望懂java的小伙伴分享下java公司项目代码的阅读方法。小弟感激不尽。
编译代码把项目跑起来 代码到手以后。先尝试着编译一下,无非就是库的配置。库路径的配置,缺少某个文件,或者头文件包括路径不对,一般公司给你的代码都能够编译成功,windows平台下一般使用vs工具来编译。集成调试工具。而Linux下编译.使用gcc(g++)编译器 make工具或者automake工具,详细使用方法在搜索引擎上能找到。编译成功以后把项目跑起来。我喜欢看看client长啥样,哈哈,恭喜你,迈出了第一步
看项目文档,和项目开发者(维护人员)进行沟通 公司的项目代码会有相关的设计文档,比方XX项目概要设计文档、XX项目具体设计文档、XX项目模块设计以及之间依赖关系的文档等等,通过这些文档,软件开发者起码对项目有个总体的认识,比方项目本身是解决什么领域问题的?有哪些功能模块以及他们的大体功能是什么?使用了什么开源库?通过文档还能够了解到代码中的一些数据结构的具体凝视,网络传输是怎样设计的,使用了哪些协议?数据库中的字段是怎样设计的。以及数据库中各个表之间的关系。在看代码的过程中,遇到模糊不清或者自己拿不住的代码,要及时和同事沟通,他们对代码的熟悉程度比我们强。虚心有礼貌的问人家。否则自己在那憋着瞎猜代码的含义,费时费力还得不偿失,开口求人帮忙就那么难?嘻嘻,你帮我下,我帮你下。咱俩慢慢就熟悉了嘛
搞清楚程序的流程和大体框架。详细功能模块详细分析 从main函数開始,把client和server怎么工作的流程大致的看一下,client怎样连接server段的?serverclient是怎样进行数据交互的?在关键的地方下断点。看看client发送来的内容是什么。server在接收到client发送来的消息后是怎样处理的。
个人建议。先把程序的流程和总体框架搞懂一点。明确一些函数大概是实现什么功能就能够,如今不要去过多的关注和沉迷在功能模块的实现细节中,当须要定位到详细的某个功能实现模块的时候,再切换到函数实现中一点点分析代码就ok。假设对某个地方不太清楚,能够自己改动下源码,执行一下看看执行的结果如何。
我刚開始的时候不敢改源码,怕改错了项目就不好使了。领导会骂我,先拷贝一份编译好的源码,然后任意改。反正我另一份备份的源码,我不怕。
个人兴趣驱动或者debug驱动方式来看代码 说实话,单纯的看代码真心没劲枯燥,并且效率不高。
我们能够自我驱动看代码,比方思考某个功能是怎样实现的呢?然后推測可能是怎样实现的。然后再项目代码中一点点去跟踪源码,慢慢的剥茧抽丝,相信你会有恍然大悟的感觉。
另一种就是公司会用改bug的方式来驱动你熟悉代码,我刚进公司的时候就是这样,解决一个bug后。不只对于项目总体流程熟悉了,也对当中的几个模块熟悉了。一举两得。
UML帮助我们整理思路 使用UML帮助我们整理思维,使用类图来分析类与类之间的关系,使用UML里的活动图。配合IDE工具分析核心业务流程,理解软件是怎样工作的。使用UML来整理程序流程这招。还是在我进入公司以后。带我的老师教我的,个人感觉很受益。程序开发者在初期的时候可能对于画UML图有点不适应。慢慢就习惯了。对于整理思路挺有帮助的。希望大家养成个好习惯,嘻嘻。
详细的模块分析 对须要的详细的代码进行详细分析。搞清变量的意义和关联关系,搞清实现的逻辑和算法。好的代码。此处是会有凝视的。
能够自己F11走到项目代码中。然后单步调试。看看每一个变量是怎样变化的。会加深对这个函数中的逻辑和算法的理解。
心理状态的调整 项目源码的代码量多没啥。可是我们自己心里不要着急,慢慢来。自己努力的功夫到了,多花点时间在看代码思考代码上,公司的代码会被你一点点啃透的。
假设遇到看不懂代码的情况,就分析下自己为什么看不懂?是项目使用了自己不熟悉的设计模式?还是一些业务领域基础知识自己没有掌握(比方我自己做视频server开发,就须要看非常多资料去了解视频格式,视频压缩,视频编码以及视频传输的一些协议)?或者是自己对项目框架的理解不正确导致的,要自动的分析
ps:有一本《代码阅读方法和实践》(code reading),会教你如何去阅读源码。