论文部分内容阅读
在现有的软件开发过程中,高层的设计概念和实现这些设计的程序设计语言成分之间常常缺乏直接的对应关系,导致很多设计概念湮没于琐碎的代码中。不能从代码中恢复出这些设计概念,意味着我们分析和理解软件能力的不足,也导致良好的设计理念不仅不能在后续的维护过程中得到发扬,还有可能被无意中破坏。现有的逆向工程技术在恢复高层设计的语法信息方面比较成熟,但在恢复语义信息方面还非常薄弱。
设计模式是对典型问题的典型解决方案,已经得到广泛应用。从程序代码中识别设计模式的研究近些年来得到越来越多的重视。但是现有研究主要识别其中的语法特征,对语义特征描述与识别的研究还非常少见。用例作为统一软件开发过程中软件全生命期的驱动者,也已得到广泛应用。但是由于程序设计语言中缺少对应的表达设施,在过程性和面向对象软件中无法保持用例的结构。目前从程序代码中恢复用例的研究还较少,很不成熟。现有研究均无法识别用例内部的基本流和备选流,难以识别不同用例间的关系。
本文的主要工作包括三个方面,第一方面是发掘设计模式的语义特征,并通过基于控制流和数据流分析的方法描述和识别设计模式的语义特征,主要是基于形态分析识别设计模式中的集中管理式聚集。另一方面是通过控制流分析和程序依赖性分析识别程序中的用例及用例间关系。第三方面,通过程序切片技术区分程序中彼此交织的不同计算,并扩展现有面向方面语言以分别封装包括扩展用例片段在内的细粒度交织计算,方便程序理解和维护。
论文工作主要包括以下几个方面:
·在很多设计模式中存在的角色间聚集关系是设计模式中最为明显的语义成分之一,但是这些聚集关系缺乏明确的内涵和有效的识别方法。在设计模式的语境下提出了集中管理式聚集的概念。针对常见的利用指针或引用的聚集实现方式,针对现有形态分析方法中基于三值逻辑结构的谓词只能描述同一形态结构内个体间关系的局限,扩充了结构间谓词以表达分属不同结构的个体间的可达性和可追踪性。然后通过扩充了结构间谓词的三值逻辑结构描述链表上聚集管理操作的语义特征。在此基础上,给出基于控制流上链表形态结构的变化识别聚集管理行为的方法,由此识别相应的聚集关系和模式行为。针对聚集识别只涉及到少数类,因此只需要进行局部分析的问题,给出了通过求取有关类的稳定状态从而得到相关方法入口处形态结构的方法。通过开源软件JEdit中的实例分析展示了该聚集识别方法的有效性。
·分析了用例内部的基本流和备选流所对应的控制流特征,分析了平等用例、具有包含和扩展关系的完整用例所对应的控制流特征,给出通过控制流分析识别用例基本流和备选流及识别平等用例的方法,以及结合控制流分析和程序依赖性分析识别完整用例间包含和扩展关系的方法。该方法较为符合软件理解的一般性思维过程,人工介入过程较为自然、有序,工作量小。
·提出了结合控制流分析和程序依赖性分析识别扩展用例片段的方法,分析了具有扩展关系的用例与同一子程序内相互交织的不同计算之间的共性,提出了在现有AOP语言中扩充语句级连接点以单独封装细粒度扩展用例片段,分别封装相互交织的不同细粒度计算的方法。相对于现有方法,使用语句级连接点能够更好的表达不同计算之间的独立性和依赖关系。