论文部分内容阅读
软件复用以已有工作为基础,充分利用了开发以往系统过程中积累的知识和经验.很多情况下,系统完整可靠的信息是程序代码,其他信息必须由此导出.因此,程序理解是已有系统成功演化的关键之一.面向对象方法已趋向成熟,随着设计模式、框架等技术的使用,面向对象程序的维护和演化技术更加受到软件工程界的关注.逆向工程是重要的程序理解辅助手段之一.它收集程序数据,按照一定的数据模型加以组织和分析,识别系统构件及其之间的交互关系,并将抽取的信息表达成抽象视图来辅助用户理解系统.统一建模语言UML(Unified Model Language)的提出和发展促进了逆向工程的发展.已有的大多数逆向工具都采用定制的软件系统,重复了大量的基本工作(如分析源代码),并且用户界面不统一,难于与其它工具集成.可扩展标记语言XML(Extensible Markup Language)可作为表示软件系统构件及其关系的通用中间格式,为上述问题提供了一条解决途径.国际上提出了多种用XML格式表示源代码数据的方法,但是这些方法都需要对源代码进行完整的语法分析,建立完全的抽象语法树AST(Abstract Syntax Tree).因此,它们属于重量级的方法,同时不具有容错性.该文详细介绍了如何采用一种轻量级、灵活而又有容错性的方法来建立逆向工具.这种方法的核心在于用一种基于XML的通用中间格式面向对象标记语言OOML(Object-Oriented Markup Language)为程序建立概念模型,然后在此基础上进行信息抽取、分析和显示.目前实现了基于OOML的逆向工程工具OBRET(OOML-Based Reverse Engineering Tool)的Java语言版本OBRET-Java.它不仅能从源代码中恢复系统视图,生成逆向文档,还可以以一定的规则抽取候选的设计模式实例.