文章目录

  • SonarQube审查C/C++代码
  • 一、背景
  • 二、工具准备(附本例版本)
  • 三、部署环境
    • 1、JDK
    • 2、SonarQube
    • 3、Sonar-cxx
    • 4、Sonar-scanner
    • 5、Cppcheck
  • 四、实战
    • 1、Sonarqube自定义cxx规则
    • 2、使用Cppcheck对项目代码进行分析
    • 3、配置项目的一些必要信息
    • 4、Sonarqube创建项目
    • 5、使用sonar-scanner进行代码的静态扫描

SonarQube审查C/C++代码

一、背景

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

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

  • SonarQube (8.9.8 LTS : Community Edition) : 展示扫描报告
    下载网址:https://www.sonarqube.org/downloads/
  • JDK (11.0.15) 版本过低SonarQube启动会报错,必须是11+的JDK
    下载网址:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
  • Sonar-cxx plugin (V2.0.7)
    下载网址:https://github.com/SonarOpenCommunity/sonar-cxx/releases
    • 支持C/C++多种编码标准
    • 支持windows/Linux
    • 提供了多种传感器: 如cppcheck/gcc/valgrind等
    • 提供了对单元测试/覆盖率数据的分析功能
    • 支持自定义扩展规则
  • Sonar-scanner (4.7) : 扫描仪
    下载网址:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
  • Cppcheck (2.7) : c/c++代码的静态分析工具
    下载网址:https://cppcheck.sourceforge.io/
    注:S00和Sonar-cxx版本要对应。可参考下表选择需要的版本。

三、部署环境

1、JDK

(1)下载JDK时保存好安装路径

(2)配置系统环境变量
新建系统变量:JAVA_HOME
变量值:C:\Program Files\Java\jdk1.8.0_331(jdk安装路径)

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

 编辑Path环境变量
添加:%JAVA_HOME%\bin
  %JAVA_HOME%\jre\bin

(3)验证测试
在cmd窗口中运行java、javac、java -version语令不报错即配置成功。

2、SonarQube

(1)下载好sonarqube后,解压打开bin目录,启动对应OS目录下的StartSonar。如本例使用的是win的64位系统,则打开…\bin\windows-x86-64\StartSonar.bat

(2)启动浏览器访问http://localhost:9000,如出现下图则安装成功
第一次登陆,默认Login、Password为:admin

(3)登陆Sonarqube后如需下载中文包,请按以下步骤安装插件(需联网)
 Administration->Marketplace

3、Sonar-cxx

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

4、Sonar-scanner

(1)下载好后解压打开bin目录、配置环境变量
编辑Path环境变量,将Sonar-scanner的bin目录添加进去

(2)cmd中验证是否配置成功

5、Cppcheck

(1)安装路径添加到Path环境变量


(2)cmd中验证是否配置成功

四、实战

1、Sonarqube自定义cxx规则

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

——>

——>

——>

——>

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

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

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

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

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

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

(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中定义项目各文件的后缀名:

(4)在sonarqube中定义cppcheck生成的Report名称:

注:sonarqube中的设定比sonar-project.properties文件里的设定优先级要高

4、Sonarqube创建项目

——>

——>

——>

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

复制sonar-scanner语令:

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

在Sonarqube上查看结果: