良好的软件测试方法可以确保软件项目正确运作,然而,除了软件之外,还有一个重要的却往往被忽视的角色——客户。在软件项目开发的每个阶段考虑客户需求是系统获得成功非常重要的一点。
  1、软件项目验收测试概述
  验收测试一直以来被用于不同的技术和方法中,有时指的是同一个概念,有时也可能指不同的测试形式。所以必须给本文探讨的验收测试相关概念一个明确的定义:①验收测试:包括客户验收测试、用户验收测试和功能测试;②可执行规范:即验收测试规范,可运行测试来验证项目实现是否与所定义的规范相匹配;③客户:系统的终用户;④系统:所开发的软件项目;⑤验收:满足功能和非功能需求;⑥功能需求:该系统必须执行的功能和动作,如显示条目、用户身份验证等;⑦非功能需求:系统的相关因素,如性能、可扩展性和安全性;⑧黑盒:不依赖于系统内部细节的测试过程,如输入数据、检测输出结果。
  这些术语并不足以对如何将验收测试应用于软件项目开发生命周期进行一个准确的描述。验收测试并不是新概念,但它像测试驱动开发TDD(Test Driven Development)一样,近几年来才得到关注和广泛使用,并出现了一些相关的测试工具和架构。接下来看一下验收测试是如何应用于软件开发生命周期的。
  验收测试往往被用于由极限编程、敏捷原则和Scrum迭代模型指导开发的软件项目中。出现这样的情况主要有两个原因。一是验收测试侧重于客户和软件所实现的功能向客户提供的价值,这与敏捷开发原则相一致,后者也是侧重于交付实际满足客户需求的软件。二是通过一套自动化验收测试,可以确保该软件能够满足客户需求、确保在实现新功能的时候没有破坏任何旧功能。这意味着,可以将重点放在确保正在开发的功能是否与期望的相一致上面。
  验收测试与敏捷开发过程结合是有效的。在每一个迭代过程中,验收测试将保证整个团队集中于应用程序的具体部分,确保在单个迭代中软件从设计到测试都是完整的。
  2、软件项目验收测试方法
  验收测试的编写和实现应该贯穿在软件项目开发的每个迭代过程中。下面将基于Scrum迭代模型,实现一个包含验收测试的软件项目迭代过程。
  在一个标准的Scrum迭代过程开始的时候,开发团队接受了具有高优先级的待完成的产品需求列表,该产品需求应当分解为多个用户使用情景,每个用户使用情景定义一个系统需求。一个用户使用情景通常由两部分组成,用来描述用户需要的系统部分。如一个典型的用户使用情景可以被描述为“作为一名销售管理员,我想要能够查看信用卡信息,从而能够在本地处理付款。”这个用户使用情景描述了操作和与操作相关的用户,对要求实现的内容给出清晰的说明。
  一旦选定一个用户使用情景后,开发团队应当对他们要实现的内容有一个很好的认识,这一阶段应该与客户和产品所有者进行交谈,确定实际需要什么并扩展初始用户使用情景,并基于这一信息和团队内部的其他技术人员讨论来创建任务,在这一阶段,应当编写验收测试了。了解试图实现的用户使用情景,可以清楚地认识到完成这些实现所需的任务,也能够知道如何验证这一应用程序是否满足客户需求。验收测试并不是低层次的单元测试,而是侧重于验证基于用户使用情景的客户需求是否正确实现的高层次测试。确定了用户使用情景后,在将其分解为任务之前,定义验收测试是非常必要的。当所有的验收测试都通过的时候,完成了系统。这使得任务分解更加侧重于需要完成的事。在这一阶段,客户和产品所有者应当协助开发团队定义验收测试,确保软件需求满足客户的期望。
  良好验收测试可以让客户在开始编码之前清楚地知道当前阶段软件项目将实现的功能。客户清楚地定义了需求,开发团队可以在实际编码前,提出任何与需求相关的问题并与客户敲定细节。使用验收测试指导和验证,可以使客户清楚地知道他们想要什么,也可以使软件项目开发团队清楚地知道他们计划交付什么。