轩辕春秋文化论坛 » 设计与修改 » 代码覆盖率:80%,不能少


2010-9-29 08:46 Maxwell
代码覆盖率:80%,不能少

[size=14px][size=14px]一大早,一个年轻的程序员问大师:[/size]
[indent][size=16px][i]“我准备写一些单元测试用例。代码覆盖率应该达到多少为好?”[/i][/size]
[/indent][size=14px]大师回答道:[/size]
[indent][size=16px][i]“不要考虑代码覆盖率,只要写出一些好的测试用例即可。”[/i][/size]
[/indent][size=14px]年轻的程序员很高兴,鞠躬,离去。[/size]
[size=14px]之后没多久,第二个程序员问了大师同样的问题。

大师指着一锅烧沸的水说:[/size]
[indent][size=16px][i]“我应该往这个锅里放多少米?”[/i][/size]
[/indent][size=14px]这个程序员看起来被难住了,回答道:[/size]
[indent][size=16px][i]“我怎么会有答案?这取决于要给多少人吃,他们饿不饿,有什么菜,你有多少米,等等。”[/i][/size]
[/indent][size=14px]“[i]完全正确,”[/i] 大师说。[/size]
[size=14px]第二个程序员很高兴,鞠躬,离去。[/size]
[size=14px]末了,来了第三个程序员问了大师同样的关于代码覆盖率的问题。[/size]
[indent][size=16px][i]“百分之八十,不能少!”[/i] 大师一拳锤在桌子上,用严厉的口气回答道。[/size]
[/indent][size=14px]第三个程序员很高兴,鞠躬,离去。[/size]
[size=14px]回复完这个之后,一个年轻的实习生走到大师身边:[/size]
[indent][size=16px][i]“大师,今天我无意中听到了你对同一个代码覆盖率问题给出了三个不同的答案。为什么?”[/i][/size]
[/indent][size=14px]大师从椅子上站起来:[/size]
[indent][size=16px][i]“给我泡点新茶,我们聊聊这个。”[/i][/size]
[/indent][size=14px]当杯子里倒满了冒着热气的绿茶后,大师开始说:[/size]
[indent][size=16px][i]“这第一个程序员是个新手,刚刚开始学测试。目前他有大量的程序都没有测试用例。他有很长的路要走;现在对他要求代码覆盖率只会打击他,没有什么用处。最好是让他慢慢的学会写一些测试用例,测试一下。他可以以后再考虑代码覆盖率。”[/i][/size]
[size=16px][i]“而这第二个程序员,不论对编程还是测试都是十分的有经验。我以问作答,问她应该往锅里放多少米,使她明白决定测试用例多少的因素有很多,她比我更知道这些因素——毕竟是她自己的代码。对这个问题没有一个简单的、直接的答案。以她的聪明完全能明白这个道理,正确的完成任务。”[/i][/size]
[/indent][size=14px][i]“我明白了,”[/i] 年轻的实习生说, [i]“但是如果没有一个简单直接的答案,那你为什么告诉第三个程序员‘百分之八十,不能少’呢?”[/i][/size]
[size=14px]大师笑的前仰后合,绿茶都喷了出来。[/size]
[indent][size=16px][i]“这第三个程序员只想得到一个简单的答案——即使根本没有简单的答案 … 而且即使有答案她也不会按答案做。”[/i][/size]
[/indent][size=14px]年轻的实习生和头发斑白的大师在沉思中喝完茶。[/size]
[size=14px][英文出处]:[url=http://googletesting.blogspot.com/2010/07/code-coverage-goal-80-and-no-less.html]Code coverage goal: 80% and no less![/url][/size]
[/size]

2010-9-29 10:48 金圭子
举手,啥是“代码覆盖率”?

2010-9-29 16:11 djgan
回复 #2 金圭子 的帖子

:hz1019: code coverage 你的testcase能够覆盖源代码中多少行代码……

2010-9-29 21:49 Maxwell
在本文中,指所有单元测试用例执行时执行到的被测代码的语句数与被测代码总语句数的比例。

2010-9-30 09:31 金圭子
这个不是必须100%么?

2010-9-30 09:51 djgan
回复 #5 金圭子 的帖子

:hz1019:不是什么公司都有这么高的要求的,有的能在正常情况下work就可以了,连测试工程师都米有

2010-9-30 10:04 金圭子
嗯,一般我给自己公司写东西就是能跑起来就成,反正都是给同事做的,到时候跑不起来了再来找我就是。能让我来做的一般也不会是涉及高危权限或者是涉及现金的,一般也都不会是时间上有特殊要求的(比如可能会把我半夜拖来加班的那种)。

我是觉得如果真的有要求,自然是100%,这个80%,大概也只是为了“可以界定”而已吧,主要是20%部分大概无法界定……
不过话说我一直对“N行代码”的概念有点模糊,最近看系统架构师考试的书还提到这个,这个
“NN行代码”就是个工作量的概念,还是实实在在的?如果是实实在在的话,一个标准的格式一个Begin~End~或者End if或End啥就必须单独一行,类似的C的一个{或}就是一行,这种也算“一行代码”么?

2010-9-30 14:37 coarsemelody
这个东西没必要纠结于奇字面意义。
所谓测试案例需要做到的代码覆盖率,其实广义上是指在任何一种逻辑下,程序是否都按照你需要的正常工作了。

换句话说,其实测试的是各种逻辑分支以及边界、极限数据下,程序是否工作。
举个例子有一行代码:
if( a> 10 ) {b = 1}
这个地方需要测试覆盖,就不是单单一行代码的事情,他起码有很多种情况:a<10,a=10 a>10,甚至,a不是数值型变量的时候,程序会不会爆掉……

所以,代码覆盖率虽然是根据你的代码被测试到的地方来算的,但是又不能简单的根据测试到的行和没有被测试到的行来看。

实际上,如果根据行来计算,正常情况下,一个水平还可以的写代码的人员,交工出去的代码,需要的代码测试率不足20%……(个人经验,仅供参考)

2010-9-30 14:44 Maxwell
理论上要求所有测试的总覆盖率要达到100%,单元测试覆盖率不到100%是很正常的。其实覆盖率也不能当作单一指标来使用。覆盖率100%不代表bug检出率100%。

页: [1]


Powered by Discuz! Archiver 5.0.0  © 2001-2006 Comsenz Inc.