演化过程已知的评估其目的在于通过对架构演化过程进行度量,比较架构内部结构上的差异以及由此导致的外部质量属性上的变化,对该演化过程中相关质量属性进行评估。本小节主要对演化过程已知的架构演化评估工作进行阐述,给出评估流程以及具体的相关指标的计算方法。
1.评估流程
架构演化评估的基本思路是将架构度量应用到演化过程中,通过对演化前后的不同版本的架构分别进行度量,得到度量结果的差值及其变化趋势,并计算架构间质量属性距离,进而对相关质量属性进行评估。
架构演化评估的执行过程如图10-8所示。图中A。和A,表示一次完整演化前后的相邻版本的软件架构。我们可以将Ao演化到A。的过程拆分为一系列原子演化操作,一次完整的架构演化可以视为不同类型的原子演化操作形成的序列。每经过一次原子演化,即可得到一个架构中间演化版本A;(i=1,2,.*,n-l),因而经过一次完整的软件演化后可以得到架构中间版本形成的序列Ao,A?,A?,*,An。对每个中间版本架构进行度量,得到架构A;的质量属性度量值Q,进而得到演化过程中架构质量度量结果形成的序列QoQ,",Qn。对于相邻版本的架构A?-1和A,可以根据它们的质量属性度量值Q,-1和Q,计算相邻版本间的架构质量属性距离D(i-1,i)。最后,软件架构相邻版本A。和A,间的架构质量属性距离D(0,n)可以通过Q和Q,计算得出。最后综合各个版本架构的度量结果,对架构演化相关质量属性进行评估。
2.架构演化中间版本度量
对于不同类型的质量属性,其度量方法不同,度量结果的类型也不同。本章主要度量的是架构的可维护性和可靠性,其具体度量方法在前面已经进行过详细阐述。其中对于可靠性,架构质量属性度量结果Q,是一个实数值;而对于可维护性,它包含圈复杂度、扇入扇出度、模块间耦合度、模块的响应、紧内聚度、松内聚度这6个子度量指标,度量结果Q,是这6个指标的度量值形成的六元组(q?,q?,,96)。对于每一次原子粒度的演化,我们可以明确该原子演化对架构内部逻辑结构或交互过程的影响;通过比较原子演化前后架构质量属性Q.-1和Q,间的变化,可以分析该类演化对待评估系统的外部质量属性的影响,进而找出架构内部结构变化和外部质量属性变化间的关联。
3.架构质量属性距离
架构质量属性距离D(i-1,i)用来评估相邻版本架构间质量属性的差异。由于架构质量属性距离的计算直接依赖于架构质量属性度量值Q.-1和Q,所以对于不同的质量属性,D(i-1,i)的计算有所不同。本节分别介绍架构可维护性和可靠性的质量属性距离计算方法,并介绍架构质量属性距离更一般的用法。
1)可维护性距离计算方法
可以将一次完整的演化操作拆分成如表10-1所示的原子演化操作序列,对于每次原子演化操作,我们度量架构在演化前后可维护性指标的值(包括CCN、FFC等共6项),得到演化前后架构A和B的可维性指标向量(a?,a?,,a?)和(b,b?,,b?),求取两个向量归化的笛卡儿距离,如公式10-1所示。
a,和b表示的是不同版本的架构在同一质量指标上的值,计算出的值越大,表明两个架构可维护性质量差距越大。由于软件可能经过许多轮演化,其架构与原始架构会有很大差距,某些实现与原设计不符,从而导致一些不易
察觉的质量问题。而即使是相邻版本的架构也会产生某些质量属性的极大差距。因而我们试图追踪和控制软件质量属性,将其控制在某个适当区间,保持当前软件的正确性和可用性等,且为其之后的演化提供良好的扩展性和适应性,使得软件能够持续演化和重用。
2)可靠性距离计算方法
我们也可以将一次完整的演化操作拆分成如表10-2所示的原子演化操作序列,对于每次原子演化操作,度量演化前后架构A和B的可靠性度量值a和b(a,b为实数),架构A和B之间的可靠性距离计算公式如公式10-2所示。
该公式可以看作一个简化的向量归一化的笛卡儿距离,计算出的值越大,表明两个架构的可靠性差距越大。值得注意的是,可靠性度量值为一个实数值,它表示该软件的潜在风险率,而与架构的物理组织结构(模块间的逻辑依赖和调用等)没有必然因果联系。两个完全不同的软件在架构上的相似度很低,但它们的可靠性度量值可能相等;而同一个软件经过演化,相邻版本之间的架构可能由于某些不适当的修改而造成可靠性大幅度降低。同理,我们也无法通过可靠性度量值推断两个架构结构上的变化或差异。可靠性与软件运行过程中的逻辑交五复杂度相关,可靠性的升高或降低表示交互场景的复杂或简化。
3)非相邻版本的架构质量属性距离
对于可维护性距离Dm(A,B)和可靠性距离Dr(A,B),当A和B为相邻版本的架构时,所得结果即为相邻版本架构间的质量属性距离。一般地讲,若A和B为任意两个架构演化版本,计算结果即为任意演化过程中两个架构在相关质量属性上的差异。对于可维护性和可靠性,质量属性间的差异与架构本身内部结构的差异并没有正相关关系。对于两个完全不同的软件架构,它们的质量属性度量结果可能相近,导致质量属性距离较小,此时度量这两个架构的质量属性距离并没有实际意义。因而质量属性距离应针对同一架构的不同演化版本进行度量,以对架构演化过程进行监控,保障架构能够持续健康演化。值得注意的是,在架构中间版本序列Ao,A?,A?,*,A,中,架构Ao和A,间的质量属性距离D(0,n)并不等于D(0,1)、D(1,2)、D(2,3).的叠加,即原子演化操作所产生的架构质量属性影响并不具有累加性,然而它却可以帮助我们观察在该次演化过程中每一步物理结构的变化对整体的影响范围,并对关键模块风险控制以及故障定位等有积极的作用。
4.架构演化评估
基于度量的架构演化评估方法,其基本思路在于通过对演化前后的软件架构进行度量,比较架构内部结构上的差异以及由此导致的外部质量属性上的变化。基于度量的架构演化评估,可以帮助我们分析架构内部结构的修改对外部质量属性所产生的影响、监控演化过程中架构质量的变化、归纳架构演化趋势,并有助于开发和维护等相关工作开展,具体包括如下几个方面:
架构修改影响分析:为了更好地归纳和说明架构演化的相关规律,本节对演化进行分类,比较不同类型的演化操作对架构相关质量属性的影响。通过将演化过程拆分成粒度很细的原子演化操作序列,具体分析架构内部逻辑结构和交互过程的修改会对哪些相关外部质量属性产生影响,并分析修改影响范围,进一步分析架构版本距离和相关质量属性距离的关联。
监控演化过程:通过对架构演化过程中的中间版本架构进行度量,我们可以得到架构相关质量属性随时间推移的变化曲线。通过对架构演化过程中质量属性的监控,将有利于保持架构健康持续地演化。
分析关键演化过程:架构质量属性距离评估不同版本的架构在质量属性上的差异。从质量属性距离形成的曲线可以观察到架构质量发生较大改变的时刻,在该时刻架构的逻辑依赖或交互过程可能发生重大改变,在开发和维护过程中应该予以重视,这将有利于架构维护及故障定位等。
领取专属 10元无门槛券
私享最新 技术干货