Spec#

Werbung
Spec#
Proseminar “Assertions” im SS 2007
Uni Paderborn
Andreas Martens
Betreuer: Dipl. Inform. Björn Metzler
Inhaltsübersicht
1.
2.
3.
4.
5.
Motivation
Spec Sharp
Assertions bei Spec Sharp
Static Verifier
Fazit
1.Motivation - Spec Sharp
1.
2.
3.
von Microsoft entwickelte
objektorientierte Programmiersprache.
ist kostenlos.
für die Entwicklungsumgebungen Visual
Studio 2003 und Visual Studio 2005
verfügbar
Motivation
ist C# Erweiterung
hat einzigartige Architektur
enthält Spezifikationen
Spec #
Ist schnell erlernbar
steigert Softwarequalität
Inhaltsübersicht
1.
2.
3.
4.
5.
Motivation
Spec Sharp
Assertions bei Spec Sharp
Static Verifier
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
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
.NET Plattform
.NET Sprachen
 C++, C#, Spec#, Visual Basic,…
 Verwenden das .NET Framework
 Werden von entsprechendem
Sprachcompiler in die Zwischensparche
kompiliert
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)
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# Beispiel
Liefert diese Funktion
ein sicheres
Ergebnis?
//Code in C#
int termin;
public void newTermin(int day)
{
termin = day;
}
C# Beispiel
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# Beispiel
//Code in C#
int termin;
public void newTermin(int day)
{
termin = day;
}
Inhaltsübersicht
1.
2.
3.
4.
5.
Motivation
Spec Sharp
Assertions bei Spec Sharp
Static Verifier
Fazit
3. Assertions
Java
Java Modeling Language
Reference types
Vorbedingungen
Nachbedingungen
Invarianten
…
Assertions
Java
C#
Java Modeling Language
Reference types
Vorbedingungen
Nachbedingungen
Invarianten
…
Assertions
Erweiterung
von C# um
Spezifikationen
Java
Java Modeling Language
C#
Spec#
Reference types
Reference types
Vorbedingungen
Vorbedingungen
Nachbedingungen
Nachbedingungen
Invarianten
Invarianten
…
…
Runtime Verifier
Zur Kompilierzeit - Umwandlung aller Vor-,
Nachbedingungen, Invarianten Annahmen
usw. in „inline“ Code
 Zur Laufzeit – Auslösung von Exceptions
bei den verletzten Bedingungen

Assertions
C#
Spec#
Reference types
Vorbedingungen
Nachbedingungen
Invarianten
…
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;
private string! state2 = „ok";

// in Spec#
// in Spec#
Zwei Strings, einer mit ‚!’ Zeichen.
kann ‚null’ sein
 state2 kann aber nicht ‚null‘ sein
 state1
Vorbedingungen
C#
Spec#
Reference types
Non-null Typen
Vorbedingungen
Requires
Nachbedingungen
Invarianten
…
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;
}
Nachbedingungen
C#
Spec#
Reference types
Non-null Typen
Vorbedingungen
Requires
Nachbedingungen
Ensures
Invarianten
…
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 Beispiel
C#
Spec#
Reference types
Non-null Typen
Vorbedingungen
Requires
Nachbedingungen
Ensures
Invarianten
Objekt Invarianten
…
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.
2.
3.
4.
5.
Motivation
Spec Sharp
Assertions bei Spec Sharp
Static Verifier
Fazit
4. Static Verifier
Spec# (annotated C#)
Spec# Compiler
Sprachneutralse Format
Translator
Boogie PL Programm
Verification Condition Generator
Formulas
Automatic Theorem Prover
Boogie Procedural
Language
Static Verifier
Spec# (annotiertes C#)
Produzierung des
ausführbaren
Codes
Spec# Compiler
Translator
Verification Condition Generator
Automatic Theorem Prover
Boogie Procedural
Language
Static Verifier
Spec# (annotiertes C#)
Umwandelung in
ein sprachneutrales
Format
Spec# Compiler
Sprachneutralse Format
Translator
Verification Condition Generator
Automatic Theorem Prover
Boogie Procedural
Language
Static Verifier
Spec# (annotiertes C#)
Generierung eines
Boogie PL
Programm aus Spec#
Spec# Compiler
Sprachneutralse Format
Translator
Boogie PL Programm
Verification Condition Generator
Automatic Theorem Prover
Boogie Procedural
Language
Static Verifier
Spec# (annotiertes C#)
Einfache Sprache mit
Prozeduren
Spec# Compiler
Sprachneutralse Format
Translator
Boogie PL Programm
Verification Condition Generator
Automatic Theorem Prover
Boogie Procedural
Language
Static Verifier
Spec# (annotiertes C#)
Umwandlung von
Boogie PL Code in
logische Ausdrücke (In
Formeln)
Spec# Compiler
Sprachneutralse Format
Translator
Boogie PL Programm
Verification Condition Generator
Formulas
Automatic Theorem Prover
Boogie Procedural
Language
Static Verifier
Spec# (annotiertes C#)
Überprüfung und
Bewies von
Korrektheit der
Ausdrücken
Spec# Compiler
Sprachneutralse Format
Translator
Boogie PL Programm
Verification Condition Generator
Formulas
Automatic Theorem Prover
Boogie Procedural
Language
Beispiel: Spec# => Boogie PL
Spec#:
if (Bedingung) S else T
BoogiePL:
Then
Zweig
assume Bedingung;
S
assume !Bedingung;
T
Else
Zweig
Boogie PL: Code

Unstrukturiertes Code
Passive ::= assume Bedingung, S| assume
!Bedingung, T;
S ::= …;
T ::= …;
Bedingung ::= var id : Type;
Type ::= bool;
Screenshot
Falsche
Eingabe
Vorbedingung
wird nicht erfüllt
Kurze
Fehlererklärung
Inhaltsübersicht
1.
2.
3.
4.
5.
Motivation
Spec Sharp
Assertions bei Spec Sharp
Static Verifier
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!
Herunterladen