Modellbasierte Software-Entwicklung eingebetteter Systeme Prof. Dr. Holger Schlingloff Institut für Informatik der Humboldt Universität und Fraunhofer Institut für Rechnerarchitektur und Softwaretechnik
Achtung Headhunting! Sehr geehrter Herr Prof. Dr. Schlingloff, rechtzeitig zum Semesterende bieten wir Ihren Studierenden jetzt schon unsere exklusiven CareerVenture Recruiting-Veranstaltungen für dem Herbst 2011 an. Diese Events richten sich an Studierende, Absolventen, Doktoranden und Young Professionals aller Studiengänge und bieten die einzigartige Möglichkeit, an nur einem Tag mehrere vorterminierte, 45-minütige Einzelinterviews mit Vertretern der attraktivsten Arbeitgeber Deutschlands zu führen. Für eingeladene Kandidaten ist die Teilnahme kostenlos; die Anfahrt und Übernachtung wird im Rahmen des Sponsoringprogramms finanziell unterstützt. Die Bewerbung erfolgt online über www.career-venture.de. CareerVenture information technology spring: 07. Oktober 2011 in Berlin Bewerbungsschluss: 14. September.2011 Bisher teilnehmende Unternehmen: Capgemini, Deloitte, Platinion, Senacor Technologies, Deutsche Telekom, u.a.
Verifikation was passiert hier?
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
Statische Analyse: Compiler Typkorrektheit Initialisierung von Variablen Programmflussgraph Unerreichbarer Code Unveränderliche Felder Konstante Terme und Bedingungen Feldgrenzenverletzung ? Nullzeiger-Dereferenzierung ? Synchronisationsfehler ?
statische Analysewerkzeuge Spezialwerkzeuge zur tiefergehenden Analyse Lint (Splint, PCLint,…) PolySpace Verifier … Unterschiedliche Analysetiefe, unterschiedliche Ergebnisrate Problem: false positives
Lint Grundidee Einfache (schnelle!) Datenflussanalyse! Beispiel: Programmierer annotiert das Programm Lint prüft ob Annotationen erfüllt sind Einfache (schnelle!) Datenflussanalyse! Beispiel:
Buffer Overflow Verantwortlich für viele Sicherheitslücken Annotation der Puffergröße in Splint
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
Beispiel {x{2,4,6}} x=3*x+1 {x{7,13,19}}
allgemeine Vorgehensweise ergibt ein (rekursives) Gleichungssystem Lösung als kleinster Fixpunkt
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!
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)
Abstraktion Datenabstraktion eigentlich Rechnen mit Mengen von Werten 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
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
Modellprüfung Überprüfung eines formalen Modells des Systems gegenüber einer formalen Spezifikation der Anforderungen vollautomatisch für zustandsendliche Systeme Modellierung: UML State Machines, Stateflow, … Spezifikation: temporale Logik, Erreichbarkeit, Verklemmungsfreiheit, … 8.2.2006
bekannte Model-Checker SMV, nuSMV, Cadence SMV (CTL) SPIN, COSPAN (LTL) FDR, μCRL (Prozessalgebra) UPPAAL, Kronos, Rabbit (Realzeit) Reactis, Simulink Verifier (Simulink) HyTech (hybride Systeme) CBMC (bounded Model Checker for C/C++ programs) Java Pathfinder (für Java Bytecode) ...
Beispiel (SMV) 8.2.2006
Vorlesung im WS! Software-Verifikation 1 2 SWS 4 SP VL Do 13-15 wöch. RUD25, 4.112 H. Schlingloff UE Do 15-17 wöch. RUD25, 4.112 J. Gerlach Je mehr Software in sicherheitskritischen Systemen eingesetzt wird, umso wichtiger wird es, ihre Korrektheit objektiv nachzuweisen. Beispiele sind Signalisierungsanlagen in der Bahntechnik, Steuercomputer in Flugzeugen oder Regelungen medizinischer Geräte. In den letzten Jahren sind formale Verifikations- und Analysemethoden für solche Software so weit entwickelt worden, dass sie auch für industriell relevante Probleme einsetzbar geworden sind. Der Einsatz dieser Methoden wird von den einschlägigen Normen für hochgradig sicherheitsrelevante Software dringend empfohlen. Dieser Modul gibt einen Überblick über die wichtigsten formalen Methoden zur Software-Verifikation.
Zu den Prüfungen Jetzt gibt‘s ein paar streng geheime Tipps... Prüfungen (nach Möglichkeit) am 5. Sept. Ausweichtermin 26.9. Anmeldung bei Frau Heene Vorbereitungstreffen 30.8. 11:00 Raum 4.113 Lösungen mitbringen!
Schöne Ferien!