静态代码扫描工具汇总

article/2025/10/24 12:36:42

一、概述

在软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷。传统的代码评审、同事复审,通过人工方式来检查缺陷仍然是一件耗时耗力的事情。而静态代码扫描工具能够在代码构建过程中帮助开发人员快速、有效的定位代码缺陷并及时纠正这些潜在的问题。
通过调研,本文将着重介绍几款常用的静态代码扫描工具,这些工具分为几类:
轻量级静态代码扫描工具: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代码检查项目详细,规则配置较多,功能完善,但是检查似乎有点问题,详见结果展示。页面显示清晰明了,但需要一定的时间熟悉操作。


http://chatgpt.dhexx.cn/article/nxlm0o5F.shtml

相关文章

用户行为序列推荐模型

导读:今天我们谈谈用户行为序列上的推荐模型。首先我们对序列推荐问题做一个定义和描述,然后主要讲述可以用在序列推荐任务中的 NN 模型,最后给出一点个人看法以及文中相关的参考文献供参阅。 用户行为大多数情况下都是存在时间上的先后关系…

用户兴趣模型分类以及推荐系统技术调研

用户兴趣模型分类 根据用户之前在相关网站的行为数据记录分析出用户的兴趣和偏好,然后根据不同用户兴趣和偏好不同为其推荐不同的内容,这种新的信息获取方式被称为个性化推荐技术。 个性化新闻推荐系统中常用的几种用户兴趣建模方法: &…

用户生命周期模型

本文转载自: https://blog.csdn.net/l18930738887/article/details/50818878 一、为什么要定义用户生命周期? 用户生命周期是为了定位每个用户在哪个阶段,对于某个阶段的用户进行不同的营销策略。比如初期用户:还没有养成使用习…

Django重写User模型修改明文密码加密方法

由于继承Django的User列表会导致创建新用户的密码为明文,导致无法正常登陆,因此需要修改adminx中的部分配置实现原始的用户密码记录功能。 从这样的界面进入注册用户的密码就是加密的密码效果了,否则是显示明文密码非加密状态。 文章目录 实现步骤实现步骤 需要在项目的m…

【模型理解】KANO模型

前言 在大量的需求需要进行迭代时,由于时间、人力、财力等相关因素干扰,无法在有限的时间内容对所有的需求进行满足,此时需要我们对需求进行优先级的排列。最大化的合理的提高有限资源的使用。 在常见的产品优先级区分的方式有时间四象限模…

软件工程的十大模型

1.软件生命周期模型 软件生命周期由软件定义、软件开发与运维(也称软件维护)3个时期组成,每个时期又进一步划分成若干个阶段。 问题定义:“要解决的问题是什么?”通过对客户的访问调查,系统分析员扼要地写出…

SaaS用户管理系统模型设计

最近一直在研究关于SaaS化的用户管理系统,现将项目中的模型做一整理,先贴图: 图中黄色方框:租户/组织、部门、员工 完成的是对整个组织结构及结构中人员分布的管理; 图中绿色方框:系统用户(包括…

认识每一个“你”:微博中的用户模型

社交媒体(Social Media)相对于传统互联网媒体的最大区别是通过建立人与人之间的联系,极大提升了信息生产量以及传播效率。身处社交媒体中的每个人或组织同时扮演着信息生产者、传播者与接受者的角色。 在社交媒体背景下,用户生产…

Django默认用户模型类和父类 AbstractUser 介绍

Django默认用户模型类 Django 框架默认使用一个 User 模型类, 保存有关用户的数据。 例如: 我们定义 admin 站点时, 定义的超级用户信息, 就是存储在 User 模型类对应的表中。 我们可以通过 select * from auth_user; 查看数据表。 这个表里就是我们保存的管理员信息,是由用户…

RFM用户分层模型|原理+Python全流程实现

RFM 模型 在数据分析中经常会进行用户分层,本文我们来了解一下常见的用户分层模型RFM。 RFM概念 RFM是由R(Recency)、F (Frequency)、 M(Monetary) 三个维度构成的,其具体含义如下: R:最近一次消费时间间隔 F:消费频…

用户增长——AARRR模型

AARRR模型是做用户分析的经典模型之一。它以完整的用户生命周期为线索,描述了用户使用产品需经历的五个环节,最终获取商业价值。什么是AARRR模型? AARRR是由五个单词的首字母组成,分别代表【获取、激活、留存、收入、传播】五个阶…

如何定义用户模型(persona)

一、什么是用户模型? Persona([pə:səunə]):(Persona是用户模型的的简称)是虚构出的一个用户用来代表一个用户群。一个persona可以比任何一个真实的个体都更有代表性。一个代表典型用户的persona的资料有性别、年纪、收入、地域…

用户漏斗模型

原创不易,麻烦点个关注,点个赞,谢谢各位。 漏斗模型是什么? 漏斗模型是一个看似简单的评判产品健康度的数据工具,简单来说,就是通过产品每一个设计步骤的数据反馈得出产品的运行情况,然后通过各阶段的具体分析改善产品的设计,提升产品的用户体验。 漏斗模型符合自然规…

用户分层之RFM模型

目录 一、简介二、模型三、应用 一、简介 RFM模型是衡量用户价值的模型,其中具体含义: Recency:最近一次消费时间间隔Frequency:消费频率,一段时间(比如1年)内的消费次数Monetary:…

Django数据库学习——定义用户模型(实例)

(1)创建一个应用,HelloWorld (2)新建models.py, 定义系统用户模型 from django.db import modelsclass sysuser(models.Model):usernamemodels.CharField(max_length20,uniqueTrue)passwordmodels.CharFie…

数据分析之RFM——用户模型分析(附案例数据和代码)

本文从RFM模型概念入手,结合实际案例,详解Python实现模型的每一步操作,并提供案例同款源数据,以供同学们知行合一。 看这篇文章前源数据长这样: 学完后只要敲一个回车,源数据就变成了这样: 是…

浅谈用户营销模型AIPL

进入互联网下半场,由于人口红利带来的流量越来越珍贵,作为C端厂商,获取流量的成本变的越来越高,如何经营好已有的流量变的关键。 在经营用户方面有个例子我觉得特别有意思,小时候东北家家都爱吃大酱,有一个…

django drf 初始化配置(mysql、跨域访问、默认用户模型)和用户模型重写,数据迁移,解决用户模型重写后无法创建超级用户的问题

drf 初始化配置 一、初始化项目(推荐方案一)二、创建app三、重写用户模型四、配置五、数据迁移(把模型类转为数据库的表字段)六、整体结构和介绍七、解决用户模型重写后无法创建超级用户的问题 一、初始化项目(推荐方案一) 方案一 方案二 django-admin…

用户画像中常用的用户模型

促销敏感度模型 1.对于租凭公司平台而言,全范围的促销投放和对所有用户发放优惠券之类的,的确可以得到不错的效果,比如2019年的春节,公司通过对所有老用户发放优惠券,成功争取到了1000多订单。但是如果想进一步提高销…

建立用户模型

最近我们也在实践基于行为数据快速、低成本构建用户画像的方法,欢迎各位共同探讨: 用户模型(Persona)是Alan Cooper在《About Face:交互设计精髓》2一书中提到的研究用户的系统化方法。它是产品经理、交互设计师了解用…