Inhalt Nachlese Software-Metriken Software-Metriken mit Together Software Engineering in der Praxis Praktische Übungen Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Software-Metriken Dirk Wischermann Marc Spisländer Lehrstuhl für Software Engineering Friedrich-Alexander-Universität Erlangen-Nürnberg 11. 12. 2006 Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Inhalt Nachlese Objektorientiertes Design Software-Metriken Definition Allgemeine Betrachtungen zum Messen Software-Metriken mit Together Lines of Code Halstead-Metrik McCabe-Metrik Messen mit Together Zusatz: Findbugs als Codeanalyse-Werkzeug Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Objektorientiertes Design Objektorientiertes Design I Modellieren, wie Probleme gelöst werden I Nah an der Implementierung Modellierungssprache UML: I I I I I I Komponentendiagramm Klassendiagramm Objektdiagramm Sequenzdiagramm Zustandsautomat Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Objektorientiertes Design Ab heute betrachten wir eine tiefere Abstraktionsstufe: Code bzw. Implementierung Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Definition Software-Metriken Definition »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.« (IEEE Standard 1061, 1992) Zweck Software messen, um sie vergleichbar zu machen, um: I Qualität zu erhöhen I Aufwand/Kosten abzuschätzen Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Definition Software-Metriken Definition »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.« (IEEE Standard 1061, 1992) Zweck Software messen, um sie vergleichbar zu machen, um: I Qualität zu erhöhen I Aufwand/Kosten abzuschätzen Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Allgemeine Betrachtungen zum Messen Allgemeine Betrachtungen zum Messen Kontext: Reale Welt I Menge von Objekten I Jedes Objekt verfügt über gewisse Attribute Zum Beispiel: I I I I I Menge von Menschen mit Attributsfunktion »Alter« Menge von Software mit Attributsfunktion »Lines of Code« Menge von Software mit Attributsfunktion »Qualität« Menge von Software mit Attributsfunktion »Komplexität« Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Allgemeine Betrachtungen zum Messen Allgemeine Betrachtungen zum Messen Kontext: Reale Welt I Menge von Objekten I Jedes Objekt verfügt über gewisse Attribute Zum Beispiel: I I I I I Menge von Menschen mit Attributsfunktion »Alter« Menge von Software mit Attributsfunktion »Lines of Code« Menge von Software mit Attributsfunktion »Qualität« Menge von Software mit Attributsfunktion »Komplexität« Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Allgemeine Betrachtungen zum Messen Allgemeine Betrachtungen zum Messen Kontext: Reale Welt I Menge von Objekten I Jedes Objekt verfügt über gewisse Attribute Zum Beispiel: I I I I I Menge von Menschen mit Attributsfunktion »Alter« Menge von Software mit Attributsfunktion »Lines of Code« Menge von Software mit Attributsfunktion »Qualität« Menge von Software mit Attributsfunktion »Komplexität« Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Allgemeine Betrachtungen zum Messen Messen Messen bedeutet die experimentelle Bestimmung von Attributwerten. Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Modell der realen Welt Zur systematischen, wissenschaftlichen Untersuchung: Abbildung der realen Objekte auf mathematische Objekte (Mengen, Funktionen, Relationen, . . . ). Kontext: Mathematische Welt I Menge M von Objekten I Attributsfunktion A : M → WA I Messfunktion mA : M → WA (Modelliert das Messverfahren und die Messergebnisse) Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Korrekte Messung Frage I Wird das Richtige gemessen, d. h. ist die Messung korrekt? I Bzw. gilt A = mA ? I Oder abgeschwächter: Korrelieren A und mA ? Schwierigkeit I Oft kein Konsens über die Definition der Attributsfunktion I Beispiele: Qualität oder Komplexität von Software, Intelligenzquotient, . . . Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Korrekte Messung Frage I Wird das Richtige gemessen, d. h. ist die Messung korrekt? I Bzw. gilt A = mA ? I Oder abgeschwächter: Korrelieren A und mA ? Schwierigkeit I Oft kein Konsens über die Definition der Attributsfunktion I Beispiele: Qualität oder Komplexität von Software, Intelligenzquotient, . . . Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Korrekte Messung Frage I Wird das Richtige gemessen, d. h. ist die Messung korrekt? I Bzw. gilt A = mA ? I Oder abgeschwächter: Korrelieren A und mA ? Schwierigkeit I Oft kein Konsens über die Definition der Attributsfunktion I Beispiele: Qualität oder Komplexität von Software, Intelligenzquotient, . . . Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Korrekte Messung Frage I Wird das Richtige gemessen, d. h. ist die Messung korrekt? I Bzw. gilt A = mA ? I Oder abgeschwächter: Korrelieren A und mA ? Schwierigkeit I Oft kein Konsens über die Definition der Attributsfunktion I Beispiele: Qualität oder Komplexität von Software, Intelligenzquotient, . . . Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Korrekte Messung Frage I Wird das Richtige gemessen, d. h. ist die Messung korrekt? I Bzw. gilt A = mA ? I Oder abgeschwächter: Korrelieren A und mA ? Schwierigkeit I Oft kein Konsens über die Definition der Attributsfunktion I Beispiele: Qualität oder Komplexität von Software, Intelligenzquotient, . . . Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Definition von Attributsfunktionen Mögliche Auswege I Definiere Attributsfunktion A durch Messfunktion mA : A := mA I Korrektheit der Messung per Definition gegeben Postuliere Korrelation zwischen A und mA : I I I Unterstelle jedem Menschen eine intuitive Vorstellung von A Definiere mA Prüfe durch statistischen Tests, ob mA und die »intuitive Funktion« A korrelieren Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Definition von Attributsfunktionen Mögliche Auswege I Definiere Attributsfunktion A durch Messfunktion mA : A := mA I Korrektheit der Messung per Definition gegeben Postuliere Korrelation zwischen A und mA : I I I Unterstelle jedem Menschen eine intuitive Vorstellung von A Definiere mA Prüfe durch statistischen Tests, ob mA und die »intuitive Funktion« A korrelieren Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Allgemeine Betrachtungen zum Messen Beispiel Lines of Code Definition der Attributsfunktion Für alle Programme p: A(p ) := »Anzahl der Zeilen von p« Definition der Messfunktion Definition der Messfunktion mA durch Algorithmus: I Eingabe: Programm p I Berechnung: Zählen der Zeilenendmarkierungen in p I Ausgabe: Anzahl der Zeilen in p Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Allgemeine Betrachtungen zum Messen Beispiel Lines of Code Definition der Attributsfunktion Für alle Programme p: A(p ) := »Anzahl der Zeilen von p« Definition der Messfunktion Definition der Messfunktion mA durch Algorithmus: I Eingabe: Programm p I Berechnung: Zählen der Zeilenendmarkierungen in p I Ausgabe: Anzahl der Zeilen in p Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Allgemeine Betrachtungen zum Messen Beispiel Lines of Code Korrektheit der Messung Durch mathematischen Beweis folgerbar: A = ma Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Beispiel Software-Komplexität Problem Keine allgemein anerkannte, genaue Definition der Attributsfunktion Software-Komplexität. Hoffnung I Intuitive Vorstellung der Attributsfunktion SoftwareKomplexität korreliert mit einer Messfunktion (z. B. Lines of Code) I Nur durch statistischen Tests (Experiment) feststellbar Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Beispiel Software-Komplexität Problem Keine allgemein anerkannte, genaue Definition der Attributsfunktion Software-Komplexität. Hoffnung I Intuitive Vorstellung der Attributsfunktion SoftwareKomplexität korreliert mit einer Messfunktion (z. B. Lines of Code) I Nur durch statistischen Tests (Experiment) feststellbar Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Allgemeine Betrachtungen zum Messen Beispiel Software-Komplexität Problem Keine allgemein anerkannte, genaue Definition der Attributsfunktion Software-Komplexität. Hoffnung I Intuitive Vorstellung der Attributsfunktion SoftwareKomplexität korreliert mit einer Messfunktion (z. B. Lines of Code) I Nur durch statistischen Tests (Experiment) feststellbar Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Software-Metriken mit Together Das Werkzeug Together bietet verschiedene Metriken an, um Software zu messen. Für das Praktikum wichtig: I Lines of Code (LOC) I Halstead Program Length (HPLen) I Halstead Program Volume (HPVol) I Cyclomatic Complexity nach McCabe (CC) Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Lines of Code LOC LOC = Anzahl der Code-Zeilen Vorteile I Einfach zu berechnen I Einfach nachzuvollziehen Nachteile I Keine hohe Aussagekraft I Abhängig vom Programmierstil Wischermann, Spisländer: Software-Metriken Software-Metriken mit Together Findbugs Inhalt Nachlese Software-Metriken Lines of Code LOC LOC = Anzahl der Code-Zeilen Vorteile I Einfach zu berechnen I Einfach nachzuvollziehen Nachteile I Keine hohe Aussagekraft I Abhängig vom Programmierstil Wischermann, Spisländer: Software-Metriken Software-Metriken mit Together Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Halstead-Metrik Halstead-Metrik I Betrache Programm als Wort über zwei disjunkte Alphabete: Σ1 Operatoren-Alphabet (Schlüsselwörter, +, −, Funktionenbezeichner, . . . ) Σ2 Operanden-Alphabet (Variablen, Literale) I Definiere dann: N1 N2 N n V := := := := := Wischermann, Spisländer: Software-Metriken »Gesamtanzahl der vorkommenden Operatoren« »Gesamtanzahl der vorkommenden Operanden« N1 + N2 (Programmlänge HPLen) |Σ1 | + |Σ2 | (Programmwortschatz HPVoc) N log n (Programmvolumen HPVol) Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs Halstead-Metrik Halstead-Metrik I Betrache Programm als Wort über zwei disjunkte Alphabete: Σ1 Operatoren-Alphabet (Schlüsselwörter, +, −, Funktionenbezeichner, . . . ) Σ2 Operanden-Alphabet (Variablen, Literale) I Definiere dann: N1 N2 N n V := := := := := Wischermann, Spisländer: Software-Metriken »Gesamtanzahl der vorkommenden Operatoren« »Gesamtanzahl der vorkommenden Operanden« N1 + N2 (Programmlänge HPLen) |Σ1 | + |Σ2 | (Programmwortschatz HPVoc) N log n (Programmvolumen HPVol) Inhalt Nachlese Software-Metriken Software-Metriken mit Together Halstead-Metrik Halstead-Metrik (Fortsetzung) Vorteile I Einfach zu berechnen I Indikator für Fehleranfälligkeit und Wartungsaufwand I Robust in der Wahl der Programmiersprache Nachteile I Nur auf vollständigen Code anwendbar I Weiterführende Halstead-Metriken, wie Mentaler Aufwand fragwürdig Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Halstead-Metrik Halstead-Metrik (Fortsetzung) Vorteile I Einfach zu berechnen I Indikator für Fehleranfälligkeit und Wartungsaufwand I Robust in der Wahl der Programmiersprache Nachteile I Nur auf vollständigen Code anwendbar I Weiterführende Halstead-Metriken, wie Mentaler Aufwand fragwürdig Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs McCabe-Metrik McCabe-Metrik I I Annahme: Programm hat genau einen Eintritts- und genau einen Austrittspunkt (erfüllt beim strukturellen Programmieren) Aufbau des Kontrollflussgraphen G I I I Anzahl der Kanten: e Anzahl der Knoten: n Zyklomatische Komplexität: ν [G ] = e − n + 2 Wischermann, Spisländer: Software-Metriken (CC) Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs McCabe-Metrik McCabe-Metrik I I Annahme: Programm hat genau einen Eintritts- und genau einen Austrittspunkt (erfüllt beim strukturellen Programmieren) Aufbau des Kontrollflussgraphen G I I I Anzahl der Kanten: e Anzahl der Knoten: n Zyklomatische Komplexität: ν [G ] = e − n + 2 Wischermann, Spisländer: Software-Metriken (CC) Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs McCabe-Metrik McCabe-Metrik I I Annahme: Programm hat genau einen Eintritts- und genau einen Austrittspunkt (erfüllt beim strukturellen Programmieren) Aufbau des Kontrollflussgraphen G I I I Anzahl der Kanten: e Anzahl der Knoten: n Zyklomatische Komplexität: ν [G ] = e − n + 2 Wischermann, Spisländer: Software-Metriken (CC) Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs McCabe-Metrik McCabe-Metrik (Fortsetzung) Eigenschaften I I ν[G ] ist die maximale Anzahl linear unabhängiger Zyklen im erweiterten Kontrollflussgraphen (= Kontrollflussgraph + Kante vom Austrittspunkt zum Eintrittspunkt). Verfeinfachung unter folgender Annahme: I I Nur vier Klassen von Knoten im Kontrollflussgraphen: z Funktionsknoten Knoten, die Berechnung ausführen y Sammelknoten Knoten, die Verzweigung zusammenführen z Prädikatenknoten Knoten mit 2 Ausgangskanten 2 Zusatzknoten Eingangs- bzw. Ausgangsknoten Dann gilt: ν[G ] = e − n + 2 = (1 + x + y + 2z ) − (x + y + z + 2) + 2 = z + 1 Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs McCabe-Metrik McCabe-Metrik (Fortsetzung) Eigenschaften I I ν[G ] ist die maximale Anzahl linear unabhängiger Zyklen im erweiterten Kontrollflussgraphen (= Kontrollflussgraph + Kante vom Austrittspunkt zum Eintrittspunkt). Verfeinfachung unter folgender Annahme: I I Nur vier Klassen von Knoten im Kontrollflussgraphen: z Funktionsknoten Knoten, die Berechnung ausführen y Sammelknoten Knoten, die Verzweigung zusammenführen z Prädikatenknoten Knoten mit 2 Ausgangskanten 2 Zusatzknoten Eingangs- bzw. Ausgangsknoten Dann gilt: ν[G ] = e − n + 2 = (1 + x + y + 2z ) − (x + y + z + 2) + 2 = z + 1 Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs McCabe-Metrik McCabe-Metrik (Fortsetzung) Eigenschaften I I ν[G ] ist die maximale Anzahl linear unabhängiger Zyklen im erweiterten Kontrollflussgraphen (= Kontrollflussgraph + Kante vom Austrittspunkt zum Eintrittspunkt). Verfeinfachung unter folgender Annahme: I I Nur vier Klassen von Knoten im Kontrollflussgraphen: z Funktionsknoten Knoten, die Berechnung ausführen y Sammelknoten Knoten, die Verzweigung zusammenführen z Prädikatenknoten Knoten mit 2 Ausgangskanten 2 Zusatzknoten Eingangs- bzw. Ausgangsknoten Dann gilt: ν[G ] = e − n + 2 = (1 + x + y + 2z ) − (x + y + z + 2) + 2 = z + 1 Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs McCabe-Metrik McCabe-Metrik (Fortsetzung) Vorteile I Indikator für Wartungsaufwand I Anhaltspunkt für die Zahl benötigter unabhängiger Testfälle für Kontrollflussabdeckung I Früh in der Entwicklung einsetzbar Nachteile I Keine Datenkomplexität I Gleiche Gewichtung geschachtelter wie ungeschachtelter Schleifen Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs McCabe-Metrik McCabe-Metrik (Fortsetzung) Vorteile I Indikator für Wartungsaufwand I Anhaltspunkt für die Zahl benötigter unabhängiger Testfälle für Kontrollflussabdeckung I Früh in der Entwicklung einsetzbar Nachteile I Keine Datenkomplexität I Gleiche Gewichtung geschachtelter wie ungeschachtelter Schleifen Wischermann, Spisländer: Software-Metriken Inhalt Nachlese Software-Metriken Messen mit Together Auswertungsmöglichkeiten Zunächst eine Tabelle... Wischermann, Spisländer: Software-Metriken Software-Metriken mit Together Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Messen mit Together Auswertungsmöglichkeiten (Fortsetzung) I Farbliche Kennzeichnung der Ergebnisse: I I I I Aggregation der Werte I I I blau: Wert liegt unter einer gegebenen unteren Schranke rot: Wert liegt über einer gegebenen oberen Schranke schwarz: Wert liegt zwischen den Schranken Zur Klasse Zum Package Kiviat-Diagramme Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Messen mit Together Kiviat-Diagramme Mehrere Werte werden sternförmig aufgetragen: Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Messen mit Together Kiviat-Diagramme (Fortsetzung) I Richtwerte bestimmen I I I I I Vom Tool vorgeschlagen Einstellbar Maximum und Minimum Maßzahlen normieren Im Graphen eintragen I I I Richtwerte als Kreise Metriken als Strahlen Werte des Betrachteten Moduls als Polygon Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Software-Metriken Software-Metriken mit Together Findbugs als Codeanalyse-Werkzeug I Zusätzlich zu herkömmlichen Metriken erlaubt das Werkzeug Findbugs die Suche nach Bugpattern I Nützlich, um nach bestimmen Kriterien die Qualität des Codes zu erhöhen I Zum Beispiel: Einhalten von Codingstandards, Streams nach dem Öffnen schließen, . . . Wischermann, Spisländer: Software-Metriken Findbugs Inhalt Nachlese Viel Spaß! Wischermann, Spisländer: Software-Metriken Software-Metriken Software-Metriken mit Together Findbugs