Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确保对新Subversion提交的覆盖率最小_Java_Svn_Unit Testing_Code Coverage_Sonarqube - Fatal编程技术网

Java 确保对新Subversion提交的覆盖率最小

Java 确保对新Subversion提交的覆盖率最小,java,svn,unit-testing,code-coverage,sonarqube,Java,Svn,Unit Testing,Code Coverage,Sonarqube,我们有一个几乎没有单元测试的大型项目。我希望从现在开始确保开发人员提交新特性(或bug!),而不会对相应的单元测试进行最小的覆盖 有哪些方法可以强制执行 我们使用很多工具,所以也许我可以使用一个插件(jira、Greenhhopper、fisheye、sonar、hudson)。我也在想可能是Subversion预提交钩子,jira的提交接受插件,或者类似的东西 想法?Sonar(顺便说一句,很棒的工具)和插件可以在某些指标不符合特定规则时破坏Hudson构建。您可以在Sonar中设置这样一个规

我们有一个几乎没有单元测试的大型项目。我希望从现在开始确保开发人员提交新特性(或bug!),而不会对相应的单元测试进行最小的覆盖

有哪些方法可以强制执行

我们使用很多工具,所以也许我可以使用一个插件(jira、Greenhhopper、fisheye、sonar、hudson)。我也在想可能是Subversion预提交钩子,jira的提交接受插件,或者类似的东西


想法?

Sonar(顺便说一句,很棒的工具)和插件可以在某些指标不符合特定规则时破坏Hudson构建。您可以在Sonar中设置这样一个规则,当覆盖率低于给定点时,该规则将触发警报(最终导致构建失败)。唯一的缺点是,您可能希望覆盖率增加,因此您必须记住每天将警报级别增加到当前值。

如果您使用maven-cobertura插件,它可能是一个不错的选择(并且对开发人员来说不像svn hook那么烦人)

您要做的是确定什么是新代码,并验证某个测试是否涵盖了新代码

一般来说,确定代码覆盖率可以使用各种测试覆盖率工具中的任何一种来完成。许多测试覆盖率工具可以简单地重新测试整个应用程序,然后您可以运行测试来确定覆盖率

我们的(语义设计)工具可以从更改的文件列表中确定需要重新检测的单个文件,并通过仔细的测试组织,确定需要重新执行的测试。这将最大限度地降低重新运行测试的成本,并且您仍然可以结束测试 总覆盖率数据相同。(实际上,这些工具根据方法级别的更改检测需要进行哪些测试)

一旦您有了测试覆盖率数据,您想知道的是一些测试覆盖了哪些特定的新代码。如果您知道哪些文件发生了更改,那么您可以通过坚持更改的文件具有100%的覆盖率来粗略地使用测试覆盖率数据。这在实践中可能不起作用

你可以利用SD给出更精确的答案。这些工具比较两个语言文件,并使用语言语法(例如,表达式、语句、声明、方法体,而不仅仅是更改的源行)和概念编辑操作(在块内移动、复制、删除、插入、重命名标识符)指示更改的位置。SmartDifferenticer Delta往往比普通的diff工具更小、更精细

很容易从SmartDifferenticer的输出中提取更改的行列表。可以计算每个文件与测试覆盖率数据覆盖的行的交点。如果更改的行不完全在覆盖行集合内,则“新”代码尚未测试,您可以升起标志、停止签入或其他任何方式来表示您的检查策略已被违反


TestCoverage和SmartDifferenticer工具在为您完成此计算时并不现成,但它应该是一个非常容易实现的脚本。

非常好的建议,谢谢。不过,我可以想到一个缺点,这与应用程序现在没有最低覆盖率有关(而且需要一些时间才能实现,这件事很重要)。我只想关注新功能/错误修复/提交,当然可能我不理解您的立场,所以将最小覆盖率设置为0%或0,5%或您现在拥有的任何内容。如果在第一天之后,您的覆盖率为0.7%,则将警报级别提高到0.7%。如果某个开发人员在没有测试的情况下提交代码,那么很有可能全局覆盖率下降到0,65%,这低于今天的水平,并将触发构建失败。至少你的覆盖率不会降低。如果它只检查了正在检入的代码(文件)的覆盖率,那么你可以将覆盖率级别设置为10-30%开始。这将在每次签入时强制进行少量的回填,而不会强制他们访问整个代码库以使签入生效。想象一下,有人用一次对第三方库的调用来替换覆盖更好的代码。肯定是一个好的举动,对吗?但是您的项目的总体测试覆盖率已经下降。一个比%年龄覆盖率更好的指标就是
未覆盖的行数
-越低越好。我可以想象开发人员非常容易而且经常跳过这一点:通常说“大家请在提交之前运行cobertura,不要忘记编写测试”。如果你问普通开发人员,他们可以停止做蹩脚的提交:)至少我知道这种方法在几个团队中都有效。虽然开发人员可以非常轻松地跳过maven测试,但是如果你有一个Jenkins(或其他CI工具)配置好,可以在构建软件之前运行测试,即使开发人员坚持跳过测试,CI将警告团队构建无法按预期工作。您的意思是“我想确保……开发人员不会在没有最小覆盖率的情况下提交新功能”吗?听起来你想要一个0-coverage规则。你能不能说uncovered:covered代码的比率不允许降到当前值以下,而不是试图发现什么是新代码?我认为确定什么是新代码是“困难的”,因为添加的文件可能只是一个在SVN中重命名的文件(这是一个删除和添加)。您可以使用任何测试覆盖率工具来完成这项工作,该工具将为您提供一个比率(就像我们的一样)。但我不认为这有什么意义:程序员只是在玩系统,当阈值太低时,他们会为一些已经可以提高比率的旧的简单代码编写测试,而不是他们刚刚提交的新代码。很遗憾智能差异工具不支持python。@StephenPaulger:是的。Python2.6和3.1,以及我们所看到的其他方言。我认为