Modellbasierte Software- Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer Institut für offene Kommunikationssysteme FOKUS
Folie 2 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme andere Verifikationsverfahren was passiert hier?
Folie 3 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme 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
Folie 4 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme Statische Analyse: Compiler Typkorrektheit Initialisierung von Variablen Programmflussgraph Unerreichbarer Code Unveränderliche Felder Konstante Terme und Bedingungen Feldgrenzenverletzung ? Nullzeiger-Dereferenzierung ? Synchronisationsfehler ?
Folie 5 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme statische Analysewerkzeuge Spezialwerkzeuge zur tiefergehenden Analyse Lint (Splint, PCLint,…) PolySpace Verifier … Unterschiedliche Analysetiefe, unterschiedliche Ergebnisrate Problem: false positives
Folie 6 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme Lint Grundidee Programmierer annotiert das Programm Lint prüft ob Annotationen erfüllt sind Einfache (schnelle!) Datenflussanalyse! Beispiel:
Folie 7 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme Buffer Overflow Verantwortlich für viele Sicherheitslücken Annotation der Puffergröße in Splint
Folie 8 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme 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
Folie 9 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme Beispiel {x {2,4,6}} x=3*x+1 {x {7,13,19}}
Folie 10 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme allgemeine Vorgehensweise ergibt ein (rekursives) Gleichungssystem Lösung als kleinster Fixpunkt
Folie 11 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme Probleme Terminierung des Verfahrens ist nicht garantiert! (Limesbildung über transfinite Ordinalzahlen) Rechnen mit symbolischen Zustandsmengen z.B. Menge der Quadratzahlen, symbolische Ausdrücke wie x 2 +3x+5 usw. Gleichheit von beliebigen Mengenausdrücken unentscheidbar!
Folie 12 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme Abstraktion Beispiel x*y=z (x mod n * y mod n ) mod n = z mod 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 = (8 mod 3 * 7 mod 3 ) mod 3 = 56 mod 3 (8 mod 3 * 7 mod 3 ) mod 3 57 mod 3 8*7 57 aber: 8*7 65, obwohl (8 mod 3 * 7 mod 3 ) mod 3 = 65 mod 3 „false positives“: Der abstrakte Check findet keinen Fehler, obwohl noch einer enthalten ist (vgl. Test)
Folie 13 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme 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
Folie 14 H. Schlingloff, SS2014 – modellbasierte Software-Entwicklung eingebetteter Systeme 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