比如,要去接手一个项目,已经有大约几十万行(可能上百万行)代码。
怎么入手,查看源代码,了解整个软件 /产品运行,能够更快的熟悉和上手呢?
难道“直接一个文件一个文件硬看源代码”?兄弟姐妹们,有没有啥方法或者套路?
谢谢!
![]() | 1 shawndev 2020-03-26 14:36:01 +08:00 via Android ![]() 看 release 对应的 tag,从第一个 release 开始看 |
![]() | 2 saltbo 2020-03-26 14:38:10 +08:00 ![]() 从功能对应到实现吧。 我习惯先了解功能,然后猜想这功能怎么实现的,然后去查代码验证自己的猜想。 |
![]() | 4 hoyixi 2020-03-26 14:56:44 +08:00 对着设计和开发文档看,是最省心的。 如果没有文档,先有个整体概貌,然后对着功能看。 |
5 star7th 2020-03-26 15:19:06 +08:00 如果是 web 项目的话,我有一点体会。 先从产品上了解这个项目是干嘛的,有什么功能。列出来,把功能从大到小细分。然后,打开代码,找到路由文件,根据路由文件判断哪个功能对应哪个文件。然后挑一下重点功能看看。接下来可以在做需求中熟悉了。 |
![]() | 6 sumarker PRO 首先看看项目整体是一个什么项目, 然后看看之前的项目需求文档,如果没有文档可以问问之前的人历史的功能 再看看代码的风格, 然后重点看可能要修改的部分。 |
7 gz911122 2020-03-26 15:32:33 +08:00 我的习惯是不看, 有需求了照着界面反推. 把 app/web 玩一下知道啥功能是干啥的在哪就行了 |
![]() | 8 waiaan 2020-03-26 15:37:06 +08:00 一般从改 bug 开始入手 |
![]() | 9 hszhakka2ex 2020-03-26 15:42:21 +08:00 |
10 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 、不要发散思维,不要深入研究 以上…… |
![]() | 11 sniperking1234 2020-03-26 15:57:01 +08:00 先了解项目的功能,然后化繁为简,把主要流程找出来。一般核心代码行数不多,其他的都是处理边缘情况的代码。 |
![]() | 12 murmur 2020-03-26 16:02:17 +08:00 这种一般我就不看了,实在沉不下心,我会找别人的指南,看一下核心流程和重要功能实现,然后去对应代码核对一遍,就当我看过了。。 |
13 Greendays 2020-03-26 16:02:46 +08:00 如果是 web 项目的话,就把当前需要用到的路由找出来,顺着看下去吧。感觉也没有什么特别有效的办法 |
![]() | 14 longjiahui 2020-03-26 16:06:03 +08:00 通常如果能“用”的话 就先看看怎么用 然后 根据接口入手 |
15 littleMaple 2020-03-26 16:09:19 +08:00 我阅读源码有一个诀窍,会重度使用 IDE 的「折叠」和「展开」功能,在扁平的文本上抽象出不同的抽象层级,就可以自己自由地在各个抽象层级之间跳跃,在关注某一抽象层级的时候不需要看到其下底部抽象层级的细节而分心,很好用. 另外有一个开源工具也专注做类似这样的事情,将完全扁平的代码文本转换成概念化的抽象树,名为 SourceTrail: https://www.sourcetrail.com/ |
![]() | 16 sadfQED2 2020-03-26 16:14:29 +08:00 via Android 难道没人先看数据库设计吗,知道数据库设计后再看各个功能的实现 |
![]() | 17 chinvo 2020-03-26 16:16:56 +08:00 善用带静态分析或者 lsp 的 IDE 从一个小功能的入口开始, 一层层分析. 基本上项目整体的风格应该是差不多的, 分析一个小功能就能对整体有个差不多的认知了. |
18 littlewing 2020-03-26 16:43:10 +08:00 via iPhone 先会用 再针对性地看 |
19 slyang5 2020-03-26 16:51:51 +08:00 看单元测试吧。 |
![]() | 20 xuanbg 2020-03-26 17:07:29 +08:00 上万行代码的项目,就没必要去啃这堆屎了。除了恶心一下自己外,你什么也得不到。迫不得已要修 bug,根据日志直接找相关代码就行了。 |
21 hauzi 2020-03-26 17:26:16 +08:00 还是要分功能模块分析的,底层和业务分开,一层一层的扒。 |
![]() | 22 bigjack 2020-03-26 17:30:42 +08:00 最好是做需求,才能熟悉的快,光研究代码没什么意义 |
![]() | 23 CismonX 2020-03-26 17:33:36 +08:00 ![]() |
24 balamiao 2020-03-26 17:40:47 +08:00 先看网络框架~ |
25 yilai 2020-03-26 23:39:33 +08:00 先了解整体实现的逻辑,然后自己构思一个大框,再去看 |
![]() | 26 yazoox OP @littleMaple 兄弟,你说的这个 IDE 是啥?这个是特别的功能么? thx. |
27 littleMaple 2020-03-28 17:20:02 +08:00 @yazoox 大部分 IDE 或者文本编辑器应该都支持这个功能,因为这是个很基础的功能,英文名叫 fold / expand,一般都在菜单栏的编辑选项卡下面有显示,你可以看看你用的软件有没有。这里是一个关于该功能的维基页面 https://www.wikiwand.com/en/Code_folding |
![]() | 28 SmiteChow 2020-03-29 20:25:15 +08:00 文档,必须有,不然你只能管中窥豹 |