基于 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