ppt

Werbung
Qualitätssicherung von
Software (SWQS)
Prof. Dr. Holger Schlingloff
Humboldt-Universität zu Berlin
und
Fraunhofer FOKUS
6.6.2013: Statische Analyse
Fragen zur Wiederholung
• Was ist der Unterschied Software-HW Model Checking?
• Was versteht man unter Zustandsraumexplosion?
• Was kann dagegen tun?
H. Schlingloff, Software-Qualitätssicherung
Folie 2
statische Analyse
• mit semantischer Bedeutung




Variableninitialisierung
Range and Bounds Checker
Pointer and Storage Allocation
Race Condition
• Verifikationswerkzeuge
zunehmende Komplexität
 Coding Rules Checker, Linker, …
zunehmende Mächtigkeit
• ohne semantische Konsequenzen
 Modellprüfer, Äquivalenzprüfung
 interaktive Beweisverfahren
H. Schlingloff, Software-Qualitätssicherung
Folie 3
Statische Analyse: Compiler
• Typkorrektheit
• Initialisierung von Variablen
• Programmflussgraph
 Unerreichbarer Code
 Unveränderliche Felder
 Konstante Terme und Bedingungen
• Feldgrenzenverletzung ?
• Nullzeiger-Dereferenzierung ?
• Synchronisationsfehler ?
H. Schlingloff, Software-Qualitätssicherung
Folie 4
statische Analysewerkzeuge
• Es gibt „viele“
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
• einfache Tools, in Compiler oder IDE integriert
• Spezialwerkzeuge zur tiefergehenden Analyse




Lint (Splint, PCLint,…)
ESC/Java2
PolySpace Verifier
…
• Unterschiedliche Analysetiefe, unterschiedliche
Ergebnisrate
• Hauptproblem: false positives
H. Schlingloff, Software-Qualitätssicherung
Folie 5
Lint
• Grundidee
 Programmierer annotiert das Programm
 Lint prüft ob Annotationen erfüllt sind
• Einfache (schnelle!) Datenflussanalyse!
Beispiel:
H. Schlingloff, Software-Qualitätssicherung
Folie 6
anderes Beispiel: only
• einzige Referenz zu besagtem Objekt
• explizite Abgabe der Besitzrechte am Objekt
H. Schlingloff, Software-Qualitätssicherung
Folie 7
Buffer Overflow
• Verantwortlich für viele Sicherheitslücken
• Annotation der Puffergröße in Splint
H. Schlingloff, Software-Qualitätssicherung
Folie 8
Probleme bei Abstraktionen
• falsche Positive




Überapproximation des Programms
Bsp.: if (p&&q) ...  if (p) ...
mangelnde Korrektheit: Fehler die evtl. keine sind
erhöhter QS-Aufwand
• falsche Negative
•
•
•
•
Unterapproximation des Programms
Bsp.: if (p) ...  if (p&&q) ...
mangelnde Vollständigkeit: manche Fehler werden nicht erkannt
trügerische Sicherheit
H. Schlingloff, Software-Qualitätssicherung
Folie 9
Bsp.: Cppcheck
H. Schlingloff, Software-Qualitätssicherung
Folie 10
Bsp.: ESC/Java2
H. Schlingloff, Software-Qualitätssicherung
Folie 11
Abstrakte Interpretation
• Wie findet man solche Probleme?
 Ausführung des Programms mit symbolischen
Werten (bzw. „Mengen von Werten“)
 Berechnung der möglichen Werte jeder Variablen
an jeder Programmstelle („collecting semantics“)
• Was kann man daraus ableiten?
 Initialisierungen, Überlauf, Division durch Null,
Indexüberschreitung, …
 Keine Aussage über Terminierung oder korrekte
Funktionalität
H. Schlingloff, Software-Qualitätssicherung
Folie 12
Beispiel
• {x{2,4,6}} x=3*x+1 {x{7,13,19}}
A
B
C
E
F
G
H
D
H. Schlingloff, Software-Qualitätssicherung
Folie 13
allgemeine Vorgehensweise
• ergibt ein (rekursives) Gleichungssystem
• Lösung als kleinster Fixpunkt
H. Schlingloff, Software-Qualitätssicherung
Folie 14
Fixpunktsatz von Knaster und Tarski
• jede monotone Funktion f in einem vollständigen
•
Verband hat einen kleinsten Fixpunkt, nämlich
inf{x|x≤f(x)}
wenn f stetig ist, so ist der kleinste Fixpunkt
gegeben durch lim fn(0)
• Für die statische Analyse bedeutet das
 starte mit allen Gleichungswerten undefiniert
 berechne den Wert der (n+1)-ten Iteration einer
Gleichung aus den Werten der n-ten Iteration
 solange, bis sich nichts mehr ändert
H. Schlingloff, Software-Qualitätssicherung
Folie 15
Probleme
• Terminierung des Verfahrens ist nicht
garantiert!
(Limesbildung über transfinite Ordinalzahlen)
• Rechnen mit symbolischen Zustandsmengen
 z.B. Menge der Quadratzahlen, symbolische
Ausdrücke wie x2+3x+5 usw.
 Gleichheit von beliebigen Mengenausdrücken
unentscheidbar!
H. Schlingloff, Software-Qualitätssicherung
Folie 16
nochmal: Abstraktion
• Beispiel
 x*y=z  (xmod n * ymod n) mod n = zmod n
• „mod n“ ist eine Abstraktion, die einen unendlichen
•
Wertebereich auf {0,1,...,n-1} abbildet
um zu prüfen, ob eine Multiplikation korrekt
ausgeführt wurde, kann man die Abstraktion prüfen
 8*7=56  2 * 1 = (8mod 3 * 7mod 3) mod 3 = 56mod 3
 (8mod 3 * 7mod 3) mod 3  57mod 3  8*757
 aber: 8*7  65, obwohl (8mod 3 * 7mod 3) mod 3 = 65mod 3
• „false positives“: Der abstrakte Check findet keinen
Fehler, obwohl noch einer enthalten ist (vgl. Test)
H. Schlingloff, Software-Qualitätssicherung
Folie 17
• Datenabstraktion
 x  x mod 3
 x*y  ((x mod 3) * (y mod 3) mod 3)
• eigentlich Rechnen mit Mengen von Werten
 konkreter Datenraum wird partitioniert in Mengen von
Restklassen 0, 1, 2
 konkrete Operationen werden abgebildet auf abstrakte;
Rechnen mit Repräsentanten
• Eigenschaftserhaltung
 C erfüllt P  A erfüllt P
 A verletzt P  C verletzt P
H. Schlingloff, Software-Qualitätssicherung
Folie 18
Wie abstrahieren?
• Restklassen
• Positiv/Null/Negativ (vgl. Grenzwertanalyse)
• Polyeder-Verband
 Konjunktionen linearer Ungleichungen
 z.B. 17≤x≤32 & 1≤y<100
• Rechnungen in diesem Verband lassen sich in
polynomialer Zeit (schnell!) nachvollziehen
 z.B. x = x+y ergibt 18≤x≤132
H. Schlingloff, Software-Qualitätssicherung
Folie 19
Herunterladen