正文
共用一种语言说话
UML用来已经小一年了,期间真正使用的不错的项目也许没有。我总是感觉哪里做的不对,下一次会做的更好。但是也总算有了一些实践的经历。写出来大家讨论一下吧。
为什么使用UML就不用多说了,标题“共用一种语言说话”就是原因,客户、需求、系统分析、程序员、测试以及所有的与项目相关的人必须有一个约定的标准,使得大家在交流过程中不会出现屏障。
就我来看,UML建模体系和网络的OSI的7层结构有着非常的类似。(很怪的想法吗?我不觉得,我的脑子就这样,学习多线程时会想到项目管理J)我们知道OSI的7层结构是现在网络的标准,所有的基于网络的软件、硬件都是以它为准的。这样做的好处是对于异构的软硬件可以通过各层之间的转换,实现互相通信。UML也是一样,用UML工具ROSE可以建立在软件开发过程中的各种模型,适用于不同的层次,并且各层次之间又相互的联系。不过这里的层次需要理解成为客户、设计人员、实现人员等等,各层之间的语言习惯不同,对系统的理解不同,要求不同因此必须要用UML这个符号进行沟通,因为UML提供了整个系统开发过程中所需的适合各种不同层次交流的描述方法。
下面是我的一点体会,可能理解有误,但还是记录下来,毕竟已经从“盲人摸象”(初学UML写的一篇小文)进了一步。如果学习一件事物一帆风顺,除非是个心窍透亮的人,否则必定会有偏差。学习的乐趣也往往来源于窗户纸被捅破的那种醍醐灌顶的感觉。
我们来看,通常一个项目开始时需要客户和项目管理员用Use Case框图可以取得系统的高级视图,确定系统的边界。此时只需要定义系统的角色和用例,这时的用例的粒度可以比较的粗。只需要和客户就系统的主要功能达成共识即可。
项目管理人员用Use Case框图和文档(注意:真正的用例是文档,不是哪个鸡蛋或者鸭蛋状的圈圈J),将项目分解成可管理的小块。项目管理人员可以根据这些为项目小组成员分配任务。
系统分析人员和客户使用用例文档了解系统提供的功能,此时的用例被细化,甚至一不留神便会陷入到过度设计,这就需要系统分析人员的经验来进行把握了。实际上这时系统的需求阶段已经算是完成了。你可以利用这些用例文档编写用户手册了。
以上的内容通常在存放在ROSE的Use Case View中。在RUP中这部分被叫做先启阶段。
系统分析人员和开发人员用Sequence和Collaboration框图了解系统的逻辑流程、系统中的对象及对象间的消息。这时系统的开发已经从抽象到了具体分析对象的阶段。测试人员也将参与进来,因为测试人员需要了解系统的逻辑流程,以便进行测试方案和测试用例的设计。
开发人员进一步设计出Class图和State Transition框图,以便获得系统各部分的细节以及其相互关系的信息。实际上这已经是开始实现系统了。
以上的内容属于分析和设计阶段,理所当然的放在Logical View中。在RUP中这部分被叫做精化阶段。
下面进入RUP的构件阶段,在RUP中定义了若干的角色,架构人员、封装体设计员等等,我想我们的实际的工作中可能没有这样细致的分工,这些工作要么归系统分析员、要么归程序设计员。角色的叫法不同核心的工作确应该是一致的。那就是用Component和Deployment框图显示要生成的执行文件、DLL文件和其他组件,并且要生成这些组件的网络上的部署位置,在物理节点间分布系统功能。这些内容存放在ROSE的Component View和Deployment View中。
最后进入产品化阶段,我们可以看出在整个项目的实施过程中,整个小组都围饶着这个模型进行工作。实际上在每个阶段都是需要经过不断的重复的迭代。
TCP/IP协议有4个层次。RUP将软件开发分成4个阶段。UML又对应四个阶段提供不同的视图来进行描述。TCP/IP上下层之间通过应用程序进行转换,协调。同样UML的不同视图之间也会联系紧密,例如可以通过Sequence框图的对象发现类,通过对象之间消息便可以找到类的方法。
当然以上所说的是很简单的情况,实际应用时状况要复杂的多。例如在Use Case View中还可能需要Interaction框图来显示使用案例流程涉及的对象或类。因此我们要知道并没有规定程序设计开发人员,只在Logical View时(精化阶段)才介入,其实通常程序开发人员是全程参与的。这完全取决于项目的特殊要求。我们的目的是完成项目。
最后想对几个有趣的问题发表一下我的看法:
1、 UML有没有必要在所有的项目中使用?
当然,这篇文章的观点就是要使用UML。因为我认为用UML的工具ROSE对系统进行建模实在是一个明智的选择。
2、 既然有了UML,需求文档、设计文档等一些文档还有没有必要?
当然,图形有时候并不能完全正确无误的表达出你的本意。不过你如果实在不愿意写文档,你可以采取ROSE提供的Documents功能,直接把要说的话写在其中。
3、 我决定在下一个项目中使用UML,但小组中很多的人还不了解这个东西,怎么办?
学,UML不难学。正如C++的语法也不难一样。你可以在一周都用不了的时间便掌握UML语言(对UML是语言),省下的就是经验和技巧,这就因人而异了。不过至少你可以看懂这些图形。
先写到这吧,欢迎大家给出意见。