1 前言

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

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

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

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

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

序号 名称 流行度 跨平台性 是否收费 能否与SonarQube或GitLab集成 能否自定义及扩展 主要特点
1 cppcheck 主流 Windows/linux free 能直接与sonar-cxx集成 能扩展、能自定义 侧重点于检查代码的逻辑
支持的一些检查包括:
 1.动变量检查
 2.数组越界的界限检查
 3.类检查(如:未使用的函数、变量初始化和内存复制)
 4.Open Group中弃用或替代函数的使用
 5.异常安全检查,如内存分配使用、析构函数检查等
 6.内存泄漏,例如由于未进行解分配而丢失范围
 7.资源泄漏,如忘记关闭文件句柄
 8.标准模板库函数和习语的无效使用
 9.使用unusedFunction选项消除死代码 杂项文体和性能错误
 ...(说明:其在静态扫描工具比对中,在内存泄漏的检测中表现较好)
2 cpplint 主流 windows/linux/mac os free 通过格式转换与sonar-cxx集成 能扩展、能自定义 侧重于代码风格的检查
检查代码是否符合 Google C++ Style Guide
可定制规则,主流几个大厂均在使用,一般与 cppcheck 配合使用,能覆盖绝大部分静态代码检测项
3 coverity 主流 windows/linux/mac os 付费 暂未发现集成方式 商业软件/难扩展/能自定义 1. 在主流静态代码扫描工具中,其功能比较全面,价格也较贵。
2. 在准确性、规则覆盖上较其他单项静态扫描工具有优势。
3. 但其也有漏报率较多,在联网情况下,可能出现泄漏代码的问题。如离线情况,可不考虑。
4 pclint 主流 Windows/linux 付费 能直接与sonar-cxx集成 商业软件/难扩展 1. 在主流静态代码扫描工具对比中,其规则总数是最多的,扫描效率亦较高
2. 但在准确率上面,较其他工具要低,对这方面有严格要求的话,慎用。
5 clang 主流 linux/mac os free 暂未发现集成方式 能扩展 1. 可扩展为 clang-tidy,用于诊断和修复典型的编程错误,如样式违规、界面错误或通过静态分析推导出的BUG。
2. 其本身与 GCC 高度兼容,可作为其替代方案。
6 PVS-Studio 一般 windows/linux/mac os 付费 能直接与sonarqube集成 商业软件/难扩展 相对于其它免费开源的静态检测工具,其功能完备性更加明显,在价位上也较 Coverity 要低。
相对于其它免费开源的静态检测工具,其有如下独特点:
1. 与Visual Studio 2010-2019的简单无缝集成
2. 可以定时检查
3. 可直接将结果存储为 HTML
4. 分析提交、合并和提取请求——可以将分析器配置为仅分析修改后的文件。
5. 可对最近N天内修改过的文件进行分析。
7 tscancode 腾讯自研 windows/linux/mac os free 待研究 可扩展 在准确率和扫描速率上较其他静态扫描工具有优势,但其实腾讯内部自研,规则项还是较少。
支持的一些检查包括:
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

C++静态代码分析工具横向对比相关推荐

  1. PVS-Studio C/C++/C++11 静态代码分析工具

    PVS-Studio C/C++/C++11 静态代码分析工具 静态代码分析仪是一种检测代码缺陷.分析对比 商业代码的工具,它分析源代码和它生成的目标 文件,但并不实际运行源代码.应用于对安全性. 稳 ...

  2. OOM分析(1) Android 源,如何分析android的OOM,与java静态代码分析工具

    用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放的资源,因为代码的错误,而导致某些对象一直被引用(Reference),例 ...

  3. 如何分析android的OOM,与java静态代码分析工具

    2019独角兽企业重金招聘Python工程师标准>>> 用MAT分析OOM 很多OOM看似发生在bitmap 分配得时候,但它一般不是rootcause.根本原因都在于本应该自动释放 ...

  4. 静态代码分析工具简介

    静态代码分析工具简介 什么是静态代码分析 静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法.结构.过程.接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句 ...

  5. 软文推荐:常用 Java 静态代码分析工具的分析与比较

    http://www.uml.org.cn/j2ee/201107114.asp 常用 Java 静态代码分析工具的分析与比较 作者:赵卓 , 发布于2011-07-11 , IBM 简介: 本文首先 ...

  6. 2021.C/C++静态代码分析工具

    静态代码分析工具 1 cppcheck 静态代码分析工具 1 cppcheck 静态代码分析工具 参考博客 使用cppcheck检测代码警告.错误 ubuntu下安装cppcheck sudo apt ...

  7. 静态代码分析工具列表分析---代码分析工具列表(30款工具)

    本文是一个静态代码分析工具的清单,共有30个工具.包括4个.NET工具.2个Ada工具.7个C++工具.4个Java工具.2个JavaScript工具.1个Opa工具.2个Packaging工具.3个 ...

  8. 静态代码分析工具清单:开源篇(各语言)

    本文是一个静态代码分析工具的清单,共有26个工具.包括4个.NET工具.2个Ada工具.7个C++工具.4个Java工具.2个JavaScript工具.1个Opa工具.2个Packaging工具.3个 ...

  9. 静态代码分析工具清单:开源篇

    http://hao.jobbole.com/static_code_analysis_tool_list_opensource_lang/?utm_source=blog.jobbole.com&a ...

  10. 静态代码分析工具汇总

    静态代码扫描,借用一段网上的原文解释一下(这里叫静态检查):"静态测试包括代码检查.静态结构分析.代码质量度量等.它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具自动进行.代码 ...

最新文章

  1. 无插件无 Flash HTML5 浏览器直接玩《Quake II》
  2. 人工智能,机器学习,深度学习入门好文,强烈推荐
  3. php workman 多线程,workerman如何多线程
  4. Samba 服务器的构建
  5. Summed-Area Variance Soft Shadow Mapping(SAVSM):二
  6. arm-2009q1-203-arm-none-linux-gnueabi.bin安装方法
  7. [转] C#中Dispose和Close的区别
  8. MySQL基础总结,认真看完这篇就够了!!!
  9. 共享内存、消息队列、信号量之ipcs命令详解
  10. 190421每日一句
  11. matlab-plot绘制点线图
  12. ie加载项存在残留是什么_残余IE加载项无法修复
  13. 架构师日常-技术or业务
  14. EMV Level1(7816)学习(Smart Cart智能卡)-2
  15. 工作内存与主内存是什么,硬件层面的存储架构是什么样,线程的实现原理是什么
  16. 用JS实现贪吃蛇小游戏
  17. 牛客网视频总结5(二叉树)
  18. PHPMailer远程命令执行漏洞复现
  19. Freemarker语法2
  20. Form表单提交方法method

热门文章

  1. C语言中求大于M10个最大素数,全国计算机二级C语言上机题库—南开100题
  2. MRI_Made_Easy 磁共振成像原理-物理基础5
  3. 高中计算机教师学期论文,高中信息技术论文选题
  4. 每日英语阅读(五十四)
  5. 如何进入mysql命令界面
  6. 基于javaweb+jsp的户籍管理系统(JavaWeb MySQL JSP Bootstrap Servlet SSM SpringBoot)
  7. 《信号与系统》(吴京)部分课后习题答案与解析——第四章(PART2)
  8. Java车辆牌照识别
  9. VMware安装VMware tools步骤
  10. 计算机控制系统——导论