测试人员对 RUP 四个阶段的贡献:另一种观点(一)

1.1.1  本文来自于 Rational Edge:在对软件迭代开发生命周期中的测试人员的作用进行探讨的同时,作者 考虑,除了 RUP 测试规程中提供的描述,测试人员还能如何对项目做出广泛的贡献。

从测试工程师那里听到的最普遍的抱怨是直到过程中很晚的时候才能有效地参与到软件开发项目中。此外,测试通常是在开发人员在抗争损坏一个接一个版本候选的很晚出现的缺陷时所逼出的行为。到一个合适的候选版本出现的时候,测试人员已经成为瓶颈,显然,要对进一步的延迟负责。

Rational Unified Process®,或 RUP®,广泛地概括了测试规程(Test Discipline),并介绍了测试角色如何及早地参与项目生命周期。

我希望在本文中介绍另一种观点。代替由测试规程开始,我将依次考虑每个 RUP 阶段的风险管理原则,并询问经验丰富的测试人员,为了促进那些目标他们可能会做些什么。虽然测试工程师不能估算总的项目成本,但是他们的确可以评估对成本的测试贡献,并且提出测试风险和可行性。虽然他们不应该计划解决方案架构,但是他们可以帮忙度量。虽然测试人员不构建一系列可执行程序,但是他们可以评估每个可执行程序如何表示一个从前一个而来的进展。虽然测试人员不构建最终的候选版本,但是他们可以确保具有可接受的质量。

我相信在 RUP 的每个阶段,测试人员都有机会对项目做出大量贡献。该贡献远远地扩展了,例如,要求更早地测试交付内容 —— 或者更早地执行一组标准的测试 —— 比传统的瀑布驱动过程中。本文应作为面向开发团队中的测试人员的 RUP 原则的激励说明来阅读。它不应该作为 RUP 测试规程的概要或初级读物。虽然我相信许多测试人员会觉得该信息很有用,但是我还相信管理人员将会对看到测试人员的能力和经验如何在 RUP 项目的所有阶段中更有效地应用感兴趣。

初始(Inception)阶段:管理业务风险

RUP 的初始阶段是对准业务风险的管理。为了制定出自该阶段的可行或不可行的决策,我们需要了解

·                      待解决问题的性质。

·                      解决方案的价值,不论是就节约或收益而言,还是以一些其他的业务价值,如质量或时间性而言。

·                      潜在的解决方案,因此我们至少知道问题是可解决的。

·                      对解决方案的粗略成本估算。

·                      危害解决方案的风险。

带着此信息,涉众被聚集到生命周期目标(Lifecycle ObjectivesLCO)会议上。如果项目被视为是可行且值得做的,那么项目会继续进入精化阶段。

评估成本

可行性和成本是 LCO 会议上的重要因素,并且测试人员无疑可以为该决策贡献重要的数据。测试人员可以估算对成本的测试贡献,甚至有时候可以有助于可行性问题。记住,在初始阶段中,尽管我们只对球场的数字感兴趣。过高的精确度将给我们带来不真实精确度的不适当安全感。

也许有或也许没有实际的可执行程序作为 LCO 简报的一部分。这些可能由技术示范者、现有产品的快速出租,或者也许是更实质的东西组成。我的意见是在如此初步的阶段执行如此正式的操作是不适当的。

因为测试成本对总的开发成本做出贡献,所以我已经列出许多对测试成本做出贡献的行为。

·                      测试风险
风险需要减轻计划,减轻风险需要花费金钱。测试风险是各种各样的。例如,需求可能迅速地变更,这可能会破坏可测试性或测试成本设想。后继的精化阶段可能会利用新的测试难点的解决方案来解决技术风险。可能需要遵守 MC/DCModified Condition/Decision Coverage)测试、ISO 标准、SEI 标准,IEEE 标准,等等这样的标准。 1 这些标准可以减少整个业务成本,但是顺应成本在某种程度上落在测试人员上,并且应该更加明显。可能存在与数据安全相关的政府规章,如保密性规章,使对真实数据的测试变得困难或昂贵。

·                      可测试性
可测试性与可行性直接相关,并且很可能找到很难测试的高层次需求。一些需求是非可测试的,因为他们是主观的,或者不是有助于度量或量度的。一些是不可测试的,因为从技术上很难安排一个合适的测试。例如,一些战略防御计划(Strategic Defense InitiativeSDI)的批评家提到在美国执行其导弹防御的可接受性测试时,让苏联启动非武装的洲际弹道导弹(Intercontinental Ballistic MissileICBM)的困难。在软件开发项目中,这种情况发生于格外昂贵的硬件不能为了测试很容易地重新执行任务的时候,或者当独特的环境因素使测试的安排变得困难时。

·                      准备测试实验室
通过实验室,我的意思是一个环境,在其中有我们测试每个需求所需要的东西,一个被提供但与产品环境有很难区分的不同。即使我们在早期的需求发现阶段,仍有可能估算您很可能需要的资源。


资源可能包括 1) 硬件、计算机、网络,以及由慢速管道或很长的往返传递,及防火墙所引起的瓶颈,2) 软件,包括测软件及其他必需或采用的软件,所有的都处于已知版本层(或根据所有版本进行测试!),3) 测试软件,如测试经理,测试自动化软件,如记录或回放 GUI 测试人员,以及用于可伸缩测试的用户虚拟化,4) 数据,包括用于冒烟测试和功能测试的小型数据集,以及用于可伸缩性测试的大型数据集。

注意到尽管潜在的实验室特性的列表很长,我们还必须在存在相应的实际需求的地方指定实验室需求。例如,不是所有的系统都有可伸缩性需求,所以不是所有的实验室都将需要用户虚拟化工具。

·                      估算需求或场景的整体测试成本
大多数需求将作为普通的功能需求出现。与测试相关的成本通常与编码或设计的成本大致成比例,因此测试工作一般来说将是编码和设计成本的某个比例(比方说 25%)。此系数将具体到每个组织,并且可以通过收集一两个项目量度按经验寻找。


系数将被平台的数量或所需的其他类型的测试工作副本所修改。 2

·                      缺陷管理、构建,发布过程
存在与将测试人员插入开发过程中有关的成本。测试人员共享其他项目团队使用的特定开发工具,如用于缺陷跟踪的工具,以及构建和发布工具,如用于配置管理的工具。

精化(Elaboration)阶段:管理技术风险

RUP 的精化阶段是对准技术风险的管理的。为了制定出自该阶段的可行或不可行的决策,我们需要论证一个对每个鉴别出的技术风险的满意解决方案。通常,最糟的技术问题由非功能需求导致。非功能需求可以造成这样的有趣断言系统将拥有 99.999% 的可用性,或者系统将支持 10,000 个同时发生的用户会话。这些需求写起来便宜,但满足和测试起来昂贵。为了进行适当的评估,我们需要了解:

·                      在完成极端的非功能目标中可能隐含的权衡。

·                      当接近这些极限时各种架构退化的方式。

有了此数据,架构师可以选择最适当的架构,并且,当涉众面对他们需求的所有含意时,通常会更愿意调节他们的雄心,并且得到更多的回报。

因此,关键的评估需求是其中一个度量,并且这应该是此阶段测试人员主要的目标。

量度方法的评估

对于每个技术问题,架构团队将建立一个或多个具体表现一个解决方案方法的可执行系统。可能会有若干有竞争的解决方案(举例来说,通信中的 UDP TCP)和大量的对于每个解决方案的可配置选择(举例来说,进程架构中的 10 线程 对 50 个线程)。测试人员执行对生成架构的度量所必需的步骤。

度量强调的是是否对解决方案有了成熟的考虑而不是功能是否被正确的实现了,因为没有人会期望生命周期中早期就实现完全正确的功能或者甚至花费大量的精力去雕琢还不成熟的系统的功能。初始阶段中指定的许多实验室环境将在精化阶段中被需要。我们将度量性能和可伸缩性,跨过通信链接和出自数据库的数据速率,随负载变化时的响应时间,并且我们将生成需求所要求的其他度量。根据所有的架构原型执行这些测试,并且测试团队将与架构师携手工作,共同设计确认或驳斥每个设计决策的测试。

当传统测试人员可能会参与整个基于文档的活动时,测试团队在此阶段的行为与瀑布过程中所做的惊人地不同。当项目从一个危机牵绊到下一个时,许多工作都不相关了。相反,在迭代的项目的精化阶段,测试人员在起劲的行动着,被闪光灯和不停的拨号所围绕。测试人员赞成相关的且实际的测试,使它们与架构师保持一致,并且评估并解释结果。

当然这是富有挑战的工作,但同时还是要大量参与的、有价值的,并令人满意的。如果对于小型的团队环境及上千行的代码的情况建立这些测试都是棘手的,那么设想一下对上百万行的代码项目的大型团队来说所受到的阻碍。

虽然这个阶段执行测试设计和实现,但是我们应该记住,重要的是测试结果而不是测试文档。由于将会抛弃许多架构的提议,所以相关的测试也一样。我们仅需要做足够的测试设计和实现,用以获得必需的度量。我们不像细化提议那样做太多测试,随着最主要的架构候选的出现,我们可以添加严密,如可溯性和其他文档。

测试设计

作为并行活动,精化阶段表现出一次方便的时机来考虑技术架构中的小变更如何能够更好的帮助测试设计和测试自动化。

通过测试自动化,我的意思是使用记录键盘和鼠标事件的 GUI 记录或回放工具,可以回放来重复测试。经验丰富的测试人员知道自动化尤其要求重要的脚本维护工作。值得考虑一下允许脚本构造的测试架构,这与设计人员创建软件架构来简化应用程序构造具有同样意义。

测试人员应该考虑解决方案,特别是测试可能参数化的方法或映射到需求所暗示的组合爆炸的结合方法的复杂性维度。例如,考虑一个指定某个需要支持的平台组合的非功能需求。根据一个平台撰写脚本,在所有平台上回放是有利的。这同样可以应用到数据库后端、应用程序服务器、Web 服务器和环境基础架构的其他元素,并且特别是对于这些的排列组合。手动测试每个组合将是不能忍受的痛苦。测试自动化是唯一经济的解决方案。

大多数应用程序为测试人员的专长提供许多应用程序专用的机会。设计人员将找到用参数表示问题领域的方法,并且这些经常成为类似地用参数表示测试所沿着的维度。例如,在我所工作过的一个应用程序中,有许多看起来一样的屏幕上的表格,因此设计人员将列参数化为通用的小部件,这给予测试人员类似的能力来用参数表示它们的测试。

针对测试的设计在精化阶段如此重要的一个原因是在构建阶段很难找出时间来适当处理这一活动。但是有一个甚至更好的理由:通过测试人员和设计人员之间的良好对话,架构中的小让步可以给测试设计添加一个大好处。总而言之,精化阶段是针对测试而设计的适当时机。

构建(Construction)阶段:管理进度风险

RUP 的构建阶段瞄准进度风险的管理。如果应用了 RUP 首选的基于用例的方法,就可以比利用传统的(瀑布)方法更快地集中于可用的(尽管不完全)系统。当达到这一可用地不完全层次,剩下的路也就不远了。

该方法生成了一系列客观的改进的可执行系统,并且拥有重要的优势:

·                      在尽可能最早的时候给客户展示系统的功能。

·                      团队可以及早地获得部署经验。生成的可执行系统可以转化为产品化阶段的子集(部分部署)。这使我们获得产品化阶段问题的经验 —— 例如,验收测试所需要的是什么,如何为部署而打包,以及一百个其他的问题(参见下面的产品化阶段)。

·                      我们收集量度,这使得在迭代开发中可以立即看到项目进展。在瀑布过程中,不太可能直接比较分析活动量度和设计活动量度或编码活动量度,因为它们是完全不同的活动。但在迭代过程中,比较迭代 1 的量度与迭代 2 的量度更加容易,因为我们在重复同一组活动。

在几个星期内,我们就会完成一个分析——设计——编码——测试的周期,这个给我们一种明显进展的感觉。这就是构建阶段的迭代的独特之处。测试活动评估进展并验证确实有了进展。

评估进展

 

 

更多精彩内容请访问         www.17testing.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值