静态代码分析与Spring和其他抽象的结合程度如何?

bet*_*hmi 5 jsf spring abstraction static-analysis coverity-prevent

我需要至少做一些努力从我的源代码中删除从未使用过的代码.一般的偏好是使用静态代码分析工具.我们在其他项目中运气很好,但我听到的人大多是从事设备级代码的C/C++开发人员.

我是一名从事Java EE系统的Web开发人员.最受青睐的分析工具是Coverity Prevent,尽管我可以提出一些其他的建议,如果我能够证明它更适合我们正在开发的技术.

我发现自己很可疑 - 当你在一个有很多抽象的系统上运行时,静态代码分析对死代码的有效性是什么?例如,我们使用Spring的依赖注入,以及JSF.在这两种情况下,都没有简单的方法来跟踪从前端到后端的函数调用,并完整地了解被调用的内容和不调用的内容.

我非常担心死代码检查中的误报将首先超过运行该工具的价值.

这种情况有什么经验?当您的架构使用了大量抽象时,您是否设法从静态代码分析工具中获取价值?你有什么必须做的才能让它以最少的误报工作吗?

Mic*_*hue 4

我之前在 Coverity 工作,负责 Java 静态分析产品。

对于静态分析器来说,查找死代码这一特定任务可能是偶然的。特别是对于死方法,即无法在运行时调用的方法,如果您没有进行大量调整来通知静态分析器有关所有动态入口点的信息,误报率将非常高。

对于方法内的死代码,如果您的分析器具有该功能,则结果应该非常好,因为分析不会对输入数据做出任何假设。即使假设所有可能的输入,也有可能找到死代码,其中相关逻辑阻止采用某些分支。