静态代码扫描工具汇总

一、概述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值