SonarQube AutoConfig: 重新定義C++代碼分析

1、C++、AutoConfig和SonarQube

歡迎使用SonarQube 10.6的AutoConfig,開啟代碼分析的未來。在這裏,高質量的清潔代碼不再只是一個想法,而是每個C和C++專案的即時現實。

AutoConfig消除了所有常見的先決條件:無需依賴特定的編譯器,無需複雜的設置操作,也無需依賴於專案的構建環境。無論您是在使用特定、鮮為人知的編譯器進行嵌入式專案開發,還是在資源匱乏的小型專案中工作,AutoConfig都可以無縫集成,為您提供輕鬆的代碼分析路徑。它消除了過去的複雜性——在過去,生成編譯資料庫和確保環境相容性是不可避免的麻煩事。現在,每個開發人員都可以以更少的努力實現更大的影響,立即踏上編寫更清潔、更優質代碼的旅程。

2、從配置混亂到清晰明瞭

那些需要靜態瞭解C和C++代碼的工具,如代碼分析、重構和IntelliSense,通常要求開發人員手動提供有關專案如何編譯的詳細配置資訊。這一關鍵設置涉及指定“include”搜索目錄和宏定義,通過解析不同的依賴關係和調整預處理器行為來徹底改變代碼語義。每種工具都有其各自的方法,通常需要特定的配置檔,這導致設置過程既分散又費力。

 

編譯資料庫是LLVM 專案的一項創新,其出現標誌著一個重大飛躍。它提供了一種標準化的JSON格式,用於描述每個原始檔案的編譯命令,有助於統一不同工具之間的配置過程。但是,生成此資料庫並不簡單,並且在很大程度上取決於構建系統。在Sonar,我們設計了 Build-Wrapper,通過包裝構建和捕獲構建命令來簡化編譯資料庫的生成。不過,它可能與一些具有限制性構建環境或非標準工具鏈的專案並不相容。另外,雖然CMake可以在沒有事先構建的情況下生成編譯資料庫,但這一選項仍然受到特定CMake生成器和編譯器的限制。對於許多無法或不願僅僅為了代碼分析相容性而調整工具鏈的專案來說,這一要求可能會使其變得不切實際。此外,即使使用CMake生成的編譯資料庫,仍然需要在構建後執行分析,以考慮任何生成的檔和獲取的依賴項。這種必要性凸顯了挑戰所在:雖然靈活的現代環境有助於滿足這些要求,但強制要求這些條件可能會令人望而卻步。使用舊系統或適應性較差的系統的專案可能會發現,這一要求是使用高級代碼分析工具的一大障礙。

SonarQube 10.6中的AutoConfig通過自動化檢測和配置過程改變了遊戲規則。通過掃描專案的代碼和系統庫,AutoConfig採用啟發式方法來推斷出有效配置,從而有效地編譯和分析代碼,覆蓋廣泛的代碼庫,而無需手動干預或特定的構建環境。對於希望微調分析配置的用戶,AutoConfig可通過易於使用的UI屬性靈活調整計算設置,使其成為適用於任何C或C++專案的多功能強大工具。

3、彌合編譯器差距

C和C++的開發世界非常廣闊,編譯器種類繁多,每種編譯器都有自己的版本、語言擴展和命令行特性。傳統的代碼分析工具難以支持所有可能的編譯器,尤其是那些具有私有文檔和獨特行為的舊編譯器或特定領域的編譯器。這種限制使得許多專案無法使用高級代碼分析功能。

AutoConfig為這一問題引入了突破性的解決方案。通過以通用、靈活的方式對編譯器行為進行建模,AutoConfig可以解析模棱兩可的代碼,並有效處理語言擴展。它通過識別已知內容並將未知內容視為黑盒來處理不完整的代碼,從而將誤報的風險降至最低。這一策略可確保AutoConfig即使在傳統工具無法運行的環境中也能提供可靠的靜態代碼分析。因此,對於使用非主流編譯器的專案來說,代碼分析變得易用和簡單,高質量的軟體開發也在各個領域得以普及。

4、擺脫環境限制

傳統的靜態代碼分析工具通常受制於需要一個與構建環境完全相同的分析環境。這一要求會增加成本,並使現有CI工作流中的集成變得複雜,尤其是當構建分佈在不同的電腦或系統上時。通常的解決方法是重組CI流水線以適應這些工具,這往往意味著不自然地將任務複雜化和集中化。

使用AutoConfig,這些障礙都將迎刃而解。AutoConfig利用先進技術來模擬編譯器行為和依賴項管理,而無需訪問原始的構建工具或環境。這一功能不僅有助於使用安全、隔離的分析環境(如Docker),還能夠使並行構建和分析更容易實現。AutoConfig能夠在不重構整個CI工作流的情況下適應各種專案需求,這徹底改變了靜態代碼分析的部署方式,使其成為開發工作流的無縫組成部分,而不是破壞性的部分。

5、清潔代碼一步到位

在Sonar AutoConfig出現之前,載入專案並設置有效的代碼分析需要穿越一個複雜的“迷宮”,其中包括針對不同構建系統、操作系統和CI提供商量身定制的配置和設置。僅SonarQube就有30多個C++入門示例,涵蓋了使用編譯資料庫方法的各種變化。這凸顯了C和C++專案的設置與配置是多麼艱巨。SonarSource的CFamily示例中的每個示例都展示了所需的大量手動設置。

與之形成鮮明對比的是,AutoConfig在開始分析C或C++專案時具有顛覆性的簡便性。您只需運行SonarScanner CLI,無需任何預配置。SonarScanner CLI不需要任何C++特定輸入。它可以在後臺無縫運行,自動適應您的編譯器、配置和環境。只需下載SonarScanner CLI 並在代碼庫中執行即可。SonarQube的上機用戶介面將引導您完成進一步的簡化流程,具體取決於您的CI提供商。例如,GitHub用戶可以使用GitHub Action自動下載和執行 SonarScanner。同樣,還有為Bitbucket Pipelines、Azure DevOps 和GitLab量身定制的解決方案,使跨平臺的入門幾乎毫不費力。

6、為所有人解鎖清潔代碼

從SonarQube 10.6開始,C和C++分析進入了AutoConfig的新時代。AutoConfig旨在使代碼分析變得簡單,更易於每個專案使用。AutoConfig將傳統上與靜態代碼分析相關的複雜設置過程自動化,使您能夠以最少的配置工作實現清潔代碼。對於需要微調分析的用戶,高級掃描器屬性可以輕鬆調整,並在《使用AutoConfig自定義分析》指南中進行了詳細說明。

雖然AutoConfig提供了一種簡化的方法,但需要更多控制的用戶仍然可使用變異資料庫模式。

瞭解這兩種模式的優缺點,以及如何選擇正確的分析模式歡迎諮詢龍智:普通話/英語服務: +852-55169850;粵語服務:+852-51679050;customer@hkdsdtech.com。

關於龍智

DragonSoft 於 2006 年成立,現已成爲中國領先的 DevSecOps 解決方案提供商。
我們融合 DevOps 與敏捷管理理念,並整合全球頂尖工具,爲客戶提供應用生命周期管理(ALM/SDLM)、DevSecOps 及敏捷開發等解決方案,涵蓋實施部署、系統升級、培訓支持、定制開發及維護服務。 透過自動化軟件開發流程,促進團隊協作,全面提升開發效率與產品質量,同時確保整個過程可追溯、可量化。