看到此文,引人深思,特此共享。感觉其中还隐含着更大的“讽刺“,忍不住评论两句,见文后的随想。
引文来源:http://www.aqee.net/2010/09/09/code-coverage-goal-80-and-no-less/
一大早,一个年轻的程序员问大师:
“我准备写一些单元测试用例。代码覆盖率应该达到多少为好?”
大师回答道:
“不要考虑代码覆盖率,只要写出一些好的测试用例即可。”
年轻的程序员很高兴,鞠躬,离去。
之后没多久,第二个程序员问了大师同样的问题。
大师指着一锅烧沸的水说:
“我应该往这个锅里放多少米?”
这个程序员看起来被难住了,回答道:
“我怎么会有答案?这取决于要给多少人吃,他们饿不饿,有什么菜,你有多少米,等等。”
“ 完全正确,” 大师说。
第二个程序员很高兴,鞠躬,离去。
末了,来了第三个程序员问了大师同样的关于代码覆盖率的问题。
“百分之八十,不能少!” 大师一拳锤在桌子上,用严厉的口气回答道。
第三个程序员很高兴,鞠躬,离去。
回复完这个之后,一个年轻的实习生走到大师身边:
“大师,今天我无意中听到了你对同一个代码覆盖率问题给出了三个不同的答案。为什么?”
大师从椅子上站起来:
“给我泡点新茶,我们聊聊这个。”
当杯子里倒满了冒着热气的绿茶后,大师开始说:
“这第一个程序员是个新手,刚刚开始学测试。目前他有大量的程序都没有测试用例。他有很长的路要走;现在对他要求代码覆盖率只会打击他,没有什么用处。最好是让他慢慢的学会写一些测试用例,测试一下。他可以以后再考虑代码覆盖率。”
“而这第二个程序员,不论对编程还是测试都是十分的有经验。我以问作答,问她应该往锅里放多少米,使她明白决定测试用例多少的因素有很多,她比我更知道这些因素——毕竟是她自己的代码。对这个问题没有一个简单的、直接的答案。以她的聪明完全能明白这个道理,正确的完成任务。”
“我明白了,” 年轻的实习生说, “但是如果没有一个简单直接的答案,那你为什么告诉第三个程序员‘百分之八十,不能少’呢?”
大师笑的前仰后合,绿茶都喷了出来。
“这第三个程序员只想得到一个简单的答案——即使根本没有简单的答案 … 而且即使有答案她也不会按答案做。”
年轻的实习生和头发斑白的大师在沉思中喝完茶。
随想:
看过此文,引人深思,估计多数人也有和我一样的感觉。
由此想到一个更严重的问题:“究竟有多少人能正确的认识到自己是上面中的第几个程序员呢?” 想必看过此文的人没有几个认为自己会是第三个程序员?(包括我自己) 如果是这样的话,按道理应该形势一片大好,因为第三类程序员没几个。
可现实呢?我想大家和我一样会认为在现实中“第三类程序员“很多,以至于我们自己一直不满和抱怨,看看论坛里的冷嘲热讽就知道了。
人类似乎有容易批评别人,而忽略自己的天性。
不经想起一位质量大师的“no known“模型,一个人的知识经验的成长经常处在下面的象限中:
“不知道自己不知道“ 是一件令人感到恐惧和危险的事,因为它让人以为自己知道,其实只是“不知道自己不知道“而已 。所以无论如何,对自己而言:
(1)保持敬畏和求知的态度,时刻反思
(2)借助别人之口看清更真实的自己
(3)人不可能全知全能,总有自己不知道的时候,在进入新领域的时候,尽快使自己从“不知道自己不知道“里走出来,是个挑战,也是一个挑战。
怎么识别“第三类”程序员呢?
这似乎更加讽刺,因为第三类的程序员的反应如此的明显,以至于拿来警惕自己和观察他人都极为有益。
如果上文中的大师,每次都用同样的回答“代码覆盖率80%“,这些程序员们会有怎样的反应呢?
我猜想:
- 第一、第二个程序员都会虚心接受,然后先去研究“代码覆盖率“究竟是个什么东东?怎样才能统计覆盖率呢?并由此引发其他的问题……
- 而第三个程序员的反应估计还得分成两类:一类按大师的做,照做就行了,一段时间后,发现好像没什么用,啥也不想就放弃了,甚至觉得大师是伪的(注:如果此时想到再去问为什么,已经开始向第二类程序员转变了);另一类直接就在盘算了“这个大师在装……“
无论如何,警醒我自己的必须的!