从应用程序中删除死代码的最佳方法是什么?

时间:2011-04-06 17:51:22

标签: language-agnostic code-cleanup

我经常觉得在迭代了我的代码很多次后,我总是留下函数或类或其他代码行,这在前一版本中是有意义的,但对新版本不是很有用。我知道分析器可以告诉您在运行测试用例时调用了哪些代码?但是,如何确定代码的哪个部分从未被调用以删除它以便剩下的更具可读性?例如,是否有一种快速方法可以知道代码中的哪些函数不是从任何地方调用的,可以安全地删除。对于一个小代码库来说,这可能听起来像是一个微不足道的问题,但是当你的代码库多年来不断增长时,这就变成了一个重要而不是那么微不足道的问题。

总结一下这个问题,对于不同的语言,删除死代码的最佳方法是什么?是否有任何与语言无关的解决方案或策略。或者每种语言都提供了识别死代码的工具。

我们通常使用Java或Python或Objective-C编程。

3 个答案:

答案 0 :(得分:3)

您正在寻找的术语是“代码覆盖率”,并且various tools会生成该信息。您必须确保通过代码执行每条可能的路径,以便能够使用此类工具检测“死代码”,这只能通过真正的广泛的测试集来实现

大多数编译器都有一定程度的死代码检测,但只检测无法调用的代码,而不是由于程序逻辑而永远不会调用的代码等。

编辑:

特别是Python的

How can you find unused functions in Python code?

for Java:How to find unused/dead code in java projectsJava: Dead code elimination

for Objective-C:Xcode -- finding dead methods in a projectCleaning up Objective-C code

答案 1 :(得分:2)

对于函数,尝试对函数名进行全局搜索,并分析所获得的内容。函数中的死代码通常是可以找到的。

如果您怀疑某个未使用的功能,可以将其删除,或将其注释掉,看看您的内容是否仍在编译中。

这仅适用于未使用的函数,因为它们不再被调用。由于代码的控制路径不再有效而从未使用的功能更难找到,而且代码分析工具也无法很好地找到它。

答案 2 :(得分:0)

您可以使用代码覆盖率报告来找出未使用的功能或从未执行的功能的一部分。

基于逻辑,您可以将它们视为无效代码/未使用代码。

可以使用的流行代码覆盖工具:

  • C / C ++:gcov和lcov
  • Python:Coverage.py
  • Java:JCov
  • Objective-C:xccov