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
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
194 A Metriken für QOOD<br />
4. Wird nur direkte o<strong>der</strong> auch indirekte Kopplung betrachtet?<br />
Diese Fragen werden hier wie folgt beantwortet:<br />
1. Kopplung entsteht durch Beziehungen zwischen den Einheiten des Entwurfs. Je<br />
mehr Beziehungen es gibt, desto geringer ist die Entkopplung. Die geerbten Beziehungen<br />
werden mitgezählt.<br />
2. Mehrfache Beziehungen <strong>der</strong> gleichen Art zwischen zwei Einheiten werden auch<br />
mehrfach gezählt. Dadurch haben die Zählmetriken bei <strong>der</strong>artiger Redundanz<br />
einen höheren Wert. Darüber hinaus werden keine Unterschiede in <strong>der</strong> Kopplungsstärke<br />
gemacht.<br />
3. Die Richtung <strong>der</strong> Kopplung spielt eine Rolle. Die Richtung ist gegeben durch die<br />
Richtung <strong>der</strong> Abhängigkeit (z. B. wenn Klasse B von Klasse A erbt, ist B an A<br />
gekoppelt, aber nicht umgekehrt).<br />
4. Es werden nur direkte Beziehungen betrachtet, denn die zusätzliche Berücksichtigung<br />
indirekter Beziehungen erbringt keinen Zusatznutzen (Briand et al., 1999).<br />
Klasse/Interface<br />
Auf Klassenebene ergibt sich damit zunächst die folgende Zählmetrik, die alle von<br />
<strong>der</strong> Klasse ausgehenden (efferenten) Beziehungen berücksichtigt:<br />
NEDC (number of efferent dependencies of a class)<br />
NEDC(c) = Σd∈C∪I depends_on*(c,d).weight<br />
Für diese wie für alle folgenden Metriken zur Entkopplung gilt, dass sie negativ mit<br />
<strong>der</strong> Entkopplung korreliert ist.<br />
Eine Unterscheidung in lokal definierte und geerbte Beziehungen (wie bei Attributen<br />
und Operationen) ist möglich:<br />
NEDCl (number of local efferent dependencies of a class)<br />
NEDCl (c) = Σd∈C∪I depends_on(c,d).weight<br />
Beziehungen <strong>der</strong> Klasse mit sich selbst stellen einen Son<strong>der</strong>fall dar, weil die Abhängigkeit<br />
lokal beschränkt ist. Dadurch ist diese Kopplung weniger schlecht für die<br />
Wartbarkeit als eine Kopplung nach außen. Deshalb ist es sinnvoll, mit reflexiven<br />
Beziehungen zu verfeinern:<br />
NEDCr (number of reflexive efferent dependencies of a class)<br />
NEDCr (c) = depends_on*(c,c).weight<br />
Eine weitere Verfeinerung unterscheidet zwischen Abhängigkeiten von abstrakten<br />
Klassen/Interfaces und konkreten Klassen. Abstrakte Klassen und Interfaces sind in<br />
<strong>der</strong> Regel stabiler, d. h. ihre Schnittstelle än<strong>der</strong>t sich nicht so häufig. Deshalb könnten<br />
solche Abhängigkeiten geringer gewichtet werden als Abhängigkeiten von konkreten<br />
Klassen.<br />
NEDCa (number of abstract efferent dependencies of a class)<br />
NEDCa (c) = Σd∈C∪I: d.isAbstract depends_on*(c,d).weight<br />
Außerdem können Beziehungen zu Modellelementen im gleichen Paket von Beziehungen<br />
zu Modellelementen in an<strong>der</strong>en Paketen unterschieden werden.