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年的编辑。
分享到:
相关推荐
- 黑盒测试:侧重于软件功能的验证,不涉及代码细节,测试人员仅关注输入和输出。 - 灰盒测试:介于白盒和黑盒之间,了解部分代码,针对特定条件或功能进行测试。 3. 黑盒测试方法: - 等价类划分:将输入数据...
测试用例编写规范是软件测试过程中至关重要的一环,它确保了产品的质量控制和问题的预防。这份文档,名为“测试用例编写规范.doc”,详细阐述了如何有效地制定测试用例,以便于系统地、连贯地、全面地覆盖各种可能的...
- 主城区: 商圈核心地带。 - 二线市场: 较为主流但非核心商圈。 - **商户经营的商品价位与营销策略**: - 了解定价策略及其与市场定位的关系。 - 掌握促销活动的类型和效果。 - **商户经营商品开店个数与装修...
《代码大全第二版》中文版是一部深受程序员喜爱的经典著作,由Steve McConnell撰写,全面涵盖了软件开发过程中的编码实践和设计原则。此书分为20个章节,由于文件大小的限制,这里只包含了前20章的电子版,分为四个...
英语词汇的构建很大程度上依赖于词根,它们是构成单词核心意义的基本元素。词根能够帮助我们理解单词的含义,记忆和掌握大量的词汇。以下是一些常见的英语词根及其含义: 1. **a-**: - `-azonic` 表示“非地带性...
### 测试用例设计指南详解 #### 一、测试用例设计概述 测试用例设计是软件测试过程中至关重要的一步,它确保了测试的全面性和有效性。本指南旨在提供一个结构化的方法论,帮助测试工程师设计出高质量的测试用例。...
### 3G手机快速测试思路集成 在当前快节奏的技术发展环境下,对于手机制造商而言,进行高效的手机测试显得尤为重要。本文旨在提供一种针对3G手机的快速测试思路,旨在覆盖手机的基本功能及常见应用场景,确保产品...
1. a-:无,不,非(例:azonic 非地带性的) 2. ab-:离去,相反,不(例:abuse 滥用) 3. ac-:加强意义(例:accustom 使习惯) 4. ad-:加强意义(例:adventure 冒险) 5. af-:加强意义(例:afforest 造林,...
- 到达安全地带后再次清点人数。 - **现场警戒小组**: - 负责维持演练现场秩序,防止无关人员进入。 - **疏散引导小组**: - 根据现场情况,合理安排疏散路线,确保疏散秩序。 - **抢救小组**: - 应对演练过程中...
3. **环境兼容性**:标准会考虑车辆在不同地理环境(如沿海地区、沙漠地带)下的使用情况,如盐雾侵蚀对金属材料的腐蚀,以及尘埃和污物对电子设备的污染。 4. **耐久性评估**:通过对设备进行长时间的连续运行测试...
数据业务的测试是确保系统能够顺利投入商业运营的关键步骤,其主要目标是全面评估系统的商用性能。测试内容涵盖了多个方面,旨在确保服务的质量、稳定性和效率。以下是关于数据业务测试的详细说明: 1. **测试内容*...
软件升级一直是用户的一大问题,想用新的软件软件的用户有了它就可以闭着眼睛升级了,哈哈
- **coastland**:沿海地带。 - **hemisphere**:半球。 - **contour**:轮廓线。 - **geography**:地理学。 - **horizon**:地平线。 - **lowland**:低地。 - **plain**:平原。 - **strait**:海峡。 - **...
大学软件学院科技节IT地带部分策划书 本策划书旨在推动大学软件学院科技节的IT地带部分,旨在激发学生参与思想道德教育活动的内在积极性,提高思想道德素质,并培养和发掘更多掌握一流计算机技术的专业人才。 一、...
- **功率调整**:根据实际需求,软件可设置对讲机发射功率的高低,低功率适用于短距离通信,高功率则适用于开阔地带或远距离通信。 - **扫描功能**:用户可设置对讲机的扫描模式,如单个频道扫描、多个频道扫描、...
【二年级上册听写词语大全】是针对小学二年级学生设计的一份语文学习资料,旨在帮助学生巩固和提升汉字...同时,通过与不同主题相关的词语,可以让学生在学习中接触到更广泛的知识,激发他们的学习兴趣,促进全面发展。
- 适用于处理由暴雨、水毁、淹溺引发的各种事故。 #### 四、工作原则 - **基本原则**: - 以人为本 - 预防为主 - 平战结合 - 统一指挥 - 快速反应 - **具体要求**: - 强化救援意识 - 听从指挥 - 明确职责...
- 苏州位于长江三角洲的中心地带,是中国经济发达地区之一。 - 太湖国家旅游度假区作为5A级景区,拥有丰富的自然景观和旅游资源。 - 东山新天地项目位于东山环湖路口,靠近太湖,具有独特的地理优势。 2. **交通...