如何在敏捷开发中推进TDD

单元测试

单元测试(Unit Testing)又称为模块测试,是针对程序模块来进行正确性检验的测试工作。单元就是单个程序、函数、过程等,编写程序的过程中前后很可能要进行多次单元测试。

然而在工作中,一般都是追求快速迭代上线,基本很难做到有时间来写测试用例。虽然大家都知道单元测试的优点,也非常认同,然而现实中确很难推行下去。

然而单元测试也是敏捷开发的一个环节,既然是敏捷,是否是我们对单元测试的认知还不够,或者没有切合实际推行单元测试,导致无法在项目中推行。

TDD与BDD

  • 测试驱动开发(Test-Driven Development)
  • 行为驱动开发 (Behavior-Driven Development)

一般的开发模式更偏向于BDD,以往开发需求,测试同事编写需求的测试用例,然后拉上产品、开发会进行用例评审,通过后,开发同事根据需求文档来开发需求,最后按照评定的测试用例冒烟测试和进行简单功能点测试就提测了。

BDD的重点在于可以使用自然语言来写测试用例,常见的测试用例一般是假定一个场景、条件,然后在特定场景,应该输出一个符合预期的结果。

而TDD就是使用开发语言来写测试用例,这个工作由基本都是由开发同事完成。

提高认知

需要明确一点的就是,TDD 很容易让人误解为就是先写测试后写代码。测试驱动开发,驱动的意思是由先进行软件方案设计,再写测试用例,最后写功能性的业务代码。这时候的测试用例可能就是一个方案设计的一个功能点,使用开发环境运行测试用例是失败的,因为功能代码还没开始实现。

image.png

所以,我们就不用再纠结先写测试用例有如何困难,理解上有偏差,我们可以把测试驱动开发更改为设计驱动开发。重点在软件方案的设计。

TDD开发流程

TDD的开发流程简单总结为以下几点

  • 先分解任务,大需求拆分小需求,复杂逻辑细分,降低粒度。
  • 写测试用例,聚焦于用例的注释和功能说明。
  • 实现每个细分需求的功能代码。
  • 完善单元测试用例,运行测试用例。
  • 串联所有测试用例,通过集成测试。
  • 重构并review代码。

以下我画了一个简单的流程图,梳理一下开发流程


image.png

Demo

使用一个用户登录模块的TDD开发过程来演示。
先拆分功能点,然后设计出软件方案和流程图来。


image.png

TDD的用例编写如下

image.png

以上用例写完第一次运行肯定是fail的,因为能代码还没开始实现,接下来的步骤就是完善功能代码,串联,集成测试,重构上线。

highlight

  • TDD的重点在于软件方案设计,功能点细分,然后使用测试用例来记录下来。
  • 测试用例即是开发文档
  • 注重重构,有测试用例的前提下,重构是成本最低的。

你可能感兴趣的:(如何在敏捷开发中推进TDD)