大家有什么比较好的“看源代码”的套路么?尤其是比较大的项目

2020-03-26 14:32:30 +08:00
 yazoox

比如,要去接手一个项目,已经有大约几十万行(可能上百万行)代码。

怎么入手,查看源代码,了解整个软件 /产品运行,能够更快的熟悉和上手呢?

难道“直接一个文件一个文件硬看源代码”?兄弟姐妹们,有没有啥方法或者套路?

谢谢!

4965 次点击
所在节点    程序员
28 条回复
shawndev
2020-03-26 14:36:01 +08:00
看 release 对应的 tag,从第一个 release 开始看
saltbo
2020-03-26 14:38:10 +08:00
从功能对应到实现吧。 我习惯先了解功能,然后猜想这功能怎么实现的,然后去查代码验证自己的猜想。
yazoox
2020-03-26 14:49:23 +08:00
@saltbo 这个主意不错,我去试试。
hoyixi
2020-03-26 14:56:44 +08:00
对着设计和开发文档看,是最省心的。

如果没有文档,先有个整体概貌,然后对着功能看。
star7th
2020-03-26 15:19:06 +08:00
如果是 web 项目的话,我有一点体会。
先从产品上了解这个项目是干嘛的,有什么功能。列出来,把功能从大到小细分。然后,打开代码,找到路由文件,根据路由文件判断哪个功能对应哪个文件。然后挑一下重点功能看看。接下来可以在做需求中熟悉了。
sumarker
2020-03-26 15:22:13 +08:00
首先看看项目整体是一个什么项目,
然后看看之前的项目需求文档,如果没有文档可以问问之前的人历史的功能
再看看代码的风格,
然后重点看可能要修改的部分。
gz911122
2020-03-26 15:32:33 +08:00
我的习惯是不看,
有需求了照着界面反推.
把 app/web 玩一下知道啥功能是干啥的在哪就行了
waiaan
2020-03-26 15:37:06 +08:00
一般从改 bug 开始入手
hszhakka2ex
2020-03-26 15:42:21 +08:00
huisezhiwei
2020-03-26 15:56:12 +08:00
1 、观察项目的依赖库:
java 的 pom,build.gradle ; 前端的 webpack ; android 的 manifest ( ios 不懂,但应该也有)。
相对新一些的项目,都会使用非常多的打包工具或者开箱即用的框架。如果不事先对工具链有一个初步的认实,很多自动化的配置看源码是找不到的。

2 、观察项目的代码(包、层级)结构:
一个项目的代码如何组织规类,很大程度上能够体现编程思想 。 例如经典的 MVC,MVP,DDD 。 知晓这些可以帮你较快的找到你希望首先了解的代码实现 。

3 、寻找接口路由、逻辑入口配置
任何软件的核心都是对外提供服务, 想要了解和学习,找到业务的入口是第一步。 通常较大的项目,为了降低维护成本。都会将接口、页面路由等配置进行统一的管理,并配以注解。

4 、善用 IDE 的 debug
走到这一步, 剩下的就是体力活了。 如果能将项目顺利运行起来。 利用 IDE 的 debug 功能 ,可以了解进程、调用堆栈、接口实现类等单纯看源码无法了解,却又非常重要的信息。

5 、不要发散思维,不要深入研究
以上……
sniperking1234
2020-03-26 15:57:01 +08:00
先了解项目的功能,然后化繁为简,把主要流程找出来。一般核心代码行数不多,其他的都是处理边缘情况的代码。
murmur
2020-03-26 16:02:17 +08:00
这种一般我就不看了,实在沉不下心,我会找别人的指南,看一下核心流程和重要功能实现,然后去对应代码核对一遍,就当我看过了。。
Greendays
2020-03-26 16:02:46 +08:00
如果是 web 项目的话,就把当前需要用到的路由找出来,顺着看下去吧。感觉也没有什么特别有效的办法
longjiahui
2020-03-26 16:06:03 +08:00
通常如果能“用”的话 就先看看怎么用
然后 根据接口入手
littleMaple
2020-03-26 16:09:19 +08:00
我阅读源码有一个诀窍,会重度使用 IDE 的「折叠」和「展开」功能,在扁平的文本上抽象出不同的抽象层级,就可以自己自由地在各个抽象层级之间跳跃,在关注某一抽象层级的时候不需要看到其下底部抽象层级的细节而分心,很好用.

另外有一个开源工具也专注做类似这样的事情,将完全扁平的代码文本转换成概念化的抽象树,名为 SourceTrail: https://www.sourcetrail.com/
sadfQED2
2020-03-26 16:14:29 +08:00
难道没人先看数据库设计吗,知道数据库设计后再看各个功能的实现
chinvo
2020-03-26 16:16:56 +08:00
善用带静态分析或者 lsp 的 IDE

从一个小功能的入口开始, 一层层分析.

基本上项目整体的风格应该是差不多的, 分析一个小功能就能对整体有个差不多的认知了.
littlewing
2020-03-26 16:43:10 +08:00
先会用
再针对性地看
slyang5
2020-03-26 16:51:51 +08:00
看单元测试吧。
xuanbg
2020-03-26 17:07:29 +08:00
上万行代码的项目,就没必要去啃这堆屎了。除了恶心一下自己外,你什么也得不到。迫不得已要修 bug,根据日志直接找相关代码就行了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/656379

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX