我正在使用Cobertura计算具有JUnit测试用例的Java项目的代码/分支覆盖率。我知道100%的覆盖率并不能说明代码有多好,但目前只有6%。分行覆盖率为1%。我的直觉说分支覆盖可能更重要,因为该项目的决策性质。由于这是我目前唯一的大项目,我没有适当的代码/分支覆盖目标值的经验。
我认为分支覆盖在这个应用程序中非常重要,所以我将所需的值设置为100%。我已将代码覆盖率阈值定义为80%。
这些值的代码复杂性又是什么因素?
我可能过分强调数字,但我想听听其他人的经验。我知道这些值取决于项目性质,但是我可以参考一些通用指针/文章/个人经验吗?
答案 0 :(得分:5)
我想听听其他人的经历。
我写了一个包含数千行代码的库,以及一个比库本身更长的覆盖套件。在99.98%,我覆盖了除了一个之外的每一行:该方法来自遗留项目,我不知道如何构建一个可以达到该行的测试用例。当我的图书馆投入生产时,第一个错误报告是由一条未经测试的线路造成的。
我从那个项目带回家的教训是,你不知道如何击中的线是最危险的。如果您的项目是决策密集型的,那么获得100%的覆盖率符合您的最佳利益。
答案 1 :(得分:5)
当我测量用于功能测试的手动测试产生的分支覆盖率时,我得到了~65%
另请参阅What is a reasonable code coverage % for unit tests (and why)?
答案 2 :(得分:0)
在我工作过的大多数公司中,我们根本不强制执行分支机构覆盖。其中一家公司的分支机构覆盖率为 1.0,我可以告诉您,这既费时又无用。你的开发时间几乎翻了一番,最终得到了一个充满无用测试的庞大代码库。此外,工程师通常不喜欢编写涵盖所有分支的测试,因为这很无聊。
至于行覆盖率,0.7 的值效果很好,因为它迫使工程师覆盖大部分编写的代码。我工作过的大多数公司根本不强制执行测试覆盖率,这也是我的首选风格。工程师足够聪明,无需强制执行即可编写有用的测试。