Cha*_*hra 17 c c++ static-analysis
我的老板认为我们编写的任何代码(在C/C++中)都必须符合静态分析工具(如MISRA/Lint)指定的标准.我对此的看法是因为编译器今天发展得很好,这真的需要吗?
这里的问题是这些静态分析现在的效果如何?
Mat*_*son 36
简短回答:是的.
答案很长:编译器确实在分析某些类型的"错误"方面做得越来越好,但它们所使用的"深度"通常比适当的工具少得多.特别是在编译单元之间工作的工具,例如Coverity,它可以理解(例如)函数可能返回一个指针NULL,如果存在,你的代码将崩溃,因为你NULL在访问指针之前没有检查.
静态分析工具也可以检查锁的使用情况,编译器通常不能这样做.
至于"效率如何",它实际上取决于您使用的工具,设置以及您测试代码的程度.因此,"代码覆盖"也会出现.您是否在测试中浏览了代码的每个分支?每一个可能导致行为差异的价值?静态分析工具可以检测您的测试可能无法覆盖的错误.
(显然,在你的特定业务中是否真的有意义是一个完全不同的讨论 - 那是针对你的老板,以及他/她的老板来决定的)
编译器不能进行静态分析工具的分析.问题是静态代码分析需要花费大量时间,并且通常不需要每次编译.编译器通常针对代码质量和编译时间的平衡进行优化.如果编译器偶然遇到代码中的错误,它会告诉您,但它没有时间主动查找错误.
| 归档时间: |
|
| 查看次数: |
2188 次 |
| 最近记录: |