2011-04-06 64 views
3

我经常觉得在遍历我的代码很多次之后,我会留下一些函数或类或其他代码行,这些代码在前一版本中是有意义的,但对于新版本来说并不是很有用。我知道一个分析器可以告诉你当你运行你的测试用例时你的代码被称为什么部分?但是,如何确定代码的哪一部分永远不会被调用来删除它,从而使剩下的更具可读性?例如,是否有一种快速的方法可以知道代码中的哪些函数没有从任何地方被调用,并且可以安全地删除。对于一个小代码库来说,这可能听起来像一个微不足道的问题,但是当你的代码基数增长多年时,这成为一个重要而不是微不足道的问题。从应用程序中删除死代码的最佳方法是什么?

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

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

回答

3

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

大多数编译器都死代码检测的一些水平,但只能检测代码,不可能被调用,而不是代码将永远不会被调用,由于程序逻辑,等等。

编辑:

用于Python具体:How can you find unused functions in Python code?

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

为目的-C:Xcode -- finding dead methods in a projectCleaning up Objective-C code

+0

是的,我需要问关于死代码删除。我意识到什么是代码覆盖。我如何从我的Python代码库中删除没有可能执行路径的代码,并且无法使用任何数量的测试进行调用。 – DeepThink 2011-04-06 18:01:50

+0

不幸的是,Python环境非常动态,您的任何代码都可能被调用。感谢'eval()'和反射,可以在运行时调用函数,这些函数在代码中的任何地方都不会被引用。 – 2011-04-06 18:16:12

2

对于函数,请尝试对函数名称进行全局搜索,然后分析所得结果。函数中的死代码通常是可以找到的。

如果您怀疑某个功能未被使用,您可以将其删除或注释掉,并查看您是否还在编译。

这只适用于未使用的函数,因为它们不再被调用。由于通过代码的控制路径不再有效而从不使用的功能很难找到,代码分析工具也不会很好地发现它。

+1

这就是我已经做的。但想象一下,在3 - 4年内累积数千行代码。我总是通过搜索其名称并查看它是否从代码中的任何位置被调用来删除函数。如果你问我这是为什么我需要另一种解决方案,那么有点乏味。 – DeepThink 2011-04-06 18:42:36

相关问题