在没有完善设计文档的情况下,如何有效阅读一个大型系统代码?

2022-08-05 14:10:09 +08:00
 James369

有的时候会碰到一些大型的软件系统(百万行代码以上),这个系统又很有价值且值得学习,但碰巧又没有比较完善的设计文档。这个时候从何入手?

对于一个真正热爱程序代码的人来说,我想他是非常热衷于去分析一个大型系统,因为这就像是在丛林中的寻宝探险,充满了挑战、惊喜和快乐。但是,你必须快速掌握系统的总体架构和主要脉络,否则就会很容易迷失在其中的细枝末节当中,没有头绪。

所以,我的问题就是,有没有什么高级工具能够协助分析软件源码,从而给出系统的整体结构,主要脉络,甚至输出各种 UML 图(组件、接口、关系、时序、状态等等)?

1338 次点击
所在节点    程序员
9 条回复
murmur
2022-08-05 14:12:32 +08:00
不读啊,除非你为了面试充电,按需调试本来就是一种能力
James369
2022-08-05 14:40:23 +08:00
@murmur 对,就是为了学习。
调试? 很多时候要调试它不知道从何入手。 比如 webkit 浏览器,vscode 编辑器,游戏引擎的源代码。能一睹芳容就不错了。
pluvet
2022-08-05 15:13:58 +08:00
没有文档很难理解,效率极低。比如我写一个自己发明的寄存器分配策略,由于这种东西琐碎的细节极多,你光看我的代码基本上无法理解这代码在干啥,可能要花五十个小时去磨。但是如果我亲自给你讲一遍,你可能五分钟就明白了。
pluvet
2022-08-05 15:15:21 +08:00
像我见过的比较大型的代码,比如文件系统,作者甚至会写一本手册 XXX Algorithms and Data Structures ,再不济也要在注释里写大量的说明。不然很快连作者自己都会看不懂。
James369
2022-08-05 15:17:45 +08:00
@pluvet 有道理,仔细阅读必要的注释。同时,了解作者的编码习惯和癖好也很重要。
SachinBeyond
2022-08-05 20:39:04 +08:00
好问题
secondwtq
2022-08-05 22:12:35 +08:00
工具没见过好用的,开源社区的 dssq 是,我白嫖你的东西,你怎么写的与我无关,我不会用直接一个 issue 骂过去

调试我喜欢打个断点看 call stack
secondwtq
2022-08-05 22:15:33 +08:00
另外我觉得根据具体项目情况,可以看看 tracing 的工具,比如 https://github.com/janestreet/magic-trace (虽然这个事 PT 做的有点重)

不过我暂时还遇到没需要用到这些的时候 ...
secondwtq
2022-08-05 22:19:01 +08:00
哦对还有一个技巧,看 git blame ,从一段代码是哪个 commit 引入开始,可以找到 commit message ,对应的 PR 和 issue 之类的,会有更多的上下文
(当然实操中会有一些问题,比如一些格式化代码之类的 commit 会把 blame 搞乱,这个有 --ignore-rev ,不过一个一个搞还是不太方便,有些 GUI 工具可以简化这个流程)

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

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

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

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

© 2021 V2EX