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



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

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

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

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

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

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

A Profile for Safety Critical Java

Linear Programming ١ C H A P T E R 2

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

.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

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

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

3C03 Concurrency: Model-based Design

Abstrakte datatyper C#-version

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

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

extreme Programming Kunders og udvikleres menneskerettigheder

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

8 Specifikation med Logiske Udtryk.

Revision af studieordninger

YDEEVNEDEKLARATION. Nr DA. appendiks B 1 - B 4

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

On the complexity of drawing trees nicely: corrigendum

Kursus navn: Indledende programmering Kursus nr

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

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

Basic statistics for experimental medical researchers

Black Jack --- Review. Spring 2012

YDEEVNEDEKLARATION. Nr DA

Oracle PL/SQL. Overview of PL/SQL

YDEEVNEDEKLARATION. Nr DA

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

Løsning af skyline-problemet

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.

YDEEVNEDEKLARATION. Nr DA. Anvendelsesområde/r Post-installeret befæstigelse i ikke-revnet beton, Se appendiks, specifikt appendiks B 1 - B 3

UNISONIC TECHNOLOGIES CO.,

A multimodel data assimilation framework for hydrology

YDEEVNEDEKLARATION. Nr DA

South Baileygate Retail Park Pontefract

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

YDEEVNEDEKLARATION. Nr DA

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

Objects First with Java A Practical Introduction Using BlueJ

Ø3.2: Modellering af en PC

Interaktionsudvikling

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

FIST-GPS3 I N S T A L L A T I O N S I N S T R U K S

Side 1 af 9. SEPA Direct Debit Betalingsaftaler Vejledning

Hvordan vælger jeg dokumentprofilen?

Financing and procurement models for light rails in a new financial landscape

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

YDEEVNEDEKLARATION. Nr DA

Anvendelse af BPT til manuel test

Skriftlig eksamen i Datalogi

Design til digitale kommunikationsplatforme-f2013

OXFORD. Botley Road. Key Details: Oxford has an extensive primary catchment of 494,000 people

YDEEVNEDEKLARATION. Nr DA

what is this all about? Introduction three-phase diode bridge rectifier input voltages input voltages, waveforms normalization of voltages voltages?

Shooting tethered med Canon EOS-D i Capture One Pro. Shooting tethered i Capture One Pro 6.4 & 7.0 på MAC OS-X & 10.8

Lovkrav vs. udvikling af sundhedsapps

Linguistic support for unit testing

Skriftlig Eksamen Kombinatorik, Sandsynlighed og Randomiserede Algoritmer (DM528)

KALK- OG TEGLVÆRKSFORENINGEN. CPR Sustainable Construction

CHAPTER 8: USING OBJECTS

Trolling Master Bornholm 2015

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

Udfordringer med indeklima ved energirenovering

Eksempel: Skat i år 2000

Small Autonomous Devices in civil Engineering. Uses and requirements. By Peter H. Møller Rambøll

Forelæsning Uge 2 Torsdag

Breaking Industrial Ciphers at a Whim MATE SOOS PRESENTATION AT HES 11

User Manual for LTC IGNOU

Strings and Sets: set complement, union, intersection, etc. set concatenation AB, power of set A n, A, A +

Installation Venligst bemærk, håndpumpen kun må monteres i lodret position.

Assignment #5 Toolbox Contract

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

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

Central Statistical Agency.

ATTRIBUTES MULTITHREADING DYNAMIC PROGRAMMING. Grundlæggende programmering Lektion 11

BRP Kursusintroduktion og Java-oversigt

Spørgsmål/svar (anonymiseret) Questions/answers (anonymised)

Brug af Educational IT i undervisningen: PollEverywhere. Associate Professor Carsten Bergenholtz

OCD DTU. Screening of aluminium in the offshore industry. Screening. DOC. NO. dokument 1 March 2007

SEPA Direct Debit. Mandat Vejledning Nets Lautrupbjerg 10 DK-2750 Ballerup

Vina Nguyen HSSP July 13, 2008

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

Patentering af software

Byg din informationsarkitektur ud fra en velafprøvet forståelsesramme The Open Group Architecture Framework (TOGAF)

Listen Mr Oxford Don, Additional Work

Particle-based T-Spline Level Set Evolution for 3D Object Reconstruction with Range and Volume Constraints

Sikkerhedsvejledning

ArbejsskadeAnmeldelse

Reexam questions in Statistics and Evidence-based medicine, august sem. Medis/Medicin, Modul 2.4.

Recollections about the Development of Pascal. Niklaus Wirth ACM, 1993

Engineering of Chemical Register Machines

Velkommen til IFF QA erfa møde d. 15. marts Erfaringer med miljømonitorering og tolkning af nyt anneks 1.

Generalized Probit Model in Design of Dose Finding Experiments. Yuehui Wu Valerii V. Fedorov RSU, GlaxoSmithKline, US

Skriftlig Eksamen Automatteori og Beregnelighed (DM17)

Hashing og hashtabeller

Transkript:

Design by Contract Design and Programming by Contract Anne Haxthausen ah@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 Anne Haxthausen, Spring 2010 p. 1 Prædikater 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 3 Brug af assertions ved design og programmering. Det generelle begreb Design by contract. Design by contract for Java. Et prædikat (assertion) er en formel, hvis sandhedsværdi afhænger af tilstanden (variablernes værdier). Eks.: Prædikatet "x delelig med 3", hvor x N, er sand for de tilstande hvor x = 0,x = 3,x = 6,. Prædikaterne kan udtrykkes: i naturligt sprog, i sædvanlig matematisk notation, som boolske udtryk i et programmeringssprog, eller sætninger i et specielt dedikeret sprog (f.eks. OCL for UML, og JML for Java) 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 2 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 4

Design by Contract: pre- og postbetingelser For hver operation/metode skrives en kontrakt bestående af to prædikater: en pre-betingelse og en post-betingelse Eksempel: Square root operation sqrt med input x og output y. Pre-betingelse: x 0. Post-betingelse: y y = x. Ideelt set skrives kontrakten før implementeringen. Kan efter implementeringen evt. dokumenteres i programmet, checkes eller bevises overholdt. Eksempel Kontrakt for addkgs: Pre-betingelse: kgs >= 0. Post-betingelse: (weight == \old(weight) + kgs). \old(weight) angiver weight i pre-tilstanden. 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 5 Design by Contract: pre- og postbetingelser 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 7 Dokumentation af pre- og postbetingelser Pre-betingelsen angiver, hvornår metoden må benyttes, dvs. noget, der skal gælde lige før metode-kaldet kan referere til input og tilstanden lige før metode-kaldet skal overholdes af "klient-programmer" Post-betingelsen angiver noget, der skal gælde lige efter metode-kaldet kan referere til input, output og tilstanden lige før og efter metode-kaldet skal garanteres af "leverandør-programmet" (metode-implementeringen), hvis klienten holder sin del Bemærk: Post-betingelsen beskriver hvad metode-kaldet resulterer i, ikke hvordan det algoritmisk opnås. 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 6 Muligheder for dokumentation af pre- og postbetingelser i leverandør-programmer: Som kommentarer. Som assertions for sprog (f.eks. Java), der tilbyder det. Nogle programmeringssprog (f.eks. Eiffel og Spec#) har native support, dvs. specielt dedikerede sprogkonstruktioner til pre- og postbetingelser. Nogle programmeringssprog (f.eks. Java) har third-party support f.eks. i form af syntaksudvidelser, der preprocesseres til assertions i sproget selv (f.eks. JML for Java). De tre sidste former giver mulighed for ved kørsel af et klient-program at checke om kontrakten overholdes af de to parter. Hoare-logik (se separat foil-set) kan bruges til at bevise, at leverandør-programmet altid overholder sin del af kontrakten. 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 8

Java Assert Statements Design by Contract: Klasse-invarianter Syntaks: assert <boolean-expression>; Eksempel: assert (x >= 0); Effekt: Ved normal programudførelse med java: Ingen. Ved programudførelse med java -ea: boolean-expression vil blive evalueret. Hvis resultatet er true, fortsætter programmet sin udførelse. Hvis resultatet er false, vil en AssertionError exception blive kastet. Brug: F.eks. til at checke invarianter, pre- og post-betingelser under udviklingsfasen. Assertions kan evt. undertrykkes af effektivitetsgrunde i det færdige produkt. En klasse-invariant er et prædikat på tilstanden for instanser af klassen. Denne invariant skal være opfyldt før og efter enhvert metode-kald på instanser af klassen. Eksempel: Klasse-invariant: weight >= 0 Dokumentation: samme muligheder som for pre- og postbetingelser. 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 9 Assertion checking af pre- og postbetingelser 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 11 Progr. by contract beskyt klasseinvariant Kontrakt for addkgs: Pre-betingelse: kgs >= 0. Post-betingelse: (weight == \old(weight) + kgs). int oldweight = weight; assert (kgs >= 0); //pre condition check assert (weight == oldweight + kgs); //post cond check En leverandør skal tilbyde metoder, der bevarer invarianten. Dvs. hvis pre-betingelsen og invarianten er sande før et metode-kald, så skal invarianten også være sand efter metode-kaldet. En klient må ikke kunne bryde invarianten. Eksempel: //invariant weigth >= 0 Hvordan kan vi checke, at addkgs bevarer invarianten weigth >= 0? 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 10 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 12

Assertion checking af klasseinvariant Java development using JML //invariant weigth >= 0 In the design: make assertions as JML annotations: pre conditions and post conditions for methods state invariants for classes assert (kgs >= 0); //pre condition check assert (weight >= 0); //invariant check assert (weight >= 0); //invariant check 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. 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 13 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 15 Java Modeling Language (JML) Invariants, pre and post conditions in JML JML is a specification language for Java programs 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 The released tools only work with the Java 1.4 subset, but a new release for Java 1.6 is on its way. private /*@ spec_public @*/ int weight; //@ invariant weight >= 0; //@ requires kgs >= 0; //@ ensures weight == \old(weight) + kgs; 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 14 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 16

Example of use of quantifiers in JML /*@ requires a!= null @ && (\forall int i; 0 < i && i < a.length; @ a[i-1] <= a[i]); @*/ int binarysearch(int[] a, int x) { Exercise: formulate a post condition JML Syntax (II) <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 JML Syntax (I) 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 17 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 Design by Contract Summary 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 19 Begreberne klasse invariant, pre-betingelse og post-betingelse. er prædikater "klient-programmer" må kun kalde en metode, når metodens pre-betingelser er opfyldt "leverandør-klasser" skal for hver af sine metoder garantere, at klasse-invarianter og post-betingelser er opfyldt efter hvert metode-kald, hvis pre-betingelser og invarianter var opfyldt lige før metodekaldet. For Java: Kan dokumenteres i programmer som kommentarer (evt. i JML syntaks). Kan checkes med JML tools, hvis de skrives i JML syntaks. Kan checkes med java -ea, hvis de skrives i assertions. 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 18 02161 Software Engineering 1 c Anne Haxthausen, Spring 2010 p. 20