Sdílet prostřednictvím


Metriky kódu – párování tříd

Složitost tříd je také známá jako Párování mezi objekty (CBO), jak bylo původně definováno CK94. V podstatě je párování tříd mírou, kolik tříd používá jedna třída. Vysoké číslo je špatné a nízké číslo je obvykle dobré s touto metrikou. Bylo prokázáno, že párování tříd je spolehlivý ukazatel selhání softwaru a nedávné studie ukázaly, že horní hranice 9 je nejúčinnější S2010.

Podle dokumentace Microsoftu měří spojení s jedinečnými třídami prostřednictvím parametrů, místních proměnných, návratových typů, volání metod, obecných nebo šablonových instancí, základních tříd, implementací rozhraní, polí definovaných na externích typech a dekorování atributů. Dobrý návrh softwaru určuje, že typy a metody by měly mít vysokou soudržnost a nízkou spojku. Vysoká spojka značí návrh, který je obtížné opakovaně používat a udržovat kvůli mnoha vzájemným závislostem na jiných typech."

Koncepty propojení a soudržnosti jsou jasně spojeny. Abychom zůstali u tématu této diskuze, nebudeme se podrobně zabývat soudržností, pouze poskytneme stručnou definici z KKLS2000.

Zásadní soudržnost modulu uvedli Yourdon a Constantine jako „jak úzce jsou vnitřní prvky modulu navzájem propojeny nebo souvisejí“ YC79. Modul má silnou soudržnost, pokud představuje přesně jeden úkol [...], a všechny jeho prvky přispívají k tomuto jedinému úkolu. Popisují soudržnost jako atribut návrhu, nikoli kód, a atribut, který lze použít k předpovídání opakované použitelnosti, udržovatelnosti a měnitelnosti."

Příklad párování tříd

Pojďme se podívat na slučování tříd v akci. Nejprve vytvořte novou konzolovou aplikaci a vytvořte novou třídu s názvem Person s některými vlastnostmi a pak okamžitě vypočítejte metriky kódu:

Příklad spojení tříd 1

Všimněte si, že párování tříd je 0, protože tato třída nepoužívá žádné jiné třídy. Nyní vytvořte další třídu s názvem PersonStuff s metodou, která vytvoří instanci Person a nastaví hodnoty vlastnosti. Znovu vypočítejte metriky kódu:

Příklad párování tříd 2

Vidíte, jak hodnota párování tříd stoupá? Všimněte si také, že bez ohledu na to, kolik vlastností nastavíte, hodnota vazby tříd se pouze zvýší o 1, a ne o jinou hodnotu. Párování tříd měří každou třídu pouze jednou v rámci této metriky, bez ohledu na to, jak často je používána. Kromě toho vidíte, že DoSomething() má 1, ale konstruktor PersonStuff() má hodnotu 0. V současné době není v konstruktoru žádný kód, který používá jinou třídu.

Co když vložíte kód do konstruktoru, který používal jinou třídu? Tady je to, co získáte:

Příklad párování tříd 3

Konstruktor teď jasně obsahuje kód, který používá jinou třídu a metrika párování tříd ukazuje tento fakt. Opět si můžete prohlédnout celkovou vazbu tříd pro PersonStuff(), která je 1, a DoSomething(), která je také 1, což ukazuje, že se používá pouze jedna externí třída, bez ohledu na to, kolik interního kódu jej používá.

Dále vytvořte další novou třídu. Pojmenujte tuto třídu a vytvořte v ní některé vlastnosti:

Příklad párování tříd – přidání nové třídy

Teď použijte třídu ve naší DoSomething() metodě v rámci třídy PersonStuff a opět vypočítejte metriky kódu.

Příklad párování tříd 4

Jak vidíte, soudržnost tříd pro třídu PersonStuff stoupá až na 2, a pokud se podíváte podrobněji na třídu, uvidíte, že DoSomething() metoda má nejvyšší míru soudržnosti, ale konstruktor stále používá pouze jednu třídu. Pomocí těchto metrik můžete zobrazit celkové maximální číslo pro danou třídu a přejít k podrobnostem o jednotlivých členech.

Kouzelné číslo

Stejně jako u cyklomatické složitosti neexistuje žádné omezení, které by vyhovovalo všem organizacím. S2010 ale znamená, že limit 9 je optimální:

"Proto považujeme prahové hodnoty [...] jako nejúčinnější. Tyto prahové hodnoty (pro jeden člen) jsou CBO = 9[...]." (zvýraznění přidáno)

Code Analysis

Analýza kódu zahrnuje kategorii pravidel udržovatelnosti. Další informace naleznete v tématu pravidla udržovatelnosti. Pokud používáte starší verzi analýzy kódu, sada pravidel Extended Design Guideline obsahuje oblast udržovatelnosti:

Pravidla rozšířených zásad návrhu pro párování tříd

Uvnitř oblasti udržovatelnosti je pravidlo pro závislost mezi třídami:

Pravidlo párování tříd

Při nadměrné složitosti vazby tříd vydá toto pravidlo upozornění. Další informace najdete v tématu CA1506: Vyhněte se nadměrnému párování tříd.

Citace

CK94

Chidamber, S. R. & Kemerer, C. F. (1994). A Metrics Suite for Object Oriented Design (IEEE Transactions on Software Engineering, Vol. 20, No. 6). Citováno z 14. května 2011 z webu University of Pittsburgh: http://www.pitt.edu/~ckemerer/CK%20research%20papers/MetricForOOD_ChidamberKemerer94.pdf

KKLS2000

Kabaili, H., Keller, R., Lustman, F., a Saint-Denis, G. (2000). Znovu posouzení soudržnosti tříd: Empirická studie o průmyslových systémech (Proceedings of the Workshop on Quantitative Approaches in Object-Oriented Software Engineering). Citováno z 20. května 2011, z Université de Montréal webové stránky http://www.iro.umontreal.ca/~sahraouh/qaoose/papers/Kabaili.pdf

SK2003

Subramanyam, R. & Krishnan, M. S. (2003). Empirická analýza metrik CK pro složitost návrhu Object-Oriented: Důsledky chyb softwaru (IEEE Transactions on Software Engineering, Vol. 29, No. 4).

S2010

Shatnawi, R. (2010). Kvantitativní šetření úrovní přijatelných rizik objektově orientovaných metrik v systémech s otevřeným zdrojovým kódem (IEEE Transactions on Software Engineering, Vol. 36, No. 2).

YC79

Edward Yourdon a Larry L. Constantine. Strukturovaný návrh Prentice Hall, Englewood Cliffs, N.J., 1979.