什么是测试驱动开发

   什么是测试驱动开发?

   测试驱动开发的概念已经提出好几年了,可很多开发人员、测试人员,甚至项目经理都不是很清楚测试驱动开发到底是什么。

   大多数人一听到测试驱动开发,第一反应是测试人员先行,甚至有些项目经理刚拿到项目就找测试人员,说“项目打算使用测试驱动开发的方式来进行,你们测试人员先看资料,写测试用例。”好像只要测试人员打头阵就是测试驱动开发了。实际上这种观点是错误的。

   百度百科定义“测试驱动开发是一种不同于传统软件开发流程的新型的开发方法。”

   看到了吧,这是一种开发方式,和测试没有一毛钱关系,但可能有半毛钱关系。实质上测试驱动开发这是用来扭转开发人员思想的一种开发方式。传统的开发方式,不管是最早的瀑布模式还是后来的敏捷模式,开发人员都是先开发,然后做单元测试,单元测试通过了,集成版本给测试人员做功能测试。但实际上,不说100%的开发团队不做单元测试,也有90%的开发团队不做单元测试,反正我工作这些年是没有看到开发人员输出过单元测试代码的。大多数开发人员理解的单元测试等同于调试,认为程序一跑(运行),开发工具中没有报错,那单元测试就算通过了,所以他们大多都没有单元测试代码。

   然后测试驱动开发出来了,开发人员更理直气壮的说我们用的是测试驱动开发的方式来做开发的,你们测试人员先把测试代码写出来,我们再写开发代码,好像只要提到测试就是测试人员的工作。我觉得,测试驱动开发这个短语要加个限定“单元”,单元测试驱动开发。

  看到这里,估计有人又有问题了,单元测试,什么是单元测试,因为我们在大学里没有单独的学习过“测试”这门学科,所以对与测试相关名词都有一些懵懂,好像知道,又好像不知道。

  单元测试,百度百科给的定义是“单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。”,“单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。”

  测试驱动开发的开发模式,就是要求开发人员在编写程序代码之前,先根据需求文档写出单元测试的代码,然后根据单元测试代码来编写程序代码,且只写能通过单元测试的程序代码。到这里,大家应该明白了,测试驱动开发这个概念,对国内大多数开发团队来说,应该是起到约束开发人员做单元测试的一种手段,从而提高开发效率。

  上面说的主要是本人对测试驱动开发这个概念的理解。下面开始说测试驱动开发这个开发方式的一些专业知识。

  测试驱动开发的基本过程如下:

  1) 明确当前要完成的功能。可以记录成一个 TODO 列表。

  2) 快速完成针对此功能的测试代码编写。

  3) 测试代码编译不通过。

  4) 编写对应的功能代码。

  5) 测试代码编译通过。

  6) 对功能代码进行重构,并保证测试通过。

  7) 循环完成所有功能的开发。 

  怎么编写测试代码?测试代码的编写就用上了传统的测试技术。

  1)操作过程尽量模拟正常使用的过程。

  2)全面的测试代码应该尽量做到分支覆盖,核心代码尽量做到路径覆盖。

  3)测试数据尽量包括:真实数据、边界数据。

  4)测试语句和测试数据应该尽量简单,容易理解。

  5)为了避免对其他代码过多的依赖,可以实现简单的桩函数或桩类(Mock Object)。

  6)如果内部状态非常复杂或者应该判断流程而不是状态,可以通过记录日志字符串的方式进行验证。

原文地址:https://www.cnblogs.com/Willa/p/5465883.html