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.

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:

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!