哪些工具或技术可用于描述不熟悉的代码库?[关闭]


9

手动检查不熟悉的代码(以进行检查或修改)时,我似乎有三个选择。

  • 一个自上而下的阅读的代码,通过选择文件名如何根本都好像下一个源文件。 我通常最终会阅读几乎所有内容。一些文件两次。
  • 一个广度优先读取,在那里我找到并用最少的理解阅读所有的调用方法。然后阅读该函数调用的所有函数,依此类推。 如果我深入几次,我的思想栈就会溢出。
  • 深度优先读取,其中I通过所有的代码在调试器步骤,不确定是否这将需要8分钟8小时。

一旦我阅读了足够多的代码以对它的工作有一个相当扎实的理解,我通常会反映出我已经阅读了80%或更多的代码库,而基本代码则是20%或更少。我浪费了很多时间。

哪些工具可用于快速掌握陌生的代码?是否有任何工具可以对关键代码路径有一个“大印象”,并允许我深入了解任何一部分的细节?


2
如果不掌握80%的百分比,您将无法理解为什么20%是最基本的部分
棘手怪胎

@ratchetfreak我绝对不会这么说。例如,工具可以隔离始终被调用的代码。或仅深度运行许多堆栈级别。
德鲁·多曼

Answers:


8

当然,最好的事情是对于一个知道代码库的人来说。如果这不是一个选择,那么有些工具可以为您提供帮助。

  • VisualStudio可以自动生成代码库的UML类图。至少它将向您显示类层次结构。
  • Doxygen可能非常有帮助。即使代码中没有doxygen样式的注释,doxygen仍然可以生成可读的文档,类图和调用图,这对于在不熟悉的代码库中寻找方法非常有帮助。

通常,您还希望使用功能齐全的IDE,您可以在其中右键单击任何内容并“转到定义”。与在复杂目录结构中的许多文件上使用grep相比,这可以节省大量时间。

另一个重要的事情,取决于您必须处理代码多长时间。如果有单元测试,请浏览测试。如果没有测试,请开始编写它们。形成关于特定类或函数做什么的假设,并编写测试以对其进行测试。这需要大量的纪律,但这是获得有关代码中发生的情况的答案的好方法。


2
谢谢@Dima。Doxygen在处理其中一些方面非常出色。(我不想通过删除我知道的那个工具名称来引导答案)。在“人与人之间互动”这个级别上也很赞誉。:)
Drew Dormann

3

这是一种更严格的方法。对于具有许多未组织成有意义的名称空间的类的项目,此技术可能很有用。

该练习的目的是发现班级关系。进行项目的一次性复制,然后尝试将一些类放入名称空间。为了节省重复尝试的时间,请使用某些Regex文件处理工具来自动执行此更改。

这将导致很多编译器错误。在更正这些错误的过程中,人们将更好地了解这些类如何相互依赖,并确定可以将哪些类放入同一名称空间。

该技术很有用,因为即使对项目的代码组织了解甚少也可以应用。随之而来的风险是,由于误解,某些类可能会被该技术放错位置。


那很聪明。您通常对许多班级都这样做吗,还是在遇到不清楚的特定班级时将其保存下来?
德鲁·多曼

@DrewDormann面对数百个未分组的班级时,我从一位同事那里学习了此技术。在进行任何重构之前,这是迈向“分类”项目文件的第一步。换句话说,当一切仍然混乱时使用它。(令人尴尬的是,混乱是由我较早的时候写的。)通过将项目文件分类到名称空间中,它可以简化Doxygen类页面的生成(通过显示名称空间树),并可以加快程序员的理解速度。
rwong 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.