【外刊IT评论】你真正需要的代码测试覆盖率是多少?

标签: 批评评论 测试 测试覆盖率 | 发表时间:2011-04-25 00:08 | 作者:admin Ryan
出处:http://www.aqee.net
本文是从 How much code coverage do you really need? 这篇文章翻译而来。

我写这篇文章的起因是由于看了@unclebobmartin在微博上的一些看起来言之凿凿的话语。给那些不认识Uncle Bob的人介绍一下——他是我们软件产业里最著名的一个专家,是《 Clean Code(代码整洁之道)》这本著作的作者,是敏捷宣言(Agile Manifesto)的签署人之一。在上世纪九十年代,他对文献最佳面向对象实践方法贡献了很大的力量。所以,当他说话时,我们一定要关注一下。

他给我们日常的TDD和单元测试制订了一个最高纲领。我们可以从他的微博里清楚的看到这点:

“两件事。可重复性和成本。跟自动化测试比起来,手工测试的成本高的可怕。”

“手工测试不是测试;那是在做实验。只要有人的因素牵涉其中,那结果就必然可疑。”

“你们告诉我的实际意思就是让我大开方便之门、不去测试某些程序。哼 …”

“代码覆盖率100%并不是成绩,那是最低要求。即使只写了一行代码,你也要测试它。”

他接着把软件测试跟在其它领域里常见的但被认为很关键的活动进行了比较:

“战地外科医生也许没有最够的时间做严格的消毒,但这带来的风险可能是死亡或高昂的治疗代价。”

“会计难道只会把80%的数据表做双份备份吗?”

“有多少回你们都看到了那些严重的宕机事故都是因为一些愚蠢的程序员以为那些愚蠢的代码不需要经过测试而导致的?“

他的所有这些观点都很有价值,但他只向我们展示了问题的一面。现实中并不是所有的应用都需要如此谨小慎微的测试。并不是所有的应用都跟战地手术或巨额资金核算那么重要。(更不要说在很多情况下的为”合理避税“而做的帐务:))。

一个更重要的原因是,100%的测试覆盖率并不能保证bug的不出现。就连Uncle Bob自己也承认:

”测试并不能杜绝bug。但测试能保证程序的行为是符合预期的。“

这很显然指的是:同一个程序员在程序里埋下的概念性或逻辑性错误,由他自己测是绝对测不出来的。

最终,所有的问题归结于ROI(投资收回率)和实用主义。有些应用比其它应用需要更多的测试。有些bug需要比其它bug投入更多的精力去修复。 究竟是否需要在自动化测试是投入更多的时间和财力,或多少覆盖率是合适的还是过分了,这都需要人的主观判断。

 


本文原始地址:你真正需要的代码测试覆盖率是多少?

相关 [it 需要 代码] 推荐:

Android 4.0编译源代码需要16GB内存

- coofucoo - Solidot
新一代的智能手机也许更轻更小巧,但它们的操作系统则走向另一个极端. Android 4.0 Ice Cream Sandwich(ICS)编译源代码将需要工作站内存不低于16GB,是编译Gingerbread的两倍. 如果开发者想编译ICS,他需要准备:单次构建需25GB空间,同时编译所有AOSP(Android Open Source Project)配置需要80GB空间,16GB以上内存,在二个四核处理器2.4GHz机器上完成单次构建需5+小时CPU时间,经过时间(wall time)25+分钟.

我们不需要代码之外的文档

- - 外刊IT评论
我听到了,很多次,在很多公司里. 大多数人都会因为没有写文档而内心不安,认为应写文档. 文档有两种——代码内和代码外. 代码内文档包括javadoc(或任何用来描述类和类方法的语言工具)和代码注释. 外部文档包括描述产品的文档和内部材料. 外部文档最大的问题:它会过期不更新. 让它们保持同步更新是一个麻烦且耗时的工作.

修改一行代码需要6天时间?

- - InfoQ cn
修改一行代码需要6天时间,你信吗. 这篇文章的作者给我们讲了一个真实的故事. 首先我们来看一下有哪些人物:. Philip:President,会长. Lee:Operations Manager,执行经理. David:IT Director,IT总监. Judy:IT Admin,IT管理员. Ed:programmer,程序员.

【外刊IT评论】你真正需要的代码测试覆盖率是多少?

- Ryan - 外刊IT评论网
本文是从 How much code coverage do you really need. 我写这篇文章的起因是由于看了@unclebobmartin在微博上的一些看起来言之凿凿的话语. 给那些不认识Uncle Bob的人介绍一下——他是我们软件产业里最著名的一个专家,是《 Clean Code(代码整洁之道)》这本著作的作者,是敏捷宣言(Agile Manifesto)的签署人之一.

加入 AdSense 现需要 Google 验证你是否放置了正确的代码

- 夜の猫 - 谷奥——探寻谷歌的奥秘
以前站长加入AdSense很简单,只需要提交申请即可. 现在Google要求你在提交申请后必须将正确的AdSense代码加到自己的网页里,然后再审核你的代码是否放置对了,并放置在了合适的位置上,之后才会通过,让你加入AdSense开始赚钱. 在放置了代码还没被Google批准的这段时间,AdSense广告会完全显示一片空白.

代码重构

- - ITeye博客
随着程序的演化,我们有必要重新思考早先的决策,并重写部分代码. 代码需要演化;它不是静态的事物. 重写、重做和重新架构代码合起来,称为重构.    当你遇到绊脚石  ---  代码不在合适,你注意到有两样东西其实应该合并或是其他任何对你来说是"错误"的东西  -------- . 如果代码具备以下特征,你都应该考虑重构代码:.

Google 需要性爱

- cantrip - 酷壳 - CoolShell.cn
看到一篇趣文Google Needs Sex,翻译过来. Brad DeLong 给我们写了 两篇关于“Google遇到的麻烦”的文章(墙),这两篇文章基本上是说, 制造网络欺诈和网络垃圾信息的人会尽其一切努力来和搜索引擎进行博弈,这样一来,其会让搜索到的结果对我们越来越没有帮助(译注:百度的竞价排名成为了制造网络欺诈和网络垃圾信息甚至洗脑的温床).

都需要过程

- Terence - 左岸读书_blog
我一直相信,这个世界所有的事情都建立在一定的规则之上,最根本的规则. 其上一切规则都要依次规则,一旦上层规则违背了底层的规则,则必然会出现问题. 而那些根本的规则,其实在最初我们就已经知道,只是无法意识到. 记得有一句好象是说:最初,看山是山,看水是水;然后,看山不是山,看水不是水;最后才发现,山仍然山,水仍然是水.

代码小比较

- Tim - 斯巴达第二季
判断上百万个4k的buffer是否为全0,我最先想到的办法是:zero_buffer = malloc(4096);. /* 循环百万次读取buffer */.         /* 全0 */. 由于好奇,看看shell工具cp的代码,它的解决办法是:. /* 循环百万次读取buffer */.         /* 全0 */.