一、概述

在软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。传统的代码评审、同事复审,通过人工方式来检查缺陷仍然是一件耗时耗力的事情。而静态代码扫描工具能够在代码构建过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些潜在的问题。
通过调研,本文将着重介绍几款常用的静态代码扫描工具,这些工具分为几类:
轻量级静态代码扫描工具:CppcheckTscancode
插件嵌入式扫描工具:SourceInsight_ScanPC-lint
Linux环境下扫描工具:splint
平台扫描工具:SonarQube

二、Cppcheck

1、软件介绍
Cppcheck是C/C++代码的静态分析工具。它提供独特的代码分析来检测bug,并着重于检测未定义的行为和危险的编码结构,目标是只检测代码中的实际错误。
官方网站:http://cppcheck.net/
一些使用方法博客:https://www.oschina.net/p/cppcheck

2、检查点
1)自动变量检查
2)数组的边界检查
3)class类检查
4)过期的函数,废弃函数调用检查
5)异常内存使用,释放检查
6)内存泄漏检查,主要是通过内存引用指针
7)操作系统资源释放检查,中断,文件描述符等
8)异常STL 函数使用检查
9)代码格式错误,以及性能因素检查

3、Windows版本界面风格

4、总结
Cppcheck 这款工具安装简单,能够在Linux,windows环境上运行,Linux版本安装详见官网。工具支持单个文件检查,目录检查(不支持中文目录),使用简单,方便。

三、Tscancode

1、软件介绍
TscanCode是腾讯出品的开源静态代码扫描工具,旨在助力开发与测试人员从代码层面挖掘问题,将那些长期困扰项目的诸如空指针宕机等问题,扼杀于萌芽阶段。支持用户根据不同需求自定义配置检查项,有极强的扩展性和可维护性。平均扫描速度10W行/分钟。
官方下载地址:https://github.com/Tencent/TscanCode
详细使用博客参考:https://blog.csdn.net/liweibin812/article/details/84544750

2、检查点
1)空指针检查
2)数据越界
3)内存泄漏
4)逻辑错误
5)可疑代码检查
6)运算错误

3、windows版本界面风格
1)软件界面
支持单文件扫描,目录扫描,选定一个目录后,可以重复多次扫描。

2)扫描结果查看界面
界面简洁,可以选择查看错误类型,可以显示错误代码上下文。

3)配置规则界面
支持多种语言,多种规则的选择,使用灵活。

4、总结
TScanCode这款工具安装简单,能够在mac、Linux、windows环境上运行。工具提供友好的结果展示及误报屏蔽等功能,误报率低、问题定位准确,能够高效的发现问题。此外该工具稳定性较好,由腾讯开发团队持续维护。

四、SourceInsight_Scan

1、软件介绍
SourceInsight_Scan是一款集成在 SourceInsight 中的c/c++代码静态分析插件,集成了cppcheck,coverity,pclint等业界优秀的静态分析工具的优点。旨在帮助开发人员,在 IDE 中快速发现编译器无法发现的非语法错误,降低修复成本。无需编译,平均扫描速度高达10W行/分钟,快速发现潜在的质量风险,平均准确率高达80%。
官方网站:https://sourceforge.net/projects/siscan/
安装使用说明参考:https://blog.csdn.net/sheji105/article/details/88988619

2、检查点
1)空指针检查
2)数据越界
3)内存泄漏
4)逻辑错误

3、嵌入source insight 界面
1)嵌入source insight
嵌入效果如下,可以指定当前文件,也可以扫描目录。

4、总结
SourceInsight_Scan嵌入到SourceInsight中,能够方便快捷的发现一些非语法错误,对于使用SourceInsight编程的开发人员提供了便利。但是相对于Cppcheck, Tscancode 来讲,检查出问题能力稍弱。该工具安装简单,配置稍微繁琐,使用简单。

五、PC-lint

1、软件介绍
PCLint是GIMPELSOFTWARE公司研发的C/C++软件代码静态分析工具,可以说,PCLint是一种更加严格的编译器。其主要分为PCLint和FlexeLint,PCLint主要应用于Windows平台,以二进制可执行文件提供,而FlexeLint应用于其他平台,例如Linux,以源代码形式发布。 PCLint不但能够对程序进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针连同冗余的代码,还能够有效地提出许多程序在空间利用、运行效率上的改进点。
官网:http://www.gimpel.com/html/index.htm
最新安装包:http://download.csdn.net/detail/winking324/8162819
安装配置参考:https://blog.csdn.net/feng_ma_niu/article/details/40631521
详细介绍文档参考:http://www.docin.com/p-31343126.html?docfrom=rrela

2、检查点
1) 空指针检查
2) 数组越界
3) 内存泄漏
4) 强类型检查
5) 变量值跟踪
6) 赋值顺序检查
7) 弱定义检查
8) 格式检查
9) 缩进检查
10)const变量检查
11)volatile变量检查

3、嵌入Source Insight界面
1)嵌入source insight中使用

2)扫描结果

5、总结
PC-lint功能强大,检查详细,使用时需要包含当前文件中链接的所有头文件,配置操作比较复杂,但是配置完成后会轻松一点。该软件安装复杂,可以嵌入到source insight中。

六、splint

1、软件介绍
splint是一个GNU免费授权的 Lint程序,是一个动态检查C语言程序安全弱点和编写错误的程序。Splint会进行多种常规检查,包括未使用的变量,类型不一致,使用未定义变量,无法执行的代码,忽略返回值,执行路径未返回,无限循环等错误。
官网:http://splint.org/
安装参考文档:https://blog.csdn.net/sunjiajiang/article/details/7368684
splint需安装automake-1.6支持

2、检查点
1)空指针检查
2)类型检查
3)内存管理
4)缓存边界
5)宏
6)函数接口
7)控制流

3、Linux环境下使用展示

4、总结
Splint简单易用,但扫描文件需要包含所有的头文件,所有的变量声明必须在上面。安装稍微繁琐。 splint提供了三种方式可进行检查的控制,分别是.splintrc配置文件、flags标志和格式化注释,需要一定的学习成本。

七、SonarQube

1、软件介绍
SonarQube我们可以检测出项目中重复代码, 潜在bug, 代码规范,安全性漏洞等问题。可以通过使用scanner,通过配置文件,修改项目信息,在命令行中调用scanner工具,进行扫描,并推送给sonarqube,通过SonarQube web UI展示出来。
官网下载地址:https://www.sonarqube.org/downloads/ (7.9版本支持中文语言包)
c/c++代码规则插件下载:https://github.com/SonarOpenCommunity/sonar-cxx/releases
配置免费c/c++代码规则插件参考:https://blog.csdn.net/ZYzffffff/article/details/82466660
SonarQube的安装、配置与使用:https://www.cnblogs.com/qiumingcheng/p/7253917.html

2、检查点
1)内存泄漏
2)死循环
3)逻辑流程错误
4)空指针引用
5)编码规范
6)错误处理

3、使用界面
1)启动sonarqube服务成功如下图:

2)本地web页面

3)问题界面

4、总结
SonarQube功能强大,配置比较复杂(需要jdk支持、安装中文包,安装c/c++规则插件)。目前的试用情况来看,c代码检查项目详细,规则配置较多,功能完善,但是检查似乎有点问题,详见结果展示。页面显示清晰明了,但需要一定的时间熟悉操作。

静态代码扫描工具汇总相关推荐

  1. java 静态扫描_静态代码扫描工具 – (八)- 扫描Java项目

    静态代码扫描工具 – (八)- 扫描Java项目 1.准备好Java项目代码 只要是java语言实现的项目均可. 比如,自动化测试的代码,测试平台等均可以. 本次案例,使用java语言实现的测试平台来 ...

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

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

  3. Android和iOS静态代码扫描工具

    Android 名称 来源 功能特点 检查SQL注入 检查NullPointException 支持IDE情况 Android Lint Android SDK 针对Android,检查范围广 否 是 ...

  4. 静态代码扫描工具(多种)简要入门介绍-SonarQube社区版-免费、TscanCode工具、PMD工具、flake8工具

    SonarQube社区版-免费 适用语言:Java, C#, JavaScript, TypeScript, CloudFormation, Terraform, Kotlin, Ruby, Go, ...

  5. Android 自定义 Lint 实现静态代码扫描工具

    文章目录 关于静态代码扫描工具 Lint的简单使用 一.Lint 与 IDE 的结合使用 二.Lint 与 gradle 命令的结合使用 具体位置如下图: 生成的HTML在浏览器打开如图: 自定义 L ...

  6. 一个很好用的静态代码扫描工具 360FireLine

    一个很好用的静态代码扫描工具 360FireLine 静态代码扫描工具有很多,Android Studio 自带的Lint,FindBugs,前两者生成的测试结果报告都是英文版的,对于英文不好的童鞋们 ...

  7. 各语言的静态代码扫描工具

    1.go 语言静态扫描工具 go tool ver src go语言自带的扫描工具,安装完go后就有 2. php 静态代码扫描 phpmd 安装方法: mac 版本: 1. 前提先安装brew   ...

  8. 静态代码扫描工具—— TScanCode

    一.简介 TscanCode支持以下类型规则扫描: 空指针检查,包含可疑的空指针: 数据越界: 内存泄漏,分配和释放不匹配: 逻辑错误,重复的代码分支,bool类型和INT进行比较,表达式永远True ...

  9. 全面剖析PMD静态代码扫描工具

    PMD是使用JavaCC生成解析器来解析源代码并生成AST(抽象语法树)的,这两天对PMD及自定义规则做了调研及实验,部分说明来自官方说明文档,做了大部分参数的详细描述及测试,少数几个参数不明白含义, ...

最新文章

  1. 求数的绝对值一定是正数_人教版七年级数学上册1.2.4绝对值同步练习
  2. 如何绘制漂亮的多序列比对图片
  3. 关于类的非静态函数指针成员变量
  4. SAP标准培训课程C4C10学习笔记(二)第二单元
  5. c 直接访问mysql_C语言访问MySQL数据库的方法
  6. Android实现计时与倒计时的几种方法
  7. Sql中的union和union all的讲解
  8. shell基础:输入输出重定向
  9. 训练深度学习模型的小技巧
  10. api.execScript
  11. 最短路应用 —— 解决某些计数、数论问题
  12. NIO中的ByteBuffer读取中文错误的解决方法:MalformedInputException
  13. Spring入门第六课
  14. 火星人学习第二周——虚幻引擎蓝图应用与开发
  15. 文电通PDF编辑转换器[DocuCom PDF Gold] 8.0
  16. [系统安全] 二十.PE数字签名之(上)什么是数字签名及Signtool签名工具详解
  17. tfidf算法 python_Python TFIDF计算文本相似度
  18. 苹果电脑表格取消自动计算机,苹果电脑excel序列被隐藏怎么办
  19. 中文转换为拼音插件guiHz2Py
  20. php 支付宝实名认证

热门文章

  1. 关于jsp返回json数据给前台javascript
  2. 新华三网络教程之ipsce实战IKE配置
  3. 没有新“核弹”,更强调“车规级”和“量产”,英伟达自动驾驶朋友圈进一步扩大 | GTC 中国 2018...
  4. artDialog插件的详细使用
  5. linux 设置 tcp_keepalive_time,tcp参数详解之 tcp_keepalive_time
  6. Vue —— 分页器
  7. Redis分片集群(详解+图)
  8. 小粉兔简易计算器——一只小巨子
  9. 爱了这个云服务器了---致敬百度AIstudio
  10. 裸辞4个月,面试了30家公司,终于找到了理想的工作,同时也刷了1万字的经验给你...