UML软件工程组织

UML的现状及未来发展 

Scott W. Ambler

 --------------------------------------------------------------------------------

  UML是在多种面向对象建模方法的基础上发展起来的建模语言,主要用于软件密集型系统的建模。它的演化,可以按其性质划分为以下几个阶段:最初的阶段是专家的联合行动,由三位OO(面向对象)方法学家将他们各自的方法结合在一起,形成UML 0.9。第二阶段是公司的联合行动,由十几家公司组成的“UML伙伴组织”将各自的意见加入UML,形成UML 1.0和1.1,并作为向OMG申请成为建模语言规范的提案。第三阶段是在OMG控制下的修订与改进,OMG于1997年11月正式采纳UML 1.1作为建模语言规范,然后成立任务组进行不断的修订,并产生了UML 1.2、1.3和1.4版本,其中UML 1.3是较为重要的修订版。目前正处于UML的重大修订阶段,目标是推出UML 2.0,作为向ISO提交的标准提案。 
  在多种面向对象建模方法流派并存和相互竞争的局面中,UML树起了统一的旗帜,使不同厂商开发的系统模型能够基于共同的概念,使用相同的表示法,呈现彼此一致的模型风格。而且它从多种方法中吸收了大量有用(或者对一部分用户可能有用)的建模概念,使它的概念和表示法在规模上超过了以往任何一种方法,并且提供了允许用户对语言做进一步扩展的机制。 
  UML在语法和语义的定义方面也做了大量的工作。以往各种关于面向对象方法的著作通常是以比较简单的方式定义其建模概念,而以主要篇幅给出过程指导,论述如何运用这些概念来进行开发。UML则以一种建模语言的姿态出现,使用语言学中的一些技术来定义。尽管真正从语言学的角度看它还有许多缺陷,但它在这方面所做的努力却是以往的各种建模方法无法比拟的。 
  从UML的早期版本开始,便受到了计算机产业界的重视,OMG的采纳和大公司的支持把它推上了实际上的工业标准的地位,使它拥有越来越多的用户。它被广泛地用于应用领域和多种类型的系统建模,如管理信息系统、通信与控制系统、嵌入式实时系统、分布式系统、系统软件等。近几年还被运用于软件再工程、质量管理、过程管理、配置管理等方面。而且它的应用不仅仅限于计算机软件,还可用于非软件系统,例如硬件设计、业务处理流程、企业或事业单位的结构与行为建模。 
  不过UML在取得巨大成功的同时,也不断地受到批评。来自工业界的批评主要是,它过于庞大和复杂,用户很难全面、熟练地掌握它,大多数用户实际上只使用它一少部分的概念;它的许多概念含义不清,使用户感到困惑。来自学术界的批评则主要针对它在理论上的缺陷和错误,包括语言体系结构、语法、语义等方面的问题。 
  目前国内也有不少软件企业在学习并尝试使用UML。从总体上看,我国计算机界对UML的了解还相当初步,但是对它的崇拜程度却远远超过了西方发达国家。人们在学习和使用UML遇到和国外用户相同的疑难和困惑时,却不太敢怀疑UML有什么问题。所以国内几乎没有批评的声音,偶尔有一点,也会立即被捍卫的声音淹没,即使对UML一些最明显的缺点和错误也是如此。 
  相比之下,国际上对UML的讨论和评价则要客观得多。无论是Internet上的意见交流,或是每年一次的UML研讨会,还是学术期刊上发表的文章,都是既肯定其成绩,又指出其缺点和错误,并且以积极的态度提出建设性意见。在酝酿UML下一次的重大发布和筹划UML 2.0作为ISO标准提案的最近两年内,围绕UML的讨论更为活跃和热烈。 

  为了使我国计算机界对UML目前的状况有较为客观的了解,我们从大量的文献资料中选择了三篇最具权威性的文章,介绍给我国读者。从这组文章中,我们可以得到关于UML现状及未来发展的重要信息: 
  ● UML已经取得重要成功,它已成为在软件工业中占支配地位的建模语言,并在许多领域的软件开发中得到应用。 
  ● UML还存在许多问题,自它产生之日起就从未离开过批评:用户和教师抱怨它内容庞大、难学难教而且太过复杂;学者认为它缺少一个精练的核心和定义良好的外围,有些语义定义得不够精确而且带有二义性;建模实践者认为它缺少支持自己领域建模要求的机制;工具开发商则因为规范本身的不确定性而产生理解上的偏差,它们对UML的自行诠释有可能误导用户。 
  ● UML的关键问题是过于庞大和复杂,以及在语言体系结构、语义等方面存在理论缺陷。产生这些问题的一个重要原因是,在形成规范的过程中不得不照顾多种方法流派的观点和多家公司的利益。 
  
为了UML的下一次重大发布,UML 2.0修订的主持者正在广泛收集各方面的意见。各界都给予了很高的关注,提出的意见涉及UML的各个方面。其中一个关键问题是UML是否需要简化,以及如何使之更精练,最终大部分意见是提供一个精练的核心,而把不常用的内容放到定义良好的外围或扩展机制中。此外,UML 2.0还将对UML的底层结构、上层结构和对象约束语言(OCL)做重大改进。