ppt - Institut für Informatik

Werbung
Modellbasierte SoftwareEntwicklung eingebetteter
Systeme
Prof. Dr. Holger Schlingloff
Institut für Informatik der Humboldt Universität
und
Fraunhofer Institut für offene Kommunikationssysteme FOKUS
andere Verifikationsverfahren
• was passiert
hier?
H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 2
Statische Analyse
• aus Programmiersprachen bekannt
 z.B. Java: Initialisierung von Variablen wird
geprüft
 int k; if (terminates(TMi,i)) k=0; ... ???
 Terminierung nicht garantiert; Abstraktion!
• was finden statische Analysatoren?
 Range and Bounds Checker
 Pointer and Storage Allocation
 Race Conditions
H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
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, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 4
statische Analysewerkzeuge
• Spezialwerkzeuge zur
tiefergehenden Analyse
 Lint (Splint, PCLint,…)
 PolySpace Verifier
…
• Unterschiedliche Analysetiefe,
unterschiedliche Ergebnisrate
• Problem: false positives
H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 5
Lint
• Grundidee
 Programmierer annotiert das Programm
 Lint prüft ob Annotationen erfüllt sind
• Einfache (schnelle!) Datenflussanalyse!
Beispiel:
H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 6
Buffer Overflow
• Verantwortlich für viele Sicherheitslücken
• Annotation der Puffergröße in Splint
H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 7
Abstrakte Interpretation
• Wie beweist man solche Constraints?
 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, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 8
Beispiel
• {x{2,4,6}} x=3*x+1 {x{7,13,19}}
H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 9
allgemeine Vorgehensweise
• ergibt ein (rekursives) Gleichungssystem
• Lösung als kleinster Fixpunkt
H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 10
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, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 11
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, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 12
Abstraktion
• 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, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 13
statische Analyse von Modellen
• Polyspace Verifier: Analyse des Codes, symbolische
Berechnung möglicher Fehler
 Rechenzeiten im Stunden- und Tagebereich
 False Negatives müssen manuell betrachtet werden
 Möglichkeit von False Positives
• Trotzdem massive Erhöhung der Sicherheit
 Initialisierung, Zeigerkonsistenz, Nulldivision,
Wertebereichs- und Indexüberläufe, Speicherlecks
 unerreichbarer Code, Endlosschleifen und –rekursionen
• Teil von Simulink Verification & Validation
H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme
Folie 14
Herunterladen