Qualitätssicherung von
Software (SWQS)
Prof. Dr. Holger Schlingloff
Humboldt-Universität zu Berlin
und
Fraunhofer FOKUS
13.6.2013: Codechecks
Fragen zur Wiederholung
• Wozu sind Metriken gut?
• Welche Arten gibt es?
• Welche Maße sind möglich?
H. Schlingloff, Software-Qualitätssicherung
Folie 2
Prozedurale Komplexitätsmaße
• Umfangsmetriken
 Dateigröße, LOC, NCSC usw.
 Halstead-Metrik
 Function Points
• Kontrollflussmetriken
 Schachtelungstiefe
 McCabe
• Datenstrukturmetriken
 Variablenzahl, Records, Gültigkeitsdauern
• Stilmetriken
 Namenskonventionen, Formatierung, Kommentierung
• Bindungsmetriken
 Anzahl und Struktur der Bindungsbeziehungen
H. Schlingloff, Software-Qualitätssicherung
Folie 3
Halstead-Metriken
• Basisgrößen




1: Anzahl unterschiedlicher Operatoren (+,*, if,…)
2: Anzahl unterschiedlicher Operanden (Var, Const)
N1: Gesamtzahl verwendeter Operatoren
N2: Gesamtzahl verwendeter Operanden
• abgeleitete Größen
 =1+2: Größe des Vokabulars
 N=N1+N2: Größe des Programms
 V=N*log : Volumen
• Eigenschaften und Interpretation
 D=(1*N2)/2 2: Schwierigkeit zum Schreiben oder
Verstehen eines Programms
H. Schlingloff, Software-Qualitätssicherung
Folie 4
Schachtelungstiefe
• je höher die Schachtelungstiefe, desto
schwerer die Verständlichkeit
• Maß: durchschnittliche Schachtelungstiefe
• z.B. auch: boolesche Anweisungen in
Bedingungen!
• Auslagerung (Funktionen) erzwingt Struktur
• mit zunehmender Anzahl von Prozeduren und
Tiefe des Schachtelungsbaumes wächst die
Komplexität
H. Schlingloff, Software-Qualitätssicherung
Folie 5
McCabe Metrik
• misst die strukturelle Komplexität von Programmen
• zyklomatische Zahl als Messgröße, aus dem
•
Kontrollflussgraphen ermittelt
Basisgrößen
 e: Anzahl der Kanten des Kontrollflussgraphen
 n: Anzahl der Knoten
 p: Anzahl der verbundenen Komponenten
• zyklomatische Zahl
 V(G)=e-n+2p
 „Anzahl der Entscheidungen plus eins“
H. Schlingloff, Software-Qualitätssicherung
Folie 6
Beispiele
H. Schlingloff, Software-Qualitätssicherung
Folie 7
Zyklomatische Zahl
• Die zyklomatische Zahl ist für strukturierte Programme um
•
•
den Wert 1 größer als die Anzahl der binären
Entscheidungen.
Sie kann durch Abzählen der binären Entscheidungen
ermittelt werden; existieren w Prädikate so gilt
v(G) = w + 1 (nicht-binäre Entscheidungen mit n Ausgängen
= n – 1 Binärentscheidungen)
Empirische Untersuchungen: Fehlerhäufigkeit steigt
überproportional falls zyklomatische Zahl > 10.
 Empfehlung: maximale zyklomatische Zahl eines Moduls = 10
 Überschreitet die zyklomatische Zahl eines Moduls diesen Wert, sollte
Modul in Teilmodule aufgespalten werden
H. Schlingloff, Software-Qualitätssicherung
Folie 8
H. Schlingloff, Software-Qualitätssicherung
Folie 9
Objektorientierte Komplexitätsmaße
• CBO (coupling between objects)
 Anzahl der Klassen, mit denen eine Klasse gekoppelt ist
• DIT (depth of inheritance tree)
 Maximaler Weg von der Wurzel bis zur betrachteten Klasse
• NOC (number of children)
 Anzahl der direkten Unterklassen; inverses Maß!
• RFC (response for a class)
 Anzahl der Methoden, die potentiell ausgeführt werden können, wenn Objekt auf
eingehende Nachricht reagiert
• …
H. Schlingloff, Software-Qualitätssicherung
Folie 10
Werkzeugunterstützung
Werkzeugbeispiel JStyle 4.6
H. Schlingloff, Software-Qualitätssicherung
Quelle: Holzmann
www.ssw.uni-linz.ac.at/Teaching/ Lectures/Sem/2002/slides/Holzmann.ppt
Folie 11
Software-Visualisierung
• z.B. Sotograph (Uni Cottbus)
http://www.hello2morrow.com/images/products/diffversion.jpg?1221072548
H. Schlingloff, Software-Qualitätssicherung
Folie 12
Codierstandards (coding rules)
• prägen entscheidend die „Unternehmenskultur“
•
•
•
•
•
•
eines SW-Hauses
„Freiheitsberaubung“ oder „corporate identity“?
Namenskonventionen, Formatierung,
Dokumentationsrichtlinien, …
zwingende Einhaltung gewisser Metriken
(Modulgröße, Schachtelungstiefe, …)
automatisch überprüfbar
meist ziemlich leicht zu „umgehen“
verbessern im Allgemeinen die Produktqualität
H. Schlingloff, Software-Qualitätssicherung
Folie 13
Beispiel: Abraxas CodeCheck
Automating Corporate Source Code Compliance
Sample CodeCheck Coding Rules for C++
2.8.1 Use typedef names rather than the basic C types (int, long, float, etc.)
for data members.
Example: In a program dealing with money, use
typedef float
Money
rather than
float
Money;
salary, bonus; //
salary, bonus; //
Good
Bad
Justification: This rule follows the principle of data abstraction. Typedef
names do not increase the type safety of the code, but they do improve
its readability. Furthermore, if we decide at a later time that money
should be an int or a double we only have to change the type definition,
not search the code for all float declarations and then decide which ones
represent money.
Reference: Paragraph 4.21, XYZ C++ Guidelines
H. Schlingloff, Software-Qualitätssicherung
Folie 14
Beispiel: Java Conventions Rules
http://www.oracle.com/technetwork/java/codeconv-138413.html
• Why have code conventions? Code conventions are important
to programmers for a number of reasons
 80% of the lifetime cost of a piece of software goes to maintenance.
 Hardly any software is maintained for its whole life by the original
author.
 Code conventions improve the readability of the software, allowing
engineers to understand new code more quickly and thoroughly.
• Kapitel
 File names, file organization, naming conventions
 Indentation, comments, white space
 Declarations, Statements, programming practices
H. Schlingloff, Software-Qualitätssicherung
Folie 15
Tools
• Beispiel: CheckStyle
• “automatisiertes Code-Review”
H. Schlingloff, Software-Qualitätssicherung
Folie 16

ppt