基于面向?qū)ο蟪绦蚯衅能浖攘?/h1>
程序切片的概念是在考慮各個方法、變量之間的依賴關(guān)系并在依賴圖的基礎(chǔ)上構(gòu)造的。舉一個簡單的C++程序對上述公式進(jìn)行應(yīng)用,程序如下:本文引用地址:http://m.butianyuan.cn/article/181197.htm
所定義的類是Cuboid,它有5個變量,2種方法,V_Uion={a,b,c,A,V},M_Uion={Area,Volume }。
構(gòu)造面向對象依賴圖,利用可達(dá)算法得到數(shù)據(jù)切片如下:
利用式(1)~(3)進(jìn)行度量計(jì)算,具體過程如下:
(1)內(nèi)聚度量值是一個3元組,分從屬性之間、方法之間、屬性和方法之間3個層面進(jìn)行內(nèi)聚度量;
(2)DataSliee(L,a)∩V_Uion={a};同樣,DataSliee(L,b)∩V_Uion=,DataSlice(L,c)∩V_Uion={c},進(jìn)行勢操作后取值均為1:
(3)DataSliee(L,V)∩V_Uion={a,b,c},DataSlice(L,A)∩V_Uion={a,b,c},進(jìn)行勢操作后取值均為3;
(4)DataSliee(L,A)∩DataSlice(L,V)={a,b,c},進(jìn)行勢操作后取值為3;
(5)根據(jù)式(4)計(jì)算得到:Cohesion(V_V)=(1+1+3+3)/4×5=2x5;
(6)DataSlie(L,Area)∩M_Uion={Area};同樣,DataSliee(L,Volume)∩M_Uion={Volume},進(jìn)行勢操作后取值均為1。
計(jì)算得出Cohesion(M_M)=(1+1)/2x1=1。兩個方法之間不存在調(diào)用、繼承等關(guān)系,它們是獨(dú)立的,所以內(nèi)聚度為1;DataSlice(L,Area)∩DataSlice(L,Volume)∩M_Uion進(jìn)行勢操作后取值均為1。
計(jì)算得出Cohesion(M_V)=1/5。所以Cuboid的內(nèi)聚度為一個3元組Cohesion(Cuboid)={Cohesion(V_V),Cohesion(M_M),Cohesion(M_V)}={2/5,1,1/5}。
5 結(jié)束語
利用程序切片技術(shù),將度量粒度縮小到語句級別。而這里的度量粒度更是小到變量級別,在更小的級別上進(jìn)行度量。基于程序切片的軟件內(nèi)聚度和耦合度度量從軟件的基本粒度一變量出發(fā),跳躍了面向過程和面向對象程序的區(qū)別,就其度量方法和公式考慮是沒有局限性的,是普適的。
一個優(yōu)良的內(nèi)聚度度量準(zhǔn)則應(yīng)滿足Briand的4個性質(zhì),即非負(fù)性及標(biāo)準(zhǔn)化、最小值和最大值、單調(diào)性、模塊合并后內(nèi)聚度不會增大。后續(xù)工作就是證明基于面向對象程序切片的內(nèi)聚度度量方法符合Brland的4個性質(zhì)。
程序切片的概念是在考慮各個方法、變量之間的依賴關(guān)系并在依賴圖的基礎(chǔ)上構(gòu)造的。舉一個簡單的C++程序對上述公式進(jìn)行應(yīng)用,程序如下:本文引用地址:http://m.butianyuan.cn/article/181197.htm
所定義的類是Cuboid,它有5個變量,2種方法,V_Uion={a,b,c,A,V},M_Uion={Area,Volume }。
構(gòu)造面向對象依賴圖,利用可達(dá)算法得到數(shù)據(jù)切片如下:
利用式(1)~(3)進(jìn)行度量計(jì)算,具體過程如下:
(1)內(nèi)聚度量值是一個3元組,分從屬性之間、方法之間、屬性和方法之間3個層面進(jìn)行內(nèi)聚度量;
(2)DataSliee(L,a)∩V_Uion={a};同樣,DataSliee(L,b)∩V_Uion=,DataSlice(L,c)∩V_Uion={c},進(jìn)行勢操作后取值均為1:
(3)DataSliee(L,V)∩V_Uion={a,b,c},DataSlice(L,A)∩V_Uion={a,b,c},進(jìn)行勢操作后取值均為3;
(4)DataSliee(L,A)∩DataSlice(L,V)={a,b,c},進(jìn)行勢操作后取值為3;
(5)根據(jù)式(4)計(jì)算得到:Cohesion(V_V)=(1+1+3+3)/4×5=2x5;
(6)DataSlie(L,Area)∩M_Uion={Area};同樣,DataSliee(L,Volume)∩M_Uion={Volume},進(jìn)行勢操作后取值均為1。
計(jì)算得出Cohesion(M_M)=(1+1)/2x1=1。兩個方法之間不存在調(diào)用、繼承等關(guān)系,它們是獨(dú)立的,所以內(nèi)聚度為1;DataSlice(L,Area)∩DataSlice(L,Volume)∩M_Uion進(jìn)行勢操作后取值均為1。
計(jì)算得出Cohesion(M_V)=1/5。所以Cuboid的內(nèi)聚度為一個3元組Cohesion(Cuboid)={Cohesion(V_V),Cohesion(M_M),Cohesion(M_V)}={2/5,1,1/5}。
5 結(jié)束語
利用程序切片技術(shù),將度量粒度縮小到語句級別。而這里的度量粒度更是小到變量級別,在更小的級別上進(jìn)行度量。基于程序切片的軟件內(nèi)聚度和耦合度度量從軟件的基本粒度一變量出發(fā),跳躍了面向過程和面向對象程序的區(qū)別,就其度量方法和公式考慮是沒有局限性的,是普適的。
一個優(yōu)良的內(nèi)聚度度量準(zhǔn)則應(yīng)滿足Briand的4個性質(zhì),即非負(fù)性及標(biāo)準(zhǔn)化、最小值和最大值、單調(diào)性、模塊合并后內(nèi)聚度不會增大。后續(xù)工作就是證明基于面向對象程序切片的內(nèi)聚度度量方法符合Brland的4個性質(zhì)。
評論