-统一软件开发过程PPT课件_第1页
-统一软件开发过程PPT课件_第2页
-统一软件开发过程PPT课件_第3页
-统一软件开发过程PPT课件_第4页
-统一软件开发过程PPT课件_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第13章统一软件开发过程 13 1统一过程概述13 2统一过程的开发模式13 3统一过程的模型13 4用例驱动13 5构架13 6迭代和增量13 7小结习题 13 1统一过程概述 13 1 1统一过程的形成1 软件开发过程的需要UML产生以后 可以用UML来描述软件系统的静态结构和动态行为 解决了软件系统建模的工具和手段问题 但是 UML是独立于开发过程的 如何用UML来开发软件系统 这一直是UML的三个创导者思考的问题 其实他们在研究UML的同时 也在构思统一软件开发过程 他们在总结了以前的经验和实践的基础上推出了Rational统一过程 2 统一过程的发展历程统一过程是经过30多年的发展和实际应用后推出的最终产品 早在1967年 爱立信公司的Jacobson就研究出基于构件的开发方法 1987年Jacobson离开爱立信公司后 成立了自己的公司 于1988年推出了 对象工厂 的过程产品 它是以用例驱动的开发过程 从1 0版发展到1995年的3 8版 该产品已推广到电信以外的行业和瑞典等许多国家 1995年 Rational软件公司引进了Jacobson的 对象工厂 的产品 于1997年 推出 Rational对象工厂过程 4 1版 它是在3 8版的基础上加入了Rational公司的经验和实践而形成的 它是一个构架驱动的 增量迭代方式的开发过程 3 统一过程的应用统一过程是一个软件开发过程 它是一个将用户需求转换为软件系统所需要的活动的集合 统一过程不只是一个简单的过程 而是一个通用的过程框架 可用于不同类型的软件系统 各种不同应用领域 各种不同类型的组织 各种不同功能级别以及各种不同规模项目的开发 13 1 2统一过程的特点1 基于构件统一过程所构造的软件系统 是由软件构件通过明确定义的接口相互连接所建造起来的 2 使用UML统一过程使用UML来制定软件系统的所有蓝图 UML是整个统一过程的一个完整部分 它们是共同发展起来的 它强调创建和维护模型 3 用例驱动用例不只是一种确定系统需求的工具 它还能驱动系统的设计 实现和测试的进行 基于用例模型 开发人员可以创建一系列实现这些用例的设计模型和实现模型 可以审查每个后续建立的模型是否与用例模型一致 而测试人员可以确定实现模型的构件是否实现了用例 所以用例启动了开发过程 还使开发过程结合为一体 开发过程是沿着一系列从用例得到的工作流前进的 4 以构架为中心软件系统的构架从不同角度描述了即将构造的系统 它刻画了系统的整体设计 去掉了细节部分 突出了系统的重要特征 包含了系统中最重要的静态结构和动态行为 构架是根据应用领域的需要逐渐发展起来的 并在用例中得到反映 每种产品都具有功能和表现形式 功能与用例对应 表现形式与构架对应 用例与构架是相互影响的 用例在实现时必须符合于构架 构架必须预留空间以实现现在或将来所有需要的用例 5 按迭代和增量方式开发开发软件产品是一个艰巨的任务 需要几个月以至几年 需要将开发的项目划分为若干个细小的项目 每个细小项目是一次能够产生增量的迭代过程 增量是指产品中增加的部分 迭代是指开发中要经历的5种工作流 迭代过程要处理一组用例 这组用例合起来能扩展所开发产品的可用性 后续的迭代过程建立在前一次迭代过程末期所开发的制品上 迭代过程必须是受控的 即必须按照计划好的步骤有选择地进行 6 可剪裁用统一过程开发软件时 各阶段应该有多长 各个阶段迭代多少次是合适的 候选构架可以在哪一点完全建立起来 这些问题的答案取决于系统的规模 项目的性质 开发组织的领域经验 甚至包括相关人员有效配合程度 总之 统一过程是一个框架 可以根据具体情况加以裁剪 以此来适应各种各样的开发过程 13 1 3统一过程的要素软件项目的最终结果是一种产品 软件产品由各类人员建造 指导各类人员工作的是过程 过程使用一组工具自动完成开发活动 因此 统一过程有项目 产品 人员 过程 工具等要素 1 项目项目创造产品 一个项目包括一组人员 在规定的时间 费用范围内 完成相应制品 过程提供一种组织模式 指明项目所需人员及项目将产生的制品 2 产品在统一过程中 所开发的产品是一个软件系统 软件系统是以机器形式或人们可读形式给机器 各类人员提供表示的所有制品 机器是指工具 编译器或目标计算机 制品是指在开发过程中由各类人员创建 生产 修改和使用的各种信息 制品分为技术制品和管理制品两种 技术制品有UML图 用户界面 构件 测试计划和模型 管理制品有业务案例 开发计划 安排活动计划等 统一过程最重要的制品是模型 构造系统就是构造模型 3 人员人员参与产品的开发 这种参与贯穿整个软件生命周期 人员指的是 用户 客户 构架设计师 开发人员 测试人员和项目管理人员 不同人员有不同的作用 他们可以提供资金 规划 开发 管理 测试和使用等 4 过程软件开发的过程定义了一个完整的活动集合 该活动集合将用户的需求转换为一组表示软件产品的制品集合 相关的活动组成了工作流 而工作流确定了参与该过程的各类人员 标识了过程中各类人员创建的制品 描述了过程中各类人员在相关活动中如何建立 生产和使用彼此的制品 因此 过程指导项目的开发 是从工作流角度描述过程的 统一过程是可具体化的 即它是一个通用过程 也是一个过程框架 每个使用统一过程的组织最后都要将它具体化 以满足实际开发情况的需要 5 工具工具支持软件开发过程 适合于将重复工作任务自动化 过程和工具是相互配套的 过程驱动工具的开发 工具指导过程的开发 过程不能缺少工具 13 2统一过程的开发模式 13 2 1统一过程的框架统一过程的框架如图13 1所示 图13 1统一过程的框架 1 统一过程的循环周期统一过程把软件生命周期划分为若干个循环周期 每个循环周期都向用户提供一个产品版本作为终结 其中产品的第一个版本是最难开发的 因为它奠定了系统的基础和构架 一个循环周期随着它在软件生命周期中所处位置不同而有着不同的内容 如果系统最初的构架是可扩展的 则产品的后期版本将建立在早期版本的基础上 如果后期版本中 系统的构架有较大变化 则开发的早期阶段需要做更多的工作 2 循环周期包含的阶段每个循环周期都要经历一定的时间 在这段时间中又可以分为4个阶段 即初始阶段 细化阶段 构造阶段和移交阶段 每个阶段都以一个里程碑作为结束标志 3 阶段的若干迭代在每个阶段中 管理人员或开发人员又可以将本阶段细分为多次迭代过程 确定每次迭代过程产生的增量 每次迭代都会实现一些有关的用例 可以把一次迭代看成是一个细小项目 4 迭代过程经历的工作流一次迭代中 开发人员将处理一系列的工作流 每次迭代过程都会经历5种核心工作流 它们是需求工作流 分析工作流 设计工作流 实现工作流和测试工作流 不同阶段的迭代过程中的工作流情况是不同的 在初始阶段的迭代中 可能是需求工作流的比重大一些 而在构造阶段的迭代中 实现工作流的比重大一些 13 2 2统一过程的阶段1 初始阶段初始阶段的主要目标是确定产品应该做什么 它的范围是什么 降低最不利的风险 并建立初始业务案例 从业务的角度表明项目的可行性 为项目建立生命周期目标 2 细化阶段细化阶段的主要目标是建立软件系统的合理构架 因此要对问题域进行分析 捕获大部分的系统需求 即捕获大部分的用例 软件系统的构架表示为系统中所有模型的不同视图 即构架包括了用例模型 分析模型 设计模型 实现模型和实施模型的视图 实现模型的视图包含了一些构件 以证明该构架是可运行的 在本阶段末期 项目经理要规划完成项目的活动 估算完成项目所需的资源 该阶段的结果是构架基线 还要对构造阶段进行相当详细的规划 3 构造阶段构造阶段的主要目标是开发整个系统 确保产品可以开始移交给客户 即产品具有最初的可操作能力 在本阶段中 构架基线逐渐发展成为完善的系统 同时将消耗所需的大部分资源 在本阶段末期 产品将包括管理者和客户达成共识的所有用例 但是 产品不可能完全没有缺陷 很多缺陷将在移交阶段发现和修改 4 移交阶段移交阶段的主要目标是确保得到一个准备向用户发布的产品 本阶段包括产品进入 版的整个时期 这时期用户试用该产品并报告产品的缺陷和不足 开发人员则改正所报告的问题 本阶段还包括制作 用户培训 提供在线支持等活动 13 2 3统一过程的迭代1 什么是迭代一次迭代是一个细小项目的开发过程 它要经历所有核心工作流 能产生内部版本 即迭代能产生产品的增量 每次迭代都包括软件开发项目所具备的一切步骤 如规划 通过一系列工作流 需求 分析 设计 实现和测试 进行的处理 最后准备发布 但是 迭代不是一个完全独立的实体 它是项目开发各阶段中的一次迭代 只是整个项目中的一个细小项目 每个细小项目都像过去的瀑布模型 因为它处理的是瀑布模型的活动 可以将每次迭代标注为一个 小瀑布模型 2 迭代过程的用例在每次迭代过程中 开发人员标识并详细描述有关的用例 以选定的构架为向导来创建设计 用构件来实现设计 并验证这些构件是否满足用例 如果一次迭代达到了目标 开发工作便可以进入到下一次迭代 如果迭代未能达到预期的目标 开发人员必须重新审查前面的方案 并试用一种新的方法 3 受控的迭代过程为了获得迭代过程的最佳效果 迭代过程必须是受控的 即必须按照计划好的步骤有选择地执行 受控的迭代过程具有很多好处 可以将成本风险降低为一次增量所需的费用 可以降低产品不能按计划投放市场的风险 可以加快整个项目的进展速度 4 迭代过程的选择和排列在开发过程中 为了获得最佳的效益 开发人员应选择实现项目目标所需的迭代过程 并且要按照一定的逻辑顺序来排列这些迭代过程 一个成功的项目要沿着这条路线进行下去 不会与预期的路线有较大的偏差 5 不同阶段的迭代过程的差异早期迭代侧重于了解问题和技术 在初始阶段 迭代过程关注的是获得一个业务案例 在细化阶段 迭代的目的是进行构架基线的开发 在构造阶段 通过每次迭代中的一系列构造活动来创造产品 直到得到准备交付给用户的产品 但是每次迭代过程都按照同样的模式进行 即每次迭代都以规划活动开始 以迭代的评估作为结束 13 2 4统一过程的工作流1 什么是工作流工作流是指一组活动 在统一过程中 用工作流来描述过程 工作人员执行工作流中的一组活动而产生相应的制品 用UML中的术语来说 工作流是协作的构造型 其中的工作人员和制品是参与者 工作流分为过程工作流和支持工作流 2 过程工作流过程工作流有7种 它们是业务建模 需求 分析 设计 实现 测试和实施 其中需求 分析 设计 实现和测试是核心工作流 下面给出各种过程工作流的活动 需求工作流 列举出候选需求 捕获功能性需求 捕获非功能性需求 分析工作流 构架分析 分析用例 分析类 分析包 设计工作流 构架设计 设计一个用例 设计一个类 设计一个子系统 实现工作流 构架实现 系统集成 实现一个子系统 实现一个类 执行单元测试 测试工作流 制定测试计划 设计测试 实现测试 执行集成测试 执行系统测试 评估测试 实施工作流 可交互系统的配置 3 支持工作流支持工作流有3种 它们是配置和变化管理 项目管理和环境 这些工作流的活动用于软件开发的管理工作 在统一过程中没有对这些工作流作详细说明 配置和变化管理工作流 控制变化 维护项目制品的完整性 项目管理工作流 进度控制 质量保证 资源安排 环境工作流 开发项目所需要的基础设施 13 3统一过程的模型 13 3 1模型概述1 模型的含义模型是对系统的一种抽象 从某个视点 在某种抽象层次上详细说明被建模的系统 如一种视点是系统的功能需求视图或设计视图等 模型是对构架设计师和开发人员构造的系统的抽象 对功能需求建模的开发人员来说 认为用户处于系统之外 而认为用例处于系统之内 只关心用户能做什么 而不管系统内部的结构 对设计建模的人员来说 只考虑结构元素如何协同工作来为用例提供功能 2 模型的重要性在统一过程中最引人注目的制品是模型 因此 构造系统就是一个构造模型的过程 即采用不同的模型来描述系统所有不同视角的过程 为系统选择模型是开发组所要做的最重要的决定之一 统一过程给出了经过仔细选择的模型集合 并用它来启动过程 模型集合向所有人员阐明了该软件系统的功能 重要特征和各种结构 3 自包含的视图模型是系统的语义闭合的抽象 即它是一个自包含的视图 用户不需要其他信息 从其他模型 就可以解释该模型 自包含的概念意味着当触发一个用该模型描述的事件时 开发人员希望在系统中产生的结果只能有一种解释 13 3 2主要模型1 用例模型用例模型包含系统的所有用例 参与者以及它们之间的联系 它是通过需求工作流中的活动来建立的 该模型建立了系统的功能需求 2 分析模型分析模型由用例实现以及参与用例实现的分析类组成 用例实现是协作的构造型 而分析类是参与者 在UML中 协作的定义 为一组由类 接口和其他元素组成的群体命名 它们共同工作 提供比各组成部分功能总和更强的合作行为 协作的图符用虚线椭圆来表示 参见图13 2 分析模型有两方面的作用 可以更详细地提炼用例 将系统的行为初步分配给提供行为的一组对象 这组对象是分析类的对象 引入3种分析类 边界类 控制类 和 实体类 它们是类的构造型 边界类 用于表示系统与参与者的交互 它的图形符号是用一条短横线把一条短竖线和一个圆连接起来 控制类 用于表示协调 排序 事务处理以及对其他对象的控制 它的图形符号是用一个圆在其上部加一个向左的箭头来表示 实体类 用于建立长期且持久的信息模型 它的图形符号是用一个圆在其底部加一条短横线来表示 这些分析类的图形符号在图13 2中出现 分析模型可以通过分析工作流的活动得到 分析模型用于建立概念设计 该模型是统一过程对UML的扩展 3 设计模型设计模型将系统的静态结构定义为子系统 类和接口 并定义由子系统 类和接口之间的协作所实现的用例实现 在分析模型和设计模型中都涉及用例实现 为了区分这两者 在分析模型中称为用例实现 分析 在设计模型中称为用例实现 设计 在不混淆时 也可省略后缀 4 实现模型实现模型包括构件和类到构件的映射 5 实施模型实施模型定义计算机的物理结点和构件到这些结点的映射 6 测试模型测试模型用于描述测试用例和测试规程 7 其他模型系统可能还包括描述系统业务的领域模型或业务模型 13 3 3模型之间的关系一个系统包含了不同模型中模型元素之间的所有关系和约束 所以 一个系统不仅是其模型的集合 也是模型间关系的集合 1 用例模型和其他模型的依赖关系用例模型的用例可详细说明为分析模型的用例实现 分析 可具体体现为设计模型的用例实现 设计 因此它们之间存在依赖关系 2 模型之间的跟踪关系用例模型的用例与分析模型的用例实现 分析存在跟踪关系 同样 在设计模型的用例实现 设计和分析模型的用例实现 分析之间 以及在实现模型的构件和设计模型的子系统之间也都存在跟踪关系 13 4用例驱动 13 4 1用例的作用用例有如下几种作用 1 用例提供一种捕获功能需求的方法和手段 2 用例不仅启动一个开发过程 还能将核心工作流结合为一个整体 3 用例有助于项目经理规划 分配和监控开发人员所执行的多个任务 4 用例是保证所有模型具有可跟踪性的一种重要机制 5 用例有助于进行迭代开发 每次迭代由用例驱动而经历所有工作流 即从需求到设计和测试 进而得到一个增量结果 即每次迭代都会确定并实现一些用例 6 用例有助于设计构架 在最初几次迭代中 通过选择几个适当的用例 便可以用一个稳定的构架来实现一个初始系统 可用于多个后续的循环周期 7 用例可以作为编写用户手册的起点 因为每个用例说明了一种使用系统的方法 13 4 2建立用例模型1 捕获用例每种系统使用方式是一个候选用例 通过详细说明 修改 分解和合并而成为完整的用例 2 确定用例所有功能需求确定为用例 很多非功能性需求可以附加到用例上 3 创建用例模型每个用户表示为一个参与者 所有用例 参与者组成用例模型 用例模型是使用系统方式的完整规格说明 它是开发人员和各种用户达成的共识 可作为合同的一部分 13 4 3创建分析模型1 确定用例实现选择用例模型中的一组用例 实现为分析模型中的用例实现 用例实现是协作的构造型 分析类是用例实现的参与者 用例实现跟踪依赖于用例 2 确定分析类通过分析每个用例的处理说明 找出实现该用例的分析类和关联 每个分析类在一个用例实现中充当一个或几个角色 每个分析类要详细说明参与实现某个用例的职责和属性 3 分析模型用例实现和分析类构成了分析模型 随着分析的用例越来越多 分析模型会逐渐完善起来 分析模型是概念性的 可能是暂时的 存在于前几次迭代中 在大型复杂系统中 分析模型存在于整个生命周期 4 实例ATM系统的用例模型和分析模型 在ATM系统中 储户是参与者 取款 存款和转帐是3个用例 ATM的用例模型如图13 2所示 现在只考虑取款用例 因为在ATM系统中 取款是最重要的用例 完成取款用例动作序列的简化路径是 储户表明自己的身份 储户选择从哪个帐户取款 确定取款金额 系统从帐户扣除取款金额 发给储户相应金额的现金 取款用例实现时所需的分析类 分配 和 出纳员接口 是 边界类 取款 是 控制类 帐户 是 实体类 取款 用例的分析模型如图13 2所示 在图中还表示了分析模型的 取款 用例实现跟踪依赖于用例模型的 取款 用例 图13 2ATM的用例模型和 取款 的分析模型 5 用例实现 分析的描述每个用例实现 分析都包含一个充当不同角色的分析类集合 在分析中 使用协作图来建立分析类的对象间交互模型 图13 3是根据取款用例动作序列的简化路径绘制的 它描述了取款的用例实现 分析是如何通过一组分析对象来执行的 图13 3 取款 用例实现 分析的协作图 13 4 4设计和实现模型的建立1 设计模型的特征设计模型是以分析模型作为输入来创建的模型 设计模型是有层次关系的 它是实现的蓝图 2 确定设计模型的元素与分析模型类似 设计模型也要定义类 接口和子系统等元素 以及这些元素之间的关系 这些元素适应于实现环境 分析模型的用例实现 分析说明分析类参与了实现用例 分析 而设计模型的用例实现 设计跟踪依赖于分析模型的用例实现 分析 当设计这些分析类时 会确定和导出更多应用于实现环境的精细化后的设计类 例如 设计出纳员接口类时 确定和导出了显示类 数字键盘类 读卡机类和客户管理类 分析模型中分析类导出的设计类如图13 4所示 图中上面部分是分析模型的分析类 下面部分是导出的设计模型的设计类 粗线方框表示主动类 主动类的实例是主动对象 这个主动对象拥有一个进程或线程并能初始化地控制活动 设计类跟踪依赖于相应的分析类 图13 4设计模型的设计类跟踪到分析模型的分析类 3 按子系统对类分组对有很多类的大系统 只用类来实现用例是不可能的 可以按照子系统进行分组 子系统提供和使用一个接口的集合 可以自底向上设计子系统 开发人员基于已确定的类来考虑和设计子系统 就是把这些类封装到明确定义功能的单元内 也可以自顶向下设计子系统 构架设计师在确定其他类之前首先要确定高层的子系统和接口 然后开发人员处理各个子系统的任务 确定并设计子系统的类 4 实现模型的建立实现模型由构件构成 包括所有的可执行体 如ActiveX构件和JavaBeans构件 以及其他类型的构件 在实现工作流期间 要开发可执行系统的制品 如可执行的构件 文件构件 源代码 表构件 数据库元素 等 一个构件是系统中一个实际的且可替换的部分 它符合并且提供接口集合的实现 若用面向对象程序设计语言来实现构件 则类的实现也很简便 每个设计类对应一个实现中的类 如C 类或Java类 实现工作不仅是开发源代码 还要对源代码进行单元测试 13 4 5用例的测试1 测试模型测试模型包括测试用例和测试规程 在测试期间 需要验证系统是否实现其规格说明 先要建立测试模型 再执行测试规程以确保系统按照预期的方案工作 2 测试用例测试用例是测试输入 运行条件和针对具体目标制定的预期结果的集合 例如 按照一条特定的路径完成一个用例或验证与所规定的需求的一致性 3 测试规程测试规程是关于如何对具体的测试用例进行设置 运行和评估结果的规格说明 用例测试可以从参与者角度来执行 此时将系统作为一个黑盒子对待 也可从设计的角度来执行 此时所构造的测试用例用来验证用例实现中涉及到的类的实例 看这些实例能否完成它们应该做的工作 13 5构架 13 5 1构架概述1 构架的含义在建造具有框架结构的楼房时 首先用钢筋水泥建造柱和梁构成的框架 然后再建造楼板 墙体 墙面 铺设管道等 直至完成整个楼房的建造 楼房的框架就是该楼房的骨架 开发一个软件系统也与此相似 首先应构造系统的构架 具体来说 软件系统的构架是对以下问题决策的总和 软件系统的组织 对组成系统的结构元素 接口以及这些元素在协作中的行为的选择 由这些结构元素与行为元素组合成更大子系统的方式 用来指导将这些元素 接口 它们之间的协作以及组合起来的构架风格 软件构架不仅涉及到静态结构与动态行为 而且涉及使用 功能 性能 适应性 重用和可理解性等 可以把系统的构架看成是所有人员能够接受的共同目标 构架提供了整个系统的清晰的视角 这对控制系统的开发是必要的 构架描述了系统的重要模型元素 它们是系统中的基础部分 能够指导系统的开发工作 可以有效地理解 开发并改进这个系统 2 构架基线在细化阶段结束时 从构架角度来看 已开发出了代表最重要的用例及其实现的系统模型 获得了用例模型 分析模型 设计模型以及其他模型的早期版本 这些模型的集合就是构架基线 它是小的 皮包骨架的系统 对构架来说 重要的用例以及其他一些输入可用来实现构架基线 构架基线不仅仅靠模型制品来表示 它还包括构架描述 这个描述实际上是同时建立的 3 构架描述构架描述可以有不同的形式 可以是对组成构架基线的模型的抽取 也可以是以一种便于阅读的形式对这些抽取的重写 构架描述的作用是在系统的整个生命周期内指导整个开发组的开发工作 它是开发人员目前和将来都要遵循的标准 4 用例和构架用例和构架之间存在着某些相互作用 用例驱动构架的开发 在最初的迭代中选择几个重要用例来设计 开发构架 它们是用户最需要的用例 因此 构架受用例的影响 同时 构架还会受到其他因素的影响 如软件产品构造在哪些系统上 希望使用哪些中间件 需要适应哪些政策和公司标准等 在捕获新的用例时 可以利用已存在的构架的知识更好地完成捕获工作 根据现存的构架来评估每个所选用例的价值和成本 也可以知道哪些用例很容易实现 哪些用例实现较为困难 所以 构架可以指导用例的实现 13 5 2构架的重要性1 有利于理解系统要使现代的系统为人们所理解是非常困难的 因为大系统包含复杂的行为 要在复杂的环境中运作 使用的技术也很复杂 以构架为中心进行开发 可以防止出现这种无法理解的现象 构架采用模型视图来描述 容易理解 2 有利于组织开发软件项目组织越庞大 协调开发人员之间工作的代价也越大 当项目分散在不同地方开发时 这种交流的开销也很大 构架将系统划分为带有明确定义接口的子系统 可以减少子系统之间的通信 可以有效地向双方的开发人员提供对方小组正在进行的工作 3 有利于软件重用软件产业要达到其他行业那样高的标准化水平 好的构架和明确的接口是实现这一目标的关键步骤 好的构架为开发人员提供在其上工作的稳定骨架 也有助于开发人员知道在哪里能找到可重用的元素以及发现可重用的构件 构架设计师的任务就是定义这个骨架和可重用子系统 通过精心设计可以得到可重用子系统 并可以装配起来使用 4 有利于进化系统任何大系统都需要不断进化 开发过程本身就需要这种进化 在投入使用后 由于环境的变化也需要对系统进一步完善 一个好的构架能适应这种进化 在大多数情况下 可以在系统中实现新的功能 而不会对现有的设计和实现造成太大的影响 相反 一个构架设计较差的系统 随着时间的推移以及使用很多补丁程序而出现功能退化 以至于无法有效地进行更新 13 5 3建立构架1 构架设计师构架是由构架设计师和其他开发人员共同创建的 他们致力于实现一个高性能 高质量的系统 构架设计师要选择构架模式和现存产品 安排子系统的依赖 即在创建一种设计方案时 某个子系统发生变化时不会对其他子系统造成影响 构架设计师具备两种能力 一种是所从事的领域知识 他必须明智地与所有项目相关人员配合 另一种是软件开发知识 他必须向开发人员说明构架 协调他们的工作 了解他们的反馈信息 还要全力支持管理 既要创建构架 又要予以实施 2 选择构架模式构架模式定义了某种结构或行为的模式 通常是一个特定模型的构架视图 每种模式都对实施定义了某种结构 并建议如何把构件分配到它的结点上 构架模式有如下几种 1 代理模式 代理模式是一种管理对象分布的通用机制 它允许对象通过一个代理调用其他远程对象 该代理将调用请求转发到包含被请求目标对象的结点和过程 2 客户机 服务器模式 三层模式和端对端模式 这些模式有助于了解所构造系统的硬件 并基于此硬件来设计系统 还定义了实施模型的结构 建议构件应该如何分布到结点上 3 层次模式 层次模式是一种重要模式 适用于多种系统 它定义了如何进行分层组织的设计 即一层的构件只能参与其下层的构件 它简化了理解和组织开发复杂系统的工作 降低了依赖 因为低层不必关心高层的细节和接口 具有分层构架的系统是通过多层子系统来组织系统的 该构架模式包括从上到下排列的专用应用层 通用应用层 中间件层和系统软件层 在上面层次上有单独的应用子系统 它是在低层子系统基础上构造的 通用应用层包含的子系统不是专用于一个单独的应用 而是相同领域或业务内能被许多不同应用所重用 上面两层构架要根据与构架相关的用例来建立 而建立下面两层构架时不必考虑用例的细节 因为这些层不是针对具体业务的 许多构架模式可用于一个单独的系统 构成实施模型的模式可以与层次模式相结合 其中层次模式可以辅助构成设计模型 3 创建构架构架是在细化阶段的迭代过程中创建的 现以分层构架为例说明创建的过程 首先确定构架的高层设计 然后在第一次迭代的几次构造中逐步确立该构架 在第一次构造中 处理的是通用应用部分 我们要决定在实施模型中包括哪些结点 以及这些结点应该如何进行交互 对应用有一个大致的了解也就足够了 在第二次构造中 处理的是专用应用部分 首先捕获需求 选择与构架相关的用例集合 并对其进行分析 设计 实现和测试 最后得到一个新的 用构架实现的子系统来支持所选的用例 经验表明 只有不到10 的类与构架有关 其余90 的类并不重要 这些类对系统其他部分来说是不可见的 其中一个类的改变不会影响到服务子系统外部的任何实质性的东西 大部分用例的实现对使用构架也不重要 因为它们没有对系统施加任何额外的约束 一旦选定了构架 绝大部分系统功能也就容易实现了 13 5 4构架描述构架描述与系统的一般模型非常相似 用例模型的构架视图看起来就像一般的用例模型 唯一区别就是用例模型的构架视图只包括对构架重要的用例 而最终的用例模型包含所有的用例 设计模型的构架视图也是如此 它看起来像是一个设计模型 但它只实现对构架有意义的用例 1 用例模型的构架视图用例模型的构架视图展示了最重要的用例和参与者 在ATM系统中 取款 是最重要的用例 没有它就没有实际的ATM系统 存款 和 转帐 用例对一般的储户并不太重要 在定义构架时 取款 用例要在细化阶段完全实现 而其他用例对于构架的目标意义不大 因此 用例模型的构架视图应该显示出 取款 用例的完整描述 2 设计模型的构架视图设计模型的构架视图展示了设计模型中对构架最为重要的元素 如最重要的子系统和接口 还有一些很重要的类 它还展示了最重要的用例是如何按照这些元素实现的 即如何实现用例的 在ATM系统中 用于实现 取款 用例的子系统是 ATM接口 事务管理 和 帐户管理 它们对构架很重要 同时 还有 客户管理 事务管理 和 帐户管理 3个主动类 图13 4中 也隐含在设计模型的构架视图中 ATM系统设计模型的构架视图如图13 5所示 图13 5ATM系统中设计模型的构架视图 3 实施模型的构架视图实施模型根据相互连接的结点定义实际的系统构架 这些结点是软件构件能够在其上运行的硬件单元 视图中需要确定哪些类是主动类 这些主动对象如何通信 同步和共享信息 以及将主动对象分配到实施模型的结点上 在ATM系统中 实施模型定义了3个结点 储户通过 ATM客户机 结点访问系统 该结点通过访问 ATM应用服务器 来执行事务 而 ATM应用服务器 又利用 ATM数据服务器 对帐户执行具体的事务 定义这些结点时 可以将子系统作为一个整体部署在一个结点上 ATM接口 子系统部署在 ATM客户机 结点上 事务管理 子系统部署在 ATM应用服务器 上 帐户管理 子系统部署在 ATM数据服务器 上 这些子系统中的每个主动类都部署在相应结点上 这些部署如图13 6所示 图13 6实施模型的构架视图 4 实现模型的构架视图实现模型是从设计模型和实施模型直接映射得到的 每个设计服务子系统通常会为它所安装的结点产生一个构件 有时候同一构件可能会在几个结点上实例化和运行 13 6迭代和增量 13 6 1迭代和增量概述1 迭代和增量的含义迭代是指按照迭代计划和评估标准 执行一组明确的活动 以便产生一个内部或外部发布的版本 迭代计划规定了谁应该做什么以及应该按照什么样的顺序做 增量是指系统中一个较小的 可管理的部分 通常指两次相邻的构造之间的差异 每次迭代至少产生一个新的构造块 从而向系统增加一个增量 2 迭代和增量开发的策略迭代和增量开发是以细小的 可管理的步骤来开发软件产品 即计划一小步 说明 设计和实现一小步 集成 测试和运行一小步 若对这一步感到满意 就进行下一步 在每步之间会得到反馈 并以此来调整下一步的侧重点 然后开始另一步 当处理完计划的所有步骤之后 便开发出了可以向用户发布的产品 3 迭代的组织统一过程的软件开发过程是由一系列迭代组成的 要对迭代进行排序以得到一条有序的途径 使早期的迭代为后期的迭代提供认知基础 早期迭代主要是关注确定项目的范围 了解风险 构造软件的核心构架 而后期的迭代则不断增加增量结果 直至得到可以对外发布的产品 迭代有助于规划 组织 监控和控制项目 每个阶段都要进行一些迭代 每个阶段都要考虑人员配备 资金提供 进度安排等问题 在每个阶段开始 管理人员决定如何来执行 必须交付什么结果和必须降低哪些风险 2 获得一个健壮的构架按照统一过程开发的原则 在初期阶段 需要寻找一个能满足关键需求 克服关键风险和解决开发中主要问题的核心构架 在细化阶段建立构架基线 指导进一步的开发 因此 得到一个健壮的构架本身是早期阶段迭代的结果 3 适应需求变化和开发的变化采用迭代和增量的方法 开发人员可以发现和解决前期构造中的问题 以及用户提供的建议和可能被忽略的需求 而在瀑布模型中 直到开发结束才能看到系统的运行 开发人员的一点很小修改 用户就需要增加一个遗漏的功能 这都会引起投资的增加或进度的拖延 在迭代和增量开发中 当测试过一次迭代后 有关人员可以根据预定义的准则对其进行评价 决定这次迭代是否得到了预期的增量 若只是部分成功 则可以延长本次迭代或在下次迭代中继续解决遗留问题 因此 迭代过程更易于用户在开发周期中尽早了解需要增加的需求 也更容易使开发人员进行相应的修改 因为开发过程是按照一系列迭代进行系统构造的 所以响应反馈或进行修改只是对一个增量的修改 不会波及整个系统 这种修改和返工容易进行 13 6 3通用迭代过程1 迭代工作流的元素迭代可被看作是一个工作流 每次迭代都以迭代规划开始 然后或多或少要经历5种核心工作流 最后以评估迭代结束 所以 迭代的一般元素是迭代规划 核心工作流 迭代评估和其他一些具体活动 如回归测试等 2 规划迭代过程迭代方法在初始阶段并不对整个项目进行详细规划 只是对最初的几步进行规划 第一次迭代的计划将会十分清晰 以后的迭代规划工作要考虑以前的迭代结果 与新的迭代相关的用例的选取 出现在下一次迭代中的风险现状以及模型集合的最新版本 后面的迭代计划不太详细 将在早期迭代中积累的成果和知识的基础上不断进行修改 直到在细化阶段建立了事实基础 才试图对构造和移交阶段进行规划 这种计划能使迭代开发得到控制 3 确定迭代顺序软件开发的迭代是按规划的顺序进行的 用例设定了目标 构架建立了一个模式 有了这个目标和模式 开发人员就可以规划出产品的开发顺序 规划人员对迭代进行排序就会得到一条顺畅的开发路径 规划的迭代顺序依赖于技术因素 重要的目标是确定工作顺序 以便尽早做出重要决定 即涉及新技术 用例和构架的决定 在一次迭代将要结束而另一次迭代即将开始时 迭代过程可能会出现重叠 但不能重叠太多 因为上一次迭代毕竟是下一次迭代的基础 13 6 4迭代的核心工作流下面列出了迭代的5种核心工作流 并给出每种核心工作流的人员 活动和制品 1 需求工作流人员 系统分析员 用例描述人员 用户界面设计人员 构架设计师 活动 确定参与者和用例 区分用例的优先级 详细描述一个用例 构造用户界面原型 构造用例模型 制品 用例 参与者 用例模型 构架描述 用例模型视图 术语表 用户界面原型 2 分析工作流人员 构架设计师 用例工程师 构件工程师 活动 构架分析 分析用例 分析类 分析包 制品 分析模型 分析类 用例实现 分析 分析包 构架描述 分析模型的视图 3 设计工作流人员 构架设计师 用例工程师 构件工程师 活动 构架设计 设计一个用例 设计一个类 设计一个子系统 制品 用例实现 设计 设计类 设计子系统 设计接口 设计模型 构架描述 设计模型的视图 实施模型 构架描述 实施模型的视图 4 实现工作流人员 构架设计师 构件工程师 系统集成人员 活动 构架实现 系统集成 实现一个子系统 实现一个类 执行单元测试 制品 构件 实现子系统 接口 实现模型 构架描述 实现模型的视图 集成构造计划 5 测试工作流人员 测试设计人员 构件工程师 集成测试人员 系统测试人员 活动 制定测试计划 设计测试 实现测试 执行集成测试 执行系统测试 评估测试 制品 测试用例 测试规程 测试构件 测试模型 制定测试计划 缺陷 评估测试 13 6 5迭代和增量开发过程1 各阶段迭代的活动在初始阶段 活动主要集中在需求工作流中 有少部分工作延续到分析和设计工作流 该阶段的工作几乎不涉及实现和测试工作流 在细化阶段 虽然活动仍然着重于完成需求 但分析和设计工作流中的活动更趋活跃 为构架的创建打下基础 为了建成可执行的构架基线 要包含设计 实现和测试工作流的活动 在构造阶段 需求工作趋于停止 分析工作也减少了 大部分工作属于设计 实现和测试工作流 在移交阶段 工作流的混合程度依赖于接受测试或 测试的反馈 如果 测试没有覆盖实现中的缺陷 则重复进行的实现和测试工作流中的活动会相当多 2 各阶段的里程碑循环周期各阶段都包含了产生主里程碑的迭代 迭代次数是不固定的 它是随项目不同而变化的 初始阶段的里程碑是循环周期的目标 细化阶段的里程碑是循环周期的构架 构造阶段的里程碑是最初

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论