UML基础与应用
RUP(Rational Unified Process)
·软件面临的危机
·RUP的思路:Implementing Best Practices
·RUP的基本特征
·RUP软件开发生命周期
·RUP带来的观念变化
·小结
软件危机的主要特征
·软件开发周期大大超过规定日期;
·软件开发成本严重超标;
·软件质量难于保证。
软件开发面临的问题?
·不能满足用户或商业的要求
·不能很好的定位需求
·模块难于集成
·到最后才发现错误
·对于终端用户来说质量较差
·负载时性能差
·没有协调团队的努力
·不断的修改——发布问题
Rational统一过程(RUP)?
·一个过程是指想要到达一个目标而采取的一组有序的步骤。
·在软件工程中,目标是高效、准时的提交一个满足你的业务需求的软件产品。
RUP介绍
·UML很大程度上是过程独立的,你可以将它运行于许多软件过程。
·RUP是一种特别适应于UML的生命周期方法。
·RUP提出了一整套以UML为基础的开发准则,用以指导软件开发人员以UML为基础进行软件开发。
·RUP所处理的问题:
——有缺陷的、无法预见结果的、高度依赖于个别“英雄”程序员的、不可重复的开发过程;
——开发的软件难于适应用户的要求;
——在应对需求的变更方面无能为力;
——需要单调乏味和昂贵的测试流程;
——项目中出现的严重缺陷发现的太迟;
——开发的软件难以维护和扩充。
·RUP使得开发团队成员将共享:
——同一个知识库;
——同一个开发过程;
——同一个开发视图;
——同一种建模语言。
RUP的思路:implementing Best Practices
RUP达到最佳实践的几种措施:
——迭代式开发
——管理需求
——使用构件架构
——可视化建模
——检验质量
——控制变更
Waterfall Development:Risk vs.Time
·延迟关键风险解决
·延迟和集中系统的集成和测试
·派出了早期部署
·经常导致较大的无计划的反复
迭代式开发的优点
降低风险
得到早期用户反馈
持续的测试和集成
适应变更
提高复用性
迭代式开发示意图
迭代式开发详述:
——迭代是一种技术,用来把系统功能传递到一系列连续的增量的完整版本。
——每个版本都在一个特定固定的时间段被开发,该时间段称之为迭代。
——迭代的成果是一个可执行产品的一个版本,是最终系统产品的一个子集。
——通过多次迭代连续增加和精化系统,在每个迭代过程中逐步增加信息、进行细化。
——每次迭代都选择目前对风险影响最大的使用实例进行,以分解和降低风险。
迭代式开发特征:
——Critical risks are resolved before making large investments。在进行大规模的投资之前就解决了关键的风险问题。
——Initial iterations enable early user feedback。使得早期的用户反馈在初始迭代中就能出现。
——Testing and integration are continuous。连续进行测试和集成。
——Objective milestones provide short-term focus。各个目标里程碑提供了短期的焦点(阶段性的中心)
——Progress is measured by assessing implementations。对过程的测量是通过对实现的评定(而不仅仅是文档)来进行的。
——Partial implementations can be deployed。可以对局部的实现进行部署。
需求管理:
——需求管理是一种用于查找、记录、组织和跟踪系统需求变更的系统化方法。
——确保能够:解决正确的问题,建立正确的系统。
——需求管理包括:1、提取、组织系统的功能和约束,并将它们写成文档;
2、估计需求的变化并评估它们会产生的影响;
3、跟踪需求的实现。
——RUP的开发活动是用例驱动的(Use case-driven)。它强调要在透彻理解提交的系统将如何被使用的基础上建造系统。用例和脚本的表示法用于编排从需求捕获到测试的过程流,并提供从开发到提交系统的可跟踪的线索。
采用构件架构的优势:
——对体系结构进行自下而上的设计、实现和测试
——用一种系统化的做法来定义好的体系结构。
——采用定义明确的接口来使得变更有弹性。
——由高级别的用例来驱动。
——易于直观上的理解。
可视化建模:
——描述体系结构特点和结构。
——描述系统里的各个元素如何组合在一起。
——保证设计和实现上的一致性。
——保证没有歧义的沟通。
质量检验:
——为每个关键模块创建测试用例并测试,从而保证所有的需求被正确的实现。
——不可接受的应用性能和不能接受的可靠性对一个软件系统的影响同等重要。
——验证软件可靠性,例如:内存泄露、性能瓶颈。
——对每一次迭代进行测试。
管理哪些变更?
——控制、追踪和监控项目的所有变更,从而启动每次迭代。
——为每个开发者建立安全的工作空间。
——对不同工作空间的改动提供隔离机制。
——控制所有的软件制品:模型、代码、文档等。
RUP的基本特征:
·迭代式增量开发
·用例(Use case-driven)驱动
·以软件体系结构为中心
·受控的迭代是增量开发:
——将软件开发分为一系列小的迭代过程,在每个迭代过车欧诺个中逐步增加信息、进行细化;
——根据具体情况决定迭代的次数、每次迭代延续的时间以及迭代工作流;
——每次迭代都选择目前对风险影响最大的用例进行,以分解和降低风险。
用例驱动:
——采用用例来捕获对目前系统的功能需求;
——采用用例来驱动软件的整个开发过程,保证书需求的可跟踪性,确保系统所有功能均被实现;
——将用户关心的软件系统的业务功能模型和开发人员关心的目标软件系统的功能实体模型结合起来,提供一种贯穿整个软件生存周期的开发方式,使得软件开发的各个阶段的工作自然、一致的协调起来。
以软件体系结构为中心:
——强调在开发过程的早期,识别出与软件体系结构紧密相关的用例,并通过对这些用的分析、设计、实现和测试,形成体系结构框架;
——在后续阶段中队已形成的体系解耦股框架进行不断细化,最总实现整个系统;
——在开发过程的早期形成良好的软件体系结构,有利于对系统的理解、支持重用和有效的组织软件开发。
RUP软件开发生命周期:
·时间(Time)
——周期(Cycles):一个RUP可以分为若干个周期
阶段(Phases):起始、演化、构造、提交
迭代(Iterations):每个阶段进行若干次
·核心工作流(Core Workflow)
——工作流(Workflow):对应于特定的迭代的连续活动
活动(Activities):需求定义、分析、设计、实现和测试
中间制品(Artlfacts):活动的结果
·RUP将一个周期的开发过程分为四个阶段:
——Inception(起始阶段)为项目建立一个业务案例。
——Elaboration(细化阶段)建立工程计划和合理的体系结构。
——Construction(构件阶段)建造系统。
——Transition(提交阶段)——把系统提供给最终用户。
·在每个阶段中都有很多迭代。迭代代表一个完整的开发周期,从在分析汇总捕获的需求到实现和测试,产生一个可执行的项目发布版本。
·每个阶段和迭代都有一些风险缓解焦点,并以一个定义良好的里程碑结束。里程碑复审及时的提供了一个评价点,评价关键目标是否得到满足,项目是否需要以任何范式被重新构造。
·起始阶段:
意图:1、建立业务模型用例
2、明确项目的范围
结果:
·项目的实际需求
初始用例模型和领域模型(10-20%完成)
·初始的业务案例,包括:
1、成功准则
2、风险评估
3、所需资源评估
4、显示主要里程碑进度表的阶段计划
在初始阶段的最后,检查项目的生命周期目标,决定是否继续进行全范围的开发。
·细化阶段:
意图:
1、分析问题域
2、建立一个健全的、合理的体系结构基础。
3、明确高项目中风险的元素。
4、制定一个一个合理的项目开发计划。
结果:
1、用例图和领域模型(80%完成)
2、一个可执行的体系结构和文档。
3、一个修订的用例图和风险评估
4、一个针对整个项目的开发计划。
·在这个阶段的最后,检查已经细化的系统目标和范围,体系结构的选择以及主要风险的解决办法,并决定是否需要进行构造。
·构建阶段:
意图:迭代增量的开发一个完整的软件系统,该产品是准备提交给用户使用的。
产品:
1、完整的用例图和设计模型
2、用户手册
3、可执行代码
4、开发文档
5、每次迭代的评测标准
6、改进的开发计划
·提交阶段:
意图:
为用户安装部署软件
产品:
1、可执行的程序。
2、改进的系统模型
3、每次迭代的评测标准
4、发出程序的描述和评测指标描述。
5、改进的用户文档。
6、改进的开发文档。
·迭代与阶段之间的关系:
每个阶段可以分解成多个迭代。
一个迭代是一个完整的开发循环,它将产生一个可知的发布版本,这个版本构成最终产品的一个子集,然后迭代的得到最终系统。
RUP带来的观念变化:
·更强的计划性:迭代开发一味这要有更强的遇见性和计划性,阶段的划分、阶段内的迭代都需要仔细规划。这要求项目管理者承担更大的责任,而所换来的则是开发任务的具体化和可预见性。
·坦然面对迭代过程中一部分中间制品的推倒重来:不要恐惧这样的显示,由于迭代过程的细化和相应工具的支持,其影响是可以控制的。
·把软件放在首位:过分强调规格说明(问题空间的描述)的作用是不恰当的,因为用户所购买的是软件(解空间)而不是规格说明。在开发过程中,需求和规格说明都是允许变化的。
·尽早进行困难的工作:强调与实现的关系密切,而将困难工作放在开发后期进行是十分有害的,会使开发后期突然遇到“集成地狱”而使开发过程失去控制。
·坦然面对中间制品的“不美观”:在一些迭代中产生的中间制品,虽然外观上不能令用户和投资者满意,但其作用和价值是完美的。这时,项目管理者要充当一个“意见缓冲区”,对外树立可信赖和讲信用的形象。
·加强开发过程监控与量化管理:项目管理者要注重对各种变化与扰动的测量与监控,应先示范,后发文档,以使得开发人员信服。
·确定迭代的数量、持续时间和内容:RUP给出了一定的指南,但主要靠项目管理者根据实际情况确定,因而责任更加重大。
·既需要好的项目管理者,也需要好的体系结构设计师:一个成功的软件项目同时需要这两种人,而且项目管理者本人就应当懂得体系结构设计。
小结
·RUP带来的观念变化,有可能影响到软件工程的许多基本概念,但还有待于观察。
·对软件开发过程的管理是为了更好的支持和促进软件开发,而不是制约软件开发。
软件开发成功与否的标志,不只是开发出实现了用户需求的产品,而且还包含了时间、成本、对维护与 扩充的支持等重要因素,因此需要开发过程的有效支持。