Metriken für Objektorientierte Software



Ähnliche Dokumente
Verwendung von OO-Metriken zur Vorhersage

Software-Metriken. Dipl.-Ing.(BA) Henning Sievert Seminar Software-Entwurf WS 2004/05

Software-Metriken. Wolfgang Globke. Seminar Moderne Softwareentwicklung SS Software-Metriken. Wolfgang Globke. Metriken und Qualitätsmodelle

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Software Engineering in der Praxis

Werkzeuggestützte Softwareprüfungen Statische Analyse und Metriken

Qualitätsmanagement im Projekt

Zeichen bei Zahlen entschlüsseln

Fachdidaktik der Informatik Jörg Depner, Kathrin Gaißer

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Übungsbuch für den Grundkurs mit Tipps und Lösungen: Analysis

Objektorientierte Programmierung für Anfänger am Beispiel PHP

V 2 B, C, D Drinks. Möglicher Lösungsweg a) Gleichungssystem: 300x y = x + 500y = 597,5 2x3 Matrix: Energydrink 0,7 Mineralwasser 0,775,

Professionelle Seminare im Bereich MS-Office

Objektorientierte Programmierung OOP

Comparison of Software Products using Software Engineering Metrics

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Fragebogen: Abschlussbefragung

Softwaremessung und -metrik

Prinzipien Objektorientierter Programmierung

Physik & Musik. Stimmgabeln. 1 Auftrag

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Informationsblatt Induktionsbeweis

Das große ElterngeldPlus 1x1. Alles über das ElterngeldPlus. Wer kann ElterngeldPlus beantragen? ElterngeldPlus verstehen ein paar einleitende Fakten

Objektorientierte Programmierung

Prozessbewertung und -verbesserung nach ITIL im Kontext des betrieblichen Informationsmanagements. von Stephanie Wilke am

Primzahlen und RSA-Verschlüsselung

Software-Metriken. B. Sc. Michael Thomas. Seminar Software-Entwurf WS 2004/05.

Einführung in die Java- Programmierung

StuPro-Seminar Dokumentation in der Software-Wartung. StuPro-Seminar Probleme und Schwierigkeiten in der Software-Wartung.

SWE12 Übungen Software-Engineering

Gleichungen Lösen. Ein graphischer Blick auf Gleichungen

geben. Die Wahrscheinlichkeit von 100% ist hier demnach nur der Gehen wir einmal davon aus, dass die von uns angenommenen

Handbucherweiterung Zuschlag

Softwaretests in Visual Studio 2010 Ultimate Vergleich mit Java-Testwerkzeugen. Alexander Schunk Marcel Teuber Henry Trobisch

3.2 Spiegelungen an zwei Spiegeln

Grundlagen von Python

Jeopardy and andere Quizformate im bilingualen Sachfachunterricht Tipps zur Erstellung mit Powerpoint

1 Mathematische Grundlagen

Fassade. Objektbasiertes Strukturmuster. C. Restorff & M. Rohlfing

Übungsklausur vom 7. Dez. 2007

Lineare Gleichungssysteme

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Dr. Hanno Schauer Mons-Tabor-Gymnasium Montabaur. UML-Klassendiagramme als Werkzeug im Unterricht

Das System sollte den Benutzer immer auf dem Laufenden halten, indem es angemessenes Feedback in einer angemessenen Zeit liefert.

Programmieren in Java

Was bringt TDD wirklich?

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

Diplomarbeit. Konzeption und Implementierung einer automatisierten Testumgebung. Thomas Wehrspann. 10. Dezember 2008

Inhalt Software-Metriken Software-Metriken mit Together FindBugs. Software-Metriken. Raimar Lill Matthias Meitner David Föhrweiser Marc Spisländer

1.1 Allgemeines. innerhalb der Nachtzeit (19:00 24:00) Gesamte Normalarbeitszeit (16:00 19:00)

BERECHNUNG DER FRIST ZUR STELLUNGNAHME DES BETRIEBSRATES BEI KÜNDIGUNG

How to do? Projekte - Zeiterfassung

Objektorientierter Software-Entwurf Grundlagen 1 1. Analyse Design Implementierung. Frühe Phasen durch Informationssystemanalyse abgedeckt

Wie funktioniert ein Mieterhöhungsverlangen?

Kapitalerhöhung - Verbuchung

Korrelation. Übungsbeispiel 1. Übungsbeispiel 4. Übungsbeispiel 2. Übungsbeispiel 3. Korrel.dtp Seite 1

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Guide DynDNS und Portforwarding

Rekursionen. Georg Anegg 25. November Methoden und Techniken an Beispielen erklärt

Klausur WS 2006/07 Programmiersprache Java Objektorientierte Programmierung II 15. März 2007

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

OOD. Objektorientiertes Design. Peter Coad und Edward Yourdon. Prentice Hall Verlag

Tutorial: Homogenitätstest

Güte von Tests. die Wahrscheinlichkeit für den Fehler 2. Art bei der Testentscheidung, nämlich. falsch ist. Darauf haben wir bereits im Kapitel über

Kurzanleitung zu. von Daniel Jettka

Forschen - Schreiben - Lehren

Einführung in Eclipse und Java

Software Engineering. Sommersemester 2012, Dr. Andreas Metzger

Access [basics] Rechnen in Berichten. Beispieldatenbank. Datensatzweise berechnen. Berechnung im Textfeld. Reporting in Berichten Rechnen in Berichten

Übungen zur Softwaretechnik

4. Jeder Knoten hat höchstens zwei Kinder, ein linkes und ein rechtes.

QM: Prüfen -1- KN

Software Engineering Interaktionsdiagramme

Einfache Varianzanalyse für abhängige

4. AUSSAGENLOGIK: SYNTAX. Der Unterschied zwischen Objektsprache und Metasprache lässt sich folgendermaßen charakterisieren:

Lichtbrechung an Linsen

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Communication Metrics for Software Development

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Die Größe von Flächen vergleichen

Client-Server-Beziehungen

infach Geld FBV Ihr Weg zum finanzellen Erfolg Florian Mock

Dokumentation von Ük Modul 302

3. LINEARE GLEICHUNGSSYSTEME

Ein Ausflug zu ACCESS

! " # $ " % & Nicki Wruck worldwidewruck

Abituraufgabe zur Stochastik, Hessen 2009, Grundkurs (TR)

Installation der SAS Foundation Software auf Windows

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Welche Unterschiede gibt es zwischen einem CAPAund einem Audiometrie- Test?

Reporting Services und SharePoint 2010 Teil 1

Zwei einfache Kennzahlen für große Engagements

Alle gehören dazu. Vorwort

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus:

Arbeiten mit UMLed und Delphi

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

Transkript:

Metriken für Objektorientierte Software Alexander Ostrovsky ostrovsk@in.tum.de Abstract: In dieser Arbeit werden die Grundlagen der Metriken für objektorientierte Software behandelt. Aufgrund der hohen Komplexität heutiger Softwareprodukte, ist es oft nicht möglich die Güte dieser mit bloßem Augenmaß zu messen. Dazu bedarf es einer formalen Messmethode, wie einer mathematischen Abbildung vom Quellcode oder vom Softwaredesign in eine total geordnete Menge, wie die der reellen Zahlen. Genau das leisten die Metriken. 1 Einleitung Bereits vor der Computerära wusste der Physiker Clerk Maxwell, dass aus dem Messen Wissen entspringt ( To measure is to know ). Auch ist es für Softwareingeneure von großer Wichtigkeit, die Güte eines Softwareproduktes zu messen, insbesondere dann, wenn eine Organisation neue Technologien einsetzen will. Ein schlechter Messwert ist ein Indiz, dass die neue Technologie nicht verwendet werden sollte [CSR94]. Insbesondere können Metriken dazu benutzt werden, die Kosten künftiger Projekte zu schätzen, die gegenwärtige und künftige Produktivität der Hilfsmittel zu bestimmen, die Softwarequalität zu steigern, die Bedürfnisse für die Zukunft zu bestimmen und den Wartungsaufwand möglichst zu minimieren. Im Hinblick auf die Objektorientierung können die Metriken auch dazu verwendet werden, den Grad der Objektorientierung zu messen [CSR91]. Damit beschäftigt sich die vorliegende Arbeit. Die Gliederung ist wie folgt: Zunächst wird der Leser in die Grundlagen der Metriken eingeführt. In den nachfolgenden beiden Kapiteln werden die bekanntesten objektorientierten Metriken diskutiert. Das letzte Kapitel gibt dann einen kurzen Ausblick auf die automatisierte Erhebung der Metriken. 2 Grundlagen 2.1 Definition der Softwarequalitätsmetriken Die Definition IEEE 1061, 1992 besagt: Eine Softwarequalitätsmetrik ist eine Funktion, die eine Software-Einheit in einen Zahlenwert abbildet. Dieser berechnete Wert ist interpretierbar als der Erfüllungsgrad einer Qualitätseigenschaft der Software-Einheit.

Die Qualitätseigenschaften von Software sind dabei hauptsächlich Fehlerfreiheit, Zuverlässigkeit, Effizienz, Benutzungsfreundlichkeit und Wartbarkeit [Fra98]. Ferner werden die Metriken unter anderem in Produkt- und Prozessmetriken untergliedert. Während Produktmetriken Softwarekomplexität bzw. die Güte der Dokumentation messen, bewerten die Prozessmetriken den Entwicklungsprozess, wie exemplarisch die benötigte Zeit oder das Erfahrungsniveau des Entwicklungsteams [Mil88]. 2.2 Nutzen und Kritik von Metriken Die Metriken sind ein nützliches Hilfsmittel um nach Problemen im Code zu suchen. Jedoch sind gute oder schlechte Ergebnisse lediglich ein Indiz für problembehaftete Stellen. Letztendlich muss der Softwareingeneur entscheiden ob der Code einer Überarbeitung bedarf [Mat09a]. Zum Beispiel hätte das nachfolgende Codefragment trotz der recht guten Übersichtlichkeit eine eher hohe zyklomatische Komplexität von 9 [Wik10]: String wochentagsname(int nummer) { switch(nummer) { case 1: return "Montag"; case 2: return "Dienstag"; case 3: return "Mittwoch"; case 4: return "Donnerstag"; case 5: return "Freitag"; case 6: return "Samstag"; case 7: return "Sonntag"; } return "(unbekannter Wochentag)"; } Ein weiteres Ziel ist die Verbesserung des Entwicklungsprozesses, indem man die Entwicklung vorhersehbarer macht. Dafür lassen sich zum Beispiel die Funktion-Point-Metriken verwenden, welche Produktanforderungen auf Personenstunden abbilden [Mil88]. Nicht zuletzt üben die Metriken einen erzieherischen Effekt auf den Programmierer / die Programmiererin aus. Wenn dieser oder diese nämlich weiß, dass sein Code auf bestimmte Kriterien hin überprüft wird, wird er versuchen diese einzuhalten [Tae09]. So nützlich wie die Metriken auch seien mögen, stellen sie keine vollkommene Lösung dar, um sowohl qualitativ hochwertige als auch günstige Software zu produzieren. Man bedenke, dass viele Entwickler die Verwendung der Metriken ablehnen oder falls sie diese verwenden einen subjektiven Einfluss auf diese ausüben können. Viel wichtiger ist jedoch, dass viele interessante Aspekte, wie unter anderem die Qualität eines Softwareproduktes sich nicht direkt messen lassen. Als einen möglichen Ausweg kann man ausgewählte Größen messen und diese geeignet Interpretieren [Tae09], wobei das auch nicht immer trivial ist.

2.3 Gütekriterien für Softwaremetriken Trotz der Verschiedenheit der diversen Metriken, dienen sie alle dem gleichen Zweck. Es sollen durch die Messung vormals unsichtbaren Aspekte der Softwareprodukte sichtbar gemacht werden um objektiv miteinander verglichen werden zu können. Damit eine Metrik zu diesem Zweck gewinnbringend eingesetzt werden kann, müssen alle nachfolgenden Kriterien erfüllt werden: 1. Objektivität: Eine Metrik sollte Objektiv sein. Viele der heutigen Metriken lassen sich mathematisch formal aufschreiben und automatisiert berechnen. Dadurch sind diese vor subjektiven Einflüssen geschützt. 2. Robustheit: Eine Metrik sollte stets für die gleichen Eingabewerte die gleichen Ausgabewerte liefern. 3. Vergleichbarkeit: Die Metriken der gleichen Kenngröße sollten miteinander vergleichbar sein. 4. Ökonomie: Die Erhebung der Metriken soll möglichst ökonomisch durchgeführt werden können, zum Beispiel automatisiert. 5. Korrelation: Eine Software-Metrik korreliert dann, wenn aus den Messergebnissen ein Rückschluss auf die gemessene Eigenschaft gezogen werden kann. Für Qualitätsparameter wie die Ausführungsgeschwindigkeit kann man leicht korrelierende Metriken aufstellen, für andere Parameter, wie zum Beispiel Benutzbarkeit lässt sich eine gute Korrelation nur eingeschränkt sicherstellen. 6. Verwertbarkeit: Letztendlich sollten die Ergebnisse einer Metrik das Handeln beeinflussen. [Hof08] 2.4 Goal-Question-Metric Ansatz Eine Metrik sollte immer zu einem expliziten Zweck erhoben werden. Damit eine Messung tatsächlich zielorientiert ausgeführt wird, kann man den Goal-Question-Metric-Ansatz verwenden. Dabei geht man wir folgt vor: 1. Zunächst wird ein Messplan erstellt. 2. Danach wird ein Messprogramm definiert. Dabei beschäftigt man sich mit dem Ziel der Messungen, stellt Hypothesen (was sollte bei einer Messung herauskommen) auf und wählt konkrete Metriken aus. 3. Im dritten Schritt misst man und sammelt die Messwerte.

4. Letztlich beschäftigt man sich mit der Interpretation der gesammelten Daten bezüglich der festgelegten Metriken. Damit kann man beurteilen, ob die angestrebten Ziele erreicht wurden. [Wal01] 3 Metriken für den objektorientierten Entwurf 3.1 Metriken für den objektorientierten Entwurf Die Metriken für den objektorientierten Entwurf 1 müssen die Eigenschaften objektorientierter Programmiersprachen berücksichtigen. Dafür existieren die sogenannten Komponentenund Strukturmetriken [Hof08]. 3.2 Komponentenmetriken Mit den Komponentenmetriken lassen sich die einzelnen Bestandteile, also Komponenten, wie zum Beispiel Klassen, eines Programmes bewerten. Dabei zählt man beispielweise die Objektvariablen, Klassenvariablen oder Attribute und untersucht die Klassen, in denen diese Parameter besonders herausstechen. Dabei lassen sich Klassen finden, die entweder besonders wichtig, oder aber auch besonders monolithisch sind, also in mehrere Klassen aufgespalten werden können. Mit den Vererbungsmetriken lässt sich die Länge der Vererbungskette bestimmen. Diese sollte möglichst kurz sein um die Wartbarkeit nicht zu verschlechtern [Hof08]. 3.3 Strukturmetriken Konträr zu den Komponentenmetriken dienen die Strukturmetriken dazu den Zusammenhang unter den Klassen zu bewerten. Dabei wird gezählt, wie oft auf eine Klasse zugegriffen wird (Fan-In) oder wie oft eine Klasse auf andere zugreift (Fan-Out). Allgemein gilt je höher der Fan-In und der Fan-Out ist, desto komplexer ist die Struktur des Programms 2 [Hof08]. 1 Eine Einführung in den objektorientierten Entwurf wird in [Lah09] gegeben. Eine Online-Version des Buches ist unter http://openbook.galileocomputing.de/oop/ zu finden. 2 Nach einigen Forschern (z.b. Card und Glass) spielt nur Fan-Out für die Strukturkomplexität eine Rolle.

3.4 Bedingte Eignung der prozeduralen Metriken Die Metriken für die prozedurale Software, wie zum Beispiel die LOC-Metrik (Lines of Code) oder McCabes zyklomatische Komplexität, eignen sich nur bedingt für das objektorientierte Design. Hier wird unter Anderem bemängelt, dass diesen eine feste theoretische Basis fehlt. Aber auch wird die Tatsache kritisiert, dass die prozeduralen Metriken darauf ausgelegt sind, prozedurale Programme zu bewerten bei denen es nicht wichtig ist, wie gut die reale Welt in Objekten modelliert wird [CSR91]. Klassische Metriken, die die Methodenkomplexität messen, sagen nichts über die Beziehungen der Klassen zueinander, zu den Klassenhierarchien und zu den vererbten Methodenimplementierungen aus. Nichtdestotrotz kann man die gewöhnlichen Metriken auch für die Komplexitätsmessung der einzelnen Funktionen verwenden, da diese, wie ebenfalls in den prozeduralen Programmen imperativ geschrieben werden [Hof08]. 4 Konkrete Metriken In diesem Abschnitt, werden die bekanntesten Metriken für die Klassen, die sogenannten Chidamber-Kemerer Metriken vorgestellt [Elm05]. Am Ende des Abschnittes wird dem Leser ein kurzer Ausblick über die weiteren Metriken gegeben und kurz auf die Metriken für die Packages eingegangen. Einige der nachfolgenden Unterpunkte werden am Beispiel des folgenden Klassendiagramms genauer erläutert: Abbildung 1: Beispiel-UML-Klassendiagramm

4.1 Weighted Methods Per Class (WMC) Die WMC-Metrik einer Klasse ist die Summer der Komplexitäten der Methoden einer Klasse. Formaler: Sei C eine Klasse mit den Methoden M 1...M n. Seien ferner c 1...c n 3 die Komplexitätswerte der einzelnen Methoden, wobei c 1 die Komplexität der Methode M 1, c 2 die Komplexität der Methode M 2, usw. bezeichnet. Dann lässt sich der WMC- Wert mit W MC = n c i (1) berechnen. Dabei gilt: Je höher der WMC-Wert ist, desto höher ist der Wartungs- und Entwicklungsaufwand. Auch gilt, dass die Klassen mit einem hohen WMC-Wert üblicherweise eher programmspezifisch sind und sich schlechter wiederverwenden lassen. Theoretisch lässt sich WMC wie folgt begründen: Die Komplexität eines Objekts wird von der Kardinalität der Menge der Eigenschaften von diesem bestimmt. Da die Methoden die Eigenschaften einer Klasse darstellen, lässt sich die Komplexität einer Klasse mit WMC darstellen. [CSR91] i=0 4.2 Depth of Inheritance Tree (DIT) Der DIT-Wert einer Klasse C ist der größte Abstand von der Wurzel zu der Klasse C in der Vererbungshierarchie. Dabei steigt mit einem großen (bzw. fällt mit einem kleinem) DIT-Wert, die Anzahl der Klassen, die C beeinflussen können [CSR94]. Beispielhaft ist im obigen Klassendiagramm DIT (A) = 0 und DIT (G) = 3. Dabei gilt: Je tiefer die Klassenhierarchie, desto mehr Vererbungen gibt es, was sowohl das Verständnis des Quellcodes verschlechtert, als auch die Komplexität des Objektentwurfs erhöht. Auch lassen sich die Klassen, die sich unten im Vererbungsbaum befinden, nur schwerlich wiederverwenden [CSR91, CSR94]. 4.3 Number of Children (NOC) Währen DIT die Tiefe des Vererbungsbaums misst, analysiert NOC die Breite von diesem. Formaler ist der NOC-Wert einer Klasse C die Anzahl der Kinder, die von der Klasse C unmittelbar erben. Im Beispielklassendiagramm ist NOC(A) = 1 und NOC(E) = 2. Die Vererbungsbaumbreite lässt sich wie folgt interpretieren: Zum einen zeigt der hohe Wert, dass eine Klasse, bzw. die Methoden der Klasse oft wiederverwendet werden, da die Vererbung auch eine Art der Wiederverwendung darstellt. Auch erhöht sich mit dem NOC-Wert die Wahrscheinlichkeit des falschen Gebrauchs der Abstraktion. Nicht zuletzt steigt bei einer großen Zahl von Kindern der Testaufwand [CSR94]. 3 Um die Werte c 1...c n zu bestimmen lassen sich jeweils passende traditionelle Metriken verwenden. [CSR94]

4.4 Coupling between object classes (CBO) Der CBO-Wert einer Klasse C gibt die Anzahl der an diese gekoppelten Klassen wieder. Die gekoppelten Klassen sind diejenigen, die die Methoden oder Objektvariablen der Klasse C nutzen oder eine Instanz der Klasse C auf eine sonstige Weise nutzen. Im obigen Klassendiagramm ist CBO(A) = 2, da A von B und C verwendet wird. Die CBO- Messungen sind insofern plausibel, da exzessive Kopplung die Wiederverwendbarkeit der Klassen einschränkt, den Testaufwand erhöht und die Wartbarkeit einschränkt. Daher sollte ein Softwareingeneur die Klassen möglichst wenig koppeln und auf die Integrität der Klassen achten [CSR91]. 4.5 Lack of Cohesion in Methods (LCOM) LCOM ist die Anzahl der Paare einer Klasse ohne gemeinsame Attribute minus die Anzahl der Paare mit gemeinsamen Attributen. Falls die Differenz kleiner als 0 ist, dann ist LCOM = 0 [Mat09b]. Ein niedriger Wert zeigt i.d.r. eine hohe Kohäsion an [Elm05]. Formaler: Sei C eine Klasse und M 1...M n die Methoden dieser Klasse. Sei ferner I i mit i 1...n die Menge der Instanzvariablen die von der Methode M i benutzt werden. Außerdem sei P = {(I i, I j ) I i I j = } und Q = {(I i, I j ) I i I j }. Dann ist LCOM(C) = max(0, P Q ) [CSR94]. Vollständigkeitshalber ist noch zu sagen, dass LCOM in der Literatur auch anders definiert wird. Das würde jedoch den Rahmen dieser Arbeit sprengen. Der interessierte Leser sei auf [Li93] verwiesen. Eine hohe Kohäsion zeugt von einer guten Kapselung und vermindert die Programmkomplexität. Bei einer niedrigen Kohäsion sollte in Erwägung gezogen werden die Klasse in mehrere Klassen zu unterteilen. Die Berechnung der LCOM-Metrik lässt sich durch ein Beispiel verdeutlichen: class AB { int ia; int ib; int a() {return ia;} int b() {return ib;} int bb() {return ib * ib;} int bbb() {return ib * ib * ib;} } Nach unserer Definition haben nur die Paare (b, bb); (b, bbb); (bb, bbb) jeweils ein gemeinsames Attribut (nämlich die Variable ib), die Paare (a, b); (a, bb); (a, bbb) jedoch keinen. Also ist LCOM(C) = 0 4 [Elm05]. 4 Hier wird die Kritik aus dem Abschnitt 2.2 nochmal deutlich. Trotz des niedrigen Wertes von 0, ist die Kohäsion recht schlecht und die Klasse lässt sich relativ problemlos in 2 Klassen aufteilen.

4.6 Ausblick Außer der vorgestellten Chidamber-Kemerer-Metriken gibt es noch weitere Metriken für das objektorientierte Design. So schlagen Wi und Henry vor, auch die Kopplung, die durch die Vererbung oder durch das Senden von Nachrichten zwischen den Klassen entsteht, zu messen. Auch empfehlen sie das Messen der Größe der Klassen, indem man die Semikolons einer Klasse oder die Attribute zusammen mit den lokalen Methoden zählt [Li93]. 4.7 Paketentwurf Genau wie beim Klassenentwurf gilt beim Packageentwurf das Prinzip der hohen Kohäsion und der niedrigen Kopplung. Daher sollten die Klassen, die zusammen genutzt werden, in ein Paket gepackt werden und die Klassen, die nicht zusammen gehören, sollten in verschiedenen Paketen liegen. Um den Grad der Güte des Packageentwurfs zu bestimmen gibt es bestimmte Metriken: 1. Kohäsionsmetrik: Kohäsionsmetrik einer Klasse C in einem Paket P ist der Quotient aus der von C abhängigen Klassen durch die Anzahl der Klassen in P ohne C. 2. Efferent und afferent couplings: Die Pakete sollen von möglichst stabileren Pakten abhängen. Das ist insofern sinnvoll, da falls des Paket A von B abhängt und B geändert werden muss, dann ist die Wahrscheinlichkeit groß, dass auch A geändert werden muss. Eng damit verwandt sind die efferent couplings C e und die afferent couplings C a eines Paketes P. C e gibt an, wie viele Pakete Klassen haben, von denen die Klassen in P direkt abhängen; C a, wie viele Pakete Klassen enthalten, die von den Klassen in P direkt abhängen. Die sog. Instabilität von P ist dann I(P ) = C e /(C e + C a ). 3. Abstraktionsniveau: Pakete sollen von abstrakteren Paketen abhängen. Das liegt daran, dass ein Software möglichst einfach zu ändern und anzupassen sein soll. Es ist jedoch oftmals nicht sinnvoll, stabile Packages zu ändern. Daher ergibt es Sinn wenn man diese abstrakt und aber auch leicht erweiterbar macht. Das Abstraktionsniveau ist der Quotient der abstrakten Typen (z.b. abstrakte Klassen, Interfaces) durch alle Typen. 4. Abstraktion vs. Stabilität: Stabile Pakete müssen möglichst abstrakt, und somit durch andere Pakete erweiterbar sein, während instabile Pakete leicht zu modifizieren sein müssen. Wenn A {0...1} das Abstraktionsniveau darstellt und I {0...1} die Instabilität, dann muss A + I 1 sein. [Gor06]

5 Automatisierung Da alle hier vorgestellten Metriken sich mathematisch formulieren lassen, liegt es nahe diese auch automatisch erheben zu lassen. In der Tat gibt es dafür diverse Tools, wie die Open-Source-Programme ckjm, JavaNCSS und CCCC, kostenpflichtige proprietäre Programme wie JStyle oder aber auch Plug-Ins für diverse Entwicklungsumgebungen wie Metrics für Eclipse. In einigen Entwicklungsumgebungen wie Visual Studio 2010 ist eine Funktionalität zur Erhebung der Metriken schon standardmäßig vorhanden. Abbildung 2: Metrics Plugin für Eclipse 6 Fazit Wie man sieht, haben die Metriken vielfältige Einsatzmöglichkeiten. Auch zur Analyse vom objektorientierten Entwurf wurden diverse Metriken entwickelt. Diese werden dazu eingesetzt um Qualitätseigenschaften, wie Wartbarkeit, Transparenz oder auch Testbarkeit des Quellcodes, unter Berücksichtigung der Eigenheiten des objektorientierten Designs zu bewerten. Viele Messungen lassen sich automatisiert mit passenden Werkzeugen ausführen [Gor06], was die Kosten für die Erhebung dieser stark reduziert. Dank des Goal- Question-Metric-Ansatzes lassen sich die Metriken auch systematisch und zielorientiert erheben.

7 Literaturverzeichnis Literatur [CSR91] Kemerer Chris F. Chiamber Shyam R. Towards a Metrics Suite For Object Oriented Design. Technical report, Sloan School of Managment, Massachusetts Institute of Technology, Cambirge, MA 02139, 1991. [CSR94] [Elm05] Kemerer Chris F. Chiamber Shyam R. A Metrics Suite for Object Oriented Design. IEEE Transaction on Software Engineering, 20:476 493, 06-Juni-1994. Franz-Joseph Elmer. Software Engineering. 13 Automatische Codeanalyse. http:// informatik.unibas.ch/lehre/ws05/cs203/softeng13.pdf, 2005. [Online; accessed 05-April-2010]. [Fra98] Berthold Franzed. SWT: Qualität, Fachhochschule Gießen-Friedberg. http:// homepages.fh-giessen.de/ hg7132/swt/skr9910/qualitat.html, 1998. [Online; accessed 01-April-2010]. [Gor06] [Hof08] [Lah09] [Li93] Jason Gorman. parlez uml. www.parlezuml.com/metrics/oo%20design% 20Principles%20&%20Metrics.pdf, 2006. [Online; accessed 01-April-2010]. Dirk W. Hoffmann. Software Qualität. Springer Verlag, Berlin Heidelberg New York, 2008. Gregor Lahres, Bernhard; Rayman. Objektorientierte Programmierung. Galileo Computing, 2009. Sallie Li, Wei; Henry. Object-oriented metrics that predict maintainability. Journal of System and Software., 23(2), 1993. [Mat09a] Florian Matthes. sebis: EIST. http://wwwmatthes.in.tum.de/file/ Teaching/EIST/public/Teil1_1.pdf, 2009. [Online; accessed 01-April- 2010]. [Mat09b] Florian Matthes. sebis: EIST. http://wwwmatthes.in.tum.de/file/ Teaching/EIST/public/Teil2_1.pdf, 2009. [Online; accessed 01-April- 2010]. [Mil88] Everald E. Mills. Software Metrics, SEI Curriculum Module SEI-CM-12-1.1. Technical report, Carnegie Mellon University, 1988. [Tae09] Gabriele Taentzer. Lehrveranstalltung Softwarequalität, Philipps-Universität Marburg. http://www.mathematik.uni-marburg.de/ swt/ss2009/sq/ files/folien0429.pdf, 2009. [Online; accessed 02-April-2010]. [Wal01] Ernest Wallmüller. Software-Qualitäts-Managment in der Praxis. Carl Hanser Verlag, München, 2001. [Wik10] Wikipedia. McCabe-Metrik Wikipedia. http://de.wikipedia.org/wiki/ McCabe-Metrik, 2010. [Online; accessed 02-April-2010].