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

Language agnostic 从应用程序中删除死代码的最佳方法是什么?,language-agnostic,code-cleanup,Language Agnostic,Code Cleanup,我经常觉得在我的代码上迭代了很多次之后,剩下的函数、类或其他代码行在上一版本中是有意义的,但在新版本中不是很有用。我知道探查器可以告诉您在运行测试用例时调用了代码的哪一部分?但是如何确定代码的哪一部分从未被调用以删除它,从而使剩下的部分更具可读性呢?例如,有没有一种快速的方法可以知道代码中哪些函数没有从任何地方被调用,哪些函数可以安全地删除。对于一个小的代码库来说,这听起来可能是一个微不足道的问题,但是当您的代码库随着时间的推移而增长时,这就变成了一个重要而不是微不足道的问题 总结一下,对于不同

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

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


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

您要查找的术语是“代码覆盖率”,并且有一些代码可以生成这些信息。但是,您必须确保在代码中使用每一条可能的路径,以便能够使用这样的工具检测“死代码”,这只有通过一组真正广泛的测试才能实现

大多数编译器都有一定程度的死代码检测,但只检测不可能被调用的代码,而不检测由于程序逻辑等原因永远不会被调用的代码

编辑:

具体来说,对于Python:

对于Java:


对于Objective-C:,

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

如果您怀疑某个函数未被使用,可以将其删除或注释掉,然后查看您所得到的是否仍然可以编译


这仅适用于因不再调用而未使用的函数。由于通过代码的控制路径不再处于活动状态而从未使用过的功能更难找到,代码分析工具也无法很好地找到它。

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

根据逻辑,您可以将它们视为死代码/未使用的代码

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

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

是的,我需要询问关于删除死代码的问题。我意识到什么是代码覆盖率。我如何从我的python代码库中删除不可能执行的代码,并且无法通过任何数量的测试调用这些代码。不幸的是,python环境是如此动态,您的任何代码都可能被调用。多亏了
eval()
和反射,可以在运行时调用代码中从未引用过的函数。这是我已经做过的。但是想象一下,在3-4年的时间里,累积了数千行代码。我总是通过搜索函数名并查看它是否从代码中的任何地方被调用来删除函数。如果你问我这就是为什么我需要另一个解决方案,那就有点乏味了。