Kontrakt baserad design. Design by contract



Relevanta dokument
Återanvändning. Två mekanismer. Nedärvning av egenskaper (inheritance) Objekt komposition

Systemdesign fortsättningskurs

Design mönster. n n n n n n. Command Active object Template method Strategy Facade Mediator

Mönster. n n n n n n n n n n. Singleton Monostate Null object Factory Composite Observer Abstract server Adapter Bridge Proxy

Föreläsningar 7,8 sept 24, sept 26 v 39). delvis DD Chapter 6.

Borel-Cantellis sats och stora talens lag

Databaser - Design och programmering. Programutveckling. Programdesign, databasdesign. Kravspecifikation. ER-modellen. Begrepps-modellering

Mönster. n n n n n. Visitor Decorator Extension Object State Taskmaster

Databaser - Design och programmering. Databasdesign. Kravspecifikation. Begrepps-modellering. Design processen. ER-modellering

2. Konfidensintervall för skillnaden mellan två proportioner.

Kontraktsprogrammering

x 1 x 2 x 3 x 4 x 5 x 6 HL Z x x x

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

1. Test av anpassning.

Webprogrammering och databaser. Begrepps-modellering. Exempel: universitetsstudier Kravspec. ER-modellen. Exempel: kravspec forts:

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Universitetet: ER-diagram e-namn

F4. programmeringsteknik och Matlab

REGULJÄRA SPRÅK (8p + 6p) 1. DFA och reguljära uttryck (6 p) Problem. För följande NFA över alfabetet {0,1}:

Vikingen FutureLook. Delphi Finansanalys AB

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

Finansiell Statistik (GN, 7,5 hp,, HT 2008) Föreläsning 4 (del 1)

Parsningsalgoritmer. Parsningsalgoritmer: inledning. OH-serie 1: introduktion. Parsningalgoritmer I. Algoritmer. Vad är parsning? Vad är en algoritm?

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Föreläsning 10: Kombinatorik

Datastrukturer och algoritmer

Statistisk analys. Vilka slutsatser kan dras om populationen med resultatet i stickprovet som grund? Hur säkra uttalande kan göras om resultatet?

Anmärkning: I några böcker använder man följande beteckning ]a,b[, [a,b[ och ]a,b] för (a,b), [a,b) och (a,b].

Jag läser kursen på. Halvfart Helfart

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

SANNOLIKHETER. Exempel. ( Tärningskast) Vi har sex möjliga utfall 1, 2, 3, 4, 5 och 6. Därför är utfallsrummet Ω = {1, 2, 3, 4, 5,6}.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Mätbar vetskap om nuläget och tydliga målbilder om framtiden. Genomför en INDICATOR självvärdering och nulägesanalys inom tre veckor

Uppgifter 3: Talföljder och induktionsbevis

. Mängden av alla möjliga tillstånd E k kallas tillståndsrummet.

Analys av algoritmer. Beräkningsbar/hanterbar. Stora Ordo. O(definition) Datastrukturer och algoritmer. Varför analysera algoritmer?

Universitetet: ER-diagram e-namn

Armin Halilovic: EXTRA ÖVNINGAR

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

Hambley avsnitt 12.7 (även 7.3 för den som vill läsa lite mer om grindar)

Grundläggande programmering DVG A08 & ISG A04. Allmän information. Å vem är jag då. Karlstads Universitet, Johan Öfverberg 1

1. BERÄKNING AV GRÄNSVÄRDEN ( då x 0 ) MED HJÄLP AV MACLAURINUTVECKLING. n x

Sannolikheten. met. A 3 = {2, 4, 6 }, 1 av 11

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Tommy Färnqvist, IDA, Linköpings universitet

Konsoliderad version av. Styrelsens för ackreditering och teknisk kontroll föreskrifter (STAFS 1993:18) om EEG-märkning av färdigförpackade varor

Inlämningsuppgift MiniPlotter

Z-Testet. Idè. Repetition normalfördelning. rdelning. Testvariabel z

Inledande programmering med C# (1DV402) Introduktion till C#

Subsystem. Klasser är ett bra sätt att organisera små system. Klasser är för små enheter för att organisera stora system

Extrem prestanda Nu utan BPA UPPLEV DEN FANTASTISKA STYRKAN HOS VÅRA BPA-FRIA PRODUKTER

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 11

Introduktion till statistik för statsvetare

TMS136: Dataanalys och statistik Tentamen med lösningar

Datorövning 2 Fördelningar inom säkerhetsanalys

INSTALLATIONSMANUAL COBRA 8800/8900 CAN

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

Handbok i materialstyrning - Del F Prognostisering

Tentamen 19 mars, 8:00 12:00, Q22, Q26

Föreläsning 6. Eleganta metoder Separation of concern Command-Query Separation Principle Kontraktbaserad design Assertions Självdokumenterande kod

Intervallskattning. c 2005 Eric Järpe Högskolan i Halmstad. Antag att vi har ett stickprov x 1,..., x n på X som vi vet är N(µ, σ) men vi vet ej

Egna funktioner. Vad är sin? sin är namnet på en av många inbyggda funktioner i Ada (och den återfinns i paketet Ada.Numerics.Elementary_Functions)

"if"-satsen. Inledande programmering med C# (1DV402)

Lösningar till tentamensskrivning i kompletteringskurs Linjär Algebra, SF1605, den 10 januari 2011,kl m(m + 1) =

Tentamen i Statistik, STA A13 Deltentamen 2, 5p 20 januari 2007, kl

Plattformshissar från Cibes Lift för alla byggnader

Översikt. Modern C++ Generisk programmering vs OOP. En titt i backspegeln... Generisk programmering. Objektorienterad programmering.

Överlagring, static, testning, formella metoder och undantag! Förelasning 13!! TDA540 Objektorienterad Programmering!

Applikationen kan endast användas av enskilda användare med förtroenderapportering.

Leica Lino. Noggranna, självavvägande punkt- och linjelasers

Digital signalbehandling Alternativa sätt att se på faltning

Enkät inför KlimatVardag

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Ca m 3 = ton. Masshantering Sven Brodin. Dessa mängder ska Stockholms Stad transportera varje månad.

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Duo HOME Duo OFFICE. Programmerings manual SE

Innehåll Grafräknaren och diskret matematik...1 Vad handlar diskret matematik om?...1 Permutationer och kombinationer...3 Något om heltalsräkning...

S0005M V18, Föreläsning 10

Föreläsning 6. Eleganta metoder Separation of concern Command-Query Separation Principle Kontraktbaserad design Självdokumenterande kod

Föreläsning 8. Arv. Arv (forts) Arv och abstrakta klasser

Induktion LCB Rekursion och induktion; enkla fall. Ersätter Grimaldi 4.1

Sannolikhetslära. c 2015 Eric Järpe Högskolan i Halmstad

JAVAUTVECKLING LEKTION 4

Kontextfri grammatik (CFG)

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Klassdeklaration. Metoddeklaration. Parameteröverföring

OOP Objekt-orienterad programmering

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Typkonvertering. Java versus C

Hambley avsnitt 12.7 (även 7.3 för den som vill läsa lite mer om grindar)

Lösningar för tenta 2 DAT043,

Kompletterande kurslitteratur om serier

Föreläsning 6. Använd beskrivande namn

ENDIMENSIONELL ANALYS B1 FÖRELÄSNING VI. Föreläsning VI. Mikael P. Sundqvist

Introduktion till etik (2)

Objektorienterad programutveckling, fk

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Transkript:

Kotrakt baserad desig Desig by cotract

Motiverig Objekt ka valige ite avädas på ett godtyckligt sätt Metoder ska aropas med vissa parametervärde I rätt ordig Svårt att veta hur ett objekt ka avädas uta att veta i detalj hur det fugerar Källkode ite alltid tillgäglig Också om de är tillgäglig så ka det krävas mycket tid för att förstå de tillräckligt bra

Kotrakt baserad desig Det fis alltså ett kotrakt mella varje objekt och dess avädare Kotraktet säger vad objektet gör och hur det ka avädas Avädare garaterar att objektet aropas på korrekt sätt Om objektet aväds på korrekt sätt så producerar det ett korrekt resultat Java modellig laguage (JML) är e implemetatio av kotrakt för Java Kotrakte är exekverbara Verktyg för testig och statisk verifierig

JML Formellt specifikatiosspråk för Java Aväds för att specificera beteedet för Java klasser Skriva er desig- och implemetatiosbeslut Består av assertios i Java källkode förvillkor (pre-coditios) eftervillkor (post-coditios) ivariater (ivariats)

JML (forts.) JML assertios sätts till som kommetar mella /*@...@*/ eller efter //@... Kompatibelt med valig Java Specifikatioer består av booleska uttryck i Java som utvidgats med ågra operatorer (\old, \forall, \result,...) Och ågra yckelord (requires, esures, pure, ivariat,...)

För och eftervillkor Exempel: specifikatio av metod för att beräka kvadratrot /*@requires x>=0; @esures Math.abs(\result*\result x)<tol; @*/ public static double sqrt( double x){...} requires specifierar vad metode kräver för att fugera korrekt esures specifierar vad metode lovar göra. Beräka kvadratrote med precisioe tol

För- och eftervillkor (forts.) För- och eftervillkore bildar ett kotrakt Kliete måste garatera förvillkoret, me ka ata att eftervillkoret håller Metode ka ata att förvillkoret håller, me måste då se till att garatera eftervillkoret Alltså... Om ett assertio villkor ite håller betyder det att det fis ett fel i programmet (eller i villkoret) Om förvillkoret ite håller är det fel i aropare Om eftervillkoret ite håller är det fel i metode som villkoret hör till Delig av asvar

Udatag (Exceptios) Alterativ kvadratrotsspecifikatio /*@ esures (\result*\result x)<tol; sigals (SqrtExceptio e) x<0; @*/ public static double sqrt(double x) throws SqrtExceptio Metode ka aropas med vilka värde på x som helst Ett udatag geereras om x är midre ä oll

Ivariater Ivariater (Klass ivariater) beskriver egeskaper som måste bevaras av alla metoder i klasse public class Accout{ private it balace; private Perso ower; /*@ivariat balace>=0 && ower!=ull; @*/... Ivariater är implicit ikluderade i alla för- och eftervillkor Ivariater måste bevaras också då udatag har geererats

Ivariater (forts.) Ivariater är bra för att dokumetera desigbeslut public class Directory{ private File[] files; /*@ivariat files!=ull && (\forall it i; 0<=i && i<files.legth; files[i]!=ull && files[i].getparet()==this); @*/ Gör beslute syliga och hjälper för att förstå kode

När ska ivariate hålla? Då förvillkoret för e metod håller, så ska metode efter att de blivit exekverad se till att ivariate håller Kostruktor för objektet ska se till att ivariate håller då de har exekverats färdigt

När är e metod korrekt? E metod är korrekt om: Me... { iv pre} body{ post iv} class A{ //@ivariat J; public void m1(){...} public void m2(){... m1(); //hur fukar det här?... }...

o_ull Måga ivariater, för- och eftervillkor hadlar om att refereser ite får vara lika med ull. Nyckelordet o_ull är avädbart för detta public class Directory{ private /*@ o_ull @*/ File[] files; void createsubdir(/*@ o_ull @*/ Strig ame){...} } Directory /*@ o_ull @*/ getparet(){...}

assigable Också möjligt att uttrycka vilka variabler som ka modifieras /*@ requires amout >=0; assigable balace; esure balace==\old(balace)-amout; @*/ public it debit(it amout){...} debit ka edast modifiera balace Stadard är assigable \everythig

pure E metod som ite modifierar variabler (är uta bieffekter) kallas pure public /*@ pure @*/ it getbalace(){...} /*@ pure; o_ull @*/ Directory getparet(){...} Dessa metoder har implicit assigable \othig De ka också avädas i specifikatioer //@ ivariat 0<=getBalace() && getbalace()<=max_balance;

assert Ett assert uttryck ger ett villkor som ska hålla åstas i kode if (i<=0 j<0){... }else if (j<5){ //@assert i>0 && 0<j && j<5;... }else { //@ assert i>0 && j>5;... }

assert (forts.) JML yckelordet assert är u också ett yckelord i Java (se 1.4) JML versioe är fortfarade bättre, till exempel for (=0;<a.legth;++){ if (a[]==ull) break; /*@assert (\forall it i=0; 0<=i &&i<; a[i]!=ull); @*/

JML verktyg Parsig och typcheckig Rutime assertio checkig Testa om assertio villkor håller uder exekverig jmlrac Exteded static checkig Automatisk program verifierig Bevisa att kotrakt aldrig bryts då programmet kompileras ESC/Java2 Stöder tyvärr bara Java upp till 1.4

Rutime assertio checkig jmlrac kompilator frå Iowa State Uiversity Översätter alla JML assertios till villkor som testas uder exekverig Lätt att aväda Bättre testig och bättre feedback, eftersom mera egeskaper testas E.g Ivariat violated i lie 8000 efter 1 miut istället för NullPoiterExceptio i lie 2000 efter 5 miuter Ett assertio villkor som ite håller ka också bero på att specifikatioe är felaktig jmrac ka testa alla JML uttryck, också sigal, \forall, etc

Exteded static checkig ESC/Java2 Helt automatiserad programverifierig Några kompromisser för att åstadkomma full automatio Försöker bevisa att ett program är korrekt Ite sud (soud): ESC/Java2 kaske ite hittar all fel som fis Ite komplett: ESC/Java2 ka vara om fel som ite existerar Me de hittar måga potetiella fel Bra på att bevisa att udatag ite geereras då programmet körs (Null-, ArrayIdexOutOfBouds-, ClassCastExceptios) och för att verifiera relativt ekla egeskaper

Rutime vs Static ESC/Java2 aalyserar specifikatioer uder kompilerig meda jmlrac gör det uder exekverig ESC/Java2 bevisar korrekthete, jmlrac bara testar de ESC/Java2 oberoede av hur bra testfall ma har jmlrac bara så bra på att hitta fel som testfalle ma har skapat ESC/Java2 ger större garatier för korrekthet ESC/Java2 kräver mera oggraa specifikatioer => mera jobb

Mera Ifo De här presetatioe baserar sej på Itroductio to JML av David Cok, Joe Kiiry och Eric Poll E itroduktio till JML fis som kursmaterial Verktyg och dokumetatio fis att ladda er: http://www.eecs.ucf.edu/~leaves/jml/ http://secure.ucd.ie/products/opesource/escjava2/