或许有人觉得单元测试可有可无,因为觉得需要付出太多的精力,而客户并不需要它。这就涉及到投资回报率的问题,其实所付出的用于测试的投资,往往会收获到更多回报。它让我们减少了Bug的数量,减少了调试代码寻找Bug的时间。看下图,有效的自动化测试投资下,测试和开发付出的努力的时间图:

初期,随着测试的介入,开发付出的投入逐渐减少。后期,随着测试案例的完善和自动化,测试和开发所需要付出的投入都减少到一个很低的水平。阴影部分是节省的开发投入。

同时,如果自动化测试做的不好,在后期,将可能加大测试和开发的负担:

自动化测试的目标

  1. Tests should help us improve quality.
  2. Tests should help us understand the SUT.
  3. Tests should reduce (and not introduce) risk.
  4. Tests should be easy to run.
  5. Tests should be easy to write and maintain.
  6. Tests should require minimal maintenance as the system evolves around them.

Tests should help us improve quality

  1. Tests as Specification 测试案例可以验证产品的行为,验证是否“building the right software”
  2. Bug Repellent 自动化测试的主要目的不是发现Bug,而是预防或防止Bug的出现。
  3. Defect Localization 顶层的customer tests只会告诉你案例失败了,unit tests会告诉你为什么失败了,能定位到具体的问题。如果customer tests失败了而所有的unit tests却通过的话,说明单元测试案例缺失了。(Missing Unit Test)

Tests should help us understand the SUT

测试案例是非常好的文档,它告诉了你SUT做了些什么。同时,它还让你可以直接调试测试案例,单步跟踪,去了解整个系统是如何运作的。

Tests should reduce (and not introduce) risk

  1. Tests as Safety Net 测试案例应该成为修改代码安全的保障,让我们在重构旧代码时能够大刀阔斧,而不必担心会破坏什么。
  2. Do No Harm 测试案例不能对产品造成影响,一个重要的原则是,不要修改SUT。

Tests should be easy to run

  1. Fully Automated Test 完全自动化
  2. Self-Checking Test 能够自我检查,说白了就是不需要人工去检查案例执行的结果对不对
  3. Repeatable Test 需要具备可重复性。鼓励开发人员在每一次按下保存按钮时都执行一次测试案例(我没事就喜欢Ctrl+S)。案例需要具备可重复性,必须具备自我清理能力(self-cleaning),通常,是在Test Fixture的TearDown中进行环境的清理。

Tests should be easy to write and maintain

  1. Simple Tests 一个首要的原则是,让测试案例尽量的简单,使得其更容易维护。一次只测一种条件(Verify One Condition per Test)
  2. Expressive Tests 测试案例要达到表达清晰的目的,比如,可以使用一些Creation Mehods和Custom Assertion。有点像BDD。
  3. Separation of Concerns 测试案例要尽量测试单一,独立的功能,不要依赖过多。往往需要前期就介入参与产品的可测性设计(design for testability)。

Tests should require minimal maintenance as the system evolves around them

测试案例需要最小化维护的工作,因此,我们需要编写健壮的测试案例(Robust Test)。

---------------

这章讲的是测试的目标,保持案例简单,稳定,容易维护的声音似乎总是在不停的重复着,是不是有点烦了?也许作者就是希望通过这种不停的唠叨,让我们真正记住、接受,并最终体会和感悟到这些东西给我们带来的好处吧。

转载于:https://www.cnblogs.com/coderzh/archive/2010/01/18/xUnit-Test-Patterns-2.html

《xUnit Test Patterns》学习笔记2 - Goal Of Test Automation相关推荐

  1. 《xUnit Test Patterns》学习笔记3 - Philosophy of Test Automation

    这一章主要讲自动化测试的原则.前面的章节介绍了很多测试的思想,而思想的东西难免有点虚,这一章就是告诉你,遇到了具体的什么问题时,应该怎么办.作者咨询了很多的开发人员和测试人员,同时也和Martin F ...

  2. 《xUnit Test Patterns》学习笔记4 - Principles of Test Automation

    自动化测试过程中,有一些基本的原则,就如同宣言(Manifesto).由于大部分的原则在前面其实都提到的,因此,有的不做太多说明了. 原则:Write the Tests First 原则:Desig ...

  3. 大卫的Design Patterns学习笔记19:Observer

    一.概述 Observer(观察者)模式又被称作发布-订阅(Publish -Subscribe)模式,用于定义对象间的一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自 ...

  4. Structural patterns (proxy、bridge、decorator)学习笔记(一)

    Structural patterns (proxy.bridge.decorator)学习笔记(一) 一.proxy pattern是实际应用中,一般都用于比较复杂的一些对象当中,尤其是创建对象需要 ...

  5. 运动学习与控制-学习笔记(三)——运动控制理论

    运动学习与控制-学习笔记(三)--运动控制理论 一.理解控制理论以及两个重要概念 1.Motor Control Theory 2.两个重要概念:Coordination,Degree of Free ...

  6. 运动控制与学习 学习笔记(四)——复杂技能的表现特征、本体感觉及视觉

    运动控制与学习 学习笔记(四)--复杂技能的表现特征.本体感觉及视觉 1.理解Speed Accuracy Trade-off 现象及其与Fitts'Law的关系 1.1Speed Accuracy ...

  7. CSS3秘笈第三版涵盖HTML5学习笔记6~8章

    第二部分----CSS实用技术 第6章,文本格式化 指定备用字体: font-family:Arial,Helvetica,sans-serif; 当访问者没有安装第一种字体时,浏览器会在列表中继续往 ...

  8. maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目

    maven学习笔记 一.什么是maven Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Life ...

  9. AI学习笔记--人机对话的四种形态

    AI学习笔记--人机对话的四种形态 ><div class="show-content-free"><p>最近在筹备转行 AI PM 由于之前的产品线 ...

最新文章

  1. 筱玛爱游戏——线性基
  2. C++成员变量和成员函数分开存储
  3. php试卷分析,试卷分析失分原因和改进措施
  4. 2.6 MYSQL的输出格式
  5. java的handleback类,CallbackHandler
  6. java中Map,List与Set的区别
  7. 前端页面,引入PingFang SC(苹方简)字体
  8. 模糊综合评价的 matlab,模糊综合评价法代码matlab
  9. 基于数字孪生高校可视化的综合运营管理平台
  10. java监控网卡流量_流量监控脚本监控网卡
  11. (七)练习:美萍酒店管理系统中系统设置的房间管理选项卡部分测试
  12. 标注的尺寸避让lisp_AutoCAD中尺寸公差的自动标注 一短小AutoLISP程序轻松实现.doc...
  13. asa 防火墙拦截了https_思科ASA防火墙下抓包方法
  14. 用python简单的判断闰年,输出当前月份是多少天
  15. word或excel图片没有另存为怎么办
  16. win10网络连接的错误问题的解决方案
  17. 【Qt】基于Qt的CAN分析仪二次开发
  18. swapidc的php语言,SWAPIDC目录说明及文件说明及某些常量内容
  19. 茶餐厅销售管理系统的设计与实现
  20. java课程设计简单计算器_JAVA课程设计--简易计算器(201521123022 黄俊麟)

热门文章

  1. [Ext JS] Sencha Cmd命令参考之一
  2. Perl -- 使用Perl 读取和发送邮件
  3. JS 立即执行的函数表达式(function)写法
  4. 中国的房产市场和房产取向
  5. Maven 仓库优先级
  6. Java中Minio基础使用
  7. Spring Cloud 设置Feign的日志记录级别
  8. 启动go服务_使用Go构建TCP并发服务器,这种方式原来这么简单
  9. 在html页面中建立文字连接,html中如何建立超链接
  10. 离开页面前onbeforeunload事件在火狐的兼容并且提交不触发