你如何理解大量的代码?

时间:2010-08-27 22:23:02

标签: c++

我是一名刚毕业的大学毕业生。在我的提升阶段,我需要学习很多产品代码。有一些设计文档,但它们没有多大帮助。

您能否提供一些通用技术来浏览和理解庞大的产品代码(特别是C ++)?

5 个答案:

答案 0 :(得分:11)

通过doxygen运行它。这将生成html文档,即使代码没有正确的doxygen风格的注释也会有所帮助。

另一个好建议是查看单元测试,如果有的话。如果没有单元测试,理解代码的一个好方法是编写自己的单元测试。这样做的努力将为自己多次付出代价。

答案 1 :(得分:9)

使用您可以使用的每种方法(无特别优先):

  1. 使用产品本身并了解 它的作用
  2. 与维护它或曾与之合作的开发人员交谈
  3. 通过它进行调试,看看数据如何流动以及类如何交互(“当我点击这个按钮,究竟发生了什么,谁负责?”)
  4. 查看架构,UML或类图
  5. 我最喜欢的一个:创建自己的类层次结构图,类交互,一般控制流,高级组件,进程/ DLL交互,对象生命周期和管理
  6. 如果它们没有完全过时,请阅读开发/测试/用户规范(与#1相配)
  7. 阅读文档
  8. 最重要的是:顽强而持久。如果你没有投入工作,不要指望理解它。如果你不理解某些东西,那就去挖掘和挖掘,直到你做到。软件不是魔术,只是努力工作:)

答案 2 :(得分:6)

有些人会告诉你从数据结构开始,但在大型系统中,即使在很多时候也没有那么大的帮助。我可以想到四个要点:

  • 慢慢来。通常,它更像是一系列格式塔移位,而不是单一,线性,渐进的理解。请耐心等待。

  • 无论它有多大,您都应该能够设置断点并在调试器中使用它。即使在庞大,复杂的多线程系统中,您也应该能够了解正在发生的事情。

  • 询问错误,并开始修复它们,无论它们看起来多么疯狂。这类似于把自己放到外国;你最终会接受这种语言。

  • 寻找导师。丛林指南非常宝贵。

答案 3 :(得分:1)

我认为已经有一些好的回应。我的2c值得...

不确定你认为什么是巨大的(10 KLOC,1000 KLOC,10000 KLOC等),但人们希望这在某种程度上被打破并且不是单一的单一程序。也许您的管理层会对您目前最有可能花费时间的“模块”提供一些指导。希望这有助于打破问题范围。

首先,在您尝试理解代码之前,尝试了解产品。它有什么作用?那怎么做呢?它与之互动的是什么?然后它是如何互动的?等...

在获取代码时,首先尝试理解高级设计和哲学,然后在深度之前进行广度研究。我同意上面的一些修复一些错误,但我强烈建议你继续处理高级别,即使你需要了解细节来修复一些错误。

如果你找不到任何已经存在的图表,我也同意以上为自己生成一些图表。然后分享它们,也许是团队/产品维基?我很好奇为什么现有的doco没有多大帮助。通常这是因为这种类型的doco是从早期概念生成的,并且产品不再具有任何相似性,但如果不是这种情况,那么您可以为此问题做出什么贡献。一个假设你今天在哪里,其他人将足够短暂的顺序,你在理想的位置,知道什么是必不可少的doco!

如果产品实际上是“巨大的”,那么你必须承认你永远无法将所有产品都放在脑中,所以你能做的最好的事情是熟悉,知道从哪里开始寻找(来吧)回到理解产品,并首先接近代码广度。

答案 4 :(得分:0)

这显然是一个非常常见的问题,它与此类似(以及与 it 相关的问题):How to understand the design and code flow of any product quickly?

为初学者挖掘一些答案/评论。否则,我们最终会重复它们。 :)