浅谈测试驱动开发(TDD)

测试驱动开发(Test Driven Development,简称TDD),可能挺多人都接触过,它大约诞生于上个世纪九十年代(好像很久远,其实也还好,大约1996年),属于极限编程的一部分。

 

也许有人会问,这么“古老”的东西今天还来介绍干嘛呀,呵呵,名正言顺的回答是,古老的瀑布模型都现在还在用了,这个相对“现代”的当然还能讲了。当然原因并非如此了,这几天领导们觉得产品质量得提高一下,分析了一下原因,觉得用TDD方法应该会比较有用。所以呢,我们就需要开始这个旅程了。。。。。。

 

下面我就来介绍一下,具体我们碰到的问题,以及怎么来实施测试驱动开发吧(当然成不成功还说不上,但是万事总需要一个开始!)

 

以前的文章也说过了,我们是用敏捷的方式,主要是Scrum来管理我们公司的软件开发整个过程的,从需求获取到设计到开发到测试,都是用 TechExcel DevSuite 系统来进行管理,从理论上来说这样管理应该是没啥问题的,每个迭代周期中,开发做完一个功能,测试就可以投入测试工作,发现问题及时解决。但是理论总是需要实际来检验的,这种模式运作一段时间以后,陆陆续续发现还是存在着不少问题,不过主要的问题还是一个,就是Bug总是很多,倒不是说开发能力问题,而是很多Bug涉及到的地方开发人员想不到,开发总是认为自己已经很好地实现了设计的意图,所以产品是Perfect的,但是测试人员总是发现了大量的问题。

 

就这样子,Bug很多,必然会产生几个结果,一个就是开发人员能力被怀疑,第二个就是为了修Bug,又花费很多时间,最后一个当然就是产品质量总是上不去了。

 

其实开发人员也挺无辜的,一个功能的测试点不可能在设计文档里方方面面都写到,而且测试人员很多测试点可能并非是常见的操作,不过现在问题出来了,总是需要办法解决的,思来想去,领导们想到测试驱动开发这个概念,当然我们公司这个测试驱动开发的概念跟其真正的概念还是有点区别的,标准的概念应该是如下:

 

测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码,然后只编写使测试通过的功能代码,从而以测试来驱动整个开发过程的进行。这有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,并加速开发过程。

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

1.       快速新增一个测试

2.       运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过

3.       做一些小小的改动,尽快地让测试程序可运行,为此可以在程序中使用一些不合情理的方法

4.       运行所有的测试,并且全部通过

5.       重构代码,以消除重复设计,优化设计结构

简单来说,就是不可运行/可运行/重构——这正是测试驱动开发的口号。

 

我们而言,因为有自己的实际情况,所以就采用它的思想,但是用自己的方式去实现,其实测试驱动开发的思想就是“测试的目的是让你知道,什么时候算是完成了。如果你聪明,你就应该先写测试,这样可以及时知道你是否真地完成了。否则,你经常会不知道,到底有哪些功能是真正完成了,离预期目标还差多远。

 

根据这个思想,我们对开发流程作了一些改动(原有的开发流程就不多讲了,详见我之前写的文章),

 

步骤1: 对于一个设计好的功能,测试人员需要先开始写测试用例,虽然产品还没有出来,但是根据设计文档,基本上也知道是怎么样的一个功能,所以按照标准的测试点与自己的一些想法,先把测试用例写出来,因为是测试人员自己写出来的用例,所以基本上在真正测试时,这些测试点测完,其实这个功能也就测得差不多了:

 

测试用例1:

       测试点1:……        开发中

       测试点2:……        开发中

       测试点3:……        开发中

       ……

 

步骤2: 然后呢,开发人员开始会先正常地按设计文档来进行开发功能,但是他开发到差不多的时候,他需要去检查这些测试点,如果他自己验证了这些测试点在产品里已经实现,他就需要把这个测试状态变成“开发完成”,如果一个功能的所有测试点他自己这里都验证通过了,这个功能对于这个开发来说已经完成了,接下来就可以做另外功能或者修测试人员发现的问题了。

 

测试用例1:

       测试点1:……        开发完成

       测试点2:……        完成90%

       测试点3:……        开发完成

       ……

 

步骤3: 接下来的话,既然功能在开发那里已经完成了,测试人员就会去检查开发人员是否真正完成了这些测试点,如果确认通过么,就会把测试点状态设置成“测试通过”。

 

测试用例1:

       测试点1:……        测试通过

       测试点2:……        测试通过

       测试点3:……        测试失败

       ……

 

不过很多时候,测试不是在一个功能开发完以后做的,而是在开发中就已经在进行了,如果一个功能需要几天完成,测试人员就会每天把做完的部分测一下,所以为了保证每个功能能及时开发与测试,开发人员还需要实时更新已完成的测试点的状态,因为我们每天都会产生一个Build,只要一个测试点完成了,很快就会有Build进行测试,一做完就更新状态就有助于测试人员及时去检查与反馈。

 

另外在测试过程中,甚至在开发过程中,我们还会经常碰到两个问题,一个是功能的设计突然变化,一个是测试人员觉得测试点要修改或增减,这些都很有可能对开发过程造成很大的影响,所以对于这些事情,我们就需要及时预警及时通知与调整。

 

我们公司特色的测试驱动开发大约流程就是这个样子,其实一句话概括就是“让开发人员能用测试人员的眼光去开发一个产品”,目前我们还在 DevSuite 系统中进行配置必要的流程(很多开发与测试人员有时候因为太忙所以很多事情的处理与反馈总是不太“积极”,所以还是有必要有系统进行约束),估计这几天就能配置完成,我个人觉得一开始实施起来会很有挑战,因为这个流程需要开发、测试甚至是设计人员非常紧密的合作,任何一个小延误都可能造成后续流程的连锁出问题,比如开发人员没有及时去看测试点或者没有及时更新测试点状态,造成测试人员没有及时去测,当真正去测的时候,开发人员可能又在忙于其他功能而没延误修上个功能的Bug,而以后修Bug对产品的损伤又将是不可预测的……

 

当然,从理论上来说,光明就在不远处,不过不经历些风雨怎能见彩虹,我们以前从瀑布到敏捷也经历了不少风雨,这次也会,但是相信还是能成功看见彩虹的,呵呵,以后实施成功了再Update大家具体细节。

 

 

 (全文完)

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
测试驱动的编程是 XP 困扰程序员的一个方面。对于测试驱动的编程意味着什么以及如何去做,大多数人都做出了不正确的假设。这个月,XP 方面的讲师兼 Java 开发人员 Roy Miller 论了测试驱动的编程是什么,它为什么可以使程序员的生产力和质量发生巨大变化,以及编写测试的原理。请在与本文相随的 论坛中提出您就本文的想法,以飨笔者和其他读者。(您也可以单击本文顶部或底部的“讨论”来访问该论坛。) 最近 50 年来,测试一直被视为项目结束时要做的事。当然,可以在项目进行之中结合测试测试通常并不是在 所有编码工作结束后才开始,而是一般在稍后阶段进行测试。然而,XP 的提倡者建议完全逆转这个模型。作为一名程序员,应该在编写代码 之前编写测试,然后只编写足以让测试通过的代码即可。这样做将有助于使您的系统尽可能的简单。 先编写测试 XP 涉及两种测试: 程序员测试和 客户测试测试驱动的编程(也称为 测试为先编程)最常指第一种测试,至少我使用这个术语时是这样。测试驱动的编程是让 程序员测试(即单元测试 ― 重申一下,只是换用一个术语)决定您所编写的代码。这意味着您必须在编写代码之前进行测试测试指出您 需要编写的代码,从而也 决定了您要编写的代码。您只需编写足够通过测试的代码即可 ― 不用多,也不用少。XP 规则很简单:如果不进行程序员测试,则您不知道要编写什么代码,所以您不会去编写任何代码。 测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质量。本文从开发人员使用的角度,介绍了 TDD 优势、原理、过程、原则、测试技术、Tips 等方面。 背景 一个高效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦。国人对软件蓝领的不屑,对繁琐冗长的传统开发过程的不耐,使大多数开发人员无所适从。最近兴起的一些软件开发过程相关的技术,提供一些比较高效、实用的软件过程开发方法。其中比较基础、关键的一个技术就是测试驱动开发(Test-Driven Development)。虽然TDD光大于极限编程,但测试驱动开发完全可以单独应用。下面就从开发人员使用的角度进行介绍,使开发人员用最少的代价尽快理解、掌握、应用这种技术。下面分优势,原理,过程,原则,测试技术,Tips等方面进行讨论。 1. 优势 TDD的基本思路就是通过测试来推动整个开发的进行。而测试驱动开发技术并不只是单纯的测试工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值