Design by Contract Bertrand Meyer Design and Programming by Contract. Oversigt. Prædikater

Relaterede dokumenter
Design by Contract. Design and Programming by Contract. Oversigt. Prædikater

Opgaven fortsat. Opfølgning på Opgave 2 og Use Cases. Opgaven. Trin 1: Væsentlige begreber. Resultatliste: 100 bryst, herrer

Tabelbegrebet. Klassediagrammer (III) Oversigt. Anvendelse af Tabeller. Tabeller og qualified associations

Hvem er vi? Kursus Introduktion. Kursuslærerne. Agenda for i dag

Abstrakte datatyper C#-version

.NET 4.0 og C# 4.0. Denne artikel beskriver nogle af de nye features i.net 4.0 og C# 4.0. Den forudsætter et vist kendskab til.net og C#.

Kontraktbaseret Design. Anker Mørk Thomsen

Det er muligt at chekce følgende opg. i CodeJudge: og

Project Step 7. Behavioral modeling of a dual ported register set. 1/8/ L11 Project Step 5 Copyright Joanne DeGroat, ECE, OSU 1

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Tabeller (I) Tabeller

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Introduktion til datastrukturer. Philip Bille

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Introduktion til datastrukturer

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

b) Udvid din implementation af forme til at understøtte.equals. To objekter af samme form er ens hvis de har samme værdier i felterne.

DM507 Algoritmer og datastrukturer

Klasser og nedarvning

A Profile for Safety Critical Java

Aarhus Universitet, Science and Technology, Computer Science. Exam. Wednesday 27 June 2018, 9:00-11:00

IBM Network Station Manager. esuite 1.5 / NSM Integration. IBM Network Computer Division. tdc - 02/08/99 lotusnsm.prz Page 1

Øvelse 9. Klasser, objekter og sql-tabeller insert code here

ECE 551: Digital System * Design & Synthesis Lecture Set 5

Linear Programming ١ C H A P T E R 2

Privat-, statslig- eller regional institution m.v. Andet Added Bekaempelsesudfoerende: string No Label: Bekæmpelsesudførende

Bemærk, der er tale om ældre versioner af softwaren, men fremgangsmåden er uændret.

DANMARKS TEKNISKE UNIVERSITET

Black Jack --- Review. Spring 2012

Årsagen til fejl. Erkendelse af fejl. Håndtering af fejl.

3C03 Concurrency: Model-based Design

Software Construction 1. semester (SWC) januar 2014 Spørgsmål 1

Hvordan vælger jeg dokumentprofilen?

University of Copenhagen Faculty of Science Written Exam - 3. April Algebra 3

UNISONIC TECHNOLOGIES CO.,

Mandara. PebbleCreek. Tradition Series. 1,884 sq. ft robson.com. Exterior Design A. Exterior Design B.

SOFTWARE PROCESSES. Dorte, Ida, Janne, Nikolaj, Alexander og Erla

DATALOGI 0GB. Skriftlig eksamen tirsdag den 6. januar 2004

Løsning af skyline-problemet

University of Copenhagen Faculty of Science Written Exam April Algebra 3

Løsning af møntproblemet

ODIN-webservice ændringer release 2010 v2.0

Mandara. PebbleCreek. Tradition Series. 1,884 sq. ft robson.com. Exterior Design A. Exterior Design B.

Stakke, køer og lidt om hægtede lister - kapitel 16 og 17

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

Rekursion og dynamisk programmering

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer

Ugeseddel 4 1. marts - 8. marts

Software 1 with Java. Recitation No. 7 (Servlets, Inheritance)

Real-time programming safety in Java and Ada

DM507 Algoritmer og datastrukturer

Objects First with Java A Practical Introduction Using BlueJ

Assignment #5 Toolbox Contract

Forelæsning Uge 2 Torsdag

extreme Programming Kunders og udvikleres menneskerettigheder

DM507 Algoritmer og datastrukturer

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Sortering af information er en fundamental og central opgave.

Cookie-reglerne set fra myndighedsside Dansk Forum for IT-ret 5. november 2012

3 Algebraisk Specifikation af Abstrakte Datatyper.

Sortering. Eksempel: De n tal i sorteret orden

Stakke, køer og lidt om hægtede lister

F# - hvorfor, hvordan og til hvad? Rune Ibsen Jyske Bank

Sortering. Eksempel: De n tal i sorteret orden

Rename og redefine. Abstrakte klasser. Dynamisk binding.

Software Construction 1 semester (SWC) Spørgsmål 1

CHAPTER 8: USING OBJECTS

Online kursus: Programming with ANSI C

Databaseadgang fra Java

Terese B. Thomsen 1.semester Formidling, projektarbejde og webdesign ITU DMD d. 02/

User Manual for LTC IGNOU

PARALLELIZATION OF ATTILA SIMULATOR WITH OPENMP MIGUEL ÁNGEL MARTÍNEZ DEL AMOR MINIPROJECT OF TDT24 NTNU

Skriftlig eksamen i Datalogi

MSE PRESENTATION 2. Presented by Srunokshi.Kaniyur.Prema. Neelakantan Major Professor Dr. Torben Amtoft

Resource types R 1 1, R 2 2,..., R m CPU cycles, memory space, files, I/O devices Each resource type R i has W i instances.

Patentering af software

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Fejlbeskeder i SMDB. Business Rules Fejlbesked Kommentar. Validate Business Rules. Request- ValidateRequestRegist ration (Rules :1)

Test af It-komponent

Lektion 6. Grundlæggende programmering i VR

Bilag. Bilag 1 Traktaten om oprettelse af Det Europæiske Fællesskab - Artikel 81 1

Skriftlig eksamen i Datalogi

Side 1 af 9. SEPA Direct Debit Betalingsaftaler Vejledning

Skriftlig Eksamen Beregnelighed (DM517)

dsoftark E2007 Gruppe 14: Anders, Troels & Søren 15. november 2007 Rapport til a. 1 'TDD rytmen'

Java Klasse nedarvninger

A multimodel data assimilation framework for hydrology

INGENIØRHØJSKOLEN I ÅRHUS Elektro- og IKT-afdelingen. I3PRG3 + I3DTM3 + I3ISY1-3. semester

Skriftlig Eksamen Kombinatorik, Sandsynlighed og Randomiserede Algoritmer (DM528)

Træer. Datastrukturer & Algoritmer, Datalogi C Forelæsning 9/

Sortering af information er en fundamental og central opgave.

Søgetræer: Generel repræsentation af (sorterede) mængder og funktioner Databasesystemer...

Forelæsning Uge 6 Mandag

Digitaliseringsstyrelsen

Revision af studieordninger

29 Opsamling af Objekt-orienteret Programmering.

26 Programbeviser I. Noter. PS1 -- Programbeviser I. Bevis kontra 'check af assertions' i Eiffel. Betingelser og bevisregler.

Transkript:

Design by Contract Bertrand Meyer 1986 Design and Programming by Contract Michael R. Hansen & Anne Haxthausen mrh@imm.dtu.dk Informatics and Mathematical Modelling Technical University of Denmark Design by Contract er en teknik til at specificere software bruger prædikater (assertions) til dette : Hoare style pre-betingelser og post-betingelser for metoder/operationer klasse-invarianter Oversigt 02161 Software Engineering 1 c Michael R. Hansen and Anne Haxthausen, Spring 2008 p. 1 Prædikater 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 3 Brug af assertions ved design og programmering. Design by contract Java Modelling Language (JML) Et prædikat (assertion) er en formel, hvis sandhedsværdi afhænger af tilstanden. Eks.: Prædikatet "x delelig med 3", hvor x N, er sand for de tilstande hvor x = 0,x = 3,x = 6,... 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 2 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 4

Design by Contract: pre- og postbetingelser Design by Contract: Klasse-invarianter For en operation/metode beskrives kontrakten ved to prædikater: en pre-betingelse, der angiver forudsætningen for at benytte operationen, og en post-betingelse, der karakteriserer resultatet. Eksempel: Square root, med input x R og output y R. Pre-betingelse: x 0. Post-betingelse: y y = x. Bemærk: Post-betingelsen beskriver hvad ikke hvordan. En klasse-invariant er et prædikat på tilstanden for instanser af klassen. Denne invariant skal være opfyldt før og efter enhver operation på instanser af klassen. Eksempler: En mængde kan repræsenteres som en liste uden gentagelser. Operationer, som indsæt og union, skal implementeres så denne invariant overholdes. Elementer i resultatliste skal være sorteret mht. tiderne med hurtigste tid først. Operationer på resultatlister skal respektere denne invariant. 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 5 Design by Contract: pre- og postbetingelser 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 7 Progr. by contract defensiv programmering Pre-betingelser og post-betingelser for operationer bør dokumenteres, f.eks. som kommentarer i koden (for Java: JML annotations). En pre-betingelse er den del af kontrakten som "klient-programmer" skal overholde. En post-betingelse er den del af kontrakten som "leverandør-programmet" garanterer, hvis klienten holder sin del. Den egenskabsbaserede prædikat-form støtter et højt abstraktionsniveau (beskriver hvad ikke hvordan). En leverandør skal implementere en operation så post-betingelsen er opfyldt, når pre-betingelsen er opfyldt. Leverandøren kan ignorere brud på pre-betingelsen, men kan også ved defensiv programmering tage højde for brud. I Java kan dette med fordel gøres ved brug af assert-sætningen. Eks.: operation der giver 1 te element i ikke-tomt array A: public static int first(int[] A){ assert(a.length > 0); return A[0]; // pre-betingelse Brug assertions under udviklingsfasen. Assertions kan evt. undertrykkes af effektivitetsgrunde i det færdige produkt. 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 6 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 8

Progr. by contract beskyt klasseinvariant En leverandør skal tilbyde operationer der bevarer invarianten. En klient må ikke kunne bryde invarianten. Eksempel: Stak med konkret repræsentation Array A[1..N] og et (synligt) index top, til første toppen af stakken Operationer: push(x) : x tilføres stakken pop : topelementet returneres og fjernes fra (ikke tom) stakken empty : den tomme stak tom? : test på om stakken er tom Klasseinvariant: top er antal elementer i stakken. Problem: Datastrukturen bryder sammen ved misbrug af top. Løsning: Indkapsling, f.eks. ved brug af abstrakte datatyper Konkrete og abstrakte datatyper 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 9 En datatype er en mængde af værdier og en samling operationer på disse. F.eks. den konkrete stak. En abstrakt datatype er en mængde af værdier og en samling operationer på disse. Værdiernes repræsentation er ikke synlig for klienter. (I Java: gør felter private. ) Ofte beskrives en abstrakt datatype ved en signatur (interface) og operationernes egenskaber. Eksempel: Stak med elementer af type A: empty: () -> Stak push: A * Stak -> Stak pop : Stak -> A isempty: Stak -> Boolean og et eksempel på sådan en egenskab kunne være: pop(push(x,s)) = x 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 10 Abstrakte datatyper og programdesign Datastrukturer skal indkapsles i klasserne så invarianter ikke brydes. Vælg datatyper hensigtsmæssigt, så brugen af ekstra invarianter begrænses så meget som muligt. Letter arbejder for både klient og leverandør. Vælg type så højt oppe i typehierarkiet som muligt. Dette letter arbejdet ved ændring i valg af konkrete datatyper. Abstrakte datatyper understøtter opdeling af systemet i afgrænsede velforståede komponenter, og et et redskab til at opnå et modulært programdesign. Java Modeling Language (JML) JML is a specification language for Java programs 02161 Software Engineering 1 c Michael R. Hansen, Spring 2008 p. 11 follows the design by contract paradigm using Hoare style pre- and postconditions and invariants the specifications are added as Java annotation comments to the final Java program which hence can be compiled with any Java compiler JML verification tools: jmlc: an assertion checking compiler which converts JML annotations into runtime assertions... 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 12

Java development using JML In the design: make assertions as JML annotations: pre conditions and post conditions for methods state invariants for classes Implement the classes. Compile them with jmlc. Run test cases. If an assertion is broaken, it results in a runtime error. Checks can be turned off for production use of the software. Example of pre and post conditions in JML public class Person { private /*@ spec_public @*/ int weight; //@ invariant weight >= 0; //@ requires kgs >= 0; //@ assignable weight; //@ ensures weight == \old(weight) + kgs; public void addkgs(int kgs){ weight = weight + kgs; Example of invariant in JML 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 13 //@ ensures \result == weight; public /*@ pure @*/int getweight(){ return weight; 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 15 Example of use of quantifiers in JML public class Person { private /*@ spec_public @*/ int weight; //@ invariant weight >= 0;... /*@ requires a!= null @ && (\forall int i; 0 < i && i < a.length; @ a[i-1] <= a[i]); @*/ int binarysearch(int[] a, int x) {... 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 14 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 16

JML Syntax (I) JML specifications are added to Java code as annotations in comments: //@ <JML specification> <JML specifications>: requires <JML assertion> ensures <JML assertion> invariant <JML assertion>... % pre condition % post condition JML Syntax (III) New modifiers in JML: spec_public: to indicate that it field may be referred to in JML assertions pure: to indicate that method does not change the state assignable x: to indicate that a method is allowed to assign to the field x. JML Syntax (II) 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 17 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 19 <JML assertion> = <Java expression>, but: must not have side effects (not using = neither directly nor indirectly, only call pure methods) can use extensions to Java: Syntax \result a ==> b a <== b a <==> b \old(e) (\forall T x; P; Q) (\exists T x; P; Q)...... meaning result of method call a implies b a implied by b a if and only if b value of E in pre-state x : T P = Q x : T P Q 02161 Software Engineering 1 c Anne Haxthausen, Spring 2008 p. 18