【问题标题】:What is best practice for generating multiple code coverage views of the same project in sonar?在声纳中生成同一项目的多个代码覆盖率视图的最佳实践是什么?
【发布时间】:2016-01-21 05:19:57
【问题描述】:

我有一个多模块 maven 项目,想为项目的子集生成代码覆盖率报告,并使用声纳跟踪结果。

该项目有模块M1、M2 和M3,我想为包foo/** 和包bar/** 生成覆盖率报告。这些包可能存在于多个模块中。

我正在使用 cobertura 在我的 maven 项目中生成代码覆盖率文件。

我的问题是:为单个项目生成多个代码覆盖率报告的最佳做法是什么?

一种选择是使用配置文件配置我的 Maven 构建,以生成特定包的覆盖率数据,例如coverage-foo 将使用<include>foo/**</include> 配置cobertura maven 插件,coverage-bar 将使用<include>bar/**</include> 配置cobertura 插件。然后我会用项目的两个分支配置声纳:一个用于foo,一个用于bar,声纳端没有配置。

但另一种选择是为整个项目生成代码覆盖率数据,并为每个声纳项目配置适当的包含项。因此,sonar 'foo' 分支将具有仅包含 foo/** 文件的设置,而 sonar bar 分支将具有与 bar 包类似的设置。

两者似乎都与我相当(就声纳输出而言),我赞成第一个选项,但我想知道这是否是生成相同的多个代码覆盖“视图”的“最佳实践”方法多模块项目。或者,如果一个选项有我没有考虑过的缺点。

(注意:声纳有一个商业“视图”插件,但我现在仅限于免费插件)

【问题讨论】:

  • 我谈论的是解决方案,而不是您的真正需求。您需要哪些不同的覆盖率报告(UT / IT / 其他)?为什么你需要覆盖分布在不同模块之间的包?您是否考虑过重新组织您的代码库/模块?在任何情况下,我都不会使用 SQ 的分支功能,因为你会以重复的问题结束(SQ 中还没有分支,你只会重复项目,给它们不同的键)
  • 我现在只对单元测试覆盖率感兴趣。有不同的团队在代码库的不同部分工作,我想为每个团队生成覆盖率统计信息。不幸的是,代码库相当大且具有历史意义,因此重构每个团队的模块是不可行的。
  • 那么为什么您的团队要处理多个模块?为什么多个团队在同一个模块上工作?恕我直言,您应该将您的团队映射到现有模块或重构您的代码,以确保模块仅由单个团队维护。然后,您将能够拥有一个项目,并且您将获得开箱即用的团队覆盖。
  • 如果一个团队在多个模块上工作,考虑将这些模块移动到独立项目中,然后将它们集成到一个视图中(参见 SonarQube 商业插件“Portfolio”)或编写一个调用 SQ webservices 聚合的外部工具模块和跨项目级别的指标(以及覆盖范围)并生成 pdf 报告。这就是我们正在做的事情(它就像一个魅力)
  • 所有优点,但我没有权限对超过 150 万 LOC 的产品进行如此大规模的重构。只能使用我得到的东西。

标签: maven sonarqube code-coverage cobertura


【解决方案1】:

鉴于我们的消息交换和您提供的信息,我宁愿在您的上下文中混合使用 2 个选项,即:

  • 仅为foo(或bar)生成代码覆盖率数据
  • 让 sonarqube 以一种为 foo(或 bar)创建分支的方式分析您的代码,其中仅包含 foo 代码(或 bar 代码)

确实,这可以让您获得所需的有关覆盖率的信息,但也可以让您只遇到与 foo / bar 代码相关的问题。

不过,你会遇到两个问题:

  1. 不属于foo 或bar 的代码将不会被分析,除非您创建另一个分支以排除foo 和bar 代码
  2. 您将无法全面了解您的代码质量,为此您必须使用投资组合插件(但正如您所写,您只能使用开源插件

请注意,第 2 点不是问题,因为您可以使用 SonarQube 的 Web 服务重建所需的信息(这将允许您构建一个外部报告来汇总您想要汇总的数据)

米歇尔

【讨论】:

    猜你喜欢
    • 2018-08-22
    • 1970-01-01
    • 2014-10-03
    • 2014-11-12
    • 2017-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 2013-10-04
    相关资源
    最近更新 更多