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

jopen 9年前發布 | 10K 次閱讀 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 又有一個與眾不同的地方,它不僅是一個編譯器,還是一個構建工具的基礎結構。由于其開發包是基于體系結構的,這樣子使得重用和集成更靈活,即能更容易集成到其他項目。

插件功能

  • 度量標準: 有許多方法來測量一個代碼庫。最常用的方法是計算代碼行數。這種方法粗略的估計了投入成本和代碼質量。它允許你獲得質量級別協議。但該插件不僅計算了代碼 的行數,同時還帶有其他標準代碼度量值。比如說,有關代碼組織 (類或命名空間,在類上聲明的方法數目),有關代碼質量 (復雜性,百分比的評論,問題......)

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

  • 重復代碼: 由嵌入到 Sonarqube 上的 CPD 檢測代碼重復率 基于 Clang 的 C/C++ SonarQube 插件發布

  • 目錄和文件的依賴性: CppDepend 檢測文件和目錄間的所有依賴性,并將其加載到 Sonar DSM 上。

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

  • 覆蓋范圍: 此插件加載范圍覆蓋了所有 Cobertura 和 Microsoft Visual Studio XML 上的文件。

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

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

且這些度量標準能夠用在在設計目錄(Design category)里面:

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

  • CppDpeend 規則存儲庫:Sonar.properties 文件中定義了 Sonar.cppdepend.cdproj 之后,Cppdepend 規則都能夠添加到 Sonar 規則中。基于 Clang 的 C/C++ SonarQube 插件發布

  • cppcheck 規則存儲庫: Cppcheck 是一個給力的能有效檢測出 C/C++ 問題,的工具,它嵌入在 CppDepend 上且所有的 Cppcheck 規則都能添加到 Sonar 規則中。

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

  • CppDepend 部件:  CppDepend sonar 插件提供了一些有用的部件來查詢 CppDepend 的結果:

    • 類度量部件: CppDepend 推算出了許多與設計和執行相關的類度量。使用這些部件的話能夠用于發現這些度量標準。

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

  • CQLinq 查詢部件: CQLinq 是一個強大的功能,有利于創建編碼規則。為了查看 CQLinq 查詢結果,你必須在你的 jdproj 文件中創建一個名為“Sonar Queries”的文件,并添加到你的查詢中去。

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

且能夠在你的 Sonar Dashboard 中添加查詢部件:

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

  • CppDepend 報告工具:

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

你可以使用 CppDepend 自定義你的報告,正如下面所描述的那樣。要是你想通過 Sonar 訪問這個報告,你必須在 SonarRunnerForCppDepend 上添加著兩個協議

  • Sonar.cppdepend.deploymentPath: CppDepend 將會在這里復制目錄路徑

  • Sonar.cppdepend.deploymentUrl: CppDepend 將會在這里復制目錄 URL


  • 抽象性 vs 不穩定圖表: 抽象性 vs 不穩定圖表通常用在最常用的項目中,用來檢測抽象性缺乏。有關此圖表的更多信息參閱這里 正如 CppDepend 報告部件所描述的那樣,你必須定義 Sonar.cppdepend.deploymentPath 和 Sonar.cppdepend.deploymentUrl 協議。

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

Via:codergears.com

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!