国际上,软件工程领域在近3年内取得了前所未有的发展,其成果超过软件工程领域过去10至15年来的成就总和.其中最重要的、具有划时代意义的成果之一就是统一建模语言UML(Uni-fiedModelingLanguage)的出现.
UML是继80年代末和90年代初面向对象建模技术高潮后,出现方法学大战,应市场对统一建模语言的要求,由世界著名的面向对象技术专家Booch>Jacobson和Rumbaugh发起,在著名的Booch表示法、OOSE方法和OMT方法的基础上,广泛征求意见,集众家之长,几经修改而完成时.在美国,截至1996年10月,UML已经获得工业界、科技界和应用界的广泛支持,已有700多个公司表示支持采用UML语言作为建模语言.
到1997年11月17日UML被OMG(ObjectManagementGroup)米纳为基于面向对象技术的建模语言标准.这标志着面向对象技术中建模语言的争论暂时告一段落.
作为建模语言,UML可以说是一种定义良好、易于表达、功能强大且普遍适用的建模语言,
它为用户建模提供了完整的符号表示和不同层次的兀模型(metamodel)如用例图(uses-casediagram)包图(packagediagram)、类图(classdiag-ram)、状态图(statediagram)、X寸象图(objectdia-gram)、活动图(activitydiagram)、顺序图(sequencediagram)合作图(collaborationdiagram)组件图(componentdiagram)、配置图(deploymentdiagram)等.它的作用域不仅支持面向对象的分析与设计,还支持从需求分析开始的软件开发的全过程,但如何恰当地将这些可视化图形建模技术用于解决软件开发所面临的问题以及对建模过程的研究和支持工具的研究,仍是目前该领域的热点问题.
目前,在基于UML的开发方法和环境方面国际上已经进行了一些研究和实际开发工作.Ra-tional公司正致力于它称之为Objectory过程的研究,并试图将其原有支持OMT的工具作进一步扩充,以期支持UML建模,并支持对OMT模型的升级.国内对UML的研究尚处于起步阶段.
本文从当前对软件开发过程的需求出发,提出了UML柔性软件开发过程,并设计了相应的集成化支持环境的组成框架.
1UML柔性软件开发过程
电子计算机技术和现代通讯技术的飞速发展正迅速改变着人们对时间和空间的概念,世界在物理上正变得越来越小,而内容却比以前任何时候都复杂.全球经济竞争、信息高速公路等近代信息技术都迫使各个企业面临着新的挑战.为了能在瞬息万变的市场和激烈的竞争中保住一席之地,负责信息技术机构的主管人员将不得不学会应变管理技术(changemanagement).在软件开发领域,需要改变其开发与生产的范式,以满足这种新的需求.
传统的软件开发模式越来越难以满足当前企业和市场的需求.新的产品开发周期已不再是一次性的从需求定义、软件设计、实现和交付,迭代式增量开发方式已得到广泛采用.这是由于软件系统的规模越来越大,其复杂程度不断提高,而与此同时又不得不面临激烈的竞争对手和瞬息万变的市场.时间就是效益,谁先占领市场,谁就是胜利者.但是占领市场和击败对手的条件除了时间之外,更重要的是过硬的质量和提供用户真正需要的产品.因此将新的软件开发模式归结为图1所示的迭代式开发和图2所示的柔性软件开发模型.
所谓柔性软件开发是指软件开发过程应在需求工程的牵引下,首先建立系统模型,对模型进行模拟、分析和调整,进行从需求到建模的“自顶向下建模,由底向上修改”即从需求工程出发,首先明确用户要求,确定需求优先级;在此基础上为系统建立模型,该模型应是可模拟的,通过对模型的模拟运行,以分析模型是否满足用户需求和满足的程度.整个建模过程是自顶向下逐层细化的,而模拟修改则由底向上地进行.
然后在保证模型正确的基础上,进行代码的生成,同时还应考虑到对需求修改的灵活性和快速响应能力,因此应能进行‘闭环开发”即不仅能支持从模型到代码的自动生成,将新的模型转换为代码,还应能支持从代码到模型的逆向变换,将原有的代码转化成模型,进行再次分析、修改和调整,进行新一轮的开发,从而为增量式开发提供支持,能分阶段提交产品,也提高了对用户需求变化的响应速度和应变能力,满足用户不断变化的需求.
2UML软件开发支持环境
为此,新一代集成化UML软件开发环境应是能无缝集成以上2个阶段的一个柔性软件开发环境.其组成应包括UML可视化建模系统、UML模拟系统、UML代码生成系统、UML逆向变换系统及其支持环境等,且这些环境的创建均应基于UML的定义,除了语法规则外,还包括详细的语义定义,如图3所示.从而支持系统建模、模拟和“闭环式开发'.
1)UML可视化建模系统UML可视化建模系统支持从系统需求、系统分析到系统设计的整个建模过程,提供UML图形的编辑和美化工具,保证得到语法正确、语义完整的UML图形模型,并提供包括文档管理、图形打印等辅助支持.可进一步分为以下几个子系统,如图4所示.
()可视化模型建造系统由于UML不仅支持对系统的对象建模,还支持对需求和系统体系结构的建模;不仅支持系统的静态模型,还支持对系统动态模型的描述.因此模型建造系统应支持以下模型的创建和编辑:需求模型.包括静态模型和动态模型.静态模型即功能模型,在UML中通过用例图描述系统功能和各功能的潜在用户及它们之间的关系;动态模型通过活动图支持对业务过程或事务处理过程的描述.
系统对象模型.同样包括静态模型和动态模型.通过包图、类图和对象图定义系统对象及对象间的静态关系.通过顺序图、合作图和状态图描述对象间的交互关系和交互顺序、对象的生命周期以及生命周期中对象可能存在的状态以及状态间的转换约束.
系统体系结构模型.通过组件图、配置图支持软件体系结构和硬件体系结构以及通信机制的定义.进一步还应支持软硬件系统之间的合作关系的可视化表示.
(2)UML语法正确性检测机制
为保证所得到的UML图形模型符合UML的语法定义[61,应提供语法正确性检查机制.一个较好的方法是提供语法制导的UML可视化建模工具,从而在模型的建造过程中提供动态的语法制导和语法检
测功能,既方便用户学习和使用,也可保证所建造的模型在语法结构上的正确性.
(2)UML模型的一致性检查机制
由于UML支持从需求分析到系统设计整个建模过程,并且支持用户从不同角度描述系统,而大型软件项目各模型间的协作和约束关系错综复杂,显然不应由用户独自承当它们的管理和维护工作.作为建模支持系统,应提供模型间的一致性检查机制.
首先,该机制应根据以上对基于UML软件开发模型的讨论,在软件开发阶段时间轴上确定引入模型的时间;其次,明确同一种模型的细化分层机制,以及怎样用其它模型描述主模型的细节;第三,在软件开发阶段时间轴上,一个模型存在自顶向下分解的层次结构,各时间阶段产生的层次结构中各种UML模型相互约束协作又产生复杂的网状关系,需要建立不同阶段、不同功能的同一种模型和不同种模型约束和协作的数学模型;最后,在该数学模型的基础上,研究将约束和协作关系有机地加入软件开发各个阶段的模型一致性检查机制.
此外,由于允许从不同的角度描述同一模型,如交互图包括顺序图和合作图,这两者之间允许存在冗余信息,因此不仅应保证二者间信息的一致性,作为进一步的支持,还可考虑支持模型间的一致性转换.
(3)UML模型的完备性检查机制
完备性检查机制须在UML语义定义的基础上,首先定义UML图形模型的完备性准则,以保证UML图形模型的完备性.对于UML图形模型的完备性可以分3个层次来考虑:各个图形的完备性;各个子模型的完备性,即相关图形的组合完备性;系统模型的整体完备性.区分这3种完备性的意义在于:在不同阶段可以进行语义完备性和语义正确性检查.如在需求分析阶段,可以对通过完备性检查的活动图进行模拟,以检查该活动图的正确性.而在整个系统模型通过完备性检查之后,方可进行代码的自动生成.
(5)文档生成和管理工具
文档生成工具是指文档自动生成机制.作为一个建模支持系统,应支持包括需求描述、面向对象分析和设计、系统体系结构等文档资料的自动生成.文档管理工具是指文档资料的版本管理等辅助管理工作.
1)UML模拟系统
系统模拟机制支持对UML模型的功能模拟和性能模拟,它包括以下3个部分:
()对动态模型的模拟
主要包括对活动模型、交互模型(顺序图和交互图)以及状态图的模拟.根据预先定义的语义,模拟各个模型对系统在时间特性上的描述是否真实地反映了客观现实和用户需求;并应提供相应的跟踪调试机制.
(2)对系统功能(需求)和用户界面的模拟.
用来支持快速原型.借助于代码自动生成工
具和用户界面自动生成工具的支持,产生系统原型,并尽早提供给用户,以确保建模的有效性.
(3)系统性能的模拟
UML支持对系统体系结构的建模,作为一个良好的建模和开发支持工具,应支持对不同系统配置和功能分配情况下对系统性能的模拟,以便得到较好的系统设计方案和合理的系统配置.
2)UML代码生成系统
支持可视化对象和行为的代码生成,也称之为UML支持环境的正向变换系统.
软件开发的最终目的是产生可执行代码.大多数软件开发环境中,建模和编码过程缺少有机的统一,这是有其历史原因的.其中最重要的原因是缺少功能强大、简单清楚、标准统一的建模语言.UML的出现并被OMG接受为标准,为消除这个障碍提供了一个最好的起点.
UML虽然是一种可视化建模语言,不是编程语言.但是它与大多数面向对象语言(例如C++、Java)存在紧密的映射关系.在UML语言的代码生成机制方面,国际上一些大公司有一些有益的研究和开发工作.比较有代表性的有Rational公司和AdvancedSoftwareTechnologiesInc.但这些研究和实现大多限于UML语言的静态模型中的类图,其它模型的代码自动生成机制的研究资料则非常罕见.
为此代码自动生成机制应根据UML语言多种模型动态协作、关系复杂的特点,首先界定UML的语义和面向对象编程语言(首先是Java)的语义,研究专用语义机制描述面向对象模型和语言中动态和静态机制,建立两者的语义模型;再在该语义模型下建立两者的映射模型;并研究代码自动生成实现技术和独立于UML语言本身的编程语言的特殊机制.代码自动生成机制的研究与实现应考虑后面的逆向转换机制.
3)UML逆向变换系统
当用户对生成的代码进行修改后,逆向转换机制将用户的修改转换到模型上.否则将造成模型和代码间的不一致性,使得系统的扩充、增删和维护难以进行.
逆向转换机制一般由建模、析取和抽象3个步
骤组成.动态模型的逆向转换机制是研究的难点.我们将在正向转换的基础上,建立起模型到代码的映射关系,尝试建立起一套约束机制,实现自动的或人工导引的逆向转换机制.在国际上,这方面的研究并不成熟.
3结束语
根据一年多来对UML的学习和分析以及对UML支持环境的研究和开发工作,本文从当前对软件过程的需求出发,提出了当前软件开发应具备的特点和开发模型,在此基础上设计了集成化UML软件开发环境框架,提出了需解决的问题.目前我们已经完成了UML可视化建模系统的开发工作,并在研究生课程中由80多名学生进行了试用,反映良
好.UML软件开发支持环境的其他子系统正在研究、开发之中.