基于 Clang 的 C/C++ SonarQube 插件发布
日前,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 又有一个与众不同的地方,它不仅是一个编译器,还是一个构建工具的基础结构。由于其开发包是基于体系结构的,这样子使得重用和集成更灵活,即能更容易集成到其他项目。
插件功能
-
度量标准: 有许多方法来测量一个代码库。最常用的方法是计算代码行数。这种方法粗略的估计了投入成本和代码质量。它允许你获得质量级别协议。但该插件不仅计算了代码 的行数,同时还带有其他标准代码度量值。比如说,有关代码组织 (类或命名空间,在类上声明的方法数目),有关代码质量 (复杂性,百分比的评论,问题......)
-
目录和文件的依赖性: 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 协议。
Via:codergears.com