论文部分内容阅读
设计模式定义了面向对象软件系统里经常出现的一组类和这组类之间的关系,以及它们的目的。在过去的十几年里,设计模式被广泛地应用到软件工业领域。另一方面,随着软件系统的规模不断扩大、复杂性不断增加,理解和改变这些系统成为了一件非常困难的事情,尤其是当架构和设计文档并不完整的、甚至没有与系统源代码保持一致性的时候。通过逆向工程从源代码中挖掘出软件设计模式的应用实例,对于完善设计文档、理解和维护系统具有重要意义。每种设计模式都有自己的结构特征,但是从更低的层次上看(本文定义的微结构),大部分设计模式都有部分共同的结构特征,即微结构。在Gof设计模式中,结构型模式描述了如何将不同的类组合在一起,形成一个更大的结构。相比较行为型设计模式、创建型设计模式,结构型设计模式之间具有更多的共同结构。传统的设计模式挖掘方法,都是对设计模式的特征进行渐增式挖掘,很少利用模式之间共同的结构特征这个特点来减少模式挖掘的复杂度。在模式挖掘过程中,如果发现某个特征得不到满足,将会抛弃之前的结果,重新开始挖掘设计模式实例。而之前得到满足的一些特征,对与其结构相似的设计模式往往具有很大的参考作用,识别与其相似的设计模式完全可以在这些满足的特征的基础上进一步进行,而不必要从头开始。为了进一步提高结构型设计模式挖掘的准确度,本文提出了8种能够表征结构型设计模式的结构特征单元,即微结构,其包含了一组类和这组类之间的继承关系或者关联关系等。然后,在微结构的基础上,提出了基于图同构的微结构挖掘方法,以及构建了5种结构型设计模式的结构特征模型。本文用该结构特征模型与行为特征模型作为设计模式匹配的基础,来进行设计模式实例挖掘。其中行为特征模型分析结合了静态分析方法和动态分析方法,既减少了复杂性,又提高了准确度。为了评估本文的方法,我们实现了一个基于微结构的设计模式探测工具DPDT(Design Pattern Detecting Tool),并用它对3款开源软件进行了测试。实验证实了本文方法相比于传统方法,具有较高的识别精确度。