Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Erma Ansorge Geändert vor über 10 Jahren
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!
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.