论文部分内容阅读
目前,越来越多的软件项目使用UML作为建模工具,一方面提高了软件开发的抽象层次,另一方面也可以生成框架代码,提高了开发效率。然而,在软件再工程和软件维护的过程中,程序代码和软件模型会产生不一致,这就需要使用程序分析技术从代码中获取必要的设计信息,并自动恢复出软件模型,以帮助软件维护人员更好的理解软件系统的架构和设计。在迭代的软件开发过程当中,代码和模型不一致带来的问题更加突出,因为开发人员在迭代开发的过程中,会对软件模型进行调整,由于缺乏增量式的代码生成工具,多数情况下,这种调整是手工完成的,不仅容易出错,也降低了开发的效率。
传统的正向工程工具,包括Rational Rose、Together CC、JBOO、ArgoUML,能够支持丰富的UML表示法,并对各种面向对象语言提供了扩展的支持,但由于UML表示法和实现语言并不能一一对应,以及缺乏与集成开发环境的集成,导致对代码生成和自动同步支持非常有限。例如,传统的建模工具并不能增量生成代码,用户对代码的修改会被覆盖;并不能自动同步代码和模型,一次性的逆向分析也会覆盖用户对软件模型的修正。
本文针对JAVA编程语言,讨论了如何保持UML模型和程序代码的一致性,如何在逆向分析过程中完成语言模型到UML表示法的映射,以及在代码生成过程中UML表示法和JAVA代码之间的转换方法。在此基础上,本文介绍了一种支持双向工程的软件开发辅助工具-OODIA。OODIA使用Java语言实现,以Eclipse插件的形式与Eclipse的Java集成开发环境JDT进行集成。OODIA包括三个主要模块:UML编辑器、逆向分析器、实时同步器。开发人员可以使用OODIA对类图进行编辑操作,对视图的修改会增量式的生成JAVA代码;也可以对已有代码进行逆向分析,提取程序信息,并以UML类图的方法进行可视化。程序员对程序代码的编辑会被高效地、实时地同步到UML视图,从而保证了软件模型和代码的一致性,有效地降低了软件维护的代价,并把迭代的软件开发过程有机地结合了起来。以上三个模块的实现使用了如下的技术:UML编辑器该模块使用Eclipse的GEF(Graphical Editing Framework)实现,采用MVC(Model,View,Control)的设计模式。其中OODIA元模型的持久化采用XML实现。
逆向分析器该模块使用JDT提供的编译基础设施为Java代码创建语法树,通过对语法树的遍历抽取类图和包图的信息。
实时同步器当程序员修改代码或进行代码生成时,JDT会将对源代码的修改动作转换为对语法树的修改,OODIA通过监听和分析语法树的修改事件,自动将代码的修改同步到类图和包图之上。OOIDA的同步器实际上保持了代码到模型的单向映射,用户对模型的编辑都会被转化为代码的操作,从这个意义上来说,OODIA的同步器是以代码为中心的。