1.介绍
【使用uml的方式】
把uml当做草图sketch。顺向工程forward engineering在写代码前会绘制uml。而逆向工程reverse engineering根据已有的代码绘制uml来帮助理解。
把uml当做设计图blueprint是为了完整性completeness。在顺向工程中工作是构建详细设计的设计师会绘制设计图来让程序员更好的写代码实现。这个设计需要足够完整,里面所有的设计决策design decisions都被列出laid out,让程序员能够轻松的照着做而只需要一点点思考(the programmer should be able to follow it as a pretty straightforward activity that requires little thought)。
【标记和元模型notation and meta-model】
记号notation就是在模型中的图形材料graphic stuff,比如类图中的class、association、multiplicity。
方法论者寻找方式来提供方法的严谨性而不想牺牲其用处,一种方式就是定义一个元模型meta-model:经常是一个类图,定义该语言的观念。
【uml图】
activityprocedural and parallel behavior
classclass, features, and relationships
communicationinteraction between objects; emphasis on links
componentstructure and connections of components
composite structureruntime decomposition of a class
deploymentdeployment of artifacts to nodes
interactionmix of sequence and activity diagram
objectexample configuration of instances
packagecompile-time hierachic structure
sequenceinteraction between objects; emphasis on sequence
state machinehow events change an object over its life
timinginteraction between objects; emphasis on timing
use casehow users interact with a system
【敏捷开发agile process】
敏捷是一个涵盖性术语,包括共享同一个公用的值value和准则principle的集合 的许多过程。这些过程的例子有:极限编程extreme programming(XP),scrum,功能驱动开发feature driven development(FDD),crystal,DSDM(dynamic systems development method)。
敏捷过程很好的适应他们的本质nature,也是非常以人为中心。他假设一个项目的成功的关键因素是项目中人们的质量和他们怎样更好的以人类的方式工作在一起。
敏捷开发倾向于使用短的、时间限制的迭代,经常1个月或更少。因为他们不附加太多重心到文档上,他们不把uml绘制蓝图blueprint mode。他们大多把uml用作草图sketch mode。
敏捷开发少于形式,认为形式ceremony让改变变得困难,并违背有天赋的人的成果works against the grain of talented people。
【统一软件开发过程rational unified process】
尽管rup叫过程,但实际上是一个过程框架,提供一个词汇和宽松的结构来谈论过程。用rup第一件事是选择一个开发案例development case:你将在项目中使用的过程。
所有RUP项目应该有下面4个阶段:
·inception开端 给一个项目一个初始的评估evaluation。这里你决定是否提交足够的钱去做一个详细制作elaboration phase
·elaboration 指出项目的主要用例,并迭代开发软件。at the end of elaboration, you should have a good sense of the requirements and a skeletal working system that acts as the seed of development.In particular, you should have found and resolved the major risks to the project
·construction 继续构建过程,开发足够的功能以发布
·transition 包括不同的不需要迭代的后期活动,包括部署到数据中 心、用户培训等。
【找到项目合适的过程fitting a process to a project】
模式:describe common ways of doing things and are collected by people who spot repeating themes in designs.模式是一些设计的例子。
在每个迭代的最后,进行一次迭代回顾iteration retrospective。团队集合一起考虑事情进展怎样、能够怎样改善。列出下面3类:
·keep保持:进行得好的事情,确保继续
·problem问题:工作不好的方面
·try尝试:进程中用于改善的改变changes to your process to improve it
【在过程中找到合适的uml】
【需求分析】
指出软件的用户和消费者想要系统做的,可能需要的uml技术:
·用例:描述用户和系统怎样交互
·例图:从概念角度,是构建一个领域严格词汇的好方式
·活动图:展示组织的工作流,显示软件和人类活动的交互,显示用例的内容
·状态图:如果一个概念有一个有趣的生命周期,且不同的状态和事件会改变状态
需求分析最重要的是合用户和消费者交流。记住重要的是用最少的标记来绘制uml。
【设计】
有用的技术:
·类图:从软件角度,显示类和相互联系
·时序图:为普遍场景scenario。从用例中找出最重要和有趣的场景,来指出在软件中发生了什么
·包图:显示软件的大规模组织
·状态图:类的复杂生命历史
·部署图:软件的物理布局
【文档】
package diagram makes a good logical road map of the system.帮助我理解系统的逻辑片、看到其中的依赖关系、更好的控制他们。 部署图显示高级的物理图。
如果一个类有复杂的生命周期行为,绘制一个状态机来描述。
如果引入一个特别复杂的算法,我考虑使用一个活动图,只要他能让我更好的理解这块代码。
如果发现概念来了很多次,我使用模式pattern来抓取其基本思想。
写文档的一个重要事情是你没有采用的设计选项和你没有选择的原因。