FEN Kontraktbaseret Programmering Seminar 1 1 Kontraktbaseret programmering Baggrund: Testing can only show the presence of bugs, never their absence. - Edsger W. Dijkstra Studieordning: Underviser:Finn E. Nordbjerg, Hjemmeside: Faglig koordinator for EVU, Datalogisk Institut: Henrik Bærbak Christensen: Uddannelseskoordinator: Arne Nis Jensen: Metrolinie 14 i Paris London Light rail
FEN Kontraktbaseret Programmering Seminar 1 2 Kontraktbaseret programmering - seminar 1 I dette seminar introduceres: Specifikationer vha. prædikatslogik, algoritmenotationen Q, programudsagn og checklisten for løkker. Dags program: Introduktion, præsentation mv Specifikationer, notation Øvelser Frokost Opsamling på øvelser Programudsagn – loopinvarianter og checklisten for løkker Øvelser Opsamling på øvelser, Introduktion til JML.
FEN Kontraktbaseret Programmering Seminar 1 3 Mellem seminarer •Læs og arbejd med opgaver. •Afleveringsopgaver afleveres via mail i.pdf til •Projekter som java–source (txt) •Fristen er mandag morgen i studieuge n+1 for 1 <= n < 3. Frist for ”projekterne” fremgår af hjemmesiden. hjemmesiden •Spørgsmål via mail til alle på mail-listen. Alle må svare og kommentere. Jeg vil også prøve at svare.
FEN Kontraktbaseret Programmering Seminar 1 4 Kontraktbaseret programmering (fra et seminar afholdt af Michael Caspersen, Aarhus Universitet og og Ole Eriksen, Erhvervsakademi Sydvest) •Historisk overblik –1966 – 2010 •Kontrakter på forskellige niveauer –Modelniveau –Interfaceniveau –Klasseniveau –Subklasseniveau –Metodeniveau •Grundlæggende principper –”Separation of Concerns” –”Programming on Purpose”
FEN Kontraktbaseret Programmering Seminar 1 5 En analogi: Software i dag - byggeri i middelalderen: Byggeri i dag - Software i morgen: (Utopia?) Notre Dame i Paris (ca – 1250)
FEN Kontraktbaseret Programmering Seminar 1 6 Historisk overblik • –Teori og metodologi • –Abstrakte datatyper • –Specifikationssprog •1992- –Design by Contract •1998- –Component-Based Software (J2EE, COM,.NET,...) •Og i dag... –Værktøjer (JML,.NET Code Contracts). –Kontrakter og agile metoder. –Kontrakter og test-drevet udvikling. –Verifikation af indlejrede (realtids-) systemer.
FEN Kontraktbaseret Programmering Seminar 1 7 Teori og metodologi •1966, Peter Naur (1965) –Proof of Algorithms by General Snapshots •1967, Robert W. Floyd –Assigning Meanings to Programs •1969, C.A.R. Hoare –An Axiomatix Basis for Computer Programming •1976, E.W. Dijkstra (1974) –A Discipline of Programming •1978, D. Gries (ed.) –Programming Methodology – a collection of articles by members of IFIP WG2.3 •1981, D. Gries –The Science of Programming •1981- –Mange andre bøger med mere raffinerede tilgange
FEN Kontraktbaseret Programmering Seminar 1 8
FEN Kontraktbaseret Programmering Seminar 1 9 Teori for abstrakte datatyper •1972, C.A.R. Hoare –Proof of Correctness of Data Representation •1972, D. Parnas –Information Hiding •1974, B. Liskov –Programming with Abstract Data Types •1977, J. Guttag –Abstract Data Types and the Development of Data Structures
FEN Kontraktbaseret Programmering Seminar 1 10 Specifikationssprog, ~ •Modelorienterede sprog –VDM, Z •Algebraiske specifikationer –Larch (+ operationel) –OBJ, Clear •Procesmodeller –CSP, CCS •Andre –NUPRL, HOL, RAISE
FEN Kontraktbaseret Programmering Seminar 1 11 ”Design by Contract” •1988, B. Meyer –Object-Oriented Software Construction •1992, B. Meyer –Applying ”Design by Contract” •1992, B. Meyer –Eiffel: The Language •1995, S. Porat & P. Fertig –Class Assertions in C++ •1997, R. Plösch –Design by Contract for Python •1998, R. Kramer –iContract – The Java Design by Contract Tool •1999, M. Karaorman et al. –jContractor: A Reflective Java Library to Support Design by Contract •1999, J. Warmer & A. Kleppe –The Object Constraint Language •1999, Gary T. Leavens e. a. –Java Modelling Language – JML •>2000, forskellige: –HandShake –.NET Code Contract –Spec#.NET Forsknings- projekt – også via Eiffel
FEN Kontraktbaseret Programmering Seminar 1 12
FEN Kontraktbaseret Programmering Seminar 1 13 Komponentbaseret software 1998, C. Szyperski –Component Software – Beyond Object- Oriented Programming •2002, I. Crnkovic & M. Larsson (eds.) –Building Reliable Component-Based Software Systems •2002, A. Sjögren –A Method for Support for Design By Contract on the.NET Platform
FEN Kontraktbaseret Programmering Seminar 1 14 Kontrakter på forskellige niveauer •Modelniveau (UML-niveau) –relationer med begrænsninger •Interfaceniveau –funktionelle specifikationer (pre og post) og typeinvariant •Klasseniveau –klasseinvariant (typeinvariant og repræsentationsinvariant) •Subklasseniveau –extends, implements, ”behavioral subtyping” •Metodeniveau –programudsagn (specielt løkkeinvarianter)
FEN Kontraktbaseret Programmering Seminar 1 15 Udviklingsområder ( …) •Værktøjer: –Theorem provers –Model checkers –Abstract interpretation and reasoning systems •Parallelle og distribuerede systemer (funktionelle sprog).
FEN Kontraktbaseret Programmering Seminar 1 16 Programmeringsmetodologi E.W. Dijkstra •Programming on Purpose –systematik og teknik –ingen kaniner op af hatten •Separation of Concerns –faktorisering –(midlertidig) uafhængighed E.W. Dijkstra