如何对没有文档的程序进行逆向工程

时间:2009-09-09 04:47:13

标签: python open-source

我有一个python程序源,它没有任何文档或注释。 我确实尝试了两次以理解它,但大多数时候我都在失去赛道,因为有很多文件。 应该完全快速地理解该计划的步骤应该是什么。

8 个答案:

答案 0 :(得分:10)

Michael Feathers'“Working Effectively with Legacy Code”是这种努力的极好起点 - 不是特别依赖于语言(他的例子是几种非python语言,但技术和思维方式做得很好)很好的Python和几乎任何其他语言。)

关键的重点是,您希望了解代码的原因 - 修改和/或移植代码。因此,使用电池和测试脚手架以及跟踪/记录来检测遗留代码是解决和安全负责任地理解和修改的漫长而艰难的道路上的关键路径。

Feathers建议使用启发式方法和技巧来集中精力以及如何在代码完全混乱(因此“遗留”)时开始使用 - 没有文档或误导性文档(描述相当的东西)不同的,可能是微妙的方式,从代码实际上做的事情),没有测试,不可测试 - 没有重构的意大利面条依赖性纠结。这似乎是一种极端的情况,但任何在编程中度过长期职业生涯的人都知道它实际上比任何人都想要的更常见; - )。

答案 1 :(得分:5)

  • 过去我使用'Python call graph'来理解源结构
  • 使用调试器,例如pdb要通过 代码。
  • 尝试在一天后再次阅读代码 休息,这也有帮助

答案 2 :(得分:5)

我建议使用epydoc http://epydoc.sourceforge.net/生成一些文档。当然,如果不存在docstring,结果会很差,但它会为您提供至少一个应用程序视图,并且能够更轻松地在类中导航。

然后,当您了解新内容然后再次重新生成文档时,您可以尝试自己编写文档。从来没有太晚开始。

我希望它有所帮助

答案 3 :(得分:3)

你很幸运,它在Python中易于阅读。但是,当然也可以在Python中编写难以理解的代码。

步骤如下:

  1. 运行该软件并学会使用它,并至少了解它的功能。
  2. 阅读测试,如果有的话。
  3. 仔细阅读代码。
  4. 当您遇到不理解的代码时,请在那里进行调试,然后逐步查看代码,看看它的作用。
  5. 如果没有任何测试,或测试覆盖率低,请编写测试以增加测试覆盖率。这是学习系统的好方法。
  6. 重复直到您觉得对代码的模糊处理。如果要管理代码,就可以获得模糊的控制。一旦开始实际使用代码,您将获得良好的抓地力。对于一个可能需要数年时间的大型系统,所以不要先尝试理解它。
  7. 有些工具可以帮助您。正如Stephen C所说,IDE是个好主意。我会解释原因:

    许多编辑分析代码。这通常可以让您完成代码,但更重要的是,在这种情况下,只需按住Ctrl键单击变量即可查看它的来源。当你想要了解otehr人的代码时,这确实加快了速度。

    此外,您需要学习调试器。在代码的棘手部分中,您将在调试器中逐步执行它们以查看代码实际执行的操作。 Pythons pdb可以工作,但许多IDE都集成了调试器,这使得调试变得更容易。

    就是这样。祝你好运。

答案 4 :(得分:2)

我的工作中不得不做很多事情。对我有用的东西可能与对你有用的东西不同,但我会分享我的经验。

我首先尝试识别正在使用的数据结构,然后绘制图表,显示它们之间的关系。不一定像UML这样的形式,而是理解的纸上草图,它允许你看到程序操纵的数据的整体结构。只有在我对所使用的数据结构有一些看法后,我才开始尝试理解如何操纵数据。

其次,对于大量软件,有时你需要首先攻击一口大小的碎片。你不会马上得到一个全面的了解,但如果你仔细了解小部件并继续削减,最终所有的部分都会落在一起。

我结合了这两种方法,当我变得过度沮丧或无聊时,在它们之间切换。建议在街区周围散步:)我发现这最终会让我获得好成绩。

祝你好运!

答案 5 :(得分:1)

Logilab的pyreverse和Andy Bulka的PyNSource对UML图的生成也很有用。

答案 6 :(得分:0)

我从一个好的python IDE开始。请参阅this question的答案。

答案 7 :(得分:0)

Sparx Systems的

Enterprise Architect非常擅长处理源目录和生成类图。它不是免费的,而是非常合理的价格。 (我与这家公司没有任何联系,我几年来一直是他们产品的满意用户。)