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 图 ...
随机推荐
- 读javascript高级程序设计07-引用类型、Object、Array
一.引用类型 ECMAScript是支持面向对象的,可以通过引用类型描述一类对象所具有的属性和方法. 创建对象实例的方法时是用new 操作符加构造函数:var p=new Person(). 二.Ob ...
- 第八章 企业项目开发--分布式缓存memcached
注意:本节代码基于<第七章 企业项目开发--本地缓存guava cache> 1.本地缓存的问题 本地缓存速度一开始高于分布式缓存,但是随着其缓存数量的增加,所占内存越来越大,系统运行内存 ...
- Java: IO 字节流
FileReader是InputStreamReader的子类,InputStreamReader是Reader的子类.Reader系列是输入字符流. 1.一个字符一个字符的读取 import jav ...
- iOS开发拓展篇—应用之间的跳转和数据传递
iOS开发拓展篇—应用之间的跳转和数据传 说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够 ...
- 最小割 总结&&做题记录
模型要点: 1.一般适用于二取一问题或者01规划. 2.利用最小割=最大流,转化为最大流求之. 建议阅读胡伯涛的论文 <<最小割模型在信息学竞赛的应用>>,有精彩有序的证明和各 ...
- Node.js 事件
Node.js 事件 Node.js 所有的异步I/O 操作在完成时都会发送一个事件到事件队列. Node.js里面的许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件, ...
- Array 、 Dictionary 、 Object 3大数据结构 以及 for ... in for each的研究
Array:存储方式-------索引存储 (要求key是大于等于0的整数) Dictionary.Object:存储方式---------索引存储 区别:可以说它们的 key 都 对应 各自的引用, ...
- iOS移动下上传图片失败解决 (上传多图,带其他参数)
项目中有一个主要的功能,就是上传图片,结结果移动真的是很奇怪,WiFi,联通,电信都没有问题的情况下,居然在移动下不行,真的是很头疼.不过好在最后是解决了 项目的网络请求我是采用ASIHttpRequ ...
- pads
1安装和破解,这个网上很多资料,破解的时候比较麻烦一点,注意安装环境. 2无模命令 (pads特点就是快捷键操作) 参考http://www.cnblogs.com/asus119/archive/2 ...
- 如何取消win10电脑自动更新
windows 10系统中关闭windows自动更新步骤如下:1.按键盘上的“Windows徽标键+R”组合键,可以调出“运行”窗口. 2.输入gpedit.msc,单击“确定”,可以打开“本地组策略 ...