spec# proseminar assertions im ss 2007 uni paderborn andreas martens betreuer: dipl. inform. björn...
TRANSCRIPT
Spec# Proseminar “Assertions” im SS 2007
Uni PaderbornUni PaderbornAndreas MartensAndreas Martens
Betreuer: Dipl. Inform. Björn MetzlerBetreuer: Dipl. Inform. Björn Metzler
Inhaltsübersicht
1. Motivation
2. Spec Sharp
3. Assertions bei Spec Sharp
4. Static Verifier
5. Fazit
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
MotivationMotivation
Spec #
ist C# Erweiterung
hat einzigartige Architektur
enthält Spezifikationen
Ist schnell erlernbar
steigert Softwarequalität
Inhaltsübersicht
1. Motivation
2. Spec Sharp
3. Assertions bei Spec Sharp
4. Static Verifier
5. Fazit
2. Spec# System
Das Spec Sharp Programmiersystem besteht aus:
Programmiersprache Compiler statischem Programm „Beweiser“
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
.NET Plattform.NET Plattform
VB.NET C# Spec# C++ …
VB.NETCompiler
C#Compiler
Spec#Compiler
C++Compiler
…
Microsoft Intermediate Language(MIL)
Common Language Runtime(CLR)
Klassenbiblioteken(API)
Betriebsystem
.NET Plattform.NET Plattform
.NET Sprachen C++, C#, Spec#, Visual Basic,… Verwenden das .NET Framework Werden von entsprechendem
Sprachcompiler in die Zwischensparche kompiliert
C# (Sharp)C# (Sharp)
Objektorientierte Sprache stammt größtenteils von C, bzw. C++ abenthält Anlehnungen an Java erzeugt plattformunabhängige Programmehat eine automatische Ressourcenverwaltung
(Garbage collector)
In C# (Sharp)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
C# BeispielC# Beispiel
//Code in C#int termin;public void newTermin(int day){
termin = day;}
Liefert diese Funktion ein sicheres Ergebnis?
C# BeispielC# 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?
//Code in C#int termin;public void newTermin(int day){
termin = day;}
C# BeispielC# Beispiel
Inhaltsübersicht
1. Motivation
2. Spec Sharp
3. Assertions bei Spec Sharp
4. Static Verifier
5. Fazit
3. Assertions3. Assertions
Java
Java Modeling Language
Invarianten
Nachbedingungen
Vorbedingungen
…
Reference types
AssertionsAssertions
Java
Java Modeling Language
Invarianten
Nachbedingungen
Vorbedingungen
…
Reference types
C#
AssertionsAssertions
Java
Java Modeling Language
Invarianten
Nachbedingungen
Vorbedingungen
…
Reference types
C#
Spec#
Invarianten
Nachbedingungen
Vorbedingungen
…
Reference types
Erweiterung von C# um
Spezifikationen
Runtime Verifier
Zur Kompilierzeit - Umwandlung aller Vor-, Nachbedingungen, Invarianten Annahmen usw. in „inline“ Code
Zur Laufzeit – Auslösung von Exceptions bei den verletzten Bedingungen
AssertionsAssertions
C#
Spec#
Invarianten
Nachbedingungen
Vorbedingungen
…
Reference types Non-null Typen
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
VorbedingungenVorbedingungen
C#
Spec#
Invarianten
Nachbedingungen
Vorbedingungen
…
Reference types
Requires
Non-null Typen
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;
}
NachbedingungenNachbedingungen
C#
Spec#
Invarianten
Nachbedingungen
Vorbedingungen
…
Reference types
Ensures
Requires
Non-null Typen
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;}
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 ) {…}
}
Invarianten BeispielInvarianten Beispiel
C#
Spec#
Invarianten
Nachbedingungen
Vorbedingungen
…
Reference types
Objekt Invarianten
Ensures
Requires
Non-null Typen
Spec#: Objekt Invarianten
Definition in Klassen, vor Methoden Gültig im Körper der entsprechenden Objekten
Z.B. „invariant (7 > termintag);“
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
}
Inhaltsübersicht
1. Motivation
2. Spec Sharp
3. Assertions bei Spec Sharp
4. Static Verifier
5. Fazit
4. Static Verifier
Spec# Compiler
Translator
Verification Condition Generator
Automatic Theorem Prover
Spec# (annotated C#)
Boogie Procedural Language
Formulas
Sprachneutralse Format
Boogie PL Programm
Static Verifier
Spec# Compiler
Translator
Verification Condition Generator
Automatic Theorem Prover
Produzierung des ausführbaren
CodesSpec# (annotiertes C#)
Boogie Procedural Language
Static Verifier
Spec# Compiler
Translator
Verification Condition Generator
Automatic Theorem Prover
Boogie Procedural Language
Umwandelung in ein
sprachneutrales Format
Spec# (annotiertes C#)
Sprachneutralse Format
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
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
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
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
Beispiel: Spec# => Boogie PL
if (Bedingung) S else TSpec#:
assume Bedingung;S
assume !Bedingung;T
ThenZweig
ElseZweig
BoogiePL:
Boogie PL: Code
Unstrukturiertes Code
Passive ::= assume Bedingung, S| assume !Bedingung, T;
S ::= …;
T ::= …;
Bedingung ::= var id : Type;
Type ::= bool;
ScreenshotFalsche Eingabe
Vorbedingung wird nicht erfüllt
Kurze Fehlererklärung
Inhaltsübersicht
1. Motivation
2. Spec Sharp
3. Assertions bei Spec Sharp
4. Static Verifier
5. Fazit
5. Fazit
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
Vielen Dank!