论文部分内容阅读
随着软件系统规模的扩大和复杂程度的增加,软件维护成本也随之增长,针对遗产系统进行有效的维护和改善变得越来越重要。由于在遗产系统的维护过程中,往往存在需求和设计文档过期或缺失的现象,因此,需要提取和分析代码的实现,恢复出需求和设计的信息帮助进行程序理解和维护,进而开展代码和设计等方面的重构工作。从逆向分析中获取的信息,对分析软件需求特征是否在后续的设计和开发中得到实现(特征定位)、恢复出的现有的结构模式(如设计模式)以及识别代码重复模式(如克隆代码)等方面都有很大帮助,恢复的信息也可以用于新开发系统的设计复用和现有系统的结构改进等方面。近年来国内外对逆向工程的研究仍然属于一个未充分发展的领域。在现有的软件需求逆向恢复中,方法一般都只是单纯地借助于语法信息,包括文档结构信息以及程序中的面向对象语法结构、调用关系、数据访问关系等。往往忽略了文档及代码文本中的语义信息,特别是代码及文档中标识符、关键字等命名信息;在进行设计和架构的逆向分析中,方法也多集中在研究静态的语法结构方面,而忽略了软件的动态交互特性,从而在很大程度上影响了需求信息逆向恢复的完整性和正确性。本文的研究试图弥补上述研究方面存在的不足。主要工作包括:结合代码的静态分析和动态跟踪技术,采用形式化概念分析的方法对代码进行聚类获得候选的需求特征。利用潜在主题提取技术从代码中聚类标识符的语义,并应用特征定位和特征识别的组合方法来提高查询的准确度。结合系统的静态视图和动态交互信息进行设计模式的识别,采用本体模型进行设计模式的恢复工作,通过代码分析收集模式规则,将代码映射到本体实例,并通过动态分析检验是否候选模式的实际行为符合其实例化的模式定义。采用对标识符系列进行顺序模式挖掘的方法,挖掘重复代码的模式,即所谓的克隆代码。并在开发的算法工具中设置规则过滤,有效的提高了识别克隆代码的准确程度。从动态轨迹挖掘出的关联规则帮助恢复系统结构的方法。通过收集运行时事件,对形成的矩阵进行聚类和关联规则挖掘,由聚类得到最初的结构,根据获得的强关联规则建立软件间关联关系,对聚类的组件进行连接。