分类
技术文章 无分类

免费使用SonarQube审查C/C++代码

一、背景

SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误。SonarQube有很多版本(社区版、开发人员版、企业版等),只有社区版是免费使用,但该版本不支持C/C++语言的静态代码分析。下面通过配备一些免费的插件集成到SonarQube以达到审查C/C++代码的目的。

二、工具准备(附本例版本)

三、部署环境

1、JDK

(1)下载JDK时保存好安装路径
bc58ad5a865b4ff28b69e5216b9faff0
(2)配置系统环境变量
新建系统变量:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_331(jdk安装路径)

627bd1d7f2514ac4b8cbc529816e81e4

新建系统变量:CLASSPATH
变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
1c0a2ffa146b44edbaa14747154f4445

编辑Path环境变量
添加:%JAVA_HOME%\bin
%JAVA_HOME%\jre\bin
e7bd8d6f56e74d9cb5202f00070f481f
(3)验证测试
在cmd窗口中运行java、javac、java -version语令不报错即配置成功。
e0b0121569fa4eecaca865484a791c7c

2、SonarQube

(1)下载好sonarqube后,解压打开bin目录,启动对应OS目录下的StartSonar。如本例使用的是win的64位系统,则打开…\bin\windows-x86-64\StartSonar.bat
a006f0f7fa7f43d6bce6e935b272e2e8
(2)启动浏览器访问http://localhost:9000,如出现下图则安装成功
第一次登陆,默认Login、Password为:admin
cc88e2a6949b472da4cf822b29b34043
(3)登陆Sonarqube后如需下载中文包,请按以下步骤安装插件(需联网)
Administration->Marketplace
987cbef98bcc4fb7bbbfba726ad77019

3、Sonar-cxx

将下载好的.jar文件,放到你的sonarqube目录/extensions/plugins目录下,重启SonarQube生效(此处报错重启PC能解决大部分问题)。Language中出现cxx则配置成功。
aaed5c99dafb44bc9720d79558147b62

4、Sonar-scanner

(1)下载好后解压打开bin目录、配置环境变量
编辑Path环境变量,将Sonar-scanner的bin目录添加进去
69cea6befda14eba8a8b7b120496885d
(2)cmd中验证是否配置成功
743b06efef6949a2ab5792851a66bb34

5、Cppcheck

(1)安装路径添加到Path环境变量
472686e1a8a34564bad007d56e165bf9
572984498f884506843d1c090006922c
(2)cmd中验证是否配置成功
fb1cafd149224f40a35c5c9dfb29b98d

四、实战

1、Sonarqube自定义cxx规则

在sonarqube平台质量配置页面,新增cxx的质量配置项并激活更多规则
eb9bc382d2054c0192cfc25944e01b5d

——>
b25fc064cbd94417a20ea42e33d714d7

——>
95c26595ed2f4e398bd6b44e866a3925

——>
d54c68ac799b4fd5bfca48ee74e8527a

——>
21746266cdba4843916efe29c3d440ec

激活完成后,将该规则项设置为默认
7217199590fd4a738619f00a5cb62256

2、使用Cppcheck对项目代码进行分析

在项目文件夹的根目录下使用cppcheck工具扫描代码,结果记录到cppcheck-report.xml中
语令:cppcheck –xml –xml-version=2 –enable=all ./ 2>cppcheck-result.xml
注:扫描时间会有些长,等待完成后再进行下一步操作
55ba34053b9a45348a1f01399b51777f

项目根目录下生成的cppcheck-report.xml文件
38ee5630b4174a94aafe088fe83a0518

3、配置项目的一些必要信息

(1)在项目的根目录创建sonar-project.properties文件
b08c8d969e954b46b95bfb6f1f807fa5

(2)文件内容:

#sonarqube中相对应项目的key(可省)
#sonar.projectKey=TestMemory

#sonarqube中相对应项目的名字(可省)
#sonar.projectName= TestMemory

#sonar检测的编程语言种类
sonar.language=c++

#sonar检测的源文件目录,‘.’表示当前根目录下的所有文件目录
sonar.sources=.

#项目各文件的后缀名(可在sonarqube中定义)
sonar.cxx.file.suffixes=.cxx,.cpp,.c,.cc,.hxx,.hh,.h,.handles

#cppcheck生成的Report名称(可在sonarqube中定义)
sonar.cxx.cppcheck.reportPaths=cppcheck-result.xml

(3)在sonarqube中定义项目各文件的后缀名:
10e083b32aaa4f81856351e66009c7a9
(4)在sonarqube中定义cppcheck生成的Report名称:
e361a82df77e48f29617bc046b59f4ad
注:sonarqube中的设定比sonar-project.properties文件里的设定优先级要高

4、Sonarqube创建项目

e2a6c0dcaa704d4dad0083e9badd7dd0

——>
a173a7202c5349008df51e40d5647eda

——>
6498cd8923bb4867ba20f08f3fb11da1

——>
5349f2888a874217a692b00698319f60

5、使用sonar-scanner进行代码的静态扫描

复制sonar-scanner语令:
c277fb41316944e0b1bcf1e8e0039b1d

项目根目录下打开cmd执行上面Copy的语令:
9a00241b6cce44efa81dabdbdc95a46c

在Sonarqube上查看结果:
0ee4b29372e849ddb00c981e5967df9c

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注