您的位置:首页 > 编程语言 > C语言/C++

基于 Clang 的 C/C++ SonarQube 插件发布

2015-05-06 00:00 711 查看
原文地址:http://www.codergears.com/Blog/?p=1627

日前,CoderGears 团队发布发布了一款基于 Clang 的 C/C++ SonarQube 插件,极大的方便了开发者们使用 C/C++ 开发 Sonar 插件。

众所周知,Sonar (SonarQube)是一个用于管理源代码、提供质量数据报告工具的开源平台。但使用 C/C++ 开发 Sonar 插件面临着一个巨大的挑战——必须要使用很好的解析器。然而,这种要产生这种语法解析器是非常困难的。

那什么使得 C++ 开发很难呢?事实上,凡是关系到——声明/定义,名称查找(consider argument-dependent name lookup),隐式转换规则以及解析模版,都会使 C++ 的开发变得困难。

目 前已经证明了 Clang 是一个专为 C 和 C++ 服务的成熟编译器,就像 GCC 和 Microsoft 编译器一样。但是 Clang 又有一个与众不同的地方,它不仅是一个编译器,还是一个构建工具的基础结构。由于其开发包是基于体系结构的,这样子使得重用和集成更灵活,即能更容易集成到其他项目。

插件功能

度量标准: 有许多方法来测量一个代码库。最常用的方法是计算代码行数。这种方法粗略的估计了投入成本和代码质量。它允许你获得质量级别协议。但该插件不仅计算了代码 的行数,同时还带有其他标准代码度量值。比如说,有关代码组织 (类或命名空间,在类上声明的方法数目),有关代码质量 (复杂性,百分比的评论,问题......)



重复代码: 由嵌入到 Sonarqube 上的 CPD 检测代码重复率 。


目录和文件的依赖性: CppDepend 检测文件和目录间的所有依赖性,并将其加载到 Sonar DSM 上。



覆盖范围: 此插件加载范围覆盖了所有 Cobertura 和 Microsoft Visual Studio XML 上的文件。



CppDepend 度量: 此插件提供了一些有用的度量,比如说:Afferent coupling (Ca),Efferent coupling (Ce), Relational Cohesion(H), Instability (I), Abstractness (A), Distance from main sequence (D)。使用自定义度量小部件(Custom Metrics Widgets)的话,这些度量就都能够添加到面板(dashboard)上。



且这些度量标准能够用在在设计目录(Design category)里面:



CppDpeend 规则存储库: 在 Sonar.properties 文件中定义了 Sonar.cppdepend.cdproj 之后,Cppdepend 规则都能够添加到 Sonar 规则中。


cppcheck 规则存储库: Cppcheck 是一个给力的能有效检测出 C/C++ 问题,的工具,它嵌入在 CppDepend 上且所有的 Cppcheck 规则都能添加到 Sonar 规则中。



CppDepend 部件: CppDepend sonar 插件提供了一些有用的部件来查询 CppDepend 的结果:

类度量部件: CppDepend 推算出了许多与设计和执行相关的类度量。使用这些部件的话能够用于发现这些度量标准。



CQLinq 查询部件: CQLinq 是一个强大的功能,有利于创建编码规则。为了查看 CQLinq 查询结果,你必须在你的 jdproj 文件中创建一个名为“Sonar Queries”的文件,并添加到你的查询中去。



且能够在你的 Sonar Dashboard 中添加查询部件:



CppDepend 报告工具:



你可以使用 CppDepend 自定义你的报告,正如下面所描述的那样。要是你想通过 Sonar 访问这个报告,你必须在 SonarRunnerForCppDepend 上添加着两个协议:

Sonar.cppdepend.deploymentPath: CppDepend 将会在这里复制目录路径

Sonar.cppdepend.deploymentUrl: CppDepend 将会在这里复制目录 URL

抽象性 vs 不稳定图表: 抽象性 vs 不稳定图表通常用在最常用的项目中,用来检测抽象性缺乏。有关此图表的更多信息参阅这里。 正如 CppDepend 报告部件所描述的那样,你必须定义 Sonar.cppdepend.deploymentPath 和 Sonar.cppdepend.deploymentUrl 协议。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: