第10章RUP10.1软件过程历史概述10.1.1软件开发过程简介10.1.2当前流行的软件过程10.1.1软件开发过程简介软件过程(softwareprocess)是指实施于软件开发和维护中的阶段、方法、技术、实践和相关Artifacts(计划、文档、模型、代码、测试用例和手册等)的集合。软件过程是开发高质量软件所需要完成的任务的框架。10.1.1软件开发过程简介软件过程的层次图:质量焦点过程方法工具以质量保证为核心,以过程为框架,以方法为指导,以工具为支持10.1.1软件开发过程简介软件工程过程将各种技术结合在一起,使得软件能够被合理地和及时地开发出来。软件工程的方法层在技术上说明了需要如何去开发软件。软件工程的工具层为软件过程和方法提供了自动或半自动的支持。软件过程提供一个框架,在这个框架下可以建立一个软件开发的综合计划。10.1.2当前流行的软件过程RationalUnifiedProcess(RUP)OPENProcessObject-OrientedSoftwareProcess(OOSP)ExtremeProgramming(XP)Catalysis催化方法DynamicSystemDevelopmentMethod(DSDM)10.2RUP简介10.2.1RUP过程的背景10.2.2传统的软件开发模型10.2.1RUP过程的背景软件项目失败的原因:混乱的需求管理。开发者之间以及开发者和用户不清晰的交流。架构不够坚固。没有发现需求、设计和实现中的不一致。缺少有效的测试。对项目状态的主观估计。没有正确地处理项目开发过程中的风险。没有对项目变更进行控制。(SCM软件配置管理)10.2.1RUP过程的背景RationalUnifiedProcess(RUP,统一开发过程)是一套面向对象的软件工程过程。RUP说明了如何有效地使用成熟技术开发软件。10.2.2传统的软件开发模型1.瀑布模型(WaterfallModel)2.螺旋模型1.瀑布模型(WaterfallModel)瀑布模型是一种线性模型。瀑布模型将软件生存周期划分为6个阶段:①需求分析②设计③实现④测试⑤运行⑥维护瀑布模型最为突出的缺点是缺乏灵活性。线性、顺序、非迭代“冻结”需求1.瀑布模型(WaterfallModel)设计实现测试运行维护需求分析2.增量模型瀑布模型是整体开发模型,开发完成后整个软件展现在用户面前,开发过程中看不到。增量模型是非整体开发模型,开发一部分,向用户展示一部分,用户及早看到软件,及时发现问题。或首先开发一个原型,完成主要功能,再根据用户意见逐步完善。2.增量模型增量模型渐增模型快速原型模型渐增模型增量构造模型(在需求分析和设计阶段采用整体开发,但编码和测试阶段按增量开发)演化提交模型(项目开发的各阶段都采用增量开发)快速原型模型探索型(需求分析阶段引入原型,将原型作为需求的补充形式)实验型(在设计阶段引入原型,快速分析实现方案)演化型(用原型过程代替全部开发阶段,通过原型的反复修改得到最终交付软件)抛弃策略附加策略3.螺旋模型螺旋模型结合了瀑布模型和增量模型。引入了风险分析,是一种风险驱动的模型。螺旋模型使用原型作为降低风险的机制。螺旋模型使开发者在产品演化的任意阶段均可使用原型方法。螺旋模型体现了RUP中迭代的思想。一个螺旋的周期一般包括四个阶段:制订计划。选择方案,选定完成目标的策略。风险分析。通过原型消除风险开发实施。用户评估。评审前一阶段的工作,计划下一阶段工作。3.螺旋模型SRS设计目标,方案,约束风险评估替换方案评估详细设计启动开发阶段计划下一阶段工作10.3RUP的二维开发模型传统的瀑布开发模型是一个一维的模型,开发过程被划分为多个连续的阶段。在RUP中,软件开发生命周期根据时间和RUP的核心工作流划分为二维空间。横轴表示项目的时间维,纵轴以内容来组织,是自然的逻辑活动。10.3RUP的二维开发模型16.3RUP的二维开发模型10.3.1RUP的核心工作流10.3.2RUP的四个阶段10.3.3RUP的迭代开发模型10.3.1RUP的核心工作流RUP中有9个核心工作流,分为6个核心过程工作流(CoreProcessWorkflows)和3个核心支持工作流(CoreSupportingWorkflows)。9个核心工作流在项目中轮流被使用,在每一次迭代中以不同的重点和强度重复。10.3.1RUP的核心工作流1.商业建模(BusinessModeling)2.需求分析(Requirements)3.分析与设计(AnalysisandDesign)4.实现(Implementation)5.测试(Test)6.部署(Deployment)7.配置和变更管理(ConfigurationandChangeManagement)8.项目管理(ProjectManagement)9.环境(Environment)1.商业建模(BusinessModeling)理解系统的组织结构及其商业运作,确保所有参与人员对开发系统有共同的认识。2.需求分析(Requirements)定义系统功能及用户界面,明确客户需要的系统的功能,开发人员理解系统的需求,为项目预算及计划提供基础。3.分析与设计(AnalysisandDesign)把需求分析的结果转化为实现规格。4.实现(Implementation)定义代码的组织结构、实现代码、单元测试、系统集成。5.测试(Test)验证各自子系统的交互与集成。单元测试集成测试系统测试6.配置(Deployment)打包、分发、安装软件,升级旧系统;培训用户及销售人员,并提供技术支持。制定并实施beta测试。alpha、beta、gamma测试即内部测试、公共测试、发布版releasecandidate7.设置和变更管理(ConfigurationandChangeManagement)跟踪并维护系统所有产品的完整性和一致性。8.项目管理(ProjectManagement)为计划、执行和监控软件开发项目提供可行性的指导;为风险管理提供框架。9.环境(Environment)为组织提供过程管理和工具的支持。10.3.2RUP的四个阶段RUP包括以下几个阶段:①初始阶段②细化阶段③构造阶段④交付阶段1.初始阶段初始阶段所要进行如下的活动:①明确说明项目规模,了解环境以及最重要的需求和约束,以便可以得出最终产品的验收标准。②计划和准备商业理由。评估风险管理、人员配备、项目计划以及成本/进度/收益折衷的被选方案。③综合考虑被选构架,评估构架。④准备项目的环境,评估项目和组织,选择工具,决定流程中要改进的部分。1.初始阶段初始阶段的评估标准如下:①出资人同意系统范围定义以及费用和进度评估。②主要用例是否符合需求。③费用和进度评估、优先级、风险以及开发过程的可信性。④任何已开发的原型的深度和广度。⑤实际开销与计划开销。初始阶段的焦点是需求和分析工作流。2.细化阶段细化阶段的评估标准如下:①标明用例模型中的用户和参与者,并且建立用例的描述文档。用例模型需完成80%。②创建软件系统开发过程中的软件结构的描述文档。③创建可执行的系统原型。④细化商业案例和风险列表。⑤创建整个项目的开发计划。细化阶段的焦点是需求、分析和设计工作流。3.构造阶段构造阶段的主要目标如下:①优化资源、避免不必要的报废和返工,使开发成本降到最低。②尽快达到质量的要求。③快速完成有用的版本,例如Alpha版、Beta版和其他测试发布版。④完成所有功能的分析、开发和测试。⑤迭代式、递增地开发随时可以发布的产品。⑥确定准备好软件系统的外部环境。构造阶段的焦点是实现工作流。4.交付阶段交付阶段的主要目标如下:①进行Beta版测试,按用户的要求验证新系统。②替换旧的系统。③对用户和维护人员进行培训。④开始调整活动,例如调试、性能或可用性的增强。⑤与用户达成共识,配置基线与评估标准一致。交付阶段的焦点是实现和测试工作流。10.3.3RUP的迭代开发模型每一次顺序地通过各工作流称为一次迭代RUP中的每个阶段可以进一步分解为迭代。10.3.3RUP的迭代开发模型与传统的瀑布模型相比较,迭代过程的优点:①降低了在一个增量上的开支风险。②降低了产品无法按照既定进度进入市场的风险。③加快了整个开发工作的进度。10.4核心工作流介绍三个方面制品/产物Artifact人员Person工作流中的主要活动Workflow10.4.1需求捕获工作流需求捕获通过对应问题的理解和分析,确立问题涉及的信息、功能和系统行为,将用户需求精确化、完全化。需求的焦点主要在初始和精化阶段,在精化阶段后期,需求捕获的工作量大幅下降。10.4.1需求捕获工作流10.4.1需求捕获工作流1.制品2.工作人员3.工作流1.制品在需求捕获工作流,主要的UML制品:①用例模型(UseCaseModel)②参与者(Actor)③用例(UseCase)④构架描述⑤术语表(Glossary)⑥用户界面原型2.工作人员参与需求捕获阶段的工作人员:①系统分析人员(SystemAnalyst)②用例描述人员(UseCaseSpecifier)③用户界面设计人员(UserInterfaceDesigner)④构架设计师(Architect)3.工作流需求捕获的工作流主要包括五个活动:①确定参与者和用例②区分用例的优先级③详细描述一个用例④构造用户界面原型⑤构造用例模型10.4.2分析工作流分析的主要工作开始于初始阶段的结尾,和需求一样是细化阶段的主要焦点。细化阶段的大部分活动是捕获需求,分析工作与需求捕获在很大程度上重叠。10.4.2分析工作流10.4.2分析工作流1.制品2.工作人员3.工作流1.制品在分析工作流期间,主要的UML制品:①分析模型②分析类③用例实现(分析)④分析包⑤构架模型2.工作人员在分析工作流期间,所参与的工作人员:①构架设计师②用例工程师③构件工程师3.工作流分析工作流主要包括四个活动:①构架分析②分析用例③分析类④分析包10.4.3设计工作流设计工作流的主要工作是位于精化阶段的最后部分和构造阶段的开始部分的主要建模活动。系统建模最初的焦点是需求和分析,在分析活动逐步完善后,建模的焦点开始转向设计。10.4.3设计工作流10.4.3设计工作流1.制品2.工作人员3.工作流1.制品在分析工作流期间,主要的UML制品:①设计模型②设计类③用例实现-设计④设计子系统⑤接口⑥配置图2.工作人员参与设计工作流的工作人员包括:①构架设计师②用例工程师③构件工程师3.工作流设计工作流中,主要包括四种活动:①构架设计②设计一个用例③设计一个类④设计一个子系统10.4.4实现工作流实现(实施)是关于把设计模型转换成可执行代码的过程。从系统分析师或系统设计师的角度看,实现工作流的重点就是完成软件系统的可执行代码。实现工作流是构建阶段的焦点。10.4.4实现工作流10.4.4实现工作流1.制品2.工作人员3.工作流1.制品在实现工作流中,主要有六种制品:①实现模型②组件③实现子系统④接口⑤构架描述(实现模型)⑥集成构造计划2.工作人员参与实现工作流的工作人员:①构架设计师②构件工程师③系统集成人员3.工作流在实现工作流中,包括一系列活动:①构架实现②系统集成③实现一个子系统④实现一个类⑤执行单元测试10.4.5测试工作流测试是一项相当主要的工作。测试工作流贯穿于软件开发的整个过程。它开始于软件开发的初始阶段,而细化阶段和构造阶段是测试的焦点。测试是为了找出程序中的错误与权限,而不能证明程序无错。10.4.5测试工作流10.4.5测试工作流1.制品2.工作人员3.工作流1.制品测试工作流中,包括七个制品:①测试模型②测试用例③测试规