良好的软件测试方法可以确保软件项目正确运作,然而,除了软件之外,还有一个重要的却往往被忽视的角色——客户。在软件项目开发的每个阶段考虑客户需求是系统获得成功非常重要的一点。
1软件项目验收测试概述
验收测试一直以来被用于不同的技术和方法中,有时指的是同一个概念,有时也可能指不同的测试形式。所以必须给本文探讨的验收测试相关概念一个明确的定义:①验收测试:包括客户验收测试、用户验收测试和功能测试;②可执行规范:即验收测试规范,可运行测试来验证项目实现是否与所定义的规范相匹配;③客户:系统的最终用户;④系统:所开发的软件项目;⑤验收:满足功能和非功能需求;⑥功能需求:该系统必须执行的功能和动作,如显示条目、用户身份验证等;⑦非功能需求:系统的相关因素,如性能、可扩展性和安全性;⑧黑盒:不依赖于系统内部细节的测试过程,如输入数据、检测输出结果。
这些术语并不足以对如何将验收测试应用于软件项目开发生命周期进行一个准确的描述。验收测试并不是新概念,但它像测试驱动开发TDD(Test Driven Development)一样,近几年来才得到关注和广泛使用,并出现了一些相关的测试工具和架构。接下来看一下验收测试是如何应用于软件开发生命周期的。
验收测试往往被用于由极限编程、敏捷原则和Scrum迭代模型指导开发的软件项目中。出现这样的情况主要有两个原因。一是验收测试侧重于客户和软件所实现的功能向客户提供的价值,这与敏捷开发原则相一致,后者也是侧重于交付实际满足客户需求的软件。二是通过一套自动化验收测试,就可以确保该软件能够满足客户需求、确保在实现新功能的时候没有破坏任何旧功能。这意味着,可以将重点放在确保正在开发的功能是否与期望的相一致上面。
验收测试与敏捷开发过程结合是最有效的。在每一个迭代过程中,验收测试将保证整个团队集中于应用程序的具体部分,确保在单个迭代中软件从设计到测试都是完整的。
2软件项目验收测试方法
验收测试的编写和实现应该贯穿在软件项目开发的每个迭代过程中。下面将基于Scrum迭代模型,实现一个包含验收测试的软件项目迭代过程。
在一个标准的Scrum迭代过程开始的时候,开发团队接受了具有最高优先级的待完成的产品需求列表,该产品需求应当分解为多个用户使用情景,每个用户使用情景定义一个系统需求。一个用户使用情景通常由两部分组成,用来描述用户需要的系统部分。如一个典型的用户使用情景可以被描述为“作为一名销售管理员,我想要能够查看信用卡信息,从而能够在本地处理付款。”这个用户使用情景描述了操作和与操作相关的用户,对要求实现的内容给出清晰的说明。
一旦选定一个用户使用情景后,开发团队就应当对他们要实现的内容有一个很好的认识,这一阶段应该与客户和产品所有者进行交谈,确定实际需要什么并扩展初始用户使用情景,并基于这一信息和团队内部的其他技术人员讨论来创建任务,在这一阶段,就应当编写验收测试了。了解试图实现的用户使用情景,就可以清楚地认识到完成这些实现所需的任务,也能够知道如何验证这一应用程序是否满足客户需求。验收测试并不是低层次的单元测试,而是侧重于验证基于用户使用情景的客户需求是否正确实现的高层次测试。确定了用户使用情景后,在将其分解为任务之前,定义验收测试是非常必要的。当所有的验收测试都通过的时候,就完成了系统。这使得任务分解更加侧重于需要完成的事。在这一阶段,客户和产品所有者应当协助开发团队定义验收测试,确保软件需求满足客户的期望。
良好验收测试可以让客户在开始编码之前清楚地知道当前阶段软件项目将实现的功能。客户清楚地定义了需求,开发团队可以在实际编码前,提出任何与需求相关的问题并与客户敲定细节。使用验收测试指导和验证,可以使客户清楚地知道他们想要什么,也可以使软件项目开发团队清楚地知道他们计划交付什么。
但是,客户往往不懂技术,无法理解任何为验证需求所开发的测试代码。因此,验收测试在编写时,不要向客户展示代码,而是使用语言描述验证测试,也就是以几句话定义高层次观点。验收测试有多种编写形式,如Given、When、Then的语法就是一种现在较为流行的验收测试编写语法,具体测试用例编写如下所示:
假定有一个新用户账号(Given)
当其在系统中创建时(When)
那么默认密码应当是[email protected](Then)
在测试解决具体问题的时候,根据需要,测试表述可以更为复杂:
假定有一个超支账户(Given)和一个有效的借记卡
当客户从ATM机上取现金时(When)
那么显示一条错误信息(Then),没有现金返回,将卡退回给该客户
这种形式的测试将促使客户与开发团队更好地交流并定义验证测试,验证和敲定各个细节。这种测试定义形式并没有过多地使用专业术语,如果测试用例以这种方式定义,客户将对测试更加热心。因为客户在项目开始的时候就表明希望交付软件的实现什么功能,并且在软件交付后能看到参与编写的所有测试都能有效通过。
验收测试应当将注意力放在业务问题和场景上,使用与业务相同的语言来描述测试。其优势在于;第一,不需要技术背景就能够理解场景和预期结果;第二,如果软件底层发生变更,不需要退回并更新这些测试来反映这一变更。因为验收测试是高层次的,可能涵盖了代码库中的许多不同组建。验收测试不应该依赖于具体的细节,因为随时间的推移,这些细节会发生变更。如果由于丢弃或以某种方式进行变更而使用户使用情景不再有效,应该更新测试来反映这一点。
闲置的验收测试和不再使用的测试对于项目和测试套件来说是有害的。测试套件应当尽可能地精简和集中,拥有足够的测试来提供较高层次的保障,但不应冗余和重复。
执行验收测试可以手动或自动。尽管手动测试看起来是更快的选择,但从长久看来更加耗时,因为每次修改系统某个部分,都需要重新运行。随着系统的增长,手动测试将变得更加耗时,并导致更多错误,可见手动执行这些测试并不像想象的那么简单。除了手动完成验收测试,也可以利用工具自动完成。
3自动化验收测试工具
目前,最流行的自动化验收测试工具是FitNesses。该工具是基于Fit(Framework for Integrated)的。FitNesses提供了一个Wiki前端,可用来管理测试用例和脚本,使得整个团队和客户能够合作创建验收测试用例。除了Wiki前端之外,FitNesses还提供了一个基础代码库用于处理Wiki和测试系统之间的通信。这提供了一个与系统进行交互的抽象试图,能够更方便地编写验证测试。
除了FitNesses,也可以使用Cucumber来实现自动化验收测试。Cucumber 是一个能够理解用普通语言描述的测试用例的支持行为驱动开发(BDD)的自动化测试工具,用Ruby编写,支持Java和.Net等多种开发语言。
4结语
相比单元测试,验收测试最大的优势是更容易应用于遗留代码。遵循验收测试方法,可以立即围绕项目添加客户验收测试,并提供一定层次的自动化测试,不必对项目和测试方法进行大规模重构。验收测试实际上为遗留代码提供了增值收益,通过一套坚实的客户验收测试,就可以在后台重构代码,并添加单元测试,验收测试将提供额外的安全网,确保在重构阶段没有造成破坏。验收测试提供了一个良好的端对端安全网。
软件项目验收测试非常重要和有价值,它可以确保软件系统满足客户实际需求。
软件项目验收测试研究
时间: 2024-10-27 13:28:29
软件项目验收测试研究的相关文章
软件项目开发流程
软件开发流程(Software development process) 首先 看一下基本软件项目开发流程图 其中 1.需求分析: 通过对客户业务的了解和与客户对流程的讨论对需求进行基本建模,最终形成需求规格说明书. 2.总体设计: 通过分析需求信息,对系统的外部条件及内部业务需求进行抽象建模,最终形成概要设计说明文档. 3.详细设计: 此部分在对需求和概要设计的基础上进行系统的详细设计(也包含部分代码说明). 4.开发编程: 对系统进行代码编写. 5.测试分析与系统整合: 对所有功能模块进行模
软件项目开发总结,假如历史可以重来
TD学生助手--release版发布 1.设想和目标 1.我们的软件要解决的问题 TD学生助手的主要核心思想就是帮助学生安排他们忙碌的学校生活.主要是通过以下几个方面 1.通过学生的需要进行分类(考试,实验,发博客等等),添加日程,保存日程到数据库中,将日程模块化管理: 2.用月视图和周视图,日视图三个视图来管理添加进去的日程,让日程管理起来更加直观,方便,增强用户体验. 2.是否有充足的时间来做计划 我们做计划主要是在Sprint计划刚开始的时候进行计划,并在以后实施计划时进行调整,但是由于
软件项目与过程管理第八周作业
内容:软件项目与过程管理课程内容总结 经过八周时间的学习,软件项目与过程管理课程已经逐渐接近了尾声.通过这八周的学习,我对软件项目与过程管理课程有了更深的理解. 一.关于团队项目. 团队项目是本次软件项目与过程管理课程中最重要的一部分.我们团队项目是作业管理系统.在项目开发的整个过程中,我们在项目经理的带领下,项目团队的每一个成员团结合作.相互沟通,团队成员之间相互学习彼此的优点和技术,在每个成员的共同努力下,基本完成了此次软件开发项目. 通过这次团队项目, 我的总结如下: 1.在项目的开发过程
Project Management: 软件项目估算与计划不是一般的难!
摘要:估算.计划.计划跟踪是项目管理的主要工作,难度之高超乎你想象!光靠学习项目管理理论难以管好项目,而往往真能管好项目的都是那些在具体项目中滚打出来的实干人士.本文将会让你全面学习项目估算.计划.计划跟踪的知识,体验实际项目管理的难度,学到提高项目管理水平的一些方法. 大纲:1.从建筑工程说起2.估算要估啥?3.估算如何做出来?4.计划有什么内容?5.计划是如何做出来的?6.如何跟踪计划?7.优秀项目经理是怎样炼成的? 特别声明:如需转载此文,请给出指向本网站的连接,如下:作者:张传波摘自:h
中小型软件项目开发一般流程建议
一:编写目的 本文档的编写旨在探寻规范的软件开发流程.加快软件开发速度.提高软件开发质量.降低项目综合成本. IT界有一句格言:"You can do it right; you can do it fast; you can do it cheap. Pick two." 而我们要做的就是:提供优质服务.项目周期短.成本低廉 二:总体说明 项目从用户需求说明书的提出,到系统的第一个完整版本的交付使用经历了若干或复杂或简单的过程,但不管项目大小如何一般需要经历以下几个步骤: 1.
关于软件项目工作量估算的若干问题
作者:张克强 软件项目工作量估算从估算依据上看可以分成如下两类: 1,基于规模估算 2,基于工作量估算 基于规模估算的情况下,需要估算软件项目的规模.本文首先来看规模方面的问题. 问题1:如何表达规模? 软件产品或项目的功能规模是涉及软件开发和交易的成本.项目资源投入的预测.项目维护成本的预算.项目质量管理的要求以及产品上市的时间等方面的关键指标.因此,进行软件产品的功能规模测量显得尤其重要. 如何测量软件规模这个问题自软件工程诞生起就一直是这个领域的焦点问题.刚开始,人们很自然的使用代码行数作
软件项目成功之要素
我们在不断探寻更好的软件开发方法,希望能找到适合自己和团队的好办法.不过,基于既有的教条,关于各种开发方法孰优孰劣的讨论最终总会演变成激烈的争吵.字典中教条的定义是"一种权威性观点,但并没有充分的依据".我们经常会看到,各种方法的拥护者们都坚持认为自己的方法才是开发软件唯一正确的方法.我们不断听到一些从业人员这么讲,他们执着地采用某种方式开发软件,即使这种方法明显危害到团队的其他人甚至整个组织,却仍然固执己见.事实上,开发软件根本没有所谓"绝对正确的方法"
2017.07.06 IT项目管理笔记整理 第五章软件项目风险管理
风险是不确定的事件,一旦发生,将会造成消极影响.风险发生的概率越高,造成的影响越大,就越是高风险,否则就是中等风险或低风险. 风险的三要素:一个未来的事件,事件发生的概率,事件的影响 风险的分类:(1)从风险的范围角度上看,风险分为三种类型:项目风险:潜在的项目预算.进度.人员.资源.用户和需求等方面的问题.技术风险:实现和交付产品过程中所应用的各种技术所包含的风险.技术的正确性.不确定性.复杂性.技术陈旧等因素都可带来技术风险.商业风险:与市场.企业产品策略等因素有关的风险. (2)从风险可预
2017.07.07 IT项目管理笔记整理 第八章 软件项目质量管理
软件质量的特性:1.正确性 2.可靠性 3.效率 4.完整性 5.使用性 6.维护性2. 测试性 8.灵活性 9.移植性 10复用性 11.共运行性 软件质量的6个特性用于评价: 1功能性 2.可靠性 3.易用性 4.效率 5.可维护性 6.可移植性 软件质量保证的目标:1通过适当的监控系统及其开发过程来保证软件质量.2确保软件及其开发过程与已定的标准和规程要求完全一致3保证软件及时发现产品.过程和标准的任何不足并提醒管理者注意,以便及时弥补 软件质量保证组织的职责: a对所有开发计划和质量计划