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

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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!