【发布时间】: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