博客文章

使用和理解SonarQube服务器实现代码覆盖率

Manish Kapur photo

Manish Kapur

高级总监,产品与解决方案

Date

  • SonarQube
  • SonarQube Cloud
  • SonarQube Server

目录

  • Chevron right icon引言
  • Chevron right icon什么是代码覆盖率?
  • Chevron right icon在SonarQube服务器中配置代码覆盖率
  • Chevron right icon在SonarQube服务器中分析代码覆盖率
  • Chevron right icon解读代码覆盖率指标
  • Chevron right icon使用SonarQube服务器进行代码覆盖率分析的优势
  • Chevron right icon声纳与代码覆盖率
免费试用 SonarQube

引言

确保代码经过全面测试,能让您在更新时充满信心——失败的测试将迅速识别任何功能问题。这也有助于维持软件的整体质量和可靠性。


衡量测试成效的关键指标之一是代码覆盖率。


SonarQube Server作为强大的自动化代码审查解决方案,可与测试覆盖率工具无缝集成,助力开发者编写更高质量、更安全且经过全面测试的代码。


SonarQube Server支持代码覆盖率的报告、监控和可视化,助力团队维持高标准的代码质量。


本文深入解析SonarQube Server中的代码覆盖率机制(同样适用于SonarQube Cloud),涵盖配置、分析及解读全流程。

何为代码覆盖率?

代码覆盖率(亦称测试覆盖率)衡量自动化测试执行代码库的比例。它能清晰标识代码库中哪些部分被测试覆盖、哪些未被覆盖、哪些存在部分覆盖,从而揭示需要加强测试覆盖的潜在区域。


低代码覆盖率意味着某些区域可能潜藏未被发现的缺陷或漏洞,在生产环境中构成潜在风险。


典型的代码覆盖率指标包括:

  • 整体覆盖率:测试执行的代码占整体代码的百分比。
  • 行覆盖率: 测试执行的代码行数占比。
  • 分支覆盖率:测试执行的控制流分支(if语句、循环等)占比。


在SonarQube服务器中配置代码覆盖率

SonarQube服务器作为中央枢纽,可无缝集成主流代码覆盖率工具。它将覆盖率报告与静态代码分析结果整合呈现,通过清晰的通过/失败指标确保代码符合质量标准。


配置第三方工具生成报告后,只需设置 SonarScanner 指定报告位置,即可自动采集并发送至 SonarQube 服务器。


支持导入多种主流测试工具及语言专属格式的覆盖数据。


对于未直接支持的工具,SonarQube 服务器提供通用格式。

SonarQube服务器支持多种编程语言,包括Java、C/C++、JavaScript、Python、.NET和PHP。启用覆盖率报告需执行以下步骤:

  • 运行覆盖率工具:在构建管道中设置覆盖率工具,使其在SonarScanner分析前运行。
  • 匹配报告格式:配置覆盖率工具的输出格式以符合SonarScanner预期。 例如在基于 Maven 的 Java 项目中,可使用 JaCoCo 插件生成覆盖率报告。
  • 设置 SonarScanner 参数:配置 SonarScanner 分析参数以支持测试覆盖率,并指定覆盖率报告文件的导入路径。


每次构建时,覆盖率工具会收集覆盖率数据并输出至一个或多个文件(通常为独立的测试覆盖率文件)。


随后,SonarScanner会在分析过程中导入这些文件,并将结果发送至SonarQube服务器。


SonarQube服务器可无缝导入多种工具和语言的覆盖率数据,同时支持通用格式进行自定义转换,确保与未支持工具的兼容性。


以下语言提供详细指南:


在SonarQube服务器中分析代码覆盖率:

完成配置并运行SonarQube服务器分析后,您可在服务器端查看代码覆盖率结果。关键探索区域包括:

  • 项目概览: 仪表板提供整体代码覆盖率的高级视图,包含行覆盖率、分支覆盖率及方法覆盖率百分比。



  • 覆盖率钻取:您可深入查看特定模块、包和类的详细覆盖率指标。这有助于识别可能需要额外测试的未测试代码段。覆盖率指标同时适用于新代码和整体代码。




您还可以在文件上下文中查看覆盖注释,这些注释显示代码是否被单元测试覆盖、部分覆盖或未覆盖。



  • 覆盖率演变:SonarQube Server 追踪覆盖率随时间的变化,使您能够监控不同版本和提交中测试覆盖率的提升或退化情况。



解读代码覆盖率指标

尽管代码覆盖率是关键指标,但追求100%覆盖率可能陷入收益递减的困境。以下解读指南供参考:

  • 高覆盖率不等于高质量:高代码覆盖率并不能保证测试质量。确保测试涵盖边界情况和潜在故障点。
  • 追求有意义的覆盖:应致力于实现能确保代码行为可靠性的覆盖,而非单纯追求高百分比。
  • 平衡覆盖率与其他指标:应结合SonarQube服务器提供的其他质量指标(如代码异味、缺陷和安全漏洞)综合评估代码覆盖率。



使用SonarQube服务器进行代码覆盖率分析的优势

  1. 提升可靠性与可维护性:更高的代码覆盖率意味着测试执行了更多代码路径,有助于在开发生命周期早期发现并修复缺陷。
  2. 增强开发者信心:代码覆盖率的核心价值在于赋予变更的底气。通过覆盖率数据,开发者能即时洞察变更影响:若存在意外副作用,测试将立即失败。这种即时反馈有助于早期发现问题,保障代码库稳定性。高覆盖率的完善测试体系能增强开发者信心,降低生产环境引入新缺陷的风险。
  3. 详细报告:SonarQube Server提供精细化的代码覆盖率报告,精准定位代码中未被测试的区域。这些报告按行和文件分解覆盖率,清晰呈现测试工作成效。代码覆盖率报告有助于向利益相关者和潜在客户展示测试流程的质量与全面性。
  4. 可操作性洞察:SonarQube Server不仅报告覆盖率百分比,更在代码库上下文中提供可操作的洞察。它会突出显示覆盖率较低的区域,并提供诸如未覆盖行数和未覆盖条件等指标。有关 SonarQube Server 报告的所有测试覆盖率指标,请参阅文档

Sonar 与代码覆盖率:

SonarQube Server 赋能开发人员实现全面的代码覆盖率,使其清晰洞察未测试区域,并提供基于上下文的可操作见解。


它通过提供测试有效性的量化指标来赋能开发人员。


这些数据有助于团队追踪测试目标的进展,并为测试活动资源分配提供决策依据。


通过将覆盖率分析融入开发工作流,可确保代码库经过充分测试并维持高质量标准。


请谨记:代码覆盖率虽重要,但应作为持续代码质量改进的整体策略组成部分。


准备好利用 SonarQube Server 进行代码覆盖率分析了吗? 立即体验开发者版


在每行代码中建立信任

将SonarQube集成到工作流程中,立即开始发现漏洞。


Image for rating

120+ G2 评论

开始使用联系销售
  • Follow SonarSource on Twitter
  • Follow SonarSource on Linkedin
language switcher
简体中文 (Simplified Chinese)
  • 法律文件
  • 信任中心

© 2008-2024 SonarSource SA。保留所有权利。SONAR、SONARSOURCE、SONARQUBE、 和 CLEAN AS YOU CODE 是 SonarSource SA 的商标。