4 利用程序切片技术进行软件度量
软件开发的目标是开发出高内聚和低耦合的系统。这里研究利用切片技术度量面向对象程序的内聚度和耦合度,尤其是内聚度量。
4.1 耦合度量
耦合度(Coupling Degree)用来测量由两个或多个模块连接而引起的联结程度的强弱。强耦合使模块连接后的系统变得复杂。因为模块之间具有高度的关联,改写模块将十分困难。降低模块间的耦合则可以减少系统的复杂性。因此,在系统设计中应追求尽可能松散的耦合关系。
4.2 内聚度量
内聚度(Cohesion Degree)是软件的内在属性,反映软件设计和实现中模块组件之间结合的紧密程度。高内聚的软件模块有着最基本的功能,很难再切割其规模。
面向对象程序的基本特征是类。类由属性和方法组成,属性和方法间存在3种关系,因此类内聚度也从3个方面度量:属性问内聚度、方法与属性问内聚度、方法问内聚度。设类C共有n个属性,m个方法,其中m,n≥0。V_Union表示所有成员变量。M_Union表示所有成员方法。这里使用数据标记(data token)而非语句作为基本单元来修正切片这个概念。数据切片包含和切片变量存在依赖关系的数据集合,简写作DataSlice(L,V),其中L表示程序中的某个点,通常情况下特指某条语句:V表示在L定义或使用的变量的集合;#表示势操作,表示集合中元素的个数。则属性间内聚度、方法与属性间内聚度和方法间内聚度的计算公式分别为式(1)~(3),如下所示:
4.3 实验操作
采用目前最主流的程序切片技术,以系统依赖图为基础,利用图的可达性算法获得切片结果。然后利用将切片结果代入式(1)~(3)进行计算,得到内聚度。
以下面的程序为例进行切片,计算内聚度,并和基于依赖性分析的类内聚度度量方法相对比。