一天清晨,一个年轻的程序员问大师:
“我准备写一些单元测试。我应该以什么样的代码覆盖率为目标?”
大师回答说:
“不要担心覆盖率,只要编写一些好的测试就可以了。”
年轻的程序员微笑着,鞠躬离开了。
那天晚些时候,另一个程序员问了同样的问题。
大师指着一壶沸腾的水说:
“那锅里该放多少粒米?”
程序员看起来很困惑,回答说:“我怎么能告诉你呢?这取决于你需要供养多少人,他们有多饥饿,你提供什么其他食物,你有多少大米,等等。”
“没错,” 大师说。
第二个程序员微笑着鞠躬离开了。
在这一天快结束的时候,第三个程序员来了,问了同样的关于代码覆盖率的问题。
“百分之八十以上!” 大师用拳头敲着桌子,严厉地说。
第三个程序员微笑着,鞠了个躬,离开了。
在回答完最后一个问题后,一个年轻的学徒走近大师:
“大师,今天我无意中听到您用三种不同的答案回答了相同的关于代码覆盖的问题。为什么?”
这位大师从椅子上站起来:“来和我一起喝点茶,我们来谈谈这件事。”
当他们斟满滚烫的绿茶后,这位大师开始说:
“第一个程序员是新人,刚开始测试。现在他有很多代码,却没有测试。他有很长的路要走;此时只关注代码覆盖率是令人沮丧的,也是毫无用处的。他只要习惯编写和运行一些测试就好了。他可以稍后再担心保险问题。
另一方面,第二名程序员在编程和测试方面都很有经验。当我问她一个锅里应该放多少粒米时,我帮助她意识到测试的必要程度取决于许多因素,而她比我更了解这些因素——毕竟这是她的代码。这个问题没有一个简单的答案,但她足够聪明,能够处理好这个问题。”
“我明白了,”年轻的学徒说,“但是如果没有一个简单的答案,那你为什么告诉第三个程序员 ‘百分之八十不能少于’ 呢?”
这位大师大笑得如此猛烈和响亮,以至于他的肚子——证明他喝的不仅仅是绿茶——上下扑通一声。
“第三个程序员只想要简单的答案——即使没有简单的答案……而且无论如何也不遵循它们。”
年轻的学徒和头发花白的大师在沉思的沉默中喝完了他们的茶。
383 thoughts on “关于测试覆盖率”