浅谈验收测试驱动开发

时间:2022-09-10 03:20:23

浅谈验收测试驱动开发

【摘要】软件行业已经发展了很多年,尽管新技术不断涌现,但是软件质量问题依然存在,最突出的两点就是较高的缺陷率和较差的可维护性。为了应对此类问题,驱动测试开发技术(ADD)应运而生,但是随着ADD技术的普及,它所隐藏的问题也浮出水面,最为人诟病的就是“不能满足客户需求”,因为测试人员只注重代码缺陷率而忽视了系统具体功能。本文阐述如何在ADD开发模式的基础上,结合验收测试驱动开发(ATDD)探讨如何开发适应于用户的系统。

【关键词】敏捷开发;验收测试驱动开发;软件工程

一、引言

极限编程方法理论中“测试驱动开发”是其一个重要组成部分,最早是由Kent Beck提出,并积极推广的一种软件开发方法。Kent Beck在他所著的《测试驱动开发》一书中指出“测试驱动开发”遵循“为明天编码,为今天设计”的观点。相比传统遵循“需求-设计-开发-测试”的软件开发流程而言,更强调测试优先,再通过编码和重构反复迭代最终构筑一个完整的软件系统。“测试驱动开发”在相当程度上了的确提高了开发人员的代码质量,而且在应对系统的可靠性也教之传统软件开发有着更大的优势,主要体现在客户需求变更时能灵活应对。然而软件问题中另一项“是否满足客户需求”确没有很好地解决。验收测试驱动开发(ATDD)针对这个问题,提出让客户参与到测试标准的制定,让软件满足客户需求。用ATDD方法开发软件,开发人员更注重的是系统行为测试,而不是软件中每个模块,甚至每行代码的测试。构筑一个满足客户需求的软件系统,不仅仅是软件设计开发人员和测试人员靠个人能力能解决的,在此过程中需要客户参与进来,为打造可靠的软件提供有力的保障。

二、什么是ATDD

测试驱动开发(ADD)能够帮助开发人员开发出高质量的代码,保证开发人员所开发出的代码执行正确,但是这些执行正确的代码在很大程度上是针对的具体模块而不是整体的系统功能。在一定程度上不一定能够满足客户的需求。验收测试驱动开发(ATDD)是建立在TDD的基础上,TDD和ATDD既可以分开使用也可以配合使用,在帮助开发人员在提高软件质量的同时,也帮助开发人员开发出用户真正需要的软件系统。软件测试是软件工程的重要组成部分,在传统的软件开发当中,软件测试大概包括软件执行过程中是否存在BUG、系统中是否还存在其它缺陷以及系统是否与系统设计书保持一致几项内容,ATDD则在此基础上赋予了软件软件测试新的任务,即利用验收测试从系统功能的角度上驱动软件开发,解决软件不能满足客户需求或者是与客户设想相背离的问题。

总体而言验收测试驱动开发是包括客户在内的一个团体组织的活动,围绕着客户需求引入“用户故事”(user story)这种灵活的客户需求管理方式。客户和技术人员(包括设计、开发和测试)通过紧密的写作、有效的交流和沟通构筑可靠的、高质量软件系统。

三、验收测试驱动开发的的周期

在项目开发过程中,软件系统将细分成多个ATDD周期,每一个ATDD周期都将选择一个客户需求记录或者称之为用户故事,编写测试,伴随着失败的验收测试,在编码、测试与重构的过程中反复迭代,直到本次用户故事验收测试通过。在ATDD的最初阶段,客户和技术人员通过有效的沟通和交流,编写简单的无歧义用户故事,开发人员据此编写验收测试。在完整的软件开发过程里,根据用户故事ATDD反复迭代,直到整个系统完成。

一般而言,系统开发过程中,开发人员会将用户需求划分为更小跟具体的任务,同样在ATDD方法中,客户所拟定的用户故事中也包含了多个任务,在完成整个用户故事的过程中,开发人员可以利用ADD方式完成单个任务并将用户故事中所包含的的任务多次迭代,用以实现通过本次验收测试。

四、ATDD的特点

验收测试旨在定制系统功能和系统行为的规范,它更强调的是让客户参与需求描述的制定,即让客户主导验收标准,用简洁的无歧义的自然语言描述系统所要实现的功能。能清楚有效的传达必要的信息,强调“谁”、“什么”和“为什么”而淡化甚至是不考虑“如何”。验收测试的主要特征如下:

1.客户指定验收标准

因为客户是需求领域的专家,他们知道他们需要什么的系统。这样做可以避免开发人员以及需求设计人员在考虑客户需求是总是从技术的角度出发,导致忽略了软件功能的本身需求。

2.技术人员参与需求设计

客户仅仅是需求领域额专家,他不能了解到具体实现细节需要什么样的技术最为合适,而技术人员的参与可以帮助客户因为缺乏对将来要应用的技术必要知识而拒绝使用。在验收标准的制定过程中,客户与技术人员之间的交流始终伴随整个过程。

3.着重描述“什么”而非“如何”

需求描述的是软件系统所要体现的工作的本身,并不包括如何实现系统。测试关注的是系统功能以及产生问题的本身,至于如何实现则是开发和设计人员关注的,在需求指定过冲中可忽略不计。

4.需求定义简洁、无歧义

编写验收测试当然需要客户和技术人员共同制定,但客户很可能对将要实现的软件要采用的技术并不了解。那么在技术人员与客户交流时要采用大家都容易理解的、不容易产生歧义的方式来书写需求。可以使用表格或者备忘录的形式用简单的句子描述需求。

5.测试自动化

自动化测试可以提高系统的测试速度和精度,并且降低软件系统在使用等方面的风险。

五、基于Fitnesse的验收测试的解决方案

与传统软件开发一样,ATDD开发模式也可以借助多种工具开发高质量的软件系统。这类工具包括基于表格的测试框架、基于文本的测试框架、基于脚本语言的测试框架和自制工具。

目前,验收测试工具使用最广泛的是用表格形式来描述测试,这类工具包括Fit、Fitnesse等。

Fitnesse是一款开源的测试框架,共包含Wiki、Test System和Fixture三个部分。它能够结合TDD单元测试等附加功能,将客户需求结合起来保证软件系统在业务测试中遵循客户所制定的测试内容,从而达到了为所开发的软件符合满足客户所要求提供了保障。Fitnesse要求客户和技术人员可以利用HTML来编写测试用例,测试框架根据表格中描述的语义和数据进行测试。Fitnesse体系结构如图2所示。

1.编写Fitnesse的验收测试用例

业务场景:设定验证某设别是否注册成功。

2.用户以及开发人员根据用户故事编写Fit-nesse表(如表1所示)

表中第一行的内容为测试类,第二行列出了设备属性(mac)和待验证的方法。

3.java源代码片段

当测试人员点击“Test”按钮时,FitNesse的slim模块会据网页中的classpath查找测试类,将测试用例的参数传递至表格中第二行指定的方法后slim将根据程测试用例的实际返回值与期望内容相比较,如果相同,则测试用例通过。

六、小结

可以看出验收测试驱动开发使得我们要完成的工作有了明确的目标和标准,尤其在使用了自动化测试工具后,令我们的测试有了多种手段。这不仅提高了测试效率,而且使我们开发的软件系统有了可靠的保证。当然验收测试驱动开发不能适用于所有的软件开发,诸如用户界面等还需要开发和用户共同确认。ATDD最大特点是让客户和开发人员共同参与到测试用例的编写,将客户对软件验收标准明确的写成测试项,确保系统的功能符合客户的要求。

参考文献

[1]Steve Freeman.Nat Pryce测试驱动的面向对象软件开发[J].

[2]Beck.k.Test-Drive Development by Example[M].2003.

[3]董宁.软件项目验收测试研究[J].软件导刊,2013,10.

[4]陈希,徐明昆.测试驱动开发在软件开发中的研究与实践[J].软件,2012.

上一篇:浅谈如何提高零件的加工精度 下一篇:极坐标系和椭圆坐标系下薛定谔方程及其解的研...