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

Preview:

Citation preview

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!

Recommended