当前位置: 首页>編程日記>正文

C++静态代码分析工具横向对比

C++静态代码分析工具横向对比

1 前言

静态代码分析是指无需运行被测代码,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。统计证明,在整个软件开发生命周期中,30% 至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。

在C++项目开发过程中,因为其为编译执行语言,语言规则要求较高,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。所以C++ 静态代码分析工具能够帮助开发人员快速、有效的定位代码缺陷并及时纠正这些问题,从而极大地提高软件可靠性并节省开发成本。

静态代码分析工具的优势 :

1. 自动执行静态代码分析,快速定位代码隐藏错误和缺陷。
2. 帮助代码设计人员更专注于分析和解决代码设计缺陷。
3. 减少在代码人工检查上花费的时间,提高软件可靠性并节省开发成本。

 

2 主流业内C++静态代码分析工具横向对比

 

序号名称流行度跨平台性是否收费能否与SonarQube或GitLab集成能否自定义及扩展主要特点
1cppcheck主流Windows/linuxfree能直接与sonar-cxx集成能扩展、能自定义侧重点于检查代码的逻辑
支持的一些检查包括:
 1.动变量检查
 2.数组越界的界限检查
 3.类检查(如:未使用的函数、变量初始化和内存复制)
 4.Open Group中弃用或替代函数的使用
 5.异常安全检查,如内存分配使用、析构函数检查等
 6.内存泄漏,例如由于未进行解分配而丢失范围
 7.资源泄漏,如忘记关闭文件句柄
 8.标准模板库函数和习语的无效使用
 9.使用unusedFunction选项消除死代码 杂项文体和性能错误

 ...(说明:其在静态扫描工具比对中,在内存泄漏的检测中表现较好)
2cpplint主流windows/linux/mac osfree通过格式转换与sonar-cxx集成能扩展、能自定义侧重于代码风格的检查
检查代码是否符合 Google C++ Style Guide
可定制规则,主流几个大厂均在使用,一般与 cppcheck 配合使用,能覆盖绝大部分静态代码检测项
3coverity主流windows/linux/mac os付费暂未发现集成方式商业软件/难扩展/能自定义1. 在主流静态代码扫描工具中,其功能比较全面,价格也较贵。
2. 在准确性、规则覆盖上较其他单项静态扫描工具有优势。
3. 但其也有漏报率较多,在联网情况下,可能出现泄漏代码的问题。如离线情况,可不考虑。
4pclint主流Windows/linux付费能直接与sonar-cxx集成商业软件/难扩展1. 在主流静态代码扫描工具对比中,其规则总数是最多的,扫描效率亦较高
2. 但在准确率上面,较其他工具要低,对这方面有严格要求的话,慎用。
5clang主流linux/mac osfree暂未发现集成方式能扩展1. 可扩展为 clang-tidy,用于诊断和修复典型的编程错误,如样式违规、界面错误或通过静态分析推导出的BUG。
2. 其本身与 GCC 高度兼容,可作为其替代方案。
6PVS-Studio一般windows/linux/mac os付费能直接与sonarqube集成商业软件/难扩展相对于其它免费开源的静态检测工具,其功能完备性更加明显,在价位上也较 Coverity 要低。
相对于其它免费开源的静态检测工具,其有如下独特点:
1. 与Visual Studio 2010-2019的简单无缝集成
2. 可以定时检查
3. 可直接将结果存储为 HTML
4. 分析提交、合并和提取请求——可以将分析器配置为仅分析修改后的文件。
5. 可对最近N天内修改过的文件进行分析。
7tscancode腾讯自研windows/linux/mac osfree待研究可扩展在准确率和扫描速率上较其他静态扫描工具有优势,但其实腾讯内部自研,规则项还是较少。
支持的一些检查包括:
1.空指针检查,包含可疑的空指针,判空后解引用比如Crash等共3类subid检查。
2.数据越界,Sprintf_S越界共1类subid检查。
3.内存泄漏,分配和释放不匹配同1类subid检查。
4.逻辑错误,重复的代码分支,bool类型和INT进行比较,表达式永远True或者false等共18类检查。
5.可疑代码检查,if判断中含有可疑的=号,自由变量返回局部变量等共计15类检查。
6.运算错误,判断无符号数小于0,对bool类型进行++自增等,共计11类检查。

 

3 动态代码扫描工具

    valgrind    dr.memory

4 参考文档

1. C&C++代码编译和分析工具探究
2. List of tools for static code analysis
3. 国内外主流静态分析类工具汇总
4. 静态代码分析工具汇总
5. 腾讯测试团队-C++代码质量扫描主流工具深度比较
6. 代码静态检测
7. PVS-Studio Analyzer


https://www.fengoutiyan.com/post/15490.html

相关文章:

  • 鏡像模式如何設置在哪,圖片鏡像操作
  • 什么軟件可以把圖片鏡像翻轉,C#圖片處理 解決左右鏡像相反(旋轉圖片)
  • 手機照片鏡像翻轉,C#圖像鏡像
  • 視頻鏡像翻轉軟件,python圖片鏡像翻轉_python中鏡像實現方法
  • 什么軟件可以把圖片鏡像翻轉,利用PS實現圖片的鏡像處理
  • 照片鏡像翻轉app,java實現圖片鏡像翻轉
  • 什么軟件可以把圖片鏡像翻轉,python圖片鏡像翻轉_python圖像處理之鏡像實現方法
  • matlab下載,matlab如何鏡像處理圖片,matlab實現圖像鏡像
  • 圖片鏡像翻轉,MATLAB:鏡像圖片
  • 鏡像翻轉圖片的軟件,圖像處理:實現圖片鏡像(基于python)
  • canvas可畫,JavaScript - canvas - 鏡像圖片
  • 圖片鏡像翻轉,UGUI優化:使用鏡像圖片
  • Codeforces,CodeForces 1253C
  • MySQL下載安裝,Mysql ERROR: 1253 解決方法
  • 勝利大逃亡英雄逃亡方案,HDU - 1253 勝利大逃亡 BFS
  • 大一c語言期末考試試題及答案匯總,電大計算機C語言1253,1253《C語言程序設計》電大期末精彩試題及其問題詳解
  • lu求解線性方程組,P1253 [yLOI2018] 扶蘇的問題 (線段樹)
  • c語言程序設計基礎題庫,1253號C語言程序設計試題,2016年1月試卷號1253C語言程序設計A.pdf
  • 信奧賽一本通官網,【信奧賽一本通】1253:抓住那頭牛(詳細代碼)
  • c語言程序設計1253,1253c語言程序設計a(2010年1月)
  • 勝利大逃亡英雄逃亡方案,BFS——1253 勝利大逃亡
  • 直流電壓測量模塊,IM1253B交直流電能計量模塊(艾銳達光電)
  • c語言程序設計第三版課后答案,【渝粵題庫】國家開放大學2021春1253C語言程序設計答案
  • 18轉換為二進制,1253. 將數字轉換為16進制
  • light-emitting diode,LightOJ-1253 Misere Nim
  • masterroyale魔改版,1253 Dungeon Master
  • codeformer官網中文版,codeforces.1253 B
  • c語言程序設計考研真題及答案,2020C語言程序設計1253,1253計算機科學與技術專業C語言程序設計A科目2020年09月國家開 放大學(中央廣播電視大學)
  • c語言程序設計基礎題庫,1253本科2016c語言程序設計試題,1253電大《C語言程序設計A》試題和答案200901
  • 肇事逃逸車輛無法聯系到車主怎么辦,1253尋找肇事司機