美文网首页软件自动化测试
代码扫描-sonarqube+cxx

代码扫描-sonarqube+cxx

作者: antony已经被占用 | 来源:发表于2019-02-25 23:04 被阅读21次

    目前我们使用的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代码静态扫码或者其它的扫描结果,得先拿工具扫出来。。。。。。

    1. 安装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上看到该项目的扫描结果了。

    相关文章

      网友评论

        本文标题:代码扫描-sonarqube+cxx

        本文链接:https://www.haomeiwen.com/subject/lyjvyqtx.html