Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Qualitätssicherung von Software (SWQS)

Ähnliche Präsentationen


Präsentation zum Thema: "Qualitätssicherung von Software (SWQS)"—  Präsentation transkript:

1 Qualitätssicherung von Software (SWQS)
Prof. Dr. Holger Schlingloff Humboldt-Universität zu Berlin und Fraunhofer FOKUS : Statische Analyse

2 Fragen zur Wiederholung
Was ist der Unterschied Software-HW Model Checking? Was versteht man unter Zustandsraumexplosion? Was kann dagegen tun?

3 statische Analyse ohne semantische Konsequenzen
Coding Rules Checker, Linker, … mit semantischer Bedeutung Variableninitialisierung Range and Bounds Checker Pointer and Storage Allocation Race Condition Verifikationswerkzeuge Modellprüfer, Äquivalenzprüfung interaktive Beweisverfahren zunehmende Mächtigkeit zunehmende Komplexität

4 Statische Analyse: Compiler
Typkorrektheit Initialisierung von Variablen Programmflussgraph Unerreichbarer Code Unveränderliche Felder Konstante Terme und Bedingungen Feldgrenzenverletzung ? Nullzeiger-Dereferenzierung ? Synchronisationsfehler ?

5 statische Analysewerkzeuge
Es gibt „viele“ 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

6 Lint Grundidee Einfache (schnelle!) Datenflussanalyse! Beispiel:
Programmierer annotiert das Programm Lint prüft ob Annotationen erfüllt sind Einfache (schnelle!) Datenflussanalyse! Beispiel:

7 anderes Beispiel: only
einzige Referenz zu besagtem Objekt explizite Abgabe der Besitzrechte am Objekt

8 Buffer Overflow Verantwortlich für viele Sicherheitslücken
Annotation der Puffergröße in Splint

9 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

10 Bsp.: Cppcheck

11 Bsp.: ESC/Java2

12 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

13 Beispiel {x{2,4,6}} x=3*x+1 {x{7,13,19}} A B C E F G H D

14 allgemeine Vorgehensweise
ergibt ein (rekursives) Gleichungssystem Lösung als kleinster Fixpunkt

15 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

16 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!

17 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)

18 eigentlich Rechnen mit Mengen von Werten
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

19 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


Herunterladen ppt "Qualitätssicherung von Software (SWQS)"

Ähnliche Präsentationen


Google-Anzeigen