敏捷测试在软件项目中的应用研究与实践

2017-12-07 15:02胡兆华何舒王慧
数字技术与应用 2017年9期

胡兆华+何舒+王慧

摘要:为了更好地解决软件项目在测试中存在的问题,确保软件产品质量,在测试过程中引入敏捷测试的思路和方法。通过对敏捷测试的核心思路和关键法则的研究,提出了敏捷测试在软件测试中的应用流程和方法。该方法以测试驱动开发为主,传统测试手段为辅,符合敏捷开发中以用户需求为核心的理念,同时将开发过程中的周期性迭代方式更好地表现出来。通过敏捷测试在软件项目中的实践,总结出了敏捷测试的主要优势。

关键词:软件质量;敏捷测试;客户需求

中图分类号:TP311 文献标识码:A 文章编号:1007-9416(2017)09-0092-02

近年来,随着移动互联网、物联网、云计算等新一代信息技术的全面推广,软件系统的规模和复杂性日益激增,软件质量已成为软件开发过程中关注的重点。在一些对于安全性要求较高的领域,如航空航天、电子商务、电子政务等,对软件产品的质量要求更高。另一方面,随着软件产品的市场竞争日益激烈,用户对软件的使用体验要求越来越高,导致了软件产品功能需求变更频繁,加之软件的发布周期越来越短,当前传统的软件开发流程已无法满足当下市场竞争白热化给软件产品带来的的严峻挑战。在传统的瀑布模型开发模式下,测试人员在一定的控制节点之前无法开展测试,因此产品缺陷无法尽早暴露,可以预见,这一阶段的软件版本缺陷数量必定是惊人的。与此同时,大量缺陷导致修复时间难以确定,版本提交测试的时间一拖再拖,留给测试的时间越来越少,软件的质量风险和版本发布的推迟,带来的损失将难以估量。

敏捷软件开发是基于一种更接近人类活动现实情况的方法论,采用以人为本、迭代、增量的开发过程,逐步满足软件不断变更的需求。敏捷开发提倡个人为团队所作的贡献,以任务为导向,通过积极地沟通和反馈保证随时都有可供交付的软件产品。敏捷开发更容易在项目早期控制缺陷数目,而敏捷测试在敏捷开发中更能充分发挥软件测试的重要作用。

1 敏捷开发中的软件测试

1.1 敏捷开发

在传统的瀑布模型开发模式中,注重流程规范、文档齐全,从需求分析开始到产品发布,每个阶段都顺序开展,每个阶段都根据需要反复循环。开发过程和测试过程自上而下、相互衔接且次序固定。在这种开发模式下,需要大量的文档支撑,工作量巨大;用户只能等到开发过程的末期才能看到开发成果,如果发生了需求变化,则需要重新编写文档,可能将之前的工作推翻重来,费时费力又不能快速响应用户需求的变化,增加了软件产品的发布风险。传统的开发模型已经不能适应当前快速变化的用户需求。

敏捷开发则是以用户需求进化为核心,能快速响应用户需求变化的一种开发模式。这种模式下,开发和测试不再是各自独立的阶段,测试是软件开发的重要组成部分。敏捷开发使用一个“完整团队”的方法来保证软件产品质量,敏捷团队中的测试人员从客户角度充分挖掘需求,然后与开发团队合作,把这些需求变成可执行的规范,用于指导代码编写。随着测试和编码的进行与交互,不断建立软件的品质与能力,直到满足产品发布的要求。

1.2 敏捷测试

敏捷测试遵循敏捷的基本原则,符合敏捷的价值观:

(1)个人和互动高于流程和工具;

(2)工作软件高于完备的文档;

(3)客户协作高于合同协商;

(4)变化响应高于计划遵循[1]。

敏捷测试是基于敏捷开发的软件测试,传统的测试思想“通过在规定条件下对程序进行操作,发现错误,衡量软件质量”在敏捷测试中仍然适用。敏捷测试不仅是一种过程,更是一种理念。

1.3 敏捷测试的特点

敏捷测试包括以下几个主要特点:①周期性的迭代开发方式。敏捷测试在迭代进行过程中首先要对产品有一个全局把握,从用户角度思考和分析软件产品,及时修正软件测试策略,创建应对的测试方法和思路,更新测试要点和用例,快速高效地完成测试执行,最终按时完成产品交付。② 每日立会,密切沟通。敏捷测试中没有传统测试流程中完备的文档支撑,需要团队成员与客户保持沟通,团队内部则每天进行充分的交流,以确保测试人员和开发人员对用户需求有统一的认识,最终保障产品质量符合用户预期。③测试方法灵活多样,贯穿整个产品的开发过程。敏捷测试根据产品的成熟度采取不同的测试手段和方法,比如软件的新增功能或变更的功能,可以采用探索性测试方法;对于功能趋于稳定的部分,则尽量采用自动化测试的方法。④确保客户需求圆满实现。客户需求是敏捷开发中最核心的内容,敏捷测试同样需围绕客户需求实现来开展。

2 敏捷测试项目实践

2.1 敏捷测试的流程和方法

某应用类软件产品在测试过程中采用了敏捷测试思想,引入新的过程和控制方法,摈弃传统测试流程中的各项繁琐的计划、文档、评审等教條式的控制过程,取而代之的是精简计划、动态更新和灵活迭代。

图1为该应用类软件产品的敏捷开发测试流程,此流程是一个结合了scrum和XP(极限编辑)方法并增加了基于计划性流程原则后的产物。敏捷开发的测试人员全程参与完整的迭代开发。

2.1.1 用户需求

通过各种途径收集整理用户需求并尽快向项目团队成员发布;需求管理人员对用户需求整理并存档。

2.1.2 项目(迭代)计划

通过评审确定项目整体规划和迭代计划,明确各阶段项目目标及迭代版本的验收标准。

2.1.3 需求分解

根据项目规划和版本迭代计划对用户需求进行分解,将分解的用户需求映射到迭代的版本目标。

2.1.4 需求分析

根据本次迭代的版本目标,开发和测试团队分别从各自不同的角度同时开展对用户需求的分析,输出开发需求列表和测试需求列表,通过评审进行明确。

2.1.5 迭代计划endprint

参考项目总体迭代计划,在开发团队和测试团队充分沟通的前提下通过评审制定开发迭代计划及测试迭代计划。二者相对独立但又相互关联,敏捷开发的迭代过程较传统开发模式的迭代过程更高效、更灵活。开发迭代在整个项目周期中持续进行,不受测试周期影响而中断;测试迭代与开发迭代并行开展,测试BUG持续反馈,BUG修复也同步进行。开发迭代和测试迭代的总体节奏保持一致。

2.1.6 设计过程

根据迭代计划,开发团队和测试团队分别开展开发设计和测试设计,在设计评审中,开发团队和测试团队共同参与,分别就开发设计和测试设计进行充分的讨论,对设计的完备性、正确性提出各自的意见。

2.1.7 提交与验证

①开发团队完成阶段迭代版本开发后就可以提交版本,以便测试团队尽早开始测试,提交版本后开发团队即可开始下一轮迭代开发。

②版本提交过程中,测试团队需要明确本轮迭代的验收目标及功能变更的影响范围,以便适时调整测试策略以指导测试。

③测试验证过程也是测试驱动开发的过程,测试中发现的BUG需要即时和开发人确认并反馈,确认的BUG将即时在下一个的迭代版本中修复。

④测试执行过程中的每日立会很有必要。每日立会由测试负责人主持,团队成员逐一汇报当前的测试工作情况,以便每位成员都了解项目的整体测试情况;同时每位成员都可以提出测试工作中的疑问或需要协调解决的问题,依靠团队的力量通过充分的讨论予以解决。

2.1.8 测试小结(验收测试)

测试工程师对此次迭代的所有功能进行演示,确认测试产品已达到验收标准,同时对本轮迭代的产品质量风险及测试过程进行总结。验收通过后本轮迭代结束,测试团队开始进入下一轮迭代。

采用了敏捷测试的流程和方法后,该软件产品的开发周期较常规测试流程的周期缩短了3个月,提前达到了预期质量目标,正式向用户进行了发布。实践证明将敏捷测试应用于软件产品测试过程,可以较好地解决用户需求变化快、产品风险高的问题,同时还能快速抢占市场,这正好是敏捷测试的优势所在。

2.2 敏捷测试的优势

敏捷测试相对于传统软件测试的优势主要体现在以下三个方面:迭代周期、软件质量、流程高效[2]。

2.2.1 迭代周期明显缩短

传统测试中开发和测试活动串行开展,开发和测试活动有较长的等待空白期,相互牵制导致迭代周期较长。敏捷测试中开发和测试并行开展,测试活动分布到项目开发的各个环节;测试驱动开发,缺陷可以快速修复,开发效率提高,因此迭代周期大大缩减。

2.2.2 软件质量有效提升

敏捷开发模式下,所有的软件测试活动均围绕软件质量为目标展开。测试人员需要具备更高的专业技术水平,测试设计要更具灵活性、可扩展性和可维护性,这样才能快速响应用户和市场需求。敏捷测试中更多地注重产品用户体验并及时反馈产品质量问题,通过版本的持续集成和持续测试,实现版本的快速迭代,进而有效地提升软件产品的质量。

2.2.3 流程精简高效

敏捷测试不必严格遵从经典的软件开发流程,不必因缺乏开发文档而止步,也不会因流程制约而浪费宝贵的时间。敏捷方法中流程是为软件开发服务的,当流程不能满足开发需求或与开发冲突的时候,流程需要适当地改变来适应开发[2]。敏捷测试把用户故事(story)作为测试开发的基础,制定高效的迭代计划,通过灵活和组织和管理,实现测试与开发的并行协作,共同完成產品的质量目标。

3 结语

敏捷开发中的软件测试应当遵循敏捷开发的基本原则,面对不同的开发方法和应用环境,软件测试方法也不同。敏捷测试作为从敏捷开发中成长起来的测试方法,与敏捷过程密不可分。在开展软件测试实践过程中,还会涉及测试用例的生成与覆盖标准、测试的充分性和有效性、不同阶段的软件版本测试关系,以及如何将传统测试中的一些方法应用到敏捷测试中等问题,需要深入探讨的问题仍然很多。

参考文献

[1]杨晓光.探索式测试在敏捷软件项目安全性测试中的应用研究[D].天津工业大学,2015.

[2]曹文君.敏捷测试在CRM项目中的应用研究与实践[D].复旦大学,2010.endprint