Statische Code-Analyse: Software-Metriken Fernstudium Master Wirtschaftsinformatik Formale Methoden Isabell Füll Grömmsche Koppel 15 24111 Kiel isabell.fuell@googlemail.com Amselweg 3 24222 Schwentinental timo.gutsche@gmx.net
Agenda Motivation Software-Qualität Software-Metriken Definition Bewertung Überblick Halstead-Metriken Rechenbeispiel Toolunterstützung Abschluss Seite 1
Motivation Die Software-Qualität spielt im Rahmen des Software- Engineerings eine entscheidende Rolle für den Wettberwerbsvorteil eines Unternehmens! Softwarequalität Software- Engineering Wettbewerb Seite 2
Software-Qualität Benutzer- freundlichkeit Robustheit Portabilität Erweiterbarkeit Verifizierbarkeit Funktionstreue Wiederverwendbarkeit Integrität Software Kompatibilität Seite 3
Software-Metriken: Definition Handwerkszeug für statische Code-Analysen Messung bzw. Ermittlung der einzelenen Software-Qualitätsmerkmale Beruhen auf der Betrachtung von Quellcode Liefern Einblicke in Strukturen der Software- Programme dynamische Software-Analysen Ermitteln tatsächliches Laufzeitverhalten Seite 4
Software-Metriken: Bewertung Vergleichbarkeit Ökonomie Robustheit Korrelation Objektivität Gütekriterien einer Software- Metrik Verwertbarkeit Seite 5
Software-Metriken: Überblick Objektorientierte Metriken Depth of Inheritance Tree (DIT) Number of Children (NOC) Response for a Class (RFC) Weighted Methods per Class (WMC) Coupling Between Objects (CBO) Lack of Cohesion in Methods (LCOM) Umfangsmetriken Lines of Code (LOC) Kilo-Lines of Code (KLOC) Non Commented Source Statements (NCSS) executable Lines of Code (ELOC) Halstead-Metriken Metriken zur Komplexität McCabe-Metrik Halstead-Metriken Modulentwurfskomplexität Entwurfskomplexität Integrationskomplexität Seite 6
Halstead-Metriken 1977 von Maurice Howard Halstead veröffentlicht Komplexität steht in Zusammenhang mit dem Auftreten von zwei Gruppen lexikalischer Elemente im Quellcode Operatoren Operanden Schlüsselwörter (DO...UNTIL, FOR, DO...WHILE, NOT, IF,...) Operatoren (+, -, *, /,...)... Bezeichner (Methoden, Variablen) Konstanten... Seite 7
Halstead-Metriken: Überblick Grundparameter Kenngrößen nach Halstead Seite 8
Beispielmethode /** * @author * @param anfangsbetrag: Betrag zu Beginn der Laufzeit * @param zinssatz: Zinssatz in Prozent (5% = 5) * @param laufzeit: Laufzeit in Jahren (ganzzahlig) * @return endbetarg: Betrag am Ende der Laufzeit */ public static double getendbetrag(double anfangsbetrag, double zinssatz, int laufzeit){ //Korrektheit der Übergabeparameter prüfen: if(anfangsbetrag <= 0 zinssatz <= 0 laufzeit <= 0){ return 0; } //Endbetrag berechnen: double endbetrag = anfangsbetrag*math.pow((1+zinssatz/100), laufzeit); } //Berechnungsergebnis zurückgeben return endbetrag; Seite 9
Rechenbeispiel: Operanden & Operatoren public static double getendbetrag(double anfangsbetrag, double zinssatz, int laufzeit){ if(anfangsbetrag <= 0 zinssatz <= 0 laufzeit <= 0){ return 0; } double endbetrag = anfangsbetrag*math.pow((1+zinssatz/100), laufzeit); } return endbetrag; Operatoren Operanden {} 2 double 4 () 4 int 1 ; 3 getendbetrag 1, 3 endbetrag 2 if 1 anfangsbetrag 3 return 2 laufzeit 3 public 1 zinssatz 3 static 1 0 4 2 100 1 <= 3 1 1 = 1 Math.pow 1 + 1 * 1 gesamt 25 gesamt 24 Seite 10
Beispielmethode: Lösungen Grundparameter Kenngrößen nach Halstead Seite 11
Toolunterstützung Seite 12
Abschluss: Zusammenfassung Vielen Dank für die Aufmerksamkeit! Gibt es noch Fragen Seite 13