代码质量与安全 | SonarQube AutoConfig: 重新定义C++代码分析

C++、AutoConfig和SonarQube

欢迎使用SonarQube 10.6的AutoConfig,开启代码分析的未来。在这里,高质量的清洁代码不再只是一个想法,而是每个C和C++项目的即时现实。

AutoConfig消除了所有常见的先决条件:无需依赖特定的编译器,无需复杂的设置操作,也无需依赖于项目的构建环境。无论您是在使用特定、鲜为人知的编译器进行嵌入式项目开发,还是在资源匮乏的小型项目中工作,AutoConfig都可以无缝集成,为您提供轻松的代码分析路径。它消除了过去的复杂性——在过去,生成编译数据库和确保环境兼容性是不可避免的麻烦事。现在,每个开发人员都可以以更少的努力实现更大的影响,立即踏上编写更清洁、更优质代码的旅程。

从配置混乱到清晰明了

那些需要静态了解C和C++代码的工具,如代码分析、重构和IntelliSense,通常要求开发人员手动提供有关项目如何编译的详细配置信息。这一关键设置涉及指定“include”搜索目录和宏定义,通过解析不同的依赖关系和调整预处理器行为来彻底改变代码语义。每种工具都有其各自的方法,通常需要特定的配置文件,这导致设置过程既分散又费力。

编译数据库是LLVM 项目的一项创新,其出现标志着一个重大飞跃。它提供了一种标准化的JSON格式,用于描述每个源文件的编译命令,有助于统一不同工具之间的配置过程。但是,生成此数据库并不简单,并且在很大程度上取决于构建系统。在Sonar,我们设计了 Build-Wrapper,通过包装构建和捕获构建命令来简化编译数据库的生成。不过,它可能与一些具有限制性构建环境或非标准工具链的项目并不兼容。另外,虽然CMake可以在没有事先构建的情况下生成编译数据库,但这一选项仍然受到特定CMake生成器和编译器的限制。对于许多无法或不愿仅仅为了代码分析兼容性而调整工具链的项目来说,这一要求可能会使其变得不切实际。此外,即使使用CMake生成的编译数据库,仍然需要在构建后执行分析,以考虑任何生成的文件和获取的依赖项。这种必要性凸显了挑战所在:虽然灵活的现代环境有助于满足这些要求,但强制要求这些条件可能会令人望而却步。使用旧系统或适应性较差的系统的项目可能会发现,这一要求是使用高级代码分析工具的一大障碍。

SonarQube 10.6中的AutoConfig通过自动化检测和配置过程改变了游戏规则。通过扫描项目的代码和系统库,AutoConfig采用启发式方法来推断出有效配置,从而有效地编译和分析代码,覆盖广泛的代码库,而无需手动干预或特定的构建环境。对于希望微调分析配置的用户,AutoConfig可通过易于使用的UI属性灵活调整计算设置,使其成为适用于任何C或C++项目的多功能强大工具。

 

弥合编译器差距

C和C++的开发世界非常广阔,编译器种类繁多,每种编译器都有自己的版本、语言扩展和命令行特性。传统的代码分析工具难以支持所有可能的编译器,尤其是那些具有私有文档和独特行为的旧编译器或特定领域的编译器。这种限制使得许多项目无法使用高级代码分析功能。

AutoConfig为这一问题引入了突破性的解决方案。通过以通用、灵活的方式对编译器行为进行建模,AutoConfig可以解析模棱两可的代码,并有效处理语言扩展。它通过识别已知内容并将未知内容视为黑盒来处理不完整的代码,从而将误报的风险降至最低。这一策略可确保AutoConfig即使在传统工具无法运行的环境中也能提供可靠的静态代码分析。因此,对于使用非主流编译器的项目来说,代码分析变得易用和简单,高质量的软件开发也在各个领域得以普及。

摆脱环境限制

传统的静态代码分析工具通常受制于需要一个与构建环境完全相同的分析环境。这一要求会增加成本,并使现有CI工作流中的集成变得复杂,尤其是当构建分布在不同的计算机或系统上时。通常的解决方法是重组CI流水线以适应这些工具,这往往意味着不自然地将任务复杂化和集中化。

使用AutoConfig,这些障碍都将迎刃而解。AutoConfig利用先进技术来模拟编译器行为和依赖项管理,而无需访问原始的构建工具或环境。这一功能不仅有助于使用安全、隔离的分析环境(如Docker),还能够使并行构建和分析更容易实现。AutoConfig能够在不重构整个CI工作流的情况下适应各种项目需求,这彻底改变了静态代码分析的部署方式,使其成为开发工作流的无缝组成部分,而不是破坏性的部分。

 

清洁代码一步到位

在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量身定制的解决方案,使跨平台的入门几乎毫不费力。

为所有人解锁清洁代码

从SonarQube 10.6开始,C和C++分析进入了AutoConfig的新时代。AutoConfig旨在使代码分析变得简单,更易于每个项目使用。AutoConfig将传统上与静态代码分析相关的复杂设置过程自动化,使您能够以最少的配置工作实现清洁代码。对于需要微调分析的用户,高级扫描仪属性可以轻松调整,并在《使用AutoConfig自定义分析》指南中进行了详细说明。👉咨询创实信息:021-61210910、customer@shcsinfo.com,获取AutoConfig使用指南…

虽然AutoConfig提供了一种简化的方法,但需要更多控制的用户仍然可使用变异数据库模式。👉咨询创实信息:021-61210910、customer@shcsinfo.com,了解这两种模式的优缺点,以及如何选择正确的分析模式…

作者:Abbas Sabra,  Sonar C++分析器开发人员

准备好试用AutoConfig了吗?从 SonarQube开发人员版开始。

立即咨询SonarQube中国授权合作伙伴——创实信息,了解更多SonarQube产品介绍。

访问创实官网:https://www.shcsinfo.com/