30.10.2013 Aufrufe

Bewertung der Qualität objektorientierter Entwürfe - Worte-Projekt

Bewertung der Qualität objektorientierter Entwürfe - Worte-Projekt

Bewertung der Qualität objektorientierter Entwürfe - Worte-Projekt

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

56 5 Ein Referenzmodell für den objektorientierten Entwurf<br />

(1994) mit Hilfe von ODEM formalisiert (soweit möglich). Die formalen Definitionen<br />

verwenden zum Teil Metriken aus QOOD (vgl. Tabelle 9-1).<br />

Fallstudie 1: Martins Paketmetriken<br />

Martin definiert Kriterien für die richtige Verteilung von Klassen auf Pakete. Diese<br />

Kriterien basieren auf dem Begriff <strong>der</strong> Abhängigkeit. Ziel ist die Minimierung von<br />

Abhängigkeiten, insbeson<strong>der</strong>e Abhängigkeiten zu konkreten Klassen. Lei<strong>der</strong> definiert<br />

Martin nicht genau, was eigentlich eine Abhängigkeit ist. Es sagt nur, dass Abhängigkeiten<br />

durch Klassenbeziehungen wie Vererbung, Aggregation und Benutzung entstehen.<br />

Hier wird für die Formalisierung die depends_on-Relation verwendet, welche<br />

die genannten Beispiele einschließt.<br />

Relational cohesion (H). Diese Metrik soll den Zusammenhalt von Klassen innerhalb<br />

eines Pakets erfassen. Weil die Klassen innerhalb eines Pakets eng verwandt sein<br />

sollen, soll <strong>der</strong> Zusammenhalt hoch sein. H ist definiert als (R+1)/N, wobei R die<br />

Anzahl <strong>der</strong> Beziehungen zwischen Klassen innerhalb des Pakets ist und N die Anzahl<br />

<strong>der</strong> Klassen. Die folgende Definition zählt gegenseitige Abhängigkeiten zweimal, je<br />

einmal für jede Richtung. Die Zahl <strong>der</strong> Interfaces (Metrik NIP) wird zur Zahl <strong>der</strong><br />

Klassen (Metrik NCP) hinzugezählt.<br />

H(p) = ((Σ c∈C∪I: contains(p,c) Σ d∈C∪I\{c}: contains(p,d)<br />

depends_on(c,d).weight) + 1) / (NCP(p) + NIP(p))<br />

Afferent Coupling (Ca ). Die Anzahl <strong>der</strong> Klassen aus an<strong>der</strong>en Paketen, die von den<br />

Klassen im Paket abhängen. Die afferente Kopplung soll niedrig sein.<br />

Ca (p) = |{d∈C∪I: ¬contains(p,d) ∧ (∃c∈C∪I: contains(p,c) ∧ depends_on(d,c))}|<br />

Efferent Coupling (Ce ). Die Anzahl <strong>der</strong> Klassen aus an<strong>der</strong>en Paketen, von denen<br />

Klassen im Paket abhängen. Die efferente Kopplung soll niedrig sein.<br />

Ce (p) = |{d∈C∪I: ¬contains(p,d) ∧ (∃c∈C∪I: contains(p,c) ∧ depends_on(c,d))}|<br />

Abstractness (A). Die Abstraktheit eines Pakets ist definiert als das Verhältnis von<br />

abstrakten Klassen (Metrik NCPa ) zu <strong>der</strong> Gesamtzahl <strong>der</strong> Klassen. Martin erwähnt<br />

keine Interfaces; sie werden hier zu den abstrakten Klassen dazugezählt. Der Spezialfall<br />

eines Pakets ohne Klassen (von Martin nicht erwähnt) soll eine Abstraktheit von 1<br />

haben. Solche leeren Pakete sind sinnvoll für die Strukturierung an<strong>der</strong>er Pakete.<br />

A(p) = if NCP(p) + NIP(p) > 0 then (NCPa (p) + NIP(p)) / (NCP(p) + NIP(p)) else 1<br />

Instability (I). Die Instabilität eines Pakets ist definiert als das Verhältnis efferenter<br />

Kopplung zur gesamten Kopplung. Der Spezialfall eines Pakets ohne Kopplung nach<br />

außen (von Martin nicht erwähnt) soll eine Instabilität von 0 haben.<br />

I(p) = if Ca (p) + Ce (p) > 0 then Ce (p) / (Ca (p) + Ce (p)) else 0<br />

Distance from the Main Sequence (D). Die Hauptlinie (main sequence) ist Teil<br />

einer Theorie von Martin, dass die Abstraktheit A und die Instabilität I eines Pakets<br />

ungefähr gleich sein sollten, d. h. reine Abstraktionen sollten sehr stabil sein, während<br />

sich konkrete Implementierungen än<strong>der</strong>n dürfen. Je weiter ein Paket von <strong>der</strong><br />

Hauptlinie, ausgedrückt durch die Gleichung A + I = 1, entfernt ist, desto schlechter.<br />

Es gibt auch eine normalisierte Variante D', die im Intervall [0,1] liegt.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!