知识卡片

架构质量属性距离衡量演化健康度

普通读书笔记卡

内容

基于度量的架构演化评估,基本思路是把架构度量应用到演化过程中:把一次完整的架构演化拆分成一系列原子演化操作,每经过一次原子演化就得到一个中间版本,对每个中间版本分别度量,得到质量属性度量值形成的序列,再计算相邻版本间的”架构质量属性距离”——这个距离量化了两个版本在某个质量属性上的差异程度。不同质量属性的距离计算方式不同:可维护性度量结果是圈复杂度、扇入扇出度、模块间耦合度、模块响应、紧内聚度、松内聚度六个指标构成的六元组,两个版本的可维护性距离用归一化笛卡儿距离衡量两个六维向量之间的差异;可靠性度量结果是单一实数值(表示系统潜在风险率),两个版本的可靠性距离是这两个实数的简化归一化距离。这里有一个容易被忽视但很重要的提醒:可靠性度量值和架构的物理组织结构(模块间逻辑依赖调用等)之间没有必然因果联系——两个完全不同的软件在架构相似度上可能很低,但可靠性度量值恰好相等;同一个软件经过演化,相邻版本架构可能因为某些不恰当的修改导致可靠性大幅下降。这意味着质量属性距离不能反过来用于推断架构结构上的变化或差异,它只能回答”这两个版本在某个质量维度上差多远”,不能回答”它们的内部结构差多远”。另一个关键结论是:架构中间版本序列A0到An之间的整体质量属性距离D(0,n)并不等于D(0,1)、D(1,2)、D(2,3)…逐段距离的简单叠加——即原子演化操作对架构质量属性的影响不具有累加性,但这个非累加的距离序列依然有实际价值:它能帮助观察演化过程中每一步物理结构变化对整体的影响范围,支持关键模块的风险控制和故障定位。也正因为质量属性距离和结构差异之间不是简单的正相关关系,度量它的正确用法是持续追踪同一架构不同演化版本随时间的变化曲线(用来监控演化过程是否健康),而不是拿两个毫不相关的架构做距离对比(这种对比往往没有实际意义)。

参考来源

- 位置:《软件架构理论与实践》第13章《软件架构度量和评估》"13.4.1 演化过程已知的软件架构演化评估"节(源文件:_epub-src/OEBPS/text00107.html) - 结论依据:原文说明"可靠性度量值为一个实数值,它表示该软件的潜在风险率,而与架构的物理组织结构……没有必然因果联系。两个完全不同的软件在架构上的相似度很低,但它们的可靠性度量值可能相等",并说明"架构A0和An间的质量属性距离D(0,n)并不等于D(0,1)、D(1,2)、D(2,3)…的叠加",直接支撑本卡片结论。 - 原始内容:值得注意的是,在架构中间版本序列A0、A1、A2、…、An中,架构A0和An间的质量属性距离D(0,n)并不等于D(0,1)、D(1,2)、D(2,3)…的叠加,即原子演化操作所产生的架构质量属性影响并不具有累加性,然而它却可以帮助我们观察在该次演化过程中每一步物理结构的变化对整体的影响范围。