共用方式為


程式碼度量值 - 類別耦合

類別耦合也被稱為 CK94 最初定義的物件間耦合 (CBO)。 基本上,類別耦合是衡量單一類別使用多少個類別的指標。 對於此指標,高數字是壞的,低的數字通常是好的。 類耦合已被證明是軟件故障的準確預測指標,最近的研究表明,上限值 9 是最有效的 S2010

根據 Microsoft 文檔,類耦合“通過參數、局部變量、返回類型、方法調用、泛型或模板實例化、基類、接口實現、在外部類型上定義的字段和屬性裝飾來衡量與唯一類的耦合。 好的軟體設計要求類型和方法應該具有高內聚性和低耦合性。 高耦合表明設計難以重複使用和維護,因為它與其他類型有許多相互依賴性。

耦合和內聚的概念是明顯相關的。 為了保持這個討論的主題,我們不會深入討論凝聚力,只是給出 KKLS2000的簡要定義:

“模塊內聚力是由 Yourdon 和 Constantine 引入的,即'模塊內部元素之間的緊密結合或相關性' YC79。 如果一個模組只代表一個任務 [...],並且它的所有元素都有助於這個單一任務,那麼它就具有很強的凝聚力。 他們將內聚力描述為設計的屬性,而不是代碼,以及可用於預測可重複使用性、可維護性和可變性的屬性。

類別耦合範例

讓我們看看類別耦合的實際應用。 首先,建立一個新的控制台應用程式並建立一個名為 Person 的新類,其中包含一些屬性,然後立即計算程式碼指標:

類別耦合範例 1

請注意,類別耦合為 0,因為此類別不使用任何其他類別。 現在建立另一個名為 PersonStuff 的類別,其中包含建立 Person 實例並設定屬性值的方法。 再次計算程式碼指標:

類別耦合範例 2

看看類別耦合值是怎麼上升的? 另請注意,無論您設定多少個屬性,類別耦合值都會增加 1,而不是其他值。 類別耦合只會針對此度量測量每個類別一次,無論使用多少。 此外,你能看到 DoSomething() 的值是 1,而構造函數 PersonStuff() 的值為 0 嗎? 目前建構函式中沒有使用其他類別的程式碼。

如果你把程式碼放在使用另一個類別的建構函式中怎麼辦? 這是你得到的:

類別耦合範例 3

現在,建構函式顯然具有使用另一個類別的程式碼,而類別耦合指標顯示了這一事實。 同樣,您可以看到 PersonStuff() 的整體類別耦合是 1,DoSomething() 的整體類別耦合也是 1,這顯示出無論您有多少使用它的內部程式碼,仍然只使用一個外部類別。

接下來,建立另一個新類別。 給這個類別起一些名字,並在裡面建立一些屬性:

類別耦合範例 - 新增類別

現在將該類別應用於DoSomething()類別中的PersonStuff方法,並再次計算代码度量:

類別耦合範例 4

如您所見,PersonStuff 類的類耦合度最高為2,如果您進一步查看該類別,您會發現 DoSomething() 方法具有最多的耦合,而構造函數仍然只使用1個類別。 使用這些度量,您可以查看指定類別的總體最大數目,並逐層切入每個成員的詳細資料。

魔術數字

與圈複雜性一樣,沒有適合所有組織的限制。 不過, S2010 確實指出 9 個限制是最佳選擇:

“因此,我們考慮閾值 [...]作為最有效的。 這些閾值(對於單個成員)是 CBO = 9[...]。(強調後加)

Code Analysis

程式代碼分析包含可維護性規則的類別。 如需詳細資訊,請參閱 維護性規則。 使用舊版程式代碼分析時,擴充設計指導方針規則集包含可維護性區域:

類別耦合延伸設計準則規則

在可維護性範疇中有一條關於類別耦合的規則:

類別耦合規則

當類別耦合過多時,此規則會發出警告。 如需詳細資訊,請參閱 CA1506:避免過多的類別耦合

引文

CK94

Chidamber, SR 和 Kemerer, CF (1994)。 物件導向設計的指標套件(IEEE 軟體工程彙刊,第 20 卷,第 6 期)。 2011 年 5 月 14 日從匹茲堡大學網站檢索: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf

KKLS2000

Kabaili, H.、Keller, R.、Lustman, F. 和 Saint-Denis, G. (2000)。 重新審視班級凝聚力:工業系統的實證研究(Object-Oriented 軟件工程定量方法研討會論文集)。 2011 年 5 月 20 日檢索自蒙特利爾大學網站 http://www.iro.umontreal.ca/~sahraouh/qaoose/papers/Kabaili.pdf

SK2003

Subramanyam, R. 和 Krishnan, MS (2003)。 CK 指標對 Object-Oriented 設計複雜性的實證分析:對軟體缺陷的影響(IEEE 軟體工程彙刊,第 29 卷,第 4 期)。

S2010

沙特納維,R.(2010)。 Open-Source 系統中 Object-Oriented 指標可接受風險等級的定量調查(IEEE 軟體工程彙刊,第 36 卷,第 2 期)。

YC79

愛德華·尤登和拉里·康斯坦丁。 結構化設計。 普倫蒂斯霍爾,新澤西州恩格爾伍德懸崖,1979 年。