小议测试驱动开发

简介:

 在讨论测试驱动开发之前,先澄清一个问题:测试驱动开发是否包括验收测试驱动开发。测试驱动开发(Test Driven Development,简称TDD)存在两种理解:

  1、包括验收测试驱动开发(Acceptance Test Driven Develop,简称ATDD)在内,这个是广义的理解;

  2、TDD是采用单元测试手段,主要针对非界面代码的,与用户故事或需求一般没有直接关联,这个是狭义的理解,TDD和ATDD是并列的。多数人认为应当采用第2种理解,主要因为:

  (1)TDD主要采用单元测试方法,典型工具有xUnit系列,ATDD主要采用界面自动化测试方法,典型工具有SeleniumQTP等;

  (2)TDD主要用于设计和编码,ATDD主要用于需求分析和确认。下文TDD即是采用第2种理解的TDD。

   在极限编程(Extreme Programming,简称XP)中TDD是与简单设计、重构、持续集成等紧密配合的,这些组成了一套威力强大的组合装备。TDD是其中最突出的外在表 现,XP中TDD遵循“测试驱动开发金规”:先写一个会失败的测试,再写一个新特征,永远如此。对比在武侠世界,XP的TDD(下文称为极限测试驱动开 发,英文为eXtreme Test Driven Development,简称为XTDD)属于神器级别,功力不到者是没法自如使用的,反而可能伤了自己。经典的单元测试方法、架构方法(比如常见的 MVC)和设计方法(包括常用的设计模式)是开展TDD的基础,TDD的学习和 实施是循序渐进的,由简入繁的,由浅入深的。所以把XTDD可以看成是一个极端,把没有任何单元测试视为第二个极端,把经典软件工程中V模型(其在单元测 试方面的特征是针对已经有的功能代码编写单元测试,以保障代码的质量)的完整单元测试看成第三个极端,三者组合为一个三角型,如图一所示。从没有任何单元 测试到XTDD,存在多种多样的中间状态,比如只对模块接口进行TDD,比如进行模块级的架构设计后开始TDD,比如在识别了主要类后再开始TDD,比如 对个别有把握的模块先编码后加抽样的单元测试,等等。在这个三角型中选择一个合适的点,相信能够发挥单元测试和TDD的最佳效果。在没有足够功力之前,先 不必开展XTDD。简单否定TDD是不恰当的。

  从CMMI角度看,TDD能够满足CMMI3级中技术方案过程域(TS)、验证过程域(VER)和产品集成过程域(PI)的多个实践,是不错的工程实践。

  从传统的瀑布型生命周期方法及其衍生的V模型的角度看,TDD下的基本设计比较简略,甚至没有,难以满足设计里程碑评审的要求,TDD没有详细设计,而单元测试各项指标(比如覆盖率、测试频度、测试用例数量等)却超过V模型,总体上违反了V模型。但是如果不了解源自于V模型下的单元测试技术、面向对象设计技术,TDD也是难以开展。

  从XP角度看,TDD应当开展到极限。

  从Scrum来看,TDD本身不属于Scrum,应当由团队来决定是否采用TDD,如果是,也由团队来决定采用何种程度的TDD。

  从ASD(Adaptive Software development)、FDD(Feature Driven Development)等其他敏捷方法流派来看,并没有明确要求,根据需要来选择开展TDD。








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
12天前
|
测试技术 C# 数据库
C# 一分钟浅谈:测试驱动开发 (TDD) 实践
【10月更文挑战第18天】测试驱动开发(TDD)是一种软件开发方法论,强调先编写测试代码再编写功能代码,以确保代码质量和可维护性。本文从 TDD 的基本概念入手,详细介绍了其核心步骤——编写测试、运行测试并失败、编写代码使测试通过,以及“红绿重构”循环。文章还探讨了 TDD 的优势,包括提高代码质量、促进设计思考、减少调试时间和文档化。此外,文中分析了常见问题及解决方案,如测试覆盖率不足、测试代码过于复杂、忽视重构和测试依赖过多,并通过一个简单的计算器类的代码案例,展示了 TDD 的实际应用过程。
28 1
|
3月前
|
Java 测试技术 开发者
提高代码质量:深入实践测试驱动开发(TDD)
【8月更文挑战第14天】测试驱动开发是一种强大的软件开发方法,它通过先写测试再编写代码的方式,显著提高了代码质量。通过实践TDD,开发者可以编写出更可靠、更易于维护的代码,并加速开发进程。虽然TDD需要一定的学习和适应过程,但其带来的长期收益是不可估量的。如果你还没有尝试过TDD,现在就开始吧!
|
6月前
|
敏捷开发 测试技术
深入理解并应用测试驱动开发(TDD)
【5月更文挑战第30天】测试驱动开发(TDD)是一种先编写测试用例再写代码的方法论,核心是"先测试,后开发"。通过"红-绿-重构"的循环,确保代码正确性,提升简洁性和可维护性。TDD步骤包括编写测试用例、运行测试、编写实现代码、重构及循环迭代。它能提高代码质量,促进团队合作,降低维护成本,并适应敏捷开发。在开发实践中,应用TDD能有效提升效率和代码质量。
|
6月前
|
自然语言处理 测试技术
测试驱动开发(TDD)与行为驱动开发(BDD)的比较与选择
在软件开发中,测试驱动开发(TDD)与行为驱动开发(BDD)是两种常见的开发方法。虽然它们都强调测试在开发过程中的重要性,但是两者之间存在一些差异。本文将对TDD和BDD进行比较,分析它们各自的优点和缺点,以及在实际开发中如何选择最适合的方法。
|
前端开发 JavaScript Java
TDD测试驱动开发案例【水货】
TDD测试驱动开发案例【水货】
|
Java 测试技术 程序员
先测试再开发?TDD测试驱动开发了解一下?
TDD测试驱动开发概念以及简单使用
先测试再开发?TDD测试驱动开发了解一下?
|
小程序 测试技术 程序员
TDD(测试驱动开发)死了吗?
很早之前,曾在网络上见到过 TDD 这 3 个大写的英文字母,它是 Test Driven Development 这三个单词的缩写,也就是“测试驱动开发”的意思——听起来很不错的一种理念。
TDD(测试驱动开发)死了吗?
|
敏捷开发 测试技术
从总体上认识TDD
简单理解下测试驱动开发TDD,把握这种编程方式的简单、核心原则,体会这样给程序、编程带来的有益之处。 (由我从书中提取的重点后再写入一些个人体会、理解、个人解释而成的博文)
908 0