我有一个项目(与图算法有关)。它是由其他人写的。
代码太可怕了:
null
我必须将其重写为一个干净且易于理解的API。
问题是:我自己对此代码中的任何内容都不了解。
请告诉我有关分析和理解此类代码的提示。
我在想,也许有一些工具可以执行静态代码分析 并给我打电话图和这样的事情。
答案 0 :(得分:8)
哦亲爱的:-)我羡慕你而不是同时......我们一次只能做一件事。在设置代码分析工具之前,您可以解决其中的一些问题。通过这种方式,您将获得更好的理解,并且能够比使用简单的工具更进一步
祝我们好运,我们随时为您提供帮助
答案 1 :(得分:6)
WOW!
我建议:编写单元测试,然后开始重构
* public fields, no getters/setters
首先将它们设为私有,然后“感觉”编译器错误的阻力为度量标准。
* huge methods, all public
了解他们的语义,尝试介绍接口
* some classes have over 20 fields
在复杂的应用程序中很常见,没什么可担心的
* some classes have over 5 constructors (which are also huge)
用buider / creator模式替换它们
* some of those constructors just left many fields null
见上面的回答
* methods and classes rely on each other in both directions
决定是否重写所有内容(老实说,我遇到了需要只需要10%代码的情况)
答案 2 :(得分:3)
嗯,日食中的清理巫师会刮掉一定比例的污泥。
然后,如果你活得足够长的话,你可以指出Sonar并注意它所抱怨的一切。
答案 3 :(得分:2)
对于静态分析和调用图(无图形,但图形结构),您可以使用Dependency Finder。
答案 4 :(得分:2)
使用了解重构的IDE,例如IntelliJ。您不会遇到移动一个方法而其他五个类抱怨的情况,因为IntelliJ足够智能以进行所有必需的更改。
单元测试是必须的。没有单元测试的人重构就像没有安全网的高线表演者。在你开始漫长而艰难的攀登之前先获得一个。
答案 5 :(得分:1)
答案可能是:耐心和咖啡。
答案 6 :(得分:1)
这就是我这样做的方式:
main
方法中,就好像它被其他类使用 - 相同的参数,相同的调用顺序。在调试器中执行此操作,因为您会看到此类所执行的每个步骤。 while ( responsibilities != 1 ) {
}
答案 7 :(得分:1)
不是说Sonar,FindBugs等有些人已经提到过的工具没有帮助,但没有任何魔术技巧。从你理解的东西开始,为它创建一个单元测试,一旦它运行绿色开始一个接一个地重构。记得在你进行时模拟依赖关系。
答案 8 :(得分:0)
有时从头开始重写更容易。这个“可怕的代码”是按预期工作还是充满了错误?记录了吗?
在我目前的项目中,几乎完全删除我的前任工作,并从头开始重写,是最有效的方法。当然,这是代码混淆的极端情况,完全缺乏有意义的评论,完全无能,所以你的里程可能会有所不同。
答案 9 :(得分:0)
虽然一些遗留代码可能几乎无法理解,但它仍然可以重构并逐步改进为易读性。你看过Joshua Kerievsky的Refactoring To Patterns书吗? - 这很好。