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
144 10 Ein spezifisches Qualitätsmodell morphismus wird also gar nicht genutzt. Da von der Klasse auch keine Implementierung vererbt wird, ist sie also gänzlich überflüssig! Entkopplung durch Interfaces Ein Beispiel für die Entkopplung durch Interfaces (siehe auch Fowler, 2001b) findet sich im Entwurf von Gruppe 8. Dort gibt es zur zentralen Steuerung der Programmlogik eine Klasse ProcessHandler, die einige untergeordnete Kontrollklassen assoziiert (z. B. DataManager). Diese Klassen benötigen aber Zugriff auf die übergeordnete Kontrollklasse, wodurch ein (unerwünschter) Abhängigkeitszyklus entsteht. Dieser lässt sich aufbrechen, indem ein Interface ProcessManager eingeführt wird, das von ProcessHandler implementiert wird. Die untergeordneten Kontrollklassen assoziieren statt ProcessHandler das Interface ProcessManager (vgl. Abbildung 10-5). Abbildung 10-5: Entkopplung durch Interface bei Gruppe 8 Zusammenhalt Ein Beispiel für schlechten Zusammenhalt findet sich bei Gruppe 6. Dort gibt es eine God Class (Riel, 1996) namens Scheduler (vgl. Abbildung 10-6). Eine God Class ist ein typischer Anfängerfehler, nämlich die gesamte Funktion des Systems in einer Klasse zu konzentrieren oder zumindest von dort aus zu steuern. Dies läuft der objektorientierten Vorgehensweise, Funktion zu dezentralisieren, diametral entgegen. Die Klasse Scheduler verwaltet sowohl die Passwort-Informationen (aus Datei lesen, zugreifen, ändern, in Datei schreiben) als auch die Fahrplaninformation (aus Datei lesen, zugreifen, ändern, in Datei schreiben). Außerdem enthält die Klasse auch noch den Suchalgorithmus für die Verbindungssuche. Insgesamt kommt so die stolze Zahl von 35 Operationen zusammen (13 öffentlich, 22 privat). Dass hier unterschiedliche Aufgaben in einer Klasse realisiert werden, ist den Entwerfern auch selbst aufgefallen: Sie haben zwei Interfaces vorgesehen, die zur Trennung der Aufgaben nach außen dienen sollen und von der Klasse implementiert werden. Das Interface SearchFrameDataAdapter repräsentiert den Suchalgorithmus. Das Interface AdminDataAdapter allerdings steht für Passwort-Verwaltung und Fahrplandatenverwaltung, also sind auch hier bereits Aufgaben verquickt. Sofern über die Interfaces auf die Klasse zugegriffen wird, ist das Problem des geringen Zusammenhalts nach außen also etwas abgemildert. Besser wäre es allerdings gewesen, die Klasse Scheduler wirklich in drei verschiedene Klassen (oder mehr) aufzuspalten. Ändert sich nämlich bei einer der drei Aufgaben etwas, muss jedes Mal die
10.2 Anwendung des Qualitätsmodells 145 Abbildung 10-6: God Class bei Gruppe 6 Klasse geändert werden, was potentiell alle Benutzer der Klasse betreffen kann. Weil Scheduler quasi die gesamte Funktionalität des Programms realisiert oder steuert, sind das fast alle Klassen im System. 10.2.3 Modellvalidierung Zur Validierung des Modells wird die Bewertung der Wartbarkeit mit tatsächlichen Wartungsaufwänden der Implementierung verglichen, um die Vorhersagefähigkeit des Modells zu überprüfen. Idealerweise fällt der Wartungsaufwand um so niedriger aus, je besser die Bewertung der Wartbarkeit aufgrund des Entwurfs ist. Da es sich hier um studentische Projekte im Rahmen eines Praktikums handelt, sind die Implementierungen allerdings Wegwerfprodukte. Sie wurden nie gewartet, so dass keine Wartungsdaten vorliegen. Die Alternative, die zwölf Implementierungen durch andere Entwickler warten zu lassen, musste leider wegen des dafür notwendigen Aufwands verworfen werden. Stattdessen wird hier eine Plausibilitätsprüfung durchgeführt. Für die Entwürfe (und ihre Implementierungen) wird ermittelt, welche Klassen, Attribute und Operationen 1 geändert bzw. hinzugefügt werden müssen, um drei adaptive Wartungsaufgaben 1. Bei den geänderten Operationen werden nicht nur diejenigen mitgezählt, deren Signatur sich ändert, sondern auch die, bei denen die Implementierung (die Methode) geändert werden muss.
- Seite 103 und 104: 7.4 Beispiele für OOD-Qualitätsmo
- Seite 105 und 106: 7.4 Beispiele für OOD-Qualitätsmo
- Seite 107 und 108: 7.6 Entwurfsbewertung 97 7.5.2 Kons
- Seite 109 und 110: 7.6 Entwurfsbewertung 99 Evaluation
- Seite 111 und 112: Kapitel 8 Das allgemeine Qualitäts
- Seite 113 und 114: 8.1 Vorüberlegungen 103 8.1.4 Indi
- Seite 115 und 116: 8.3 Wartbarkeit 105 unabhängige Mo
- Seite 117 und 118: 8.3 Wartbarkeit 107 auswirkt (höhe
- Seite 119 und 120: 8.3 Wartbarkeit 109 Diskussion Für
- Seite 121 und 122: 8.3 Wartbarkeit 111 Diskussion Zusa
- Seite 123 und 124: 8.5 Wiederverwendbarkeit 113 derver
- Seite 125 und 126: 8.7 Testbarkeit 115 kann. Technisch
- Seite 127 und 128: Kapitel 9 Quantifizierung des Quali
- Seite 129 und 130: 9.1 Bewertungsverfahren 119 Bewertu
- Seite 131 und 132: 9.2 Objektive Metriken 121 Akronym
- Seite 133 und 134: 9.2 Objektive Metriken 123 Paket NC
- Seite 135 und 136: 9.3 Subjektive Metriken 125 Gewicht
- Seite 137 und 138: 9.4 Fragebögen 127 9.4 Fragebögen
- Seite 139 und 140: 9.4 Fragebögen 129 auch Fragen, f
- Seite 141 und 142: 9.5 Gesamtbewertung 131 der Gewicht
- Seite 143 und 144: 9.6 Ableitung spezifischer Modelle
- Seite 145 und 146: Kapitel 10 Ein spezifisches Qualit
- Seite 147 und 148: 10.1 Ableitung des Qualitätsmodell
- Seite 149 und 150: 10.1 Ableitung des Qualitätsmodell
- Seite 151 und 152: 10.2 Anwendung des Qualitätsmodell
- Seite 153: 10.2 Anwendung des Qualitätsmodell
- Seite 157 und 158: 10.2 Anwendung des Qualitätsmodell
- Seite 159 und 160: 10.3 Besonderheiten bei Mustern 149
- Seite 161 und 162: Kapitel 11 Werkzeugunterstützung H
- Seite 163 und 164: 11.1 Werkzeuge aus anderen Arbeiten
- Seite 165 und 166: 11.2 Selbst realisierte Werkzeuge 1
- Seite 167 und 168: 11.2 Selbst realisierte Werkzeuge 1
- Seite 169 und 170: 11.3 Ausblick: Ein ideales Werkzeug
- Seite 171 und 172: Kapitel 12 Zusammenfassung und Ausb
- Seite 173 und 174: 12.2 Bewertung des Ansatzes 163 Die
- Seite 175 und 176: 12.3 Vergleich mit anderen Arbeiten
- Seite 177 und 178: 12.4 Ausblick 167 Entwerfen QOOD ka
- Seite 179 und 180: Literatur Abowd et al. (1996) Abowd
- Seite 181 und 182: Beyer et al. (2000) Beyer, D.; Lewe
- Seite 183 und 184: Cavano, McCall (1978) Cavano, J.; M
- Seite 185 und 186: Dißmann (1990) Dißmann, S.: Anfor
- Seite 187 und 188: Gursaran, Roy (2002) Gursaran; Roy,
- Seite 189 und 190: Koenig (1995) Koenig, A.: Patterns
- Seite 191 und 192: McCabe (1976) McCabe, T.: A Complex
- Seite 193 und 194: Rising (2000) Rising, L.: The Patte
- Seite 195 und 196: Wand (1989) Wand, Y.: A Proposal fo
- Seite 197 und 198: Akronyme Allgemeine Akronyme CMM Ca
- Seite 199 und 200: Anhang A Metriken für QOOD Dieser
- Seite 201 und 202: A.1 Knappheit 191 Ihre Verwaltung m
- Seite 203 und 204: A.3 Entkopplung 193 Neben der Tiefe
144 10 Ein spezifisches <strong>Qualität</strong>smodell<br />
morphismus wird also gar nicht genutzt. Da von <strong>der</strong> Klasse auch keine Implementierung<br />
vererbt wird, ist sie also gänzlich überflüssig!<br />
Entkopplung durch Interfaces<br />
Ein Beispiel für die Entkopplung durch Interfaces (siehe auch Fowler, 2001b) findet<br />
sich im Entwurf von Gruppe 8. Dort gibt es zur zentralen Steuerung <strong>der</strong> Programmlogik<br />
eine Klasse ProcessHandler, die einige untergeordnete Kontrollklassen assoziiert<br />
(z. B. DataManager). Diese Klassen benötigen aber Zugriff auf die übergeordnete Kontrollklasse,<br />
wodurch ein (unerwünschter) Abhängigkeitszyklus entsteht. Dieser lässt<br />
sich aufbrechen, indem ein Interface ProcessManager eingeführt wird, das von ProcessHandler<br />
implementiert wird. Die untergeordneten Kontrollklassen assoziieren<br />
statt ProcessHandler das Interface ProcessManager (vgl. Abbildung 10-5).<br />
Abbildung 10-5: Entkopplung durch Interface bei Gruppe 8<br />
Zusammenhalt<br />
Ein Beispiel für schlechten Zusammenhalt findet sich bei Gruppe 6. Dort gibt es eine<br />
God Class (Riel, 1996) namens Scheduler (vgl. Abbildung 10-6). Eine God Class ist ein<br />
typischer Anfängerfehler, nämlich die gesamte Funktion des Systems in einer Klasse<br />
zu konzentrieren o<strong>der</strong> zumindest von dort aus zu steuern. Dies läuft <strong>der</strong> objektorientierten<br />
Vorgehensweise, Funktion zu dezentralisieren, diametral entgegen.<br />
Die Klasse Scheduler verwaltet sowohl die Passwort-Informationen (aus Datei lesen,<br />
zugreifen, än<strong>der</strong>n, in Datei schreiben) als auch die Fahrplaninformation (aus Datei<br />
lesen, zugreifen, än<strong>der</strong>n, in Datei schreiben). Außerdem enthält die Klasse auch noch<br />
den Suchalgorithmus für die Verbindungssuche. Insgesamt kommt so die stolze Zahl<br />
von 35 Operationen zusammen (13 öffentlich, 22 privat).<br />
Dass hier unterschiedliche Aufgaben in einer Klasse realisiert werden, ist den Entwerfern<br />
auch selbst aufgefallen: Sie haben zwei Interfaces vorgesehen, die zur Trennung<br />
<strong>der</strong> Aufgaben nach außen dienen sollen und von <strong>der</strong> Klasse implementiert werden.<br />
Das Interface SearchFrameDataAdapter repräsentiert den Suchalgorithmus. Das Interface<br />
AdminDataAdapter allerdings steht für Passwort-Verwaltung und Fahrplandatenverwaltung,<br />
also sind auch hier bereits Aufgaben verquickt.<br />
Sofern über die Interfaces auf die Klasse zugegriffen wird, ist das Problem des geringen<br />
Zusammenhalts nach außen also etwas abgemil<strong>der</strong>t. Besser wäre es allerdings<br />
gewesen, die Klasse Scheduler wirklich in drei verschiedene Klassen (o<strong>der</strong> mehr) aufzuspalten.<br />
Än<strong>der</strong>t sich nämlich bei einer <strong>der</strong> drei Aufgaben etwas, muss jedes Mal die