20.11.2013 Aufrufe

Software Metriken

Software Metriken

Software Metriken

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.

Institut für Informationswirtschaft<br />

Informationswirtschaft III<br />

<strong>Software</strong>-<strong>Metriken</strong><br />

Wolfgang H. Janko<br />

Stefan Koch<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 1


Institut für Informationswirtschaft<br />

Inhaltsverzeichnis<br />

1. Grundlagen<br />

2. Lines-of-Code<br />

3. Cyclomatic Complexity<br />

4. Halstead-Maß<br />

5. <strong>Metriken</strong> der objekt-orientierten<br />

Programmierung<br />

6. Mannmonat<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 2


Institut für Informationswirtschaft<br />

Grundlagen<br />

• Metrik: Zuordnung einer Zahl zu einer Entität, um ein<br />

spezielles Attribut dieser Entität zu charakterisieren<br />

• Klassen von <strong>Software</strong>-<strong>Metriken</strong><br />

– Produktmetriken: Maßzahlen für das <strong>Software</strong>-<br />

Produkt<br />

– Prozessmetriken: Quantifizierung von Attributen des<br />

Entwicklungsprozesses und der<br />

Entwicklungsumgebung<br />

• Attribute von Entitäten<br />

– interne, d.h. solche, die an der Entität selbst<br />

gemessen werden<br />

– externe, d.h. solche, die nur daran gemessen<br />

werden können, wie die Entität in einer<br />

Beziehung zu ihrer Umwelt steht<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 3


Institut für Informationswirtschaft<br />

Grundlagen<br />

• Messung von <strong>Software</strong>-<strong>Metriken</strong><br />

– direkt: ohne Abhängigkeit von einem anderen<br />

Attribut<br />

– indirekt: inkludiert die Messung eines oder<br />

mehrerer anderer Attribute<br />

– objektiv (algorithmisch): Messung kann nach einem<br />

Algorithmus vorgenommen werden, Ergebnis<br />

ist daher reproduzierbar und hängt nicht von<br />

Ort, Zeit oder Beobachter ab<br />

– subjektiv<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 4


Institut für Informationswirtschaft<br />

Grundlagen<br />

• Anforderungen an <strong>Software</strong>-<strong>Metriken</strong> (Meta-<strong>Metriken</strong> zur<br />

Evaluation von <strong>Metriken</strong>, meist nur subjektiv messbar)<br />

– Einfachheit<br />

– Validität (wird das gemessen, was gemessen werden<br />

soll)<br />

– Robustheit (Sensitivität der Metrik auf Änderungen,<br />

die die Performanz der <strong>Software</strong> nicht<br />

beeinflussen)<br />

– Analysierbarkeit mit statistischen Mitteln<br />

– Eignung im Rahmen des <strong>Software</strong>-<br />

Projektmanagements<br />

– ’wholeness’ (die Komplexität einer<br />

zusammengesetzten Entität soll mindestens die<br />

Summe der Komplexitäten ihrer Teile betragen)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 5


Institut für Informationswirtschaft<br />

Grundlagen<br />

– Sensitivität auf atomare Änderungen<br />

– andere Auflistung: ’association, consistency,<br />

discriminative power, tracking, predictability,<br />

repeatability’<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 6


Institut für Informationswirtschaft<br />

Grundlagen<br />

• Verwendung und Nutzen<br />

– jede Erhebung sollte von klaren und wohldefinierten<br />

Zielen geleitet sein, da jede Messung Kosten<br />

verursacht (z.B. Goal/Question/Metric-Ansatz:<br />

ausgehend von Definition der Projektziele wird<br />

systematisch eine Verfeinerung dieser in Form<br />

einer Reihe von Fragen vorgenommen, die<br />

dann jeweils durch passende <strong>Metriken</strong> mit<br />

quantitativen Daten beantwortet werden<br />

können; damit soll eine zielgerichtete<br />

Erhebung von ausschließlich tatsächlich<br />

benötigten <strong>Metriken</strong> sichergestellt werden.)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 7


Institut für Informationswirtschaft<br />

Grundlagen<br />

– Feststellung (’assessment’) im Rahmen der<br />

Steuerung eines <strong>Software</strong>-Projekts (Wie weit<br />

sind wir?)<br />

– Vorhersage (’prediction’) von Charakteristiken von<br />

Projekten (Aufwandsschätzung)<br />

– andere Einteilung:<br />

• taktische Anwendung in Rahmen des<br />

Projektmanagements<br />

• strategische Anwendung im Rahmen der<br />

Prozessverbesserung (basierend auf den<br />

Daten von alten Projekten wird der<br />

Entwicklungsprozess angepasst)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 8


Institut für Informationswirtschaft<br />

Grundlagen<br />

• meistens gemessen: Größe und Komplexität von <strong>Software</strong>-<br />

Artefakten, Aufwand der Entwicklung<br />

• inzwischen aber auch: andere Artefakte der Entwicklung<br />

von <strong>Software</strong>, z.B. die während dieses Prozesses<br />

mittels E-Mail oder Diskussiongruppen stattfindende<br />

Kommunikation<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 9


Institut für Informationswirtschaft<br />

Lines-of-Code<br />

• eine der gebräuchlichsten <strong>Metriken</strong> für die Größe einer<br />

<strong>Software</strong><br />

• LOC oder Programmzeilen<br />

• jedoch unterschiedliche Definitionen (Was wird gezählt?)<br />

– ausführbare Programmzeilen oder Anweisungen in<br />

jeder gängigen Definition inkludiert<br />

– Kommentare ?<br />

– Leerzeilen ?<br />

– ohne diese beiden: NCSS (Non Commentary Source<br />

Statements)<br />

– Deklarationen von Variablen oder Prozeduren ?<br />

– Anweisungen im Header ?<br />

– Compiler-Anweisungen ?<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 10


Institut für Informationswirtschaft<br />

Lines-of-Code<br />

– Programmzeile kann mehrere Anweisungen<br />

umfassen<br />

(Trennzeichen)<br />

– bei Überarbeitungen: Zählung von Löschen und<br />

Modifikation von einzelnen<br />

Programmzeilen<br />

– Zählung bei Wiederverwendung von Code-<br />

Bestandteilen(Reuse)<br />

• organisationsweit einheitliche Definition unumgänglich<br />

• Verbindung zum Anreizsystem beachten<br />

– weder ’künstlich’ überlange Programme sinnvoll,<br />

um gute<br />

Produktivitätskennzahlen zu erreichen,<br />

– noch Programme unter unverhältnismäßig hohem<br />

Zeitaufwand möglichst kurz halten<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 11


Institut für Informationswirtschaft<br />

Lines-of-Code<br />

• Vorteil: einfach, verständlich, automatisiert erhebbar<br />

• Probleme<br />

– Sprachabhängigkeit, für die Lösung eines Problems<br />

sind in unterschiedlichen Sprachen<br />

unterschiedlich viele Zeilen nötig (damit keine<br />

Vergleichbarkeit der erhobenen Daten)<br />

– mißt eigentlich nur Größe (etwa für die Speicherung<br />

oder einen Ausdruck)<br />

– und nicht Komplexität (Beispiel rekursive<br />

Programme: geringe Anzahl von LOC, aber<br />

hoher Schwierigkeitsgradbei der Entwicklung)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 12


Institut für Informationswirtschaft<br />

Lines-of-Code<br />

Beispiel<br />

use DBI;<br />

#open log files<br />

while() {<br />

my $count;<br />

if (/^RCS file: cvsroot([^]+)(.+),/)<br />

{<br />

$project=$1;$realfile=$1."/".$2;<br />

$file=$realfile;<br />

$file =~ tr/’/"/;<br />

$sumadd=0;$sumdel=0;$count++;<br />

my $instr="insert into file values (’$file’,’$project’)";<br />

print $instr;<br />

}<br />

elsif (/^date: (.+); author: (w+); state: Exp;$/)<br />

{<br />

$date=$1;$prog=$2;<br />

$lines_total=‘wc -l ¨$datadir/$realfile¨‘;<br />

}<br />

close CVS;<br />

}<br />

LOC: 21, 20 (ohne Leerzeilen), 19 (ohne Kommentar), 17 (ohne<br />

Deklarationen), 12 (nur Zeilen mit Befehlen), 16 (jeder Befehl)?<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 13


Institut für Informationswirtschaft<br />

Cyclomatic Complexity<br />

• zyklomatische Komplexität (McCabe)<br />

• beruht auf der Kontrollflußstruktur (’control flow graph’<br />

oder ’flowgraph’) eines Programms<br />

• mißt die Anzahl der linear unabhängigen Wege durch den<br />

Flowgraph F<br />

• bei e Kanten, n Knoten und p<br />

Zusammenhangskomponenten<br />

v(F) = e − n + 2p (1)<br />

• v(F)>=1<br />

• Knoten: Block sequentieller Anweisungen, die keine<br />

internen Verzweigungen aufweisen<br />

• Kante: möglicher Kontrollfluß zwischen den Knoten<br />

• Zusammenhangskomponenten: unabhängige<br />

Programmkomponenten (Module / Prozeduren, >=1)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 14


Institut für Informationswirtschaft<br />

Cyclomatic Complexity<br />

• Annahme: Module mit einer Cyclomatic Complexity von<br />

mehr als 10 besonders fehleranfällig<br />

• erlaubt Aussagen über die Komplexität des Kontrollflusses<br />

• beeinflußt vor allem das Testen, bei dem alle Pfade<br />

betrachtet werden sollten<br />

• eigentlicher Umfang des Programmes wird nicht beachtet,<br />

da jeder Knoten des Graphen beliebig viele<br />

Anweisungen enthalten kann, solange sich keine<br />

Verzweigung darunter befindet<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 15


Institut für Informationswirtschaft<br />

Cyclomatic Complexity<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 16


Institut für Informationswirtschaft<br />

Halstead-Maß<br />

• Grundidee: Zählen von Operatoren (Symbole, die den Wert<br />

oder die Anordnung eines Operanden beeinflussen)<br />

und Operanden (Variablen oder Konstanten)<br />

• gemessen werden jeweils die Gesamtanzahl der<br />

Operatoren und Operanden (N1 und N2) sowie die<br />

Anzahl der verschiedenen Operatoren und Operanden<br />

(n1 und n2) in der vorliegenden Implementierung<br />

Beispiel (N1=4, N2=4, n1=2, n2=3)<br />

print $name;<br />

print $adresse;<br />

print $alter;<br />

$alter++;<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 17


Institut für Informationswirtschaft<br />

Halstead-Maß<br />

• Vokabular: n = n1 + n2<br />

• Implementierungslänge: N = N1 + N2<br />

• Größe der Implementierung eines Algorithmus: Volumen<br />

V = N log2 n (in Bit, abhängig von<br />

Implementierungssprache)<br />

• es kann dann das Verhältnis zum minimalen oder<br />

potentiellen Volumen (in einer Programmiersprache, in<br />

der der betrachtete Algorithmus bereits definiert oder<br />

implementiert ist, zum Beispiel als Subroutine oder<br />

Prozedur) berechnet werden (Programmstufe L)<br />

• Schwierigkeit D des Verständnisses invers zu der<br />

Programmstufe (um ein Konzept jemandem zu<br />

erklären, der über nur geringes Wissen verfügt, muß<br />

ein höheres Volumen verwendet werden)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 18


Institut für Informationswirtschaft<br />

Halstead-Maß<br />

• Kombination mit Cyclomatic Complexity:<br />

– in einem ersten Schritt wird jeder Kontrollstruktur<br />

eine Cyclomatic Complexity gleich ihrer<br />

Schachtelungsebene plus eins zugeordnet (also<br />

jenen der obersten Ebene 1, darunter 2,...)<br />

– für jeden Operator bzw. Operand, der Teil einer<br />

Kontrollstruktur ist, wird zu N1 bzw. N2 eins<br />

hinzugefügt (wie üblich), plus der<br />

Schachtelungsebene der jeweiligen<br />

Kontrollstruktur (also im Endeffekt die<br />

Cycl. Compl. der Kontrollstruktur dazugezählt)<br />

– ergibt gewichtetes Maß für die Komplexität (die<br />

Operatoren und Operanden auf den unteren<br />

Ebenen der Verschachtelung werden höher<br />

bewertet)<br />

Seite 19<br />

Janko/Koch Informationswirtschaft 3


Institut für Informationswirtschaft<br />

<strong>Metriken</strong> der objektorientierten<br />

Programmierung<br />

• steigende Popularität des objekt-orientierten Paradigmas<br />

• Analyse und die Quantifizierung von Attributen der<br />

entsprechenden Designs und <strong>Software</strong>-Artefakte<br />

zunehmend wichtiger<br />

• bekanntester Ansatz von Chidamber und Kemerer<br />

(Maßzahlen für jede Klasse, teilweise gute Indikatoren<br />

für fehleranfällige Klassen)<br />

– ’weighted methods per class’: Komplexität einer<br />

Klasse, für jede Funktion der Wert 1<br />

– ’depth in inheritance tree’: Länge des längsten<br />

Pfades durch die Vererbungshierarchie bis zum<br />

betrachteten Modul<br />

– ’number of children’: Anzahl der Klassen, die direkt<br />

von dieser erben<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 20


Institut für Informationswirtschaft<br />

<strong>Metriken</strong> der objektorientierten<br />

Programmierung<br />

– ’coupling between methods’: Anzahl der Module, die<br />

mit dem betrachteten gekoppelt sind (wenn<br />

eine davon die Funktionen und/oder die<br />

Instanzvariablen der anderen benutzt)<br />

– ’response for a class’: Anzahl der Methoden, die<br />

potentiell ausgeführt werden können, wenn ein<br />

Objekt der betrachteten Klasse eine Nachricht<br />

empfängt<br />

– ’lack of cohesion on methods’: Anzahl der<br />

Methoden-Paare, die keine gemeinsamen<br />

Instanzvariablen haben, abzüglich der Anzahl<br />

der Methoden-Paare, die solche besitzen<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 21


Institut für Informationswirtschaft<br />

<strong>Metriken</strong> der objektorientierten<br />

Programmierung<br />

• Ergänzungen und andere Ansätze:<br />

– ’inheritance coupling’: Anzahl der Vaterklassen, mit<br />

der eine Klasse gekoppelt ist (wenn eine der<br />

geerbten Methoden eine neue oder neu<br />

definierte Variable oder Methode benutzt)<br />

– ’coupling between methods’: Anzahl der neuen oder<br />

neu definierten Methoden, mit denen die<br />

geerbten Methoden gekoppelt sind<br />

– ’number of objects/memory allocation’: Anzahl der<br />

Befehle, die neue Objekte oder Speicher in<br />

einer Klasse allozieren<br />

– ’average method complexity’: durchschnittliche<br />

Größe der Methoden einer Klasse (z.B. in LOC)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 22


Institut für Informationswirtschaft<br />

<strong>Metriken</strong> der objektorientierten<br />

Programmierung<br />

– MOOD-Gruppe: Method Inheritance Factor,<br />

Attribute Inheritance Factor, Coupling Factor,<br />

Clustering Factor, Polymorphism Factor,<br />

Method Hiding Factor, Attribute Hiding Factor<br />

und Reuse Factor (alle in Prozenten, sollen<br />

grundlegende Mechanismen des<br />

objektorientierten Paradigmas wie Kapselung<br />

oder Vererbung ohne Berücksichtigung der<br />

Implementierungssprache ansprechen,<br />

Systemsicht, und damit komplementär zu dem<br />

Ansatz von Chidamber und Kemerer)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 23


Institut für Informationswirtschaft<br />

Mannmonat<br />

• Mann- oder Personenmonate sind die gebräuchlichste<br />

Metrik für den Aufwand, beispielsweise eines Projekts<br />

wie einer <strong>Software</strong>-Entwicklung<br />

• 1 Mannmonat bedeutet vereinfacht die Tätigkeit eines<br />

Menschen über ein Monat<br />

• 1 Mannmonat sind 19 Manntage bzw. 152 Mannstunden,<br />

12 Mannmonate sind ein Mannjahr<br />

• Mannmonate sind der gebräuchlichste Output von<br />

Aufwandsschätzungsmodellen<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 24


Institut für Informationswirtschaft<br />

Mannmonat<br />

• grundsätzlich würden logischerweise 24 Mannmonate der<br />

Arbeit eines Menschen für 2 Jahre, oder von 24<br />

Menschen für 1 Monat entsprechen<br />

• Zusammenhang ist aber nicht durchgehend gegeben:<br />

– durch eine höhere Anzahl von Beteiligten entstehen<br />

höhere Kommunikationskosten (wenn in einer<br />

Gruppe von n Personen jeder mit jedem<br />

kommunizieren muss, gibt es n(n−1)/2<br />

Kommunikationswege, der Aufwand steigt<br />

folglich von quadratischer Ordnung), die den<br />

linearen Zuwachs an Fortschritt (eine Person<br />

bringt immer x Fortschrittsgewinn) irgendwann<br />

übersteigen<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 25


Institut für Informationswirtschaft<br />

Mannmonat<br />

– Aufgaben sind nicht auf beliebig viele Personen<br />

verteilbar (in der <strong>Software</strong>-Entwicklung wie in<br />

der Produktion physischer Güter), wenn die<br />

Entwicklungszeit verringert werden soll, muss<br />

dies aber passieren: in der SW-Entwicklung<br />

Modularisierung (Klassen) mit definierten<br />

Schnittstellen (auch zur Reduzierung der<br />

notwendigen Kommunikation und<br />

Koordination)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 26


Institut für Informationswirtschaft<br />

Mannmonat<br />

– ’The Mythical Man-Month’ (Brooks): bei<br />

Überschreiten von Terminen wird durch das<br />

Management oft mehr Personal zugeführt;<br />

dadurch, daß die erfahrenen Mitarbeiter diese<br />

nun anlernen müssen, damit sie produktiv<br />

werden, kann sogar eine Verzögerung<br />

eintreten (Brooks’s Law: ’Adding manpower to<br />

a late software project makes it later’)<br />

Janko/Koch Informationswirtschaft 3<br />

Seite 27

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!