目前我们使用的SonarQube社区版是不带有C++语言支持的。通过搜索,了解到有人根据原厂自行开发并开源了一个兼容的c++插件。SonarQube C++ plugin (Community)
根据官宣,做得还是非常不错的。
- 支持C/C++多种编码标准
- 支持windows/Linux
- 提供了多种传感器: 如cppcheck/gcc/valgrind等等
- 提供了对单元测试/覆盖率数据的分析功能
- 还支持自定义扩展规
部署-sonar-cxx
根据官方文档,部署是非常简单的,只要将下载的jar包放到sonarqube安装目录下的/extensions/plugins目录下,将sonarqube重启即可使用。
部署-sonar-scanner
在Java项目中,一般可以通过Maven来管理代码编译、单元测试、覆盖率检测和静态扫描以及结果上报Sonar的整个过程。
而我们的C++项目采用的是make+gcc的方式进行编译管理的,对此Sonar提供的是sonar-scanner来进行扫描。
1)下载并安装sonar-scanner
2)bin纳入PATH
3)conf文件中指定SonarQube的服务器/账号
4)待扫描项目设置projectKey/source 等参数
使用-cppcheck
这个在一开始还闹了笑话。笔者以为在sonar-cxx插件安装并执行sonar-scanner之后,自然就有代码静态扫描结果了。然而SonarQube上的数据一直是0个BUG,0个违规。
后来经过仔细查看sonar-cxx的使用说明,原来该插件只是提供了sensor, 也就是只是一个报告解析和上报的功能。如果需要cppcheck代码静态扫码或者其它的扫描结果,得先拿工具扫出来。。。。。。
- 安装cppcheck
2)sonar-cxx的参数设置(报告位置)
3)执行cppcheck 并产生报告
使用-gtest
1)如果在gtest执行时只产生console的报告,没有xml报告的花,需要修改一下gtest的执行方式,
2)sonar-cxx的参数设置(报告位置)
3)执行gtest单元测试
使用-gcovr
1)gcovr 安装,gcc+gcov是编译时一般Linux系统都有的,而gcovr是一个需要额外安装的gcov报告格式化的工具,它比lcov更好的一个场景是提供了cobetura兼容格式的xml报告。从而可以让sonar来解析c++的覆盖率报告。当然lcov有覆盖率结果累加等功能,也是gcovr没有的。
2)sonar-cxx的参数设置(报告位置)
3)在gtest单元测试执行完成后,执行gcovr来收集并产生覆盖率报告XML
使用-scanner
启动sonnar-scanner, 通过sonar-cxx提供的sensor来完成上述报告的解析、结果上报等步骤,完成之后就可以在SonarQube上看到该项目的扫描结果了。
网友评论