Software Metriken
Software Metriken
Software Metriken
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