论文部分内容阅读
随着软件规模的不断扩大和软件工程复杂程度的不断提升,人们对遗产系统的理解变得越来越困难,导致软件维护成本高、复用率低的困境。软件逆向工程的出现有效的缓解了这个局面。软件逆向工程过程是从目标系统中抽取数据,生成易于人们理解的高层抽象的过程。软件逆向工程过程原动力是对目标系统的理解,目的是为用户提供一个在代码之上的描述目标系统的抽象形式。本文为帮助用户理解目标系统,在代码层面之上提供了两种形式的抽象:UML类图和UML时序图。UML类图从目标系统源程序的静态结构方面进行了展示,而UML时序图展示了目标系统的某个侧面的动态行为模型,通过这两个方面的展示帮助用户对目标系统有比较全面的认识。本文构造静态结构模型过程可以分为词法分析、语法分析、静态关系获取和静态关系展现四个阶段。在词法分析阶段,目标系统的程序源码被依次翻译成一系列的单词单元,然后将这些单词序列输入到语法分析程序执行语法分析过程。在语法分析阶段通过分析词法分析过程生成的单词序列构造一棵语法分析树,再将语法分析树输入到静态信息获取程序获取目标系统的静态模型。最后通过静态关系展现程序将静态模型在Eclipse平台中展现出来。为适应逆向工程的需求,本文研究和设计了一棵以语句为基本单元的语法分析树。通过使用这种语法分析树可以方便的获取其中的静态信息。在动态模型构造方面,本文采用在源码中植入软触发器的方式获取动态信息。在触发器植入过程中,本文结合静态分析阶段生成的语法树,研究和设计了一种优化策略减少插入代码,从而减少对源程序的影响。在展现阶段,本文对展现过程设计了不同的粒度,避免动态行为爆炸的产生。通过使用本文设计的软件逆向工程工具,可以对生成目标系统的静态模型以UML类图的形式进行展现,用户可以方便的指定显示策略,显著增强了显示内容的可读性。本文通过设定动态模型展现粒度,也使目标系统的动态模型展现易于理解,从不同层面满足不同用户的需求。动态模型展现过程同时帮助用户更简单地理解目标系统在某个场景下的行为。