UML软件工程组织

以RUP原则实施软件自动化测试 第一部分
张振兴 测试工程师
 
  本文将根据IBM Rational的RUP原则来讲解实施软件测试自动化的过程,以此必将避免以上失败,使自动化测试真正在软件开发活动中发挥其强大优势。全文第一部分重点阐述:自动化测试的优势、自动化测试的四个关键过程、优秀开发过程具备的要素、企业为软件测试自动化提供的组织支持。

  内容概要
  很多人理解软件测试自动化,就是找到一款自动化工具,然后在软件项目里开始使用。但是大抵最后都会失败,甚至还会浪费很多不必要的资源和时间。一般来说,自动化测试项目失败的原因有两个方面:

 不合理的期望
  不合适的实现
  本文将根据IBM Rational的RUP原则来讲解实施软件测试自动化的过程,以此必将避免以上失败,使自动化测试真正在软件开发活动中发挥其强大优势。全文第一部分重点阐述如下主题:

 自动化测试的优势
  自动化测试的四个关键过程
  优秀开发过程具备的要素
  企业为软件测试自动化提供的组织支持
  第二部分将讲解以下主题:
  成功自动化测试的计划过程
  自动化测试的最优化设计

  前言
  众所周知,软件测试是目前软件工程领域唯一的朝阳行业;所谓朝阳行业,就意味着挑战与机遇并存!有人说软件测试既是科学又是艺术,但凡称为既是科学又是艺术的学科就是不成熟的学科,软件测试也如此,它也是不成熟的领域,在其发展道路上还存在着太多的不足和难以克服的困难;因此,很多国内外的专家和公司都在积极的探求着更规范化和标准化的测试流程,以及更成熟、更易实现的技术方法。

 从宏观意义讲,软件测试可以划分为以下三个方面:

 软件测试管理:测试流程管理、测试职业管理,测试技能方法管理等
  软件测试技术方法:根据软件测试的不同阶段、不同测试类型、不同软件类型等,深入研究软件测试的技术及方法
  软件测试自动化:自动化测试流程、自动化测试管理、自动化测试工具等
  软件测试大致分为以上三类,每类可细化为更多子方面,例如第二类根据测试类型还可细化为功能测试、性能测试、安全测试等,根据测试方法可细化为黑盒测试、白盒测试、灰盒测试等。这里,之所以讲软件测试自动化单独列出来,是考虑到软件测试自动化既包括技术方法方面,又包含管理方面;更重要的是,软件测试自动化是软件测试领域无法逾越的发展阶段,随着应用软件程序规模的不断扩大,业务逻辑的不断复杂,以及从业者协作关系的日益重要,在软件的开发周期里适当使用自动化测试是非常必要的!

 自动化测试介绍

 一)自动化测试的神话和现实
  自动化测试能增强软件测试的规范化和标准化,如果实施方法得当,它可以:

 减少浪费在重复性手工测试工作上的时间
  创建优良可靠的测试过程,减少人为错误
  增强测试的覆盖率以及产品质量
  但是,测试自动化不能:

 完全代替手工测试
  立即降低测试投入,提高测试效率
  保证100%的测试覆盖率
  补偿劣质的测试过程
  要对自动化测试形成正确的认识,切不可好高骛远,脱离实际的以为企业实施了测试自动化,就可以克服从前的一切问题。实际上,软件测试自动化在企业内部的推广,也是一个与时俱进的持续性过程。

 二)自动化测试工具
  自动化测试定义为通过测试自动化工具开发和执行测试脚本,以评估软件的需求。测试工具分为两类:

 找错工具(fault-finding):根据既定的测试标准寻找被测程序中的缺陷,包括静态分析工具(一些白盒测试工具例如parasoft的jtest含有该功能)、动态测试工具(市面众多的测试工具robot、winrunner、qarun等)
测试支持工具:测试管理工具(如testmanager、testdirecter等)、其他支持工具(如clearquest、clearcase等)
  三)自动化测试成功的关键要素
  企业购买了自动化测试工具,下一步就是要在公司内部推广自动化测试。那么,自动化工具能够给企业的测试流程带来多少变更呢?如何在测试工作中使用自动化测试工具呢?RUP提出这样的自动化测试关键要素:

 自动化测试必须看成一个软件开发项目,因为测试脚本是代码,而测试代码是自动化测试的根本;有效的开发并维护良好的测试脚本,是自动化测试的重中之重。
  自动化测试同样需要经历计划、设计、开发、维护、版本控制过程,具体而言,包括四个关键过程:
  清晰的定义和可持续的实现过程
  获得企业组织管理上的支持
  审思成熟的项目计划
  稳定的结构设计
  以下逐一讲解每个关键过程。

 定义测试过程

  一)定义测试过程的重要性
  所谓过程,是为了构建某目标而设计的一系列分步执行的动作;软件工程里,目标是构建软件系统或增强现有软件系统;软件测试里,目标是高效的测试软件程序,发现软件缺陷并确认软件需求。

 一个定义良好并严格根据其实施的测试过程,是自动化测试成功的关键。所谓凡事预则立,不预则废,在一个随机或非系统性的测试环境里,很难实施测试自动化;缺乏稳定的测试过程,拿起工具就开始录制脚本等,这样的方式是愚蠢的,所做的投入也必将导致失败。

 二)RUP简介
  RUP(Rational Unified Process)是IBM Rational software提出的软件工程实施过程,在业界经历了数千个软件项目的实践,是当前最为成功的软件工程方法论之一!RUP是一种迭代的、以架构为中心的、用例驱动的软件开发方法;RUP是一种具有明确定义和结构的软件工程过程,它明确规定了人员的职责、如何完成各项工作以及何时完成各项工作,以及软件开发生命周期的结构,定义了主要里程碑和决策的关系;RUP也是一个过程产品,提供了可定制的软件工程的过程框架,支持过程定制、过程创作和多种类型的开发过程,可通过装配过程产品得到过程配置。RUP配置可以用于不同规模的开发团队和规范程度不同的开发方法,RUP产品包含过程配置和过程视图,以指导项目经理、开发人员、测试人员等角协作开发软件。

 RUP的核心包含几个基本原理,它们支持应用迭代方法进行软件开发:

 尽早并且不断的化解重大风险
  确保满足客户的需求
  把注意力集中放到可执行的软件上
  尽早在项目中适应变化
  在早期确定一个可执行架构
  使用构件构造软件系统
  建立高效团结的开发团队
  始终重视质量
  从管理角度观察RUP,即业务和经济方面,对应项目的进展,软件生命周期包括四个阶段:

 起始阶段-构建最终产品的设想和业务案例,确定项目范围
  细化阶段-计划必要的活动和资源,详细确定功能并设计架构
  构建阶段-构建产品,直到一个可交付用户的产品完成
  移交阶段-产品交付用户,包括制造、交付、培训、支持、维护等

 从技术角度看,软件开发可视为一连串的迭代过程,通过迭代开发软件得以增量演进,每个迭代都以一个可执行的产品发布而结束,每次发布都伴随支持性工件:版本描述、用户文档等。一次迭代可包括以下活动:计划、分析、设计、实现、测试,据其在开发周期的位置不同,所占比重也不同。


  三)优秀测试过程的要素
  RUP提出的开发过程可以有效应用到测试和自动化测试中,因此,根据RUP原则,我们得出优秀测试过程所应具备的几大要素,列举出来供大家参考:

 初始计划-定义测试目标
  定义需求-确定测试什么,可落实到《测试需求说明书》
  分析设计-决定如何测试,划分测试阶段、类型,以及测试方法等
  实现-创建与实现测试,编写测试用例或开发测试脚本,并文档化
  测试-调试测试(针对自动化测试脚本)
  执行-执行测试
  评估-评估测试结果并改进测试过程
  配置与变更管理-测试脚本的版本控制和测试缺陷的跟踪
  环境-定义支持测试所需的环境
  企业在实施自动化测试前,可根据上述内容定义软件项目的自动化测试过程,做到每条项目都有所规范,任何测试成员都据此实行。至于内容详细程度和文档格式,不必统一,重要的是内容规定了这些原则,并且在实际工作中有所贯彻。

 对自动化测试的组织层支持


  一) 获得组织层支持的必要性
  企业实施自动化测试,不是单纯测试部门的事情,更不是几个测试工程师单靠对测试工具的强烈兴趣,就能够在企业内部推广使用的。有数据表明,很多自动化测试项目的失败,并非技术的限制,更多的是缺乏企业组织管理层的支持,组织管理层的支持与否可以瞬间中断一个项目,而且没有领导层的支持,购买工具、测试环境与资源的花销,根本无从实现;而且推广自动化测试,势必影响企业内部软件的开发流程,试想没有高层的审批,实施工作根本无从下手。因此,为最大程度的保证自动化测试的实施,花费一定的时间获得上层组织的支持和必要的项目资源是非常必要的!

 二) 正确看待自动化测试项目
  绝对不要把自动化测试简单的看作是运用一套自动化测试工具的过程,实施软件测试自动化决不单单如此。我们应该把实施自动化测试的软件看成一个项目,并且把自动化测试项目看成一个企业中新的里程!一个新里程有两个要素:

 开创里程-确定自动化测试的涉众
  维持里程-改进组织管理过程以适应自动化测试
  三)自动化测试的涉众
  涉众,是RUP中的名词,表示软件开发中涉及到的各种角色,如用户、设计人员、开发人员乃至测试人员等。实施软件测试自动化,必须获得涉众的支持,这也是自动化测试涉众的根本任务。那么,需要获得那些涉众的支持呢?

 1) 企业高层领导--从企业的高层领导获得

 自动化测试的可信度
  对测试工具、培训方面的财务支持
  企业其他部门人员的支持,如审批、招聘等
  在和企业高层领导交涉时,应该如实放映自动化测试,说明自动化测试并非一定获得投资回报,也并非能立即获得回报,并从企业角度设定切实可行的期望目标,例如只是在某类软件项目的某种测试类型或阶段实施自动化测试。

 2) 测试主管--测试主管或经理直接监督企业整个测试过程的实行,并确定测试日程、战略、资源分配及工作细节,故而有必要获得测试主管对自动化测试的支持。

 在和测试主管或经理交涉时,要让他们清楚自动化测试的功效,说明如何使测试工作更加有效,还要让他们通晓如何计划、实施自动化测试项目等。

 3) 测试人员--和测试人员沟通,因为一旦实施了自动化测试,必将改变测试人员的原有工作方式,需要他们学习新的技能,与开发人员之间也要保持更紧密的合作,另外,也需要他们严格遵守新的测试流程和规范。我们需要测试人员理解自动化如何提高工作效率,并清楚遵守测试流程的必要性,还要明确认识自动化测试和手工测试的平等关系,并非所有人都要成为自动化测试专家,自动化测试也无法完全取代手工测试,以免造成不必要的心理失衡。

 4) 开发人员--获得开发人员对自动化测试的支持是非常关键的,我们需要鼓励开发人员开发优质的代码,增强软件的可测性,并通过有效沟通提高测试的覆盖率。另外,RUP提倡开发人员执行每个发布版本的冒烟测试。

 四)自动化测试规范的制订
  为什么需要制订企业级的自动化测试规范呢?

 自动化测试规范是企业高层对该方案的授权见证,同时加强与企业其他部分的交流与合作;没有该规范,遇到问题时会手无足措,例如对于自动化测试的负责人,将会缺少执行的可信度,对于自动化测试实行人,将会遭受各种阻力。另外,企业没有清晰明确的测试目标和方案,各部门制订各自的规范必将在实行时发生冲突,从而导致项目的最终失败。

 企业级自动化测试规范是对企业的测试流程及规范进行高标准的定义和描述,它定义了组织的测试目标、实施方式及遵循的标准,并包含了自动化测试在整个测试过程里的具体实施步骤。

 那么,谁来制订自动化测试规范呢?RUP并没有规定非要由何人来制订,实际上,可以是任何有自动化测试技能或经验的人,例如自动化测试的倡导者、测试主管等。制订完成后,需要得到企业高层如CTO/VP的审批。

 以下是某公司的自动化测试规范样例:

 XYZ公司自动化测试规范
  介绍:
  该规范定义了XYZ公司的自动化测试过程,适用于公司所有的软件测试活动,对我公司的软件测试活动的方法和步骤以及测试资源进行文档化。任何测试活动都要遵循该规范规定的标准和结构,但是对于特定项目的测试活动,可制订项目级的测试策略文档。
  目标:
  XYY公司的软件测试目标是通过定制标准衡量软件系统的功能及其他非功能指标,以适应公司的商务运作,并以此衡量过程作为评测软件发布的通道;个别测试项目还需参考项目的相关测试策略及计划文档。
  方式:
  我公司测试标准以rational unified process(RUP)为参考,并符合RUP规范。
  组织:
  我公司采用手工测试和rational自动测试工具结合的方式实施软件测试
  XYZ公司采用有资格认证的人员确定测试方案,并通过技能培训保证相关人员在各自测试区域得到最大发挥。
  步骤:
  … …

 五)自动化测试的成员构成
  首先说一下自动化测试成员的技能需求。一般来说,自动化测试项目成员的全部技能大致包括:

 测试技能:理解GUI测试设计和标准、理解被测软件的商务逻辑、理解软件测试等测试管理技能:包含测试数据管理、测试设计和开发、测试战略定义、自动化测试项目管理等自动化测试技能:包含自动化测试工具使用、编程、测试套件的设计等技术技能:包含操作系统、数据管理、网络与硬件等软件开发技能:包含编程、软件系统设计、软件开发支持工具(配置与变更管理等)因此,构成软件自动化测试的项目成员包括(实际中可做相应调整或合并):

 测试战略定义者
  项目管理者
  测试数据管理者
  测试设计和开发者
  测试执行者
  测试支持者(配置管理与变更管理等)

 

版权所有:UML软件工程组织