论文部分内容阅读
随着软件系统日益复杂和庞大,软件开发、维护以及进化的大部分工作和主要成本集中在对现有系统的理解上。在软件领域中,逆向工程的目标是利用工程化的方法和技术分析软件系统组件及其之间的相互关联,并以另一种方式或更高抽象层次的形式来描述该系统。逆向工程是一种辅助程序理解的重要手段。论文通过对逆向工程规范活动的分析,以模型抽象为研究重点,结合面向对象软件系统固有的动态特性,采用以动态分析为主、静态分析为辅的研究思路,提出了一组用于实现面向对象软件逆向工程中动态模型抽取以及动态模型转换的机制和算法。这些机制和算法都已经在逆向工程工具集XDRE(XiDian Reverse Engineering,西电逆向工程)中实现。为了验证算法的正确性、有效性以及相关综合性能,本文对其还进行了系统的实验研究。作者研究工作的具体内容如下:(1)为了实现动态模型之间的自动转换,首先分析了UML序列图和状态图之间的关系,说明在序列图和状态图之间进行自动转换是可行的。其次,对BK算法的核心思想进行了分析,并给出了BK算法与动态模型转换之间的联系。基于上述分析,根据动态分析获取的信息以及结合动态模型转换的特点,应用BK算法从两个不同的抽象层次(对象级和进程级)实现了由多个UML序列图自动合成状态图的工作,分别得到了对象级状态图和进程级状态图。最后,通过实验结果验证了动态模型自动转换算法的正确性和有效性;并对该算法的效率进行了分析。(2)提出了一种合并模式的匹配算法。由于合成的简单状态图不能适应复杂软件系统的要求,因此有必要对简单状态图进行进一步地抽象。本文提出了一种根据用户给定的合并模式对合成的简单状态图进行再抽象的方法。其主要思想是,用户给定一种合并模式,在简单状态图中寻找与这种模式相匹配的状态和迁移,并将它们合并,从而进一步提高合成的状态图的抽象层次。(3)提出了一种基于XOR状态的分层抽象简单状态图的方法。在简单状态图中引入层次概念,是增加状态图可理解程度的一种重要手段。通过对XOR状态语义的分析,提出了一种寻找简单状态图中具有异或关系的状态,从而形成超状态的思想,以提高状态图的抽象层次,并给出了实现算法。(4)给出了在简单状态图中添加UML概念的方法。无论采用何种算法,所生成的状态图只能是实际系统的一个近似描述,而且并不完全符合UML的标准。通过对简单状态图特性的分析,发现在包含两种特殊子图的情况下,可以添加UML概念,并给出了形成UML中的内部动作、进入动作、退出动作和迁移上的动作的规则和条件。(5)提出了一种基于类中的非公有方法创建层次状态图的方法。该方法已经在XDRE中实现。