Cedric Beust(译注1)在最近一篇blog中引用了我的几篇发贴,其中包括关于“junit邮件列表”,“测试覆盖率需达到90%以上才算是有效代码”,还有“如果没有这么高覆盖率的话,那就一种非专业行为”(译注2)等。Cedric对此的回复是这样的:
那是有点极端了,不过也并非全盘错误。而这句话没能鉴别出来的是其实有太多种层次上的“非专业”。我都能想出一些比“发布未经测试的代码”来得更严重的情况。
- 错过了最后期限
- 发布的产品未能全部实现用户所要求的功能。
- 未能发布
- 我认为发布低质量的产品是非专业的。
- 我认为发布你不知道质量是否低下的产品也是非专业的。
- 我认为除非测试过,否则你无法获知所发布的产品是否质量低。
- 最后,我认为如果你没有足够高的测试覆盖率,你的测试就不可能覆盖足够多的产品代码,因而你就无法了解所发布的产品是否质量低。
能够保证产品发布在最终期限前的唯一关键在于,你确信即将发布的产品不是低质量的,而这就需要足够高的测试覆盖率。
好,现在可以进入正题了。假如你没有完整测试过,但你敢打赌你的代码能够工作,而且大多数时候代码确实不会发生什么问题。要问我这样是不是够专业的话,我的回答还是“非专业”。
Cedric继续提到说:
有很多种可以去了解代码能否工作的方法:测试是一个;经过几千个客户几年的使用;一贯的成功发布;核心功能只出现少量bug也是一个。仅通过测试和代码覆盖来了解代码能否工作的说法是荒诞的。
我不知道为何Cedric会认为让成千客户来测试你的代码是种专业行为。事实上,如果代码只产生非常少量的bug到是不错的,不过请告诉我多么优秀的人才能写出这样的代码。而如果发布给客户的产品未经过高覆盖率测试,那程序员们就要冒很大的险,这就是非专业。
最后,Cedric提到在测试过、确信能工作的代码和没测试过、不确信能工作的代码之间有一片中间地带。如下:
有这么一种称作“未测试但能工作的代码”处于中间地带。
我承认未经测试的代码也许可以工作,然而,除非测试过了,否则你无法知道这段代码是否可以工作。而且实际上,你对代码能否运行的掌握程度是跟测试覆盖率的高低有关的。
现在我知道了,Cedric所作的测试量一定是到达了某种程度,可能很多,也可能几乎全部吧。希望如此。现在我就可以开始关心于测试完成之前发布产品的问题了。产品发布的最终期限比质量更重要,你最好在更多功能和质量之间选择前者。
最后,最令我堪忧的是认为达到高测试覆盖率和能够按时发布完备功能的产品之间是相互矛盾的见解。我认为按时发布功能完备的产品的最佳方法是尽可能的消除在调试和让系统能够连贯运行(译注3)中所耗费的时间。而消除它们的方法就是编写测试,并且在一开始就编写它们。对于避免调试所浪费的时间的最好方法就是避免使代码暴露于测试的覆盖之外。
译注:
1,Cedric Beust,是WebLogic Server团队的高级软件开发人员,他在其博客Otaku中提出了J2EE、Java、AOP和软件开发等方面的见解,此外,Cedric更是敏捷技术的活跃分子。
2,详情参见“敏捷人还没接受它么”一篇帮助理解。
3,详情参见“TDD的三条军规”一篇帮助理解。
(原文链接网址:http://www.butunclebob.com/ArticleS.UncleBob.UntestedCodeDarkMatter; Robert C. Martin的英文blog网址:http://www.butunclebob.com/ArticleS.UncleBob)
作者简介:Robert C. Martin(昵称Uncle Bob)是Object Mentor公司总裁,面向对象设计、模式、UML、敏捷方法学和极限编程领域内的资深顾问。他不仅是Jolt获奖图书《敏捷软件开发:原则、模式与实践》(中文版)(《敏捷软件开发》(英文影印版))的作者,还是畅销书Designing Object-Oriented C++ Applications Using the Booch Method的作者。Martin是Pattern Languages of Program Design 3和More C++ Gems的主编,并与James Newkirk合著了XP in Practice。他是国际程序员大会上著名的发言人,并在C++ Report杂志担任过4年的编辑。
分享到:
相关推荐
港股30年“黑天鹅”启示录(一):远离“事故高发地带”-0124-广发证券-23页.pdf
软件升级一直是用户的一大问题,想用新的软件软件的用户有了它就可以闭着眼睛升级了,哈哈
每周都专注于一种新的创意代码技术,10 小时的教学分三个时段,周二和周四(下午 6 点至晚上 9 点)和周六(下午 12 点至 4 点) 。 星期 日期 班级 讲师 1 3/31,4/2,4 加工 马特·加努索 2 4/7,9,1 网络技能 ...
最初,项目是作为的分支开始的,但最终作为完整的重写而结束。 主要差异/特征: 自动binlog文件名/位置解析 可恢复的断开连接 可插拔故障转移策略 JMX暴露(可选地带有统计信息) Maven Central的可用性 没有第三...
介绍这款编程爱好者博客地带源码,专为编程爱好者和开发者设计,旨在打造一个专属的编程知识和经验分享平台。系统功能包括博客发布、代码分享、技术讨论、用户互动、文章分类等。用户界面现代简洁,支持代码高亮显示...
01 - 都市供求信息网 02 - 物流配货网 03 - 编程爱好者博客地带 04 - 明日知道 05 - 天下陶网络商城 06 - 网络在线考试 07 - 物资管理系统 08 - 企业办公自动化系统 09 - 校园管理系统 10 - 高校学生选课系统 11 - ...
067《经济学家》读译参考之六十七:危险地带-英国最低工资标准上涨威胁就业归纳.pdf
当工程完成,软件工程师会更加小心地看待自己的代码,使用大量的测试代码(通常 超过原代码本身的长度)来仔细检测自己的工程代码,通过大量正确的验证结果,来建立 自己对代码的信心,这才能勉强走到RD release 的...
滨水景观与规划-33-方案文本.新肯辛顿滨水地带规划设计——美国WRT.rar
03 - 编程爱好者博客地带 04 - 明日知道 05 - 天下陶网络商城 06 - 网络在线考试 07 - 物资管理系统 08 - 企业办公自动化系统 09 - 校园管理系统 10 - 高校学生选课系统 11 - MR网络购物中心 12 - 图书馆...
企业门户网站满足了企业通过网站前台展示企业软件产品、为用户提供问题解决方案的要求。通过网站的建立,加强企业与客户之间的沟通,使企业能够及时了解客户的需求,及时帮助客户解决日常工作中遇到的各种问题,更好...
王代码matlab 马特·金 我是一名全职的Web开发人员,具有几个月的经验,可以指导拿撒勒和加沙地带的学生。 我在使用各种技术构建项目方面经验丰富,目前在加沙的多个学生项目中进行质量检查。 我喜欢以同伴为主导的...
尽管面积很小,但巴勒斯坦(27,000平方公里)还是500多种ornithofauna的家园,栖息于各种陆生和水生生境中。 加沙地带(365平方公里),占巴勒斯坦的1.5%,也有相当数量的ornithofaunistic物种。 Al-Mawasi生态系统...
l-曲线矩阵代码Aeolus:基于提取概念,模拟风沙从海滩到山麓地带的运输 描述 Aeolus资料库包含Matlab脚本,以预测中尺度(季节到年度)的风沙海滩沙输入到foredune系统中。 Aeolus模型的灵感来自两篇开创性的论文: ...
天堂的代码彩蛋mict dict和class之间的中间地带 提供MATLAB的dict (字典)中项目的设置/存储和一些交互工具。 mict旨在成为dict和完整的class / object模式之间的中间地带,用于结构化数据存储。 它比基本的dict做...
行业分类-设备装置-一种解除油气井近井地带污染的旋流酸洗方法及装置
默认网站管理员:admin 密码:www.mf-zone.com
编程爱好者博客地带源代码
我喜欢臭鼬猿猴学习臭鼬的中心地带。 这不是财务建议。尽您所能,工具和资源部分作者:u / thr0wthis4ccount4way /尽你所能! -如果您被这些经纪人之一困住,建议您致电另一经纪人,以检查是否可以在转让过程中出售...