Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler.

Ähnliche Präsentationen


Präsentation zum Thema: "Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler."—  Präsentation transkript:

1 Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler

2 Inhaltsübersicht 1. Motivation 2. Spec Sharp 3. Assertions bei Spec Sharp 4. Static Verifier 5. Fazit

3 1.Motivation - Spec Sharp 1. von Microsoft entwickelte objektorientierte Programmiersprache. 2. ist kostenlos. 3. für die Entwicklungsumgebungen Visual Studio 2003 und Visual Studio 2005 verfügbar

4 Motivation Spec # ist C# Erweiterung hat einzigartige Architektur enthält Spezifikationen Ist schnell erlernbar steigert Softwarequalität

5 Inhaltsübersicht 1. Motivation 2. Spec Sharp 3. Assertions bei Spec Sharp 4. Static Verifier 5. Fazit

6 2. Spec# System Das Spec Sharp Programmiersystem besteht aus: Programmiersprache Compiler statischem Programm Beweiser

7 Spec# - Programmiersprache erweiterung von C# um Spezifikationen Jedes korrektes C# Programm ist auch korrektes Spec# Programm enthält Werkzeuge zum Überprüfen der Spezifikationen zur Compile- und Laufzeit Weg zur hochqualitative Software Basiert auf.NET Plattform

8 .NET Plattform VB.NET C# Spec# C++… VB.NET Compiler C# Compiler Spec# Compiler C++ Compiler … Microsoft Intermediate Language (MIL) Common Language Runtime (CLR) Klassenbiblioteken (API) Betriebsystem

9 .NET Plattform.NET Sprachen C++, C#, Spec#, Visual Basic,… Verwenden das.NET Framework Werden von entsprechendem Sprachcompiler in die Zwischensparche kompiliert

10 C# (Sharp) Objektorientierte Sprache stammt größtenteils von C, bzw. C++ ab enthält Anlehnungen an Java erzeugt plattformunabhängige Programme hat eine automatische Ressourcenverwaltung (Garbage collector)

11 In C# (Sharp) gibt es weder Pointer noch Mehrfachvererbung fast alles als Objekt gesehen wird, selbst die einfachen Datentypen wie int oder long entstehen dabei keine damit verbundene Laufzeitverluste

12 C# Beispiel //Code in C# int termin; public void newTermin(int day) { termin = day; } Liefert diese Funktion ein sicheres Ergebnis?

13 C# Beispiel //Code in C# int termin; public void newTermin(int day) { termin = day; } Und was ist wenn day kleiner 1 ist, oder größer als 6 ist?

14 //Code in C# int termin; public void newTermin(int day) { termin = day; } C# Beispiel

15 Inhaltsübersicht 1. Motivation 2. Spec Sharp 3. Assertions bei Spec Sharp 4. Static Verifier 5. Fazit

16 3. Assertions Java Java Modeling Language Invarianten Nachbedingungen Vorbedingungen … Reference types

17 Assertions Java Java Modeling Language Invarianten Nachbedingungen Vorbedingungen … Reference types C#

18 Assertions Java Java Modeling Language Invarianten Nachbedingungen Vorbedingungen … Reference types C# Spec# Invarianten Nachbedingungen Vorbedingungen … Reference types Erweiterung von C# um Spezifikationen

19 Runtime Verifier Zur Kompilierzeit - Umwandlung aller Vor-, Nachbedingungen, Invarianten Annahmen usw. in inline Code Zur Laufzeit – Auslösung von Exceptions bei den verletzten Bedingungen

20 Assertions C# Spec# Invarianten Nachbedingungen Vorbedingungen … Reference typesNon-null Typen

21 Spec# : None-null Typen Viele Fehler passieren auch dann, wenn einem Objekt ein Wert zugewiesen oder abgefragt wird, und dieses Objekt gleich null ist. private string state1 = null;// in Spec# private string! state2 = ok";// in Spec# Zwei Strings, einer mit ! Zeichen. state1 kann null sein state2 kann aber nicht null sein

22 Vorbedingungen C# Spec# Invarianten Nachbedingungen Vorbedingungen … Reference types Requires Non-null Typen

23 Spec#: Precondition In Spec# können einer Funktion Vor- und Nachbedingungen zugewiesen werde requires = Vorbedingung. Vorbedingung: sagt, was wahr sein muß, damit die Methode aufgerufen werden darf. int termin; public void newTermin(int day) requires (day < 7); requires (day >= 1); { termin = day; }

24 Nachbedingungen C# Spec# Invarianten Nachbedingungen Vorbedingungen … Reference types Ensures Requires Non-null Typen

25 Spec#: Postcondition ensures = Nachbedingung. Nachbedingung: sagt, was erfüllt sein soll, wenn die Methode ohne Exceptions ausgeführt wird. int termin; public void newTermin(int day) requires (day < 7); requires (day >= 1); ensures (termin == day); { termin = day; }

26 Spec#: Pre- und Postconditionen Pre- und Postconditionen können auch in Interface eingebaut werden: interface I { void M(int x ) requires x <= 10; } interface J { void M(int x ) requires x >= 10; } class C : I, J { void I.M(int x ) {…} void J.M(int x ) {…} }

27 Invarianten Beispiel C# Spec# Invarianten Nachbedingungen Vorbedingungen … Reference types Objekt Invarianten Ensures Requires Non-null Typen

28 Spec#: Objekt Invarianten Definition in Klassen, vor Methoden Gültig im Körper der entsprechenden Objekten Z.B. invariant (7 > termintag);

29 Spec#: Objekt Invarianten class Meeting { int termintag; invariant (1 <= termintag); invariant (7 > termintag); void newTermin(int day ) { termintag = day; } Definition von Objektinvariante requires IsExposable; expose(this){...// Invarianten gelten nicht }

30 Inhaltsübersicht 1. Motivation 2. Spec Sharp 3. Assertions bei Spec Sharp 4. Static Verifier 5. Fazit

31 4. Static Verifier Spec# Compiler Translator Verification Condition Generator Automatic Theorem Prover Spec# (annotated C#) Boogie Procedural Language Formulas Sprachneutralse Format Boogie PL Programm

32 Static Verifier Spec# Compiler Translator Verification Condition Generator Automatic Theorem Prover Produzierung des ausführbaren Codes Spec# (annotiertes C#) Boogie Procedural Language

33 Static Verifier Spec# Compiler Translator Verification Condition Generator Automatic Theorem Prover Boogie Procedural Language Umwandelung in ein sprachneutrales Format Spec# (annotiertes C#) Sprachneutralse Format

34 Static Verifier Spec# Compiler Translator Verification Condition Generator Automatic Theorem Prover Generierung eines Boogie PL Programm aus Spec# Boogie Procedural Language Spec# (annotiertes C#) Boogie PL Programm Sprachneutralse Format

35 Static Verifier Spec# Compiler Translator Verification Condition Generator Automatic Theorem Prover Einfache Sprache mit Prozeduren Boogie Procedural Language Spec# (annotiertes C#) Boogie PL Programm Sprachneutralse Format

36 Static Verifier Spec# Compiler Translator Verification Condition Generator Automatic Theorem Prover Umwandlung von Boogie PL Code in logische Ausdrücke (In Formeln) Boogie Procedural Language Spec# (annotiertes C#) Boogie PL Programm Formulas Sprachneutralse Format

37 Static Verifier Spec# Compiler Translator Verification Condition Generator Automatic Theorem Prover Boogie Procedural Language Überprüfung und Bewies von Korrektheit der Ausdrücken Formulas Spec# (annotiertes C#) Sprachneutralse Format Boogie PL Programm

38 Beispiel: Spec# => Boogie PL if (Bedingung) S else T Spec#: assume Bedingung; S assume !Bedingung; T Then Zweig Else Zweig BoogiePL:

39 Boogie PL: Code Unstrukturiertes Code Passive ::= assume Bedingung, S| assume !Bedingung, T; S::= …; T::= …; Bedingung ::= var id : Type; Type ::= bool;

40 Screenshot Falsche Eingabe Vorbedingung wird nicht erfüllt Kurze Fehlererklärung

41 Inhaltsübersicht 1. Motivation 2. Spec Sharp 3. Assertions bei Spec Sharp 4. Static Verifier 5. Fazit

42 Sichere Software mit weniger Aufwand Arbeitsverlagerung von den Testern zu den Softwareentwicklern Steigerung von Softwarequalität Syntax und Semantik von Spec# ist sehr nah zu C# liegt => Spec # ist für jeden C# - Programmierer leicht zu lernen

43 Vielen Dank!


Herunterladen ppt "Spec# Proseminar Assertions im SS 2007 Uni Paderborn Andreas Martens Betreuer: Dipl. Inform. Björn Metzler."

Ähnliche Präsentationen


Google-Anzeigen