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*757
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