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