我们还需要做静态分析吗?

Cha*_*hra 17 c c++ static-analysis

我的老板认为我们编写的任何代码(在C/C++中)都必须符合静态分析工具(如MISRA/Lint)指定的标准.我对此的看法是因为编译器今天发展得很好,这真的需要吗?

这里的问题是这些静态分析现在的效果如何?

Mat*_*son 36

简短回答:是的.

答案很长:编译器确实在分析某些类型的"错误"方面做得越来越好,但它们所使用的"深度"通常比适当的工具少得多.特别是在编译单元之间工作的工具,例如Coverity,它可以理解(例如)函数可能返回一个指针NULL,如果存在,你的代码将崩溃,因为你NULL在访问指针之前没有检查.

静态分析工具也可以检查锁的使用情况,编译器通常不能这样做.

至于"效率如何",它实际上取决于您使用的工具,设置以及您测试代码的程度.因此,"代码覆盖"也会出现.您是否在测试中浏览了代码的每个分支?每一个可能导致行为差异的价值?静态分析工具可以检测您的测试可能无法覆盖的错误.

(显然,在你的特定业务中是否真的有意义是一个完全不同的讨论 - 那是针对你的老板,以及他/她的老板来决定的)

  • 我个人并没有使用`ccc-analyzer`,但它是你可以添加到列表中的另一个静态分析器工具.但是,它仍然是正常编译的单独传递(它恰好是`clang`的一部分,但它不用于"正常编译"). (2认同)

nwp*_*nwp 6

编译器不能进行静态分析工具的分析.问题是静态代码分析需要花费大量时间,并且通常不需要每次编译.编译器通常针对代码质量和编译时间的平衡进行优化.如果编译器偶然遇到代码中的错误,它会告诉您,但它没有时间主动查找错误.