• 沒有找到結果。

第肆章 整合性變動衝擊量測模式與調整法則

本章根據造成變動衝擊的相關因素,運用物件導向類別間及類別內 的量測方式,提出一套整合性的變動衝擊量測模式,同時依據整合性的 量測模式,衍生物件導向設計品質的改善法則,以降低物件導向軟體因 為變動而造成的衝擊。

一、物件導向變動衝擊量測方式

根據物件導向軟體變動衝擊的分析,主要可以分為類別間與類別內 的衝擊,以下依據類別間及類別內變動衝擊的特性,運用相關物件導向 量測方法,提出在類別間及類別內不同情況下的量測方式 :

(一)、繼承關係量測方式

由變動衝擊分析中可以得知,在繼承關係中因變動而造成衝擊的類 別,主要是集中在抽象類別,不論是抽象類別本身在架構上的變動,或 是抽象類別內部資料成員及成員函數的變動,都會造成變動的衝擊。為 了精確的瞭解資料成員及成員函數所造成的影響,在此將資料成員及成 員函數分開計算,以便於分辨出該類別是由於何種原因而導致變動的衝 擊。根據物件導向的特性,子類別繼承了抽象類別的資料成員或成員函 數,但也可以依據類別本身的需要,對繼承到的成員函數進行修改 (overriding),也可以在類別中自行增加所需的資料成員及成員函數。因此 抽象類別變動對於子類別所造成的衝擊強度,就必須視不同繼承的情況 而定,在此引用 AIF 及 MIF 量測方式[8],分別表示某類別在抽象類別的 資料成員或成員函數變動時受到衝擊的強度。首先,以 AIF 表示某類別 因為抽象類別資料成員變動而受到衝擊的強度,AIF 的量測方式如公式 (4.1)所示,其中 C

i

代表受量測的類別,C

j

代表 C

i

的父類別。

)

A

)

另外在引用相依類別成員函數而造成的變動衝擊方面,以 CM 代表

因此類別 B 對於類別 A 資料成員的變動衝擊強度為 0.67,另外引用公式 (4.4)計算相依類別成員函數而受到的變動衝擊強度如下所示 :

33 . 3 0 1 ) (

) , ) (

,

( = = = A

M A B A CM

B CoupM

因此類別 B 對於類別 A 成員函數的變動衝擊強度為 0.33。

(三)、類別內聚力量測方式

雖然類別內聚力並無法量測出物件導向軟體的變動衝擊[21],但是為 了能夠達到各類別集中化的特性,因此仍是將類別內聚力加入考量,在 此引用 LCOM 量測方式[17],以測量各類別的內聚力。當類別的內聚力 過低時,代表該類別處理過多不同性質的工作,低內聚力對於類別間所 造成的影響,不論是繼承或是非繼承性的類別連結關係,都將容易產生 變動衝擊。在類別內聚力的量測方面,LCOM 的概念為在一個類別中的 所有成員函數裡,將沒有引用相同資料成員的成員函數總數,減去有引 用相同資料成員的成員函數總數,以此判定該類別的內聚力的高低。

LCOM 的量測方式如公式(4.5)所示,其中 Ci 代表接受量測的類別,P 代 表未引用到相同資料成員的成員函數總數,Q 代表有引用到相同資料成 員的成員函數總數,如果結果為負值時,LCOM 值則為零。

LCOM(C i ) = | P | - | Q | , if | P | > | Q | (4.5)

= 0 otherwise

假設一個類別中,有三個成員函數 m1、m2 及 m3,其中 m1 引用資料成 員{d1、d2 、d3、d4

}

,m2 引用資料成員{d1、d2、d4},m3 引用資料成

成員,成員函數 m1 與成員函數 m3 未引用相同的資料成員,成員函數 m2 與成員函數 m3 亦是未引用相同的資料成員。因此,該類別的 LCOM 值計算方式如下 :

LCOM(C

i

) = | P | - | Q | = | 2 | - | 1 | = 1

當 LCOM 的值越高時,代表該類別的內聚力越低。

二、物件導向設計變動衝擊量測模式

根據三項類別間的量測方式,即可以針對物件導向設計作出量測,

以求出物件導向設計中,各類別在不同情況下所產生的變動衝擊強度。

然而,在物件導向設計中,類別間具備不同特性,包括繼承深度、繼承 廣度及引用的層次等,因此必須要提出一套整合性的量測模式,以便量 測出物件導向設計中各類別的變動衝擊情形。

(一)、繼承深度的量測

繼承關係中所造成的變動衝擊,主要是集中在抽象類別變動而造成