题记

本系列笔记将从测试人员的角度,总结在百度两年来的测试经验,记录一个完整的基于敏捷流程的验收测试全过程,分享在测试过程中的一些知识和经验,以及自己的一些理念。总结自己,也希望对大家有益。

概念

验收测试驱动开发(ATDD)和测试驱动开发(TDD)是完全不同的两个概念。

TDD更偏重自动化case先行,而ATDD更偏重于验收细节、质量标准先行。

在了解ATDD之前,先回顾下TDD:

测试驱动开发(TDD)

极限编程的方法之一,从业务入手,以测试先行的方法来反向推动代码的实现。那什么是TDD呢?



   简单的说,就是每当需要添加一个新功能,或修改现有功能时,我们首先思考这部分代码期望达到的输入与输出,先把验证该业务的单元测试用例写出来,再去写最简单的实现代码来通过该测试;不断重复此过程直到完成整个功能。



   注意:TDD是开发人员的责任。



   典型的TDD开发步骤:



    Step 1:分析并确定一个目标测试场景



    Step 2:添加一个单元测试来验证该测试场景的输入输出



    Step 3:运行该测试,得到失败的测试结果



    Step 4:写最简单的功能代码来通过该测试



    Step 5:再次运行该测试,看到测试通过



    Step 6:进行代码重构,包括功能代码和单元测试代码



    Step 7:重复以上步骤,直至开发完成



   建议在TDD的开发遵循的最佳实践:



   1.简化-保持测试用例尽可能的简单,以验证业务为首要目标



   2.业务导向-针对每一个需要验证的业务场景进行测试,而不是对代码的每一个方法进行测试



   3.隔离-每一个测试类(TestCase)都可以单独运行,不依赖于其它任何测试;同样很多测试类也可以一起执行,而不会互相干扰



   4.重构-开发出来的单元测试和功能代码都需要不断重构,改进代码的可读性,可维护性,减少冗余代码等



   5.测试列表-在开始开发之前,先列出所有需要的测试,并在开发中不断维护该列表,避免遗忘一些必要的测试



   6.反向工程-在某些开发环境中,如Eclipse,可以使用IDE所提供的反向工程能力从测试代码自动生成必要的类,方法等



   7.注释-不需要另外单独的文档,而是在测试类中对每个测试方法对应的业务场景,输入和期望的输出进行详细的描述



    TDD的好处:



    1.提高代码质量-测试先行,并达到足够的覆盖率,确保代码都经过了测试

    2.对系统进行描述-TDD产生的测试就是对系统的一套完整的说明文档,所有的业务,每一个方法的使用在这里都有描述。如果谁想深入了解你的系统,让他去看测试:)

    3.自信得重构- TDD能够产生一组完备的测试套件,每当我们重构了代码后,可以方便得通过执行已有的测试来确保新的改进没有影响到代码的逻辑和行为;同样,当每次解决了缺陷后,可以通过执行已有的测试来确保其它功能没有受影响,没有引入新的缺陷。这让团队可以更加自信得去进行代码重构

    4.自动回归测试- TDD产生的测试套件可以与自动化的持续进程环境相结合,部分实现回归测试的自动化,大大提高回归测试的频率,同时减少所花费的时间

    5.消除浪费- TDD有助于开发团队避免产生冗余的,没有用的代码;避免那些没有任何人能看懂的不知所谓的代码

    6.减少Debugging -通过TDD来进行编程,可以大大减少对代码Debugging的需要,节省时间

    7.简化设计-在概要设计的指导下,TDD能够替代大部分甚至全部的详细设计(实现类,方法级别的设计)

    8.更加模块化-由于TDD需要开发人员将一个功能分解为一个个可以测试的更小单元,然后再集成为一个整体。这样的思维和开发模式将产生更小的,更清晰的,更加责任明确的类,更加松耦合的组件和清晰的接口



    TDD的局限性:



    1. TDD产生的代码质量取决于测试的质量,即不恰当,不正确的测试会产生错误的代码;业务场景覆盖不充分的测试会产生功能不完整的代码;

    2. TDD只适用于输入输出明确的开发项目,不适用于某些探索性的,输出不确定的开发,比如密码系统,人工智能,安全等领域的研发;

    3. TDD在某些环境下实施会有一些困难,比如关系型数据库,异步通信等,需要一些额外的辅助工具。



   最后,作为一种新的设计和编程方法,在项目中实施TDD对开发人员提出了一些新的挑战:



   *职责转变-某些开发人员认为,他的工作就是实现功能,写代码;测试只是测试人员的事情,不在他的职责范围内。这是错误的认识,完备高质量的单元测试也是开发人员的职责!



   *思维转变-很多开发人员拿到需求后,喜欢立刻就埋头开始写代码实现。TDD要求测试为先,开发人员首先要思考的不再是功能如何实现,而是应该如何去进行验证,并列出需要的测试场景。这是一个大的逆向思维转变。

敏捷测试(1)--TDD概念的更多相关文章

  1. 我的TDD实践---TDD概念篇

    “我的TDD实践”系列之TDD概念篇 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...

  2. 敏捷开发(Scrum)与敏捷测试

    1.敏捷测试流程和传统测试流程 软件测试是贯穿整个软件开发生命周期.对软件产品(包括阶段性产品)进行验证和确认的活动过程,也是对软件产品质量持续的评估过程,其目的是尽快尽早地发现在软件产品(包括阶段性 ...

  3. python+selenium自动化软件测试(第10章):测试驱动TDD

    测试驱动开发模式,要求开发在写业务代码的时候,先写出测试代码,同时单元测试例子决定了如何来写产品的代码,并且不断的成功的执行编写的所有的单元测试例子,不断的完善单元测试例子进而完善产品代码, 这样随着 ...

  4. 关于scrum敏捷测试

    关于scrum的一些定义 敏捷软件开发方法是一种把新增功能通过较小的循环逐步迭代添加到项目中(的项目管理方法),工作是由自我组织的团队以高效合作的方式拥抱和适应变化来保证客户需求被真正满足的方式来完成 ...

  5. 敏捷测试模式之Scrum及其实践

    一.    敏捷开发模式简介 敏捷是近年来软件研发领域很火的一个词,采用敏捷开发模式的研发团队是越来越多了,尤其是敏捷模式中的Scrum更是佼佼者大行其道,这表明敏捷模式确有其好处,能给企业带来效率的 ...

  6. APP敏捷测试,测试和开发并行!

    测试和开发具有同等重要的作用,从一开始,测试和开发就是相向而行的.测试是开发团队的一支独立的.重要的支柱力量. 测试要具备独立性,独立分析业务需求,独立配置测试环境,独立编写测试脚本,独立开发测试工具 ...

  7. 敏捷开发 and 敏捷测试

    名词解释 agile: 敏捷的:灵活:敏捷开发. scrum: 扭打,混打:并列争球:参加并列争球. sprint:  冲刺,全速跑. backlog: 积压的工作:积压待办的事务. retrospe ...

  8. Testing - 敏捷测试

    敏捷测试(Agile Testing) SM= Scrum Master PO= Product Owner PB= Product Backlog SB= Sprint Backlog Scrum ...

  9. itest(爱测试) 4.2.1 发布,开源BUG 跟踪管理 & 敏捷测试管理软件

    itest 入选 2019 年度最受欢迎开源中国软件 开源工具的发展,离不开你我的支持,需要您投上宝贵的一票  去投票 itest 简介:查看简介 itest 开源敏捷测试管理,testOps 践行者 ...

  10. itest(爱测试) 4.2.0 发布,开源BUG 跟踪管理 & 敏捷测试管理软件

    itest 入选 2019 年度最受欢迎开源中国软件 开源工具的发展,离不开你我的支持,需要您投上宝贵的一票  去投票 v4.2.0下载地址 :itest下载 itest 简介:查看简介 itest ...

随机推荐

  1. Python3 注释

    确保对模块, 函数, 方法和行内注释使用正确的风格 Python中的注释有单行注释和多行注释: Python中单行注释以#开头,例如: #!/usr/bin/python3 #coding=utf-8 ...

  2. android JNI的.so库调用

    在一篇博客中看到一篇文章,感觉描述的还可以: 在前面的博客中介绍的都是使用java开发Android应用,这篇博客将介绍java通过使用jni调用c语言做开发 为了更加形象的介绍jni,先观察下面的图 ...

  3. User-Agent-Switcher和fiddler

    浏览器模拟器(可以模拟各种浏览器效果,浏览器中看手机显示的效果) http://chromecj.com/web-development/2014-09/70.html User-Agent-Swit ...

  4. MySQL连接及基本信息查看命令小结

    前言 学习PHP就不得不提MySQL,虽然有phpMyadmin这样的工具可以图形化操作数据库,但我还是想借学习PHP的机会使用下命令行方式操作数据库.以下就是我的学习小结,包括命令行连接数据库,查看 ...

  5. JSP基础概要

    [版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/51925232 作者:朱培 ID:sdksdk0 一 ...

  6. 浅谈机器人控制与仿真设计----RDS和ROS

    机器人控制.仿真或实验,主要由三个部分组成,机器人.环境和算法. 当然各部分又包含很多子部分和功能,这里主要以仿真为主,为了使得仿真结果能够直接应用到实际机器人上,这里分别以RDS和ROS对比介绍.h ...

  7. Web自动化框架LazyUI使用手册(8)--excel数据驱动详解(ExcelDataProvider)

    概述 框架提供了excel数据驱动方式运行测试用例的工具,本文将针对数据驱动,进行详细演示. 详见类:lazy.test.ui.browser.ExcelDataProvider 被测对象: http ...

  8. Linux 环境下一些常用的命令(二)

    11. chown命令 "chown"命令就是改变文件拥有者和所在用户组.每个文件都属于一个用户组和一个用户.在你的目录下,使用"ls -l",你就会看到像这样 ...

  9. EBS多组织结构

    1. 业务组: 它代表组织结构的最高层次, 它分离了人力资源的信息. 例如, 当你查询人员时, 它会列出所有分配给相应业务组的成员, 而你自己所属于的组织只不过是业务组的一份子. 这样说可能造成一种误 ...

  10. Linux日志管理高级进阶:实例详解syslog

    syslog已被许多日志函数采纳,它用在许多保护措施中,任何程序都可以通过syslog记录事件.syslog可以记录系统事件,可以写到一个文件或设备中,或给用户发送一个信息.它能记录本地事件或通过网络 ...