UML精粹2 - 开发过程
迭代和瀑布过程
两者的本质区别是,你如何将一个项目分解为更小块。
- 瀑布风格基于活动来分解项目。为了构建软件,你不得不做某些活动:需求分析、设计、编码和测试。为期一年的项目可能有2个月的分析阶段,然后是4个月的设计阶段,接着是3个月的编码阶段,再接着是3个月的测试阶段。
- 迭代风格根据功能子集来分解项目。你可能会把一年分解为3个月的迭代。第一个迭代,处理1/4的需求,并对这1/4做完整的软件生命周期:分析、设计、编码和测试。在第一个迭代结束时,你拥有了一个做1/4所需功能的系统。然后,你再做第二个迭代,这样在6个月结束时,你拥有了一个完成一半功能的系统。
在进行瀑布开发时,每个阶段之间通常有正式的交接,但也经常有回溯。在编码期间,会有一些情况导致你需要回头看看分析和设计。当然,在开始编码时,你不应该假设所有设计完成了,后续阶段回头看看分析和设计决策时不可避免的。然而,这种回溯是一种异常,应该尽可能减少。
进行迭代开发时,在真正的迭代开发之前,通常会有一些探索活动。至少,这会让我们得到需求的高级别视图:足于让我们把需求打碎,放进接下来要进行的迭代中。每个迭代应该产出准备产品化的集成软件,但是通常很难严格达到这个地步,我们经常会听到一个项目有多个发布release,每一个发布分解为若干个迭代iteration。迭代有许多的名字:增量、螺旋、演进等。
你也可以使用杂化的方法。阶段交付staged delivery生命周期,先以瀑布风格完成分析和高级设计,然后把编码和测试放到迭代中。这样一个项目可能有4个月的分析和设计,紧跟着4个两个月的迭代来构建系统。
迭代的常见技能是使用时间盒time boxing。时间盒前调每个迭代有固定长度的时间。如果不能在规定时间内完成预计的功能,可以推迟一些功能到下一个迭代,而不能延迟迭代结束时间。一般我们可以发布一个功能少一点的软件,但不可以推迟发布时间,时间盒可以帮助控制时间。
迭代中用到的技术:自动化回归测试automatic regression test,重构refactoring,持续集成continuous integration。
预测性和自适应计划
预测性方法指望在项目早期做点工作,以便更好地理解后面不得不做的事情,这样,项目可以进行相对准确的估算。然而,事实是需求经常变动,计划赶不上变化。自适应计划认为预测性看起来就是错觉,要面对现实,把处理改变看成软件项目的常态。这样,改变得到控制,项目交付所能交付的最好的软件;虽然项目不是可预测的,但项目是可控的。自适应方法绝对需要迭代方法,预测性方法两种方式都行,不过,采用瀑布和阶段交付更容易看到项目如何进行。
敏捷过程
敏捷过程的例子有:极限编程XP,Scrum,特性驱动开发FDD,Crystal,动态系统开发方法DSDM。敏捷过程本性是非常自适应的,也非常注重以人为本。敏捷方法假设项目成功的最重要因素是项目中人的素质,以及他们一起工作时人际关系有多好,使用什么过程和工具绝对是次要因素。敏捷方法倾向于使用短的、基于时间盒的迭代,和更少的仪式ceremony(注重仪式的过程项目期间有许多文档和控制点)。敏捷过程经常被刻画为轻量的,但是要注意缺少仪式是自适应和以人文本的结果,而不是基本性质。
Rational统一过程(RUP)
RUP实际上是一个过程框架,提供了一个用来谈了过程的词汇表和松散结构。当你使用RUP时,第一件需要做的事情是选择一个开发案例(development case):你打算在项目中使用的过程。RUP本质上是迭代的过程。所有RUP项目遵循4个阶段:
- 初始inception阶段。对项目进行估算,决定是否投入足够的资金来做细化阶段。
- 细化elaboration阶段,识别项目的首要用例,并迭代构建软件,以便使系统的架构成型。细化阶段的最后,你应该对需求有好的体会,并且有大致可以工作的系统来扮演开发的种子。特别是,你应该发现并解决了项目的主要风险。
- 构造construction阶段。继续构建软件,开发足够发布的功能。
- 移交transition阶段。包含后期阶段的活动,这些活动不用迭代去做,可能包括部署到数据中心、用户培训等。
在阶段之间,有相当多的模糊地带,特别是细化阶段和构造阶段之间。对某些人来说,到构造阶段说明可以使用预测性计划模式,对其他人来说,它只说明你对需求有了全面的理解,并且有了一个项目使用的架构。
为项目裁剪过程
随着项目的进行,你可能需要裁剪项目过程,迭代支持频繁的过程改进。在迭代的末尾举行一次迭代回顾(iteration retrospective),团队聚在一起讨论:做得好的要保存,做得不好的要改进。在项目末期的时候或有主要发布时,考虑一次更正式的、持续两三天的项目回顾project retrospective。
为过程裁剪UML
考虑在项目过程的各个阶段使用什么类型的UML图。
- 需求分析。可以使用:用例,类图,活动图,状态图。
- 设计。类图,序列图,包图,状态图,部署图。
UML精粹2 - 开发过程的更多相关文章
- UML 运用于开发过程——总结
UML -- 统一的图形语言 用例图:需求捕获,测试依据类图:静态系统结构对象图:对象之间的关联构件图:构件之间的关联部署图:构建的物理部署 以上几种图的作用:描述系统结构 顺序图:捕获时间顺序协作图 ...
- uml精粹——11.活动图(及整个读书笔记分享)
11.活动图activity diagram 活动图是描写叙述过程化逻辑procedural logic.业务过程business process和工作流work flow的技术. 他和流程图fl ...
- UML精粹5 - 状态图,活动图,通信图,组合结构,组件图,协作,交互概述图,时间图
状态机图state machine diagram 下面是状态图的一个例子(一个城堡中的秘密保险箱的控制面板). 转换transition包括3个部分:trigger-signature [guard ...
- UML精粹4 - 对象图,包图,部署图,用例
对象图object diagram 对象图是某个时间点上的对象在系统中的快照,也经常被称为实例图.一般在展示组合对象结构时比较有用.例如 组合结构的类图 一个时刻的对象图 包图package diag ...
- UML精粹3 - 类图,序列图,CRC
类图Class diagram 类图描述系统中的对象类型,以及它们之间的各种静态关系.类图也展示类的性质和操作,以及应用于对象连接方式的约束.UML中的特性feature,涵盖了性质property和 ...
- UML精粹1 - 简介
Martin的主页 http://martinfowler.com/. Pavel Hruby开发的visio模板,可以用来画UML图: http://phruby.com 简介 统一建模语言UML是 ...
- UML精粹学习 - 订单类结构图
Order Class Diagram of Martin Fowler's UML Distilled
- 《UML精粹》第三章 -类图的基本概念
第三章 类图:基本概念 类图可用来描写叙述系统中各种对象的类型.也可描绘出对象间各种各样的静态关系.此外.类图中也能够秀出类的性质(property)与操作(operation),以及可应用到对象间连 ...
- uml精粹——10.状态机图
10.状态机图state machine diagram 状态机图是常见的描写叙述一个系统行为的技术. 在面向对象的方法中,为单个类绘制一个状态机图来展示单个对象的生命周期行为. 见图10.1 图 ...
随机推荐
- Android Studio 查看密钥库证书指纹SHA1
打开DOC命令窗体
- 前端获取url参数
function GetQueryString(name){ var reg = new RegExp("(^|&)"+ name +"=([^&]*)( ...
- (DFS)codevs1004-四子连棋
题目地址 方法是建立dfs,并在其中加入pre变量,记录之前移动的是W还是B.外面套for循环,从1步开始逐次递增,直到在i步时可以走完(dfs返回1),break退出循环,即为最短步. 本题的关键主 ...
- 1415-2个人项目Individual Project
作业要求: 个人独立完成,实践PSP相关知识. 时 间: 两周. (本来截止4月30日,考虑到刚迁移平台,延缓至5月7日) 实践目标: Github基本源代码控制方法 利用Junit4进行程序模块的测 ...
- iOS 服务器端推送证书p12文件制作
A.苹果服务器地址: Production和development用的push的服务器不同pdev是:$apnsHost = 'gateway.sandbox.push.apple.com';pro是 ...
- Android控件— — —ImageView
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...
- 关于工伤事故索赔计算很好用的一款APP
关于工伤事故索赔计算很好用的一款APP.详细介绍工伤伤残等级评估 工伤计算器根据国家颁布<劳动能力鉴定 职工工伤与职业病致残等级>,通过关键字检索,快速评估工伤伤残等级. 软件说明: 1 ...
- javaweb-dbutils2
package cn.itcast.demo; import java.sql.SQLException;import java.util.Arrays;import java.util.List;i ...
- 修改FastColoredTextBox控件完成选择
//判断是否是中文 public bool IsChina(char c) { bool BoolValue = false; if (Convert ...
- python ML 笔记:Kmeans
kmeans算法的python实现: 参考与样本来源<Machine Learning in Action> #-*-coding:UTF-8-*- ''' Created on 2015 ...