从IT方法论来谈RUP
在《从IT方法论来谈Scrum》中我谈到了6Ways方法框架,本篇仍用6Ways方法框架来概括的谈谈RUP方法。
软件开发过程描述了软件构造、部署和维护的一种方法。统一过程(Unified Process)是一种流行的构造面向对象系统的软件开发过程。RUP(Rational Unified Process)是对UP的详细精化,并且已经被广泛采纳。有些人可能一看到RUP提供这么多流程和工件,觉得不够敏捷,我认为RUP本身其实是一个方法框架,本身也可以采纳一些现在敏捷实践。采用什么方法重要,但采用方法后的执行更重要,对RUP来说,如果我们做得好就是敏捷,做不好就可能瀑布了。
The way of thinking
软件开发中成功的项目比例很少,原因很多,如:没有正确的理解用户需求、没有能力处理需求的改变、模块不能集成、软件很难维护和扩展、很晚才发现重要的项目缺陷、不好的软件质量、不能接收的软件性能等。基于导致项目失败的这些原因,RUP认为下面这些最佳实践可以改善软件的开发状况:
- 在早期迭代中解决高风险和高价值的问题 不断的让用户参与评估、反馈和需求 在早期迭代中建立内聚的核心架构 不断地验证质量:提早、经常和实际的测试 可视化软件建模(使用UML) 仔细的管理需求 实行变更请求和配置管理
The way of working
迭代是UP最重要的思想。RUP重要的概念之一:周期(cycles),如下图由多个周期构成一个软件开发生命周期。
对于每个周期,下图展现了更为详细的不同阶段(Phase)和流程:
四个阶段
- 初始阶段(Inception):预见项目的范围、构想和业务案例 (Lifecycle Objective)
- 初始阶段不是一个需求阶段,而是类似与可行性阶段,项目相关人员是否就项目的构想达成基本的一致,项目是否值得继续进行认真的研究 时间不应超过一周,只需要确定这个项目是否值得认真研究,而不是真正去深入研究项目(这个工作留待细化阶段进行)如果预选就决定项目必须进行,而且项目明显是可行的,那么初始阶段会很短,可能只包含一次需求研讨会,并为第一次迭代执行计划,然后就快速的进入细化阶段 主要实践活动-用例建模 对于迭代开发的一个关键理解在于:过程中的工件在初始阶段只是部分完成,在之后的迭代中在逐步精化提炼。例如,用例模型可以列举大多数所需的用例和参与者,但其中可能只有10%的用例会被详细描述,这样就足以建立起有关系统的范围、目标和风险的高层的大致构想。 主要工件:是否意味着大量的文档?工件是可选的,只需要从下面选择对项目确实有价值的工件,放弃哪些不必要的工件,工件的关键不是文档或图表本身,而是其中蕴含的思想、分析和前期准备。
- 构想和业务案例:描述高层的目标和约束、业务案例,并提供一个执行摘要 用例模型:描述功能需求和相关的非功能需求 补充规范:描述其他需求 术语表:关键的领域术语 风险列表和风险管理计划:描述业务、技术、资源和进度的风险,以及如何减轻这些风险或该如何应对 原型和概念验证:阐明构想,验证技术问题。 迭代计划:描述在第一次细化迭代中该作什么 阶段计划和
- 计划:对细化阶段的持续时间和工作量进行低精度的猜测。开发涉及的工具、人员、培训和其他资源 开发案例:描述为本项目定制的统一过程的步骤和工件。在统一过程中,总需要为项目定制一些步骤或工件
细化阶段(Elaboration):已精化的构想,核心架构的迭代实现,高风险的解决,大多数需求和范围的识别,更为现实的评估。 (Lifecycle Architecture)
- 细化阶段不是一个需求或设计阶段,而是一个迭代实现核心架构并降低高风险的阶段
构造阶段(Construction):迭代实现遗留下来的风险较低和比较容易的元素,准备部署 (Initial Operational Capability) 移交阶段(Transition):beta测试,部署 (Product Release)
多个流程
- 业务建模:在开发单独的应用时,业务建模包括领域对象建模。在从事大规模业务分析或业务过程再工程时,业务建模包括跨越整个企业的业务过程的动态建模。 需求:对应用的需求分析,如写出用例和识别非功能性需求 分析和设计:设计的所有方面,包括总体架构、对象、数据库、网络连接等。分析强调的是对问题和需求的调查研究,而不是解决方案。设计强调的是满足需求的概念上的解决方案,而不是其实现。分析和设计可以被概括为:作正确的事(分析)和正确的做事(设计)。 实现:编程和构建系统,而不是部署系统 测试 配置和变更管理 项目管理 环境:指建立工具并为项目定制过程,也就是说,设置工具和过程环境。
1-5为核心工作流程,6-8为支持工作流程
The way of controlling
- 如何计划和管理迭代:需要多少迭代?每次迭代多长时间?每次迭代的目的是什么?如何跟踪每次迭代情况?
The Phase Plan (Project Plan):一个粗略的计划,每个开发项目只有一份项目计划。包括了一个周期(cycle)内所有的环节(有时也可以包含多个周期)。计划包含主要里程碑的时间,要求的资源。如果能够明确分几个iteratio,则需要标识时每个小里程碑的时间和目的。
- The Iteration Plan:迭代计划,包含当前迭代的详细计划,包括时间、任务和资源分配,在当前迭代后半期还需要包含下一个迭代的计划
- 风险管理 度量
The way of modeling
RUP在不同流程中会由不同模型支持,下图为模型和流程对应图:
对于每个模型,RUP描述who在when时how做what。RUP使用五个主要元素来表达:
角色: the who
活动: the how
工件:the what
工作流: the when
规程(Disciplines): 组合前面四种元素
下图为其中一个示例:
The way of supporting
Rational (现IBM)提供了对RUP的工具支持。
The way of communicating
RUP定义了一系列流程和工件,这些工作作为各角色间沟通的主要内容,用例和架构是RUP的两个重要内容。
- 用例驱动开发:使用用例表达需求,对业务进行描述。用例作为整个开发流程的基础。 架构为中心流程:架构使用多个、协调一致的视图来表达系统,作为概念、构建、管理和演进系统的主要工件
其他
IBM Rational Unified Process
developerWorks 中国 RUP资源 RUP搜索
如何做一个成功的架构师——玩转RUP
Enterprise Unified Process(EUP) 一个RUP的扩展
Agile Modeling and the Rational Unified Process (RUP) EUP 引入了许多企业级别的规程,包括操作和支持以及七个企业规程:企业业务建模、组合管理、企业架构、战略重用、人员管理、企业管理、软件流程改进。RUP 与 EUP 之间的一个基本区别在于后者处理完整的 IT 生命周期。RUP 仅处理该生命周期的软件开发部分。
Making the Unified Process Work in Practice
The Agile Unified Process (AUP)
统一过程 UP/AUP/RUP 资源
RUP presentation
书籍
The Rational Unified Process: An Introduction, Third Edition
Applying UML and Patterns:An Introduction to Object-Oriented Analysis and Design and Iterative Development (3rd Edition)
编写有效用例
UP和XP
- UP建议增量的编写用例和非功能性需求文档(XP不是) UP建议在迭代开始,主要编程之前绘制更多的可视化设计图(例如耗时半天或一天),XP建议用一点点时间来做可视化设计(例如30分钟)
从IT方法论来谈RUP的更多相关文章
- 菜鸟入门Linux之路(方法论浅谈)
Linux是为人熟知的OS之王,已"统治"世界.要想学好绝非易事. 作为菜鸟,可以与Linux亲密接触的方法很多,如视频.书籍.各种企培资料等等,如今的在线教育也如火如荼. 总结说 ...
- IT168关于敏捷开发采访
1.我们知道敏捷开发是一套流程和方法的持续改进,通过快速迭代的方式交付产品,从而控制和降低成本.但是在实行敏捷初期,往往看不到很好的效果.这里面,您觉得问题主要出在哪?团队应如何去解决问题?金根:我认 ...
- 开放产品开发(OPD):开篇
OPD?这是什么玩意?google一下.忘记说了,最近google被封锁的厉害,那就百度一下吧.可惜,OPD找不出是什么.你今天你找不到是正常的,因为之前还没有OPD,而现在才开始有OPD这个东东.相 ...
- 数据挖掘的标准流程-CRISP-DM
1.起源 CRISP-DM (cross-industry standard process for data mining), 即为"跨行业数据挖掘过程标准".此KDD(know ...
- iOS应用架构谈(一):架构设计的方法论
当我们讨论客户端应用架构的时候,我们在讨论什么? 其实市面上大部分应用不外乎就是颠过来倒过去地做以下这些事情: 简单来说就是调API,展示页面,然后跳转到别的地方再调API,再展示页面. 那这有什么好 ...
- iOS应用架构谈:架构设计的方法论
缘由 之前安居客iOS app的第二版架构大部分内容是我做的,期间有总结了一些经验.在将近一年之后,前同事zzz在微信朋友圈上发了一个问题:假如问你一个iOS or Android app的架构,你会 ...
- 软件开发学习笔记 <二>软件开发模型、Up、Rup、敏捷Up
软件开发过程(process) 是一个将用户需求转化为软件系统所需要的活动的集合. 软件生命周期(SDLC,Software Devlopment Life Cycle) 软件从孕育.诞生.成长.成熟 ...
- 淘宝前端工程师:国内WEB前端开发十日谈
一直想写这篇"十日谈",聊聊我对Web前端开发的体会,顺便解答下周围不少人的困惑和迷惘.我不打算聊太多技术,我想,通过技术的历练,得到的反思应当更重要. 我一直认为自己是" ...
- iOS应用架构谈 开篇
iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方案 iOS应用架构谈 动态部署方案 iOS应用架构谈 本地持久化方案 缘由 之前安居客iOS app的第二版架构大部分内容是 ...
随机推荐
- angularJS seed 安装
安装nodejs 安装python 配置python 环境 安装git 配置git 环境 clone angularJS seed 代码. 环境变量如下: C:\Program Files\nodej ...
- python FTP上传和下载文件
1. 连接FTP server import ftplib ftp = ftplib.FTP(ftpserver, user, passwd) 等同于 import ftplib ftp = ftpl ...
- 网络打洞(P2P软件穿透内网进行通信) 原理
http://www.cnblogs.com/gansc23/archive/2010/10/20/1857066.html 首先先介绍一些基本概念:NAT(Network Address Trans ...
- VS2008 引用程序集 没有强名称 解决办法
为项目添加强名称方法:1.右键单击项目,打开属性窗口;2.在属性窗口里选择<签名>标签,选中为程序集签名的选项,在下拉列表里选择新建 3.打开新建签名窗口,输入签名的名称密码等内容 单击确 ...
- React 万能的函数表达式
一.语法简介 表达式可以以下两种方法, (1)(function A(){})(this),(this)参数在函数外面 (2)(function B(){}(this)),(this)参数在函数里面 ...
- JavaScript事件冒泡和事件委托
JavaScript事件冒泡和事件委托 付建宇 - 2 条评论 接触JavaScript不久,学的东西也不是特别多.小雨就是习惯把平时学到的东西拿出来分享.一方面加强自己的印象,一方面可以让自己的经验 ...
- VCL里为什么要用类函数代替API,为什么要用CM_消息代替虚函数
之所以要用类函数代替API,是因为VCL对它做了一些包装,好在API起作用之前和之后做一些额外的事情:通知和判断等等.之所以类函数要包装一个CM_消息,是因为这样方便程序员(在调用类函数的基础上)截断 ...
- MyBatis学习总结_16_Mybatis使用的几个建议
1.Mapper层参数为Map,由Service层负责重载. Mapper由于机制的问题,不能重载,参数一般设置成Map,但这样会使参数变得模糊,如果想要使代码变得清晰,可以通过service层来实现 ...
- Eclipse中使用正则表达式搜索替换
Eclipse中使用正则表达式搜索替换 分类:software | 标签: 正则表达 替换 eclipse 2011-11-29 11:28 阅读(1930)评论(0)编辑删除 最近在eclip ...
- 无图片,用css border实现尖三角
<!DOCTYPE HTML> <html> <head> <meta charset="gbk" /> <style typ ...