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
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
190 A Metriken für QOOD<br />
NOC (number of operations of a class)<br />
NOC(c) = |{o∈O: has*(c,o)}|<br />
Diese Zählmetriken können verfeinert werden, um spezielle Charakteristika <strong>der</strong><br />
Eigenschaften zu berücksichtigen. Das wird hier am Beispiel von NAC demonstriert,<br />
bei NOC funktioniert es analog. Die erste Verfeinerung berücksichtigt den Sichtbarkeitsbereich<br />
des Attributs (1 = public, 2 = protected, 3 = private). Diese Verfeinerung<br />
ist praktisch, um die öffentliche Schnittstelle o<strong>der</strong> die Vererbungsschnittstelle einer<br />
Klasse beurteilen zu können.<br />
NAC1 (number of public attributes of a class)<br />
NAC1 (c) = |{a∈A: has*(c,a) ∧ a.visibility = public}|<br />
NAC2 (number of protected attributes of a class)<br />
NAC2 (c) = |{a∈A: has*(c,a) ∧ a.visibility = protected}|<br />
NAC3 (number of private attributes of a class)<br />
NAC3 (c) = |{a∈A: has*(c,a) ∧ a.visibility = private}|<br />
Die zweite Verfeinerung betrachtet die Zugehörigkeit des Attributs zur Klasse (c =<br />
ownerScope classifier) o<strong>der</strong> zum Objekt (o = ownerScope instance). Klassenattribute tragen<br />
in <strong>der</strong> Regel nicht so viel zur Komplexität <strong>der</strong> Methodenimplementierungen bei,<br />
können aber an<strong>der</strong>erseits erhöhte Kopplung mit sich bringen, da sie wie globale Variable<br />
verwendet werden können.<br />
NACc (number of class attributes of a class)<br />
NACc (c) = |{a∈A: has*(c,a) ∧ a.ownerScope = classifier}|<br />
NACo (number of object attributes of a class)<br />
NACo (c) = |{a∈A: has*(c,a) ∧ a.ownerScope = instance}|<br />
Schließlich kann auch nach lokal definierten (l = local) und geerbten (i = inherited)<br />
Attributen unterschieden werden. Geerbte Attribute tragen in <strong>der</strong> Regel, insbeson<strong>der</strong>e<br />
bei eingeschränkter Sichtbarkeit, nicht soviel zur Komplexität einer Klasse bei<br />
wie lokal definierte Attribute.<br />
NACl (number local attributes of a class)<br />
NACl (c) = |{a∈A: has(c,a)}|<br />
NACi (number of inherited attributes of a class)<br />
NACi (c) = NAC(c) - NACl (c) = |{a∈A: has*(c,a) ∧¬has(c,a)}|<br />
Die Verfeinerungen lassen sich kombinieren, so dass man z. B. die Metrik NAC1,c,i als<br />
die Anzahl <strong>der</strong> öffentlich sichtbaren, geerbten Klassenattribute einführen kann.<br />
Weitere Verfeinerungen aus semantischer Sicht sind ebenfalls denkbar, z. B. eine<br />
Unterscheidung in fachliche und technische Klassen o<strong>der</strong> eine Zuordnung zu Schichten<br />
o<strong>der</strong> Aufgabenbereichen wie z. B. Benutzungsoberfläche, funktionaler Kern und<br />
Datenhaltung. Da diese Verfeinerungen aber aufgrund <strong>der</strong> in ODEM vorliegenden<br />
Information nicht automatisch gebildet werden können, sind hier keine Metriken<br />
dafür definiert. Entsprechende Metriken könnten aber einem spezifischen <strong>Qualität</strong>smodell<br />
hinzugefügt werden.<br />
Metriken für Beziehungen. Zusätzlich sind die ausgehenden (efferenten) Beziehungen<br />
<strong>der</strong> Klasse zu zählen, weil sie negative Auswirkungen auf die Knappheit haben: