昨天,经理给我提出了两个问题,第一个是,有几种方法,可以让你的项目经理信服,软件测试工作可以结束(考虑测试覆盖率),第二个是RUP和敏捷的优缺点,二者之间有什么区别(目的为让我了解这两种方式),这两个问题让我很郁闷,从来都没有考虑过,而且,RUP是什么东西,敏捷?不懂呀,查了点资料,总算是明白一点了。
RUP即统一软件开发过程框架,在软件开发的整个过程中,对于测试工作,在不同的阶段会产生不同的文档,从起初的需求文档,到详细的用例数据设计等等,每个阶段都会伴随着一些文档的生成和修改,整个测试流程包括解读需求--写用例--评审用例--用例覆盖分析--执行用例--缺陷跟踪--测试报告---数据统计--测试总结,是一个比较漫长的过程,而且在测试的过程中,过多的依赖于文档与开发人员的沟通也大大减少,而敏捷开发,简化了开发流程,相应的敏捷测试过程也同样得到很大程度上的简化,其核心就是不断地找bug,加快了测试进度,在测试过程中,更多的是采用探索性测试的方法,在进行测试的同时,学习被测系统,可以在缺乏文档的环境下完成测试工作,避免了因为写很多文档或设计详细的用例数据等浪费时间的工作,节约成本,缩短开发或测试周期,能够使产品及早地上线。
在敏捷开发中,伴随着不断迭代式的开发工作,版本的多次发布,敏捷测试也要不断持续地进行,不断地进行回归测试,快速的测试,而RUP中的测试工作,就显得比较冗长,速度较慢。另外,敏捷测试虽然简化的测试流程,加快了测试速度,但却增大了一些不可预知的风险,对于需求的覆盖,也不会做到特别全面
敏捷测试是指在敏捷开发模式中的测试。敏捷测试包括单元测试(通常由程序员完成)和可接受性测试(通常由测试人员完成)
在敏捷的团队中,测试工作的核心内容是没有变的,就是不断地找BUG。只是你要调整好自己的心态,一切以敏捷的原则为主。更多的采用探索性测试方法,更多地采用上下文驱动的测试方法论,更多地采用敏捷自动化测试原则。探索性测试,这种强调同时设计、测试和学习被测试系统的测试方式是我们可以借鉴的,敏捷讲求合作,其实是指出了我们传统工作方式沟通上的毛病,开发人员与测试人员往往都比较对立,我们传统的方式过分依赖书面的沟通,文档驱动,缺乏很多面
2. RUP简介
RUP是Rational Unified Process的简称。RUP是最佳软件开发经验的总结,它包括了软件开发中的六大经验。迭代式开发;管理需求;使用基于组件的软件体系结构;可视化建模;验证软件质量;控制软件变更。它是判断是否真正实施RUP的一个重要标准。
A) 六大经验
迭代式开发。在软件开发的早期阶段就想完全、准确的捕获用户的需求几乎是不可能的。实际上,我们经常遇到的问题是需求在整个软件开发工程中经常会改变。迭代式开发允许在每次迭代过程中需求可能有变化,通过不断细化来加深对问题的理解。迭代式开发不仅可以降低项目的风险,而且每个迭代过程以可以执行版本结束,可以鼓舞开发人员。
管理需求。确定系统的需求是一个连续的过程,开发人员在开发系统之前不可能完全详细的说明一个系统的真正需求。RUP描述了如何提取、组织系统的功能和约束条件并将其文档化,用例和脚本的使用以被证明是捕获功能性需求的有效方法。
基于组件的体系结构。组件使重用成为可能,系统可以由组件组成。基于独立的、可替换的、模块化组件的体系结构有助于管理复杂性,提高重用率。RUP描述了如何设计一个有弹性的、能适应变化的、易于理解的、有助于重用的软件体系结构。
可视化建模。RUP往往和UML联系在一起,对软件系统建立可视化模型帮助人们提供管理软件复杂性的能力。RUP告诉我们如何可视化的对软件系统建模,获取有关体系结构于组件的结构和行为信息。
验证软件质量。在RUP中软件质量评估不再是事后进行或单独小组进行的分离活动,而是内建于过程中的所有活动,这样可以及早发现软件中的缺陷。
控制软件变更。迭代式开发中如果没有严格的控制和协调,整个软件开发过程很快就陷入混乱之中,RUP描述了如何控制、跟踪、监控、修改以确保成功的迭代开发。RUP通过软件开发过程中的制品,隔离来自其他工作空间的变更,以此为每个开发人员建立安全的工作空间。
B) RUP软件开发生命周期
RUP软件开发生命周期是一个二维的软件开发模型,如下图所示。纵轴代表核心工作流是静态的一面,横轴代表时间显示过程动态的一面,用周期、阶段、迭代、里程碑等名词描述。
从横轴来看RUP把软件开发生命周期划分为多个循环,每个循环生成产品的一个新版本,每个循环由4个连续阶段组成,这四个阶段是:初始阶段,定义最终产品视图和业务模型,确定系统范围;细化阶段,设计、确定系统的体系结构,制定工作计划即资源要求;构造阶段,构造产品并继续演进需求、体系结构、计划直至产品提交;移交阶段,把产品提交给用户使用。
RUP的9个核心工作流是:业务建模,理解待开发系统所在的机构及其商业运作,确保所有人员对它有共同的认识,评估待开发系统对结构的影响;需求,定义系统功能
及用户界面,为项目预算及计划提供基础;分析与设计,把需求分析结果转换为分析与设计模型;实现,把设计模型转换为实现结果,并做单元测试,集成为可执行系统;测试,验证所有需求是否已经被正确实现,对软件质量提出改进意见;部署,打包、分发、安装软件,培训用户及销售人员;配置与变更管理,跟踪并维护系统开发过程中产生的所有制品的完整性和一致性;项目管理,为软件开发项目提供计划、人员分配、执行、监控等方面指导,为风险管理提供框架;环境,为软件开发机构提供软件开发环境。
C) RUP核心概念
角色:描述某个人或者一个小组的行为与职责。RUP预先定义了很多角色。
活动:是一个有明确目的的独立工作单元。
工件:是活动生成、创建或修改的一段信息。
D) RUP裁剪
RUP是一个通用的过程模板,包含了很多开发指南、制品、开发过程所涉及到的角色说明,由于它非常庞大所以对具体的开发机构和项目,用RUP时还要做裁剪,也就是要对RUP进行配置。RUP就像一个元过程,通过对RUP进行裁剪可以得到很多不同的开发过程,这些软件开发过程可以看作RUP的具体实例。RUP裁剪可以分为以下几步:
1) 确定本项目需要哪些工作流。RUP的9个核心工作流并不总是需要的,可以取舍。
2) 确定每个工作流需要哪些制品。
3) 确定4个阶段之间如何演进。确定阶段间演进要以风险控制为原则,决定每个阶段要那些工作流,每个工作流执行到什么程度,制品有那些,每个制品完成到什么程度。
4) 确定每个阶段内的迭代计划。规划RUP的4个阶段中每次迭代开发的内容。
5) 规划工作流内部结构。工作流涉及角色、活动及制品,他的复杂程度与项目规模即角色多少有关。最后规划工作流的内部结构,通常用活动图的形式给出。
软件过程是指实施于软件开发和维护中的阶段、方法、技术、实践及相关产物(计划、文档、模型、代码、测试用例和手册等)的集合。行之有效的软件过程可以提高开发软件组织的生产效率、提高软件质量、降低成本并减少风险。目前市场上领先的软件过程主要有RUP(Rational Unified Process)、OPEN Process和OOSP(Object-Oriented Software Process)。
RUP具有较高认知度的原因之一恐怕是因为其提出者Rational软件公司聚集了面向对象领域三位杰出专家Booch、Rumbaugh和Jacobson,同时它又是面向对象开发的行业标准语言——标准建模语言(UML)的创立者。RUP是由Objectory过程演化而来,其初始版本为5.0,先后经历了5.1、5.11、5.5等版本直到最新的Rational Unified Process2000版本。本文主要讨论RUP的主要内容和特点。
二 RUP的二维开发模型
RUP可以用二维坐标来描述。横轴通过时间组织,是过程展开的生命周期特征,体现开发过程的动态结构,用来描述它的术语主要包括周期(Cycle)、阶段(Phase)、迭代(Iteration)和里程碑(Milestone);纵轴以内容来组织为自然的逻辑活动,体现开发过程的静态结构,用来描述它的术语主要包括活动(Activity)、产物(Artifact)、工作者(Worker)和工作流(Workflow)。