单元测试的合理代码覆盖率是多少(以及为什么)?
如果你要为单元测试规定一个最小百分比的代码覆盖率,甚至可能作为对存储库提交的要求,那么它会是什么?
请解释你是如何得到你的答案的(因为如果你所做的只是选择一个数字,那么我可以自己完成这一切;)
阿尔贝托萨沃亚的这篇散文恰恰回答了这个问题(以一种很好的娱乐方式):
http://www.artima.com/forums/flat.jsp?forum=106&thread=204677
测试覆盖面上的Testivus
一天早上,一位程序员问大师:
“我准备写一些单元测试。 我应该瞄准哪些代码覆盖范围?“
大师答道:
“不要担心报道,只需写一些好的测试。”
程序员微笑着,鞠躬,然后离开。
...
当天晚些时候,第二位程序员问了同样的问题。
这位大师指着一壶沸水说道:
“我应该在锅里放多少粒米饭?”
程序员看起来很疑惑,回答道:
“我怎么可能告诉你? 这取决于你需要喂养多少人,他们多饿,你正在服用什么其他食物,你有多少大米可用,等等。“
“确切地说,”大师说。
第二位程序员笑了,低头,离开了。
...
即将结束的时候,第三位程序员来到并询问关于代码覆盖的相同问题。
“百分之八十,不能少!”主人用严厉的声音回答道,在桌子上敲着拳头。
第三位程序员微笑着,鞠躬,然后离开。
...
在最后一次回复后,一位年轻的学徒走近这位大师:
“伟大的主人,今天我听到你用三种不同的答案回答关于代码覆盖率的相同问题。 为什么?”
这位大师从他的椅子上站了起来:
“来和我一起喝点新鲜茶吧,让我们来谈谈吧。”
在他们的杯子里放满了吸绿色的热茶后,这位大师开始回答:
“第一个程序员是新手,刚刚开始测试。 现在他有很多代码并且没有测试。 他还有很长的路要走; 在这个时候专注于代码覆盖将会令人沮丧并且毫无用处。 他习惯于编写和运行一些测试。 之后他可以担心报道。“
“另一方面,第二位程序员在编程和测试方面都非常有经验。 当我回答她问我应该投入多少米时,我帮助她意识到必要的测试数量取决于许多因素,而且她比我更了解这些因素 - 毕竟这是她的代码。 没有单一的,简单的答案,而且她足够聪明,能够处理事实并与之合作。“
“我明白了,”这位年轻的学徒说,“但是如果没有简单的答案,那么为什么你回答第三位程序员'百分之八十而且不会少'?”
这位大师笑得如此强烈和大声,以至于他的腹部,证明他喝的不仅仅是绿茶,而是上下翻倒。
“第三位程序员只需要简单的答案,即使没有简单的答案,然后也不会跟着他们。”
这位年轻的学徒和那位花白的大师终于在沉思中喝完了他们的茶。
如果100%覆盖率是您的目标(而不是所有功能的100%测试),则代码覆盖率是一个误导性指标。
因此,请相信自己或您的开发人员要彻底,并通过他们的代码覆盖每条路径。 务实,不要追求神奇的100%覆盖率。 如果你使用TDD代码,你应该获得90%的覆盖率作为奖励。 使用代码覆盖来突出显示你错过的代码块(尽管你不是TDD,但是不应该发生这种情况,因为你编写代码只是为了进行测试通过,没有代码就不存在它的合作伙伴测试。)
代码覆盖率很高,但功能覆盖率更高。 我不相信我会写每一行。 但我确实相信要编写所有我想提供的功能的100%测试覆盖率(即使对于我自己提供的以及未在会议期间讨论过的额外酷功能)。
我不在乎是否有代码在测试中没有涉及,但是我会在意我是否会重构我的代码并最终导致不同的行为。 因此,100%的功能覆盖率是我唯一的目标。
链接地址: http://www.djcxy.com/p/21399.html上一篇: What is a reasonable code coverage % for unit tests (and why)?