论文摘要
UML是在多种面向对象建模方法的基础上发展起来的建模语言,被广泛地用于软件系统的分析与设计。但是,UML缺少对下层实现的支持。在编码阶段,尽管很多的UML建模工具支持代码自动生成,即使用面向对象编程语言将来自设计阶段的类转换成实际的代码,如Java类代码框架。但是这些代码框架只是一个空空的架子,对于后续的编码没有什么实质的指导。在测试阶段,UML模型还可作为测试阶段的依据。不同的测试小组使用不同的UML图作为测试依据:单元测试使用类图和类规格说明;集成测试使用部件图和合作图;系统测试使用用例图来验证系统的行为。但是,这种依据不是精确的指导,只是作为测试人员的一种文档参考。UML在描述中层及低层的软件设计时被广泛地使用,近来又被用作一种架构描述语言。其主要优势有:面向对象的风格及相关模式;在大多数图表中表示组件和接口的能力;良好定义的过程和语义;代码的自动生成;对于具体领域的可扩展性等。但是,与标准的ADL相比,UML在作为ADL时有它的不足之处:形式化水平不足;鼓励对象连接架构,而不是接口连接架构;缺少对特定模式的支持;无法自动生成测试用例,缺少对测试的指导;对性能/安全性要求高的系统的描述困难等。OCL是UML规范的一个子规范,用来描述对象的约束和相互之间的关联关系。标准的UML模型对模型特性的描述主要是通过自然语言进行描述的,自然语言的描述存在着不精确和二义性,这在系统设计的时候还不是太大的问题,但要将UML模型转化为实际运行的程序,则要求消除这种模型表述的不确定性。OCL语言可以精确地描述模型的约束条件以及相互之间的关系,非常适合于模型驱动的开发。目前已经有许多UML建模工具支持OCL。本文提出了一种基于OCL-JML转换的解决方案:将带有OCL约束的UML图转换为带有JML注解的Java类代码框架,从而可以利用JML丰富的支撑工具进行调试和自动测试。基于OCL-JML的转换,一方面集成了软件开发流程的整个过程,使高层设计指导低层实现及测试;另一方面,弥补了UML在作为ADL时在指导测试方面的不足。文章定义了OCL-JML详细的形式化映射机制,分别描述了OCL基本数据类型、属性表达式、集合操作、迭代操作、前置/后置条件约束、不变式约束及其他有意义的OCL结构的映射规则。同时,本文给出了基于上述OCL-JML映射机制的工具JML-AddIn的实现框架,它是Rational Rose建模软件的插件。它可以辅助用户向Rose软件中的UML类图添加OCL约束,并按照己定义好的OCL-JML映射机制将添加的OCL约束映射到相应的JML规范,这些规范将被添加到相应的Java类框架代码中。