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

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

Embed Size (px)

Citation preview

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

Spec# Proseminar “Assertions” im SS 2007

Uni PaderbornUni PaderbornAndreas MartensAndreas Martens

Betreuer: Dipl. Inform. Björn MetzlerBetreuer: Dipl. Inform. Björn Metzler

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

Inhaltsübersicht

1. Motivation

2. Spec Sharp

3. Assertions bei Spec Sharp

4. Static Verifier

5. Fazit

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

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

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

MotivationMotivation

Spec #

ist C# Erweiterung

hat einzigartige Architektur

enthält Spezifikationen

Ist schnell erlernbar

steigert Softwarequalität

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

Inhaltsübersicht

1. Motivation

2. Spec Sharp

3. Assertions bei Spec Sharp

4. Static Verifier

5. Fazit

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

2. Spec# System

Das Spec Sharp Programmiersystem besteht aus:

Programmiersprache Compiler statischem Programm „Beweiser“

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

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

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

.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

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

.NET Plattform.NET Plattform

.NET Sprachen C++, C#, Spec#, Visual Basic,… Verwenden das .NET Framework Werden von entsprechendem

Sprachcompiler in die Zwischensparche kompiliert

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

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)

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

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

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

C# BeispielC# Beispiel

//Code in C#int termin;public void newTermin(int day){

termin = day;}

Liefert diese Funktion ein sicheres Ergebnis?

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

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?

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

//Code in C#int termin;public void newTermin(int day){

termin = day;}

C# BeispielC# Beispiel

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

Inhaltsübersicht

1. Motivation

2. Spec Sharp

3. Assertions bei Spec Sharp

4. Static Verifier

5. Fazit

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

3. Assertions3. Assertions

Java

Java Modeling Language

Invarianten

Nachbedingungen

Vorbedingungen

Reference types

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

AssertionsAssertions

Java

Java Modeling Language

Invarianten

Nachbedingungen

Vorbedingungen

Reference types

C#

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

AssertionsAssertions

Java

Java Modeling Language

Invarianten

Nachbedingungen

Vorbedingungen

Reference types

C#

Spec#

Invarianten

Nachbedingungen

Vorbedingungen

Reference types

Erweiterung von C# um

Spezifikationen

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

Runtime Verifier

Zur Kompilierzeit - Umwandlung aller Vor-, Nachbedingungen, Invarianten Annahmen usw. in „inline“ Code

Zur Laufzeit – Auslösung von Exceptions bei den verletzten Bedingungen

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

AssertionsAssertions

C#

Spec#

Invarianten

Nachbedingungen

Vorbedingungen

Reference types Non-null Typen

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

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

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

VorbedingungenVorbedingungen

C#

Spec#

Invarianten

Nachbedingungen

Vorbedingungen

Reference types

Requires

Non-null Typen

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

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;

}

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

NachbedingungenNachbedingungen

C#

Spec#

Invarianten

Nachbedingungen

Vorbedingungen

Reference types

Ensures

Requires

Non-null Typen

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

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;}

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

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 ) {…}

}

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

Invarianten BeispielInvarianten Beispiel

C#

Spec#

Invarianten

Nachbedingungen

Vorbedingungen

Reference types

Objekt Invarianten

Ensures

Requires

Non-null Typen

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

Spec#: Objekt Invarianten

Definition in Klassen, vor Methoden Gültig im Körper der entsprechenden Objekten

Z.B. „invariant (7 > termintag);“

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

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

}

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

Inhaltsübersicht

1. Motivation

2. Spec Sharp

3. Assertions bei Spec Sharp

4. Static Verifier

5. Fazit

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

4. Static Verifier

Spec# Compiler

Translator

Verification Condition Generator

Automatic Theorem Prover

Spec# (annotated C#)

Boogie Procedural Language

Formulas

Sprachneutralse Format

Boogie PL Programm

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

Static Verifier

Spec# Compiler

Translator

Verification Condition Generator

Automatic Theorem Prover

Produzierung des ausführbaren

CodesSpec# (annotiertes C#)

Boogie Procedural Language

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

Static Verifier

Spec# Compiler

Translator

Verification Condition Generator

Automatic Theorem Prover

Boogie Procedural Language

Umwandelung in ein

sprachneutrales Format

Spec# (annotiertes C#)

Sprachneutralse Format

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

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

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

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

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

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

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

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

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

Beispiel: Spec# => Boogie PL

if (Bedingung) S else TSpec#:

assume Bedingung;S

assume !Bedingung;T

ThenZweig

ElseZweig

BoogiePL:

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

Boogie PL: Code

Unstrukturiertes Code

Passive ::= assume Bedingung, S| assume !Bedingung, T;

S ::= …;

T ::= …;

Bedingung ::= var id : Type;

Type ::= bool;

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

ScreenshotFalsche Eingabe

Vorbedingung wird nicht erfüllt

Kurze Fehlererklärung

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

Inhaltsübersicht

1. Motivation

2. Spec Sharp

3. Assertions bei Spec Sharp

4. Static Verifier

5. Fazit

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

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

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

Vielen Dank!