知识卡片

基于本体的架构模式识别三阶段流程

结构图卡

内容

基于[[本体用于架构模式识别的可行性]]中分析的优势,作者团队实践的识别过程分三个阶段:概念层本体构建、实例层本体构建、推理与查询。概念层本体构建是”定义规则”——针对特定架构模式,用描述逻辑(一种用于精确刻画概念的形式化语言)把这个模式由哪些组件、每个组件又由哪些组件元素构成,逐条描述出来;不同架构模式之间的区别,本质上就是组成组件的组件元素构成方式不同。实例层本体构建是”提取事实”,分两步:先做信息提取,通过源代码解析工具得到抽象语法树(AST),再从AST上的依赖关系(继承、实现、组合、关联、调用、实例化、参数类型耦合、返回值类型耦合、变量声明类型耦合等)整理出程序关系依赖图;再做个体及关系构建,把这张依赖图转换成本体里的RDF三元组(每条三元组形如”主体-关系-客体”,例如某个类”包含”某个方法、某个方法”调用”另一个方法),本质上是把源代码里提取出来的一张图,转换成用本体语言描述的另一张等价的图。推理与查询是”匹配与提取”:把概念层描述的规则和实例层构建的事实一起交给本体推理机,推理机据此推导出新的知识——比如某个具体类满足了单例模式概念层描述的全部条件,就能推理出”这个类是一个单例类”这样的结论;推理完成后,再通过查询语句(如SPARQL)从扩充后的知识库里筛选出架构模式识别真正需要的那部分实例,因为推理会产生大量知识,并非全都是识别目标关心的内容。书中以单例(Singleton)模式为例贯穿演示了这条流程:一个符合单例模式的LoadBalancer类(内含私有静态成员变量存实例、私有构造函数、公有静态方法返回唯一实例)经过信息提取和个体构建后,被转换成十条左右的RDF三元组,再结合概念层对单例模式的描述逻辑定义,推理机就能推导出”LoadBalancer是一个单例类”这一新知识,最后通过SPARQL查询语句把这个结果提取出来。这套流程的价值在于把原本高度依赖架构师主观判断的”模式识别”,转化成了”规则定义(一次性)+ 事实提取(自动化)+ 机器推理(自动化)+ 结果查询(自动化)”的可复用管道,人工参与被压缩到概念层规则定义和最终结果甄别两个环节。

结构图

flowchart TB
    subgraph 概念层["概念层本体构建(规则)"]
        A["用描述逻辑定义架构模式\n(模式 = 组件集合,组件 = 组件元素集合)"]
    end
    subgraph 实例层["实例层本体构建(事实)"]
        B["源代码解析 → AST"]
        C["AST依赖分析 → 程序关系依赖图"]
        D["图转换 → RDF三元组(个体及关系)"]
        B --> C --> D
    end
    subgraph 推理查询["推理与查询"]
        E["本体推理机(规则集+事实集)\n推导新知识"]
        F["SPARQL查询\n筛选出目标模式实例"]
        E --> F
    end
    A -->|规则集| E
    D -->|事实集| E
    F --> G["识别结果:\n组成该架构模式的组件元素"]

参考来源

- 位置:《软件架构理论与实践》第22章《软件架构模式识别》"22.4.2 识别过程"及"22.4.3 典型步骤"节(源文件:_epub-src/OEBPS/text00186.html) - 结论依据:原文说明"架构模式识别主要分为三个步骤:①实例层本体构建……②概念层本体构建……③推理与查询",并以LoadBalancer单例类为例给出从AST到RDF三元组、再到推理得出"LoadBalancer是一个单例类"这一新知识、最后用SPARQL查询提取结果的完整链条,直接支撑本卡片结论与结构图。 - 原始内容:通过分析AST上的依赖关系,可得到……程序关系依赖图……个体构建过程是将信息提取得到的程序关系依赖图构建成本体中的个体(RDF三元组)……通过推理我们得到了新知识:LoadBalancer是一个单例类。