Návrh podle kontraktu - klasická metodika a moderní nástroje Tomáš Pitner Masarykova univerzita v Brně Fakulta informatiky

Slides:



Advertisements
Podobné prezentace
Jan Syrovátka Jiří Hradský.  Výrobní program orientovaný na výrobu knih pro české i zahraniční nakladatele  Nabízí kompletní výrobu knihy od grafického.
Advertisements

Přednáška č. 3 Normalizace dat, Datová a funkční analýza
Realizace podpůrného mapového software pro autonomní robot Ondřej Švehla.
Pole, ukazatele a odkazy
SAS Jan Blaťák Laboratoř vyhledávání znalostí Fakulta informatiky Masarykova Univerzita, Brno
PJV151 Vnořené a vnitřní členy mohou být členy tříd a interfejsů. Je-li X obalem Y a Y je obalem Z, pak Z získá jméno X$Y$Z - kompilací vzniknou classy.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Přínosy metodik  Větší produktivita a kooperace týmů  Komunikační standard  Specializace projektových týmů  Nezávislost na konkrétních řešitelích 
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Tvorba software Konceptuální modely. Konceptuální model (vodopádový) Formulace problému Analýza Programování Testování Užívání.
C# - datové typy Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Podpora výuky a tvorby ER diagramu ve výukovém systému Barborka Petr Kopka VŠB – TU Ostrava, 2005.
Páté cvičení Dědičnost Interface Abstarktní třídy a metody
Návrh a realizace komunikačního protokolu mezi robotem a senzorickou soustavou , Brno Autor práce: Josef Kolaja Vedoucí práce: Ing. Jan Kolomazník.
13AMP 9. přednáška Ing. Martin Molhanec, CSc.. Co jsme se naučili naposled ADA ADA Java Java.
Informační strategie. řešíte otázku kde získat konkurenční výhodu hledáte jistotu při realizaci projektů ICT Nejste si jisti ekonomickou efektivností.
C# - Exceptions (výjimky)
Objektové programování
C# - funkce a procedury Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Rozšíření jednouživatelské verze IS na víceuživatelskou Prezentace Diplomové práce Autor : Libor Tomášek Spoluautoři : Pobucký M., Drábek L. Vedoucí :
Dynamická alokace, polymorfismus
Jedenácté cvičení Vlákna. Java cv112 Vlákna Operační systém Mutitasking – více úloh se v operačním programu vykonává „současně“ Java Multithreading -
Strategy. Strategy – „All-in-1“ na začátek class AStrategy { public: virtual void Algorithm()=0; protected: AStrategy(); }; class SpecificStrategy: public.
C# - Úvod Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka. Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance.
4. Lekce Dílčí procesy funkčního testování
Počítače a programování 1
Memento. Obnovení operačního systému ( Windows | Linux...) Všichni víme, co jsou transekce v databázi Memento – zálohování databáze.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
Algoritmizace a programování Objektově orientované programování - 16 Mgr. Josef Nožička IKT Algoritmizace a programování
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
IB111 Programování a algoritmizace
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Dokumentace informačního systému
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ FAKULTA STROJNÍ ÚSTAV PŘÍSTROJOVÉ A ŘÍDICÍ TECHNIKY ODBOR AUTOMATICKÉHO ŘÍZENÍ A INŽENÝRSKÉ INFORMATIKY Aplikace objektově.
C – cyklus while Mgr. Lenka Švancarová.
Metodika objektového přístupu při tvorbě překladačů. Marek Běhálek Informatika a aplikovaná matematika FEI VŠB-TU Ostrava.
JADEGen Nástroj pro generování chování z prostředí Agent Studio Implementace (ver0.1)
2005 Adobe Systems Incorporated. All Rights Reserved. 1 Inteligentní PDF formuláře Vladimír Střálka Territory Account Manager Adobe Řešení pro.
Netrvaloppa21 Vytvořte třídu Student pro reprezentaci struktury student na ZČU. Atributy třídy budou fakulta a osobniCislo. Název třídy: Student proměnné.
PJV031 Přetypování (casting) Objekty, atributy, lokální proměnné, parametry a návratové hodnoty metod mají definovaný, neměnný typ. Jsou dva druhy typů:
Programování POCSI. Programovani/POCSI2 Základní pojmy Akce - děj nad objekty, mající začátek a konec, a mající přesně definovaný účinek. Příkaz - popis.
FEL Komunikátor. Memory Leak program konsumuje operační paměť, kterou neumožňuje uvolnit o uvolnění paměti stará Garbage Collector ▫plně v režii Java.
Service layer. Service layer – úvod Problém  Vytvoření API aplikace  Odstínění bussiness logiky a transakčního chování od zbytku aplikace  Kam s aplikační.
David Osička OSI011 UML – přehled, notace VŠB - Technická univerzita Ostrava Fakulta elektrotechniky a Informatiky Katedra Informatiky.
Observer Martin Dráb Návrhové vzory, Co to je?  Definuje závislost 1:N mezi objekty  Závislé objekty jsou informovány o změně stavu  Konzistentní.
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
Pracovní skupina Standardy Ing. Martin ZEMAN předseda pracovní skupiny NSeZ – neveřejná prezentace Emauzy,
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Testování aplikací v Javě Petr Adámek IBA CZ, s.r.o. © 2010.
SOFTWAROVÁ PODPORA PRO VYTVÁŘENÍ FUZZY MODELŮ Knihovna fuzzy procedur Ing. Petr Želasko, VŠB-TU Ostrava.
Programování mikropočítačů Platforma Arduino
SOLID principy v OOP návrhu
Y36PJC Programování v jazyce C/C++
Y36PJC Programování v jazyce C/C++
Návrhový vzor Flyweight
Tradiční metodiky vývoje softwaru
TNPW1 JavaScript Ing. Jiří Štěpánek.
, Brno Autor práce: Bc. Tomáš Vencálek
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Tradiční metody vývoje softwaru
METODOLOGIE PROJEKTOVÁNÍ
Přednášky z distribuovaných systémů
C# přehled vlastností.
Decorator.
Monitor Object 1.
Composite “Spojuj a panuj”.
Transkript prezentace:

Návrh podle kontraktu - klasická metodika a moderní nástroje Tomáš Pitner Masarykova univerzita v Brně Fakulta informatiky

Osnova n Co je návrh podle kontaktu n Vznik a vývoj metodiky a nástrojů n Základní principy a podmínky n Dostupné nástroje a příklad použití n Srovnání s nástroji testování jednotek n Shrnutí, informační zdroje

Co je návrh podle kontaktu n Návrh podle kontraktu (Design by Contract, DbC) je delší dobu známý, ale stále nedoceněný princip tvorby spolehlivých programů. n Abstraktní specifikace chování komponent SW pomocí podmínek a n buďto nástroje na běhové ověřování jejich platnosti nebo n jejich formální důkaz

Co je „dobrý program“ n Požadavky na SW lze členit na funkční a mimofunkční. n K základním požadavkům patří: –korektnost (splnění požadavků, tj. specifikace programem) –robustnost (odolnost vůči nesplnění požadavků zvnějšku - uživatelem)

Vznik a vývoj návrhu podle kontraktu n Tony Hoare (1969) zavedl tzv. Hoareho kalkul na zachycení chování programu pomocí vstupních a výstupních podmínek. n Barbara Liskow v 70. letech vytvořila jazyk CLU, který je nativně podporuje. n Bertrand Meyer (ETH Zürich) zavedl metodiku DbC a použil ji v jazyce Eiffel

Základní princip návrhu podle kontraktu n „Smlouva“ mezi programem a jeho uživatelem (tím může být i jiný program): –jestliže uživatel dodrží vstupní podmínku –program pak dodrží výstupní podmínku n V objektovém prostředí lze podmínky zjemňovat, přidávat další.

Podmínky v kontraktu - vnější Vstupní podmínka ( precondition ) –tu musí splnit uživatel, resp. volající kód Výstupní podmínka ( postcondition ) –tu musí volaný kód, pokud je splněna vstupní podmínka

Podmínky v kontraktu - vnitřní Invariant objektu ( invariant ) –podmínka platící na objektu stále, přesněji mezi jednotlivými voláními metod objektů Invariant cyklu ( invariant ) –podmínka platící v daném místě cyklu stále Invariant cyklu ( variant ) –podmínka zaručující ukončení cyklu

Podmínky v OO prostředí n Podmínky definované až na třídách (implementacích) n Podmínky definované už na rozhraních –nástroje je pak uplatní i ve třídách implementujících tato rozhraní

Nástroje pro návrh podle kontraktu n Omezíme se na prostředí Java: –profesionálně používané –velmi rozšířené (na rozdíl od jazyka Eiffel...) –Java slouží i jako referenční jazyk

Nástroje pro návrh podle kontraktu - v Javě n Volně (zdarma) dostupné: –jass –iContract –JContract –Contract4J (Java 5) n Komerční: –JMSAssert TM

JASS - Java with ASSertions n Volně dostupný nástroj pro podporu DbC v Javě, tj. specifikaci a běhové hlídání: –vstupních a výstupních podmínek –invariantů objektů a cyklů, variantů cyklů

Příklad DbC - ADT zásobník Ukážeme použití jass při implementaci abstraktního datového typu zásobník (třída Stack ), využijeme: –require - vstupní podmínka –ensure - výstupní podmínka –invariant - invariant cyklu –invariant - invariant objektu

Podmínky require, ensure public Stack(int capacity) { /** require capacity > 0; **/ storage = new Object[capacity]; /** ensure [created_empty] isEmpty(); **/ } require - vstupní podmínka ensure - výstupní podmínka

Podmínka ensure changeonly public Stack push(Object o) { /** require [valid_object] o!=null; [not_full] !isFull(); **/ top++; storage[top] = o; return this; /** ensure changeonly{top,storage}; [nonempty_after_push] !isEmpty(); [increments_top] Old.top==top-1; **/ } n ensure changeonly{top,storage} –zajistí, že metoda změnila jen uvedené proměnné

V cyklu - invariant, variant public boolean contains(Object o) {... while (i<=top &&!storage[i].equals(o)) /** invariant 0 <= i && i <= top + 1; **/ /** variant top i **/ { i++; } return i <= top; } invariant - musí v tomto místě platit stále variant - hodnota výrazu se musí snižovat

Na objektu - invariant /** invariant [range] -1<=top && top<storage.length; [valid_content] storage.length == 0|| (forall i:{0.. top}#storage[i]!=null); [LIFO] isFull() || push("neco").pop().equals("neco"); **/ invariant - musí na objektu platit stále –zajímavost: ve výrazu je použit obecný kvantifikátor ( forall )

Fáze práce s jass n Předkompilace zdroje nástrojem jass: java -cp jass.jar;. jass.Jass Stack.jass n Kompilace výsledku pomocí javac: javac -classpath jass.jar;. Stack.java Spuštění třídy demotřídy StackDemo : java -cp jass.jar;. StackDemo

Testování jednotek n Dnes velmi populární - zejména v Javě n a to v souvislosti s metodikou „Extrémní programování“. n Umožňují prověřit chování jednotek programu (tříd, balíků) „zvnějšku“ - „blackbox testing“. n Doplňuje se tedy s DbC - ten hlídá korektnost „zevnitř“ - „whitebox testing“.

Testování jednotek - nástroj junit junit : javové prostředí pro testování jednotek, tj.: –psaní a spouštění testů jednotek v Javě n Volně (zdarma) dostupné na –

junit test zásobníku public class StackTest extends junit.framework.TestCase { public void setUp() {... } public void testEmptyAfterCreation() { assertTrue("Stack should be empty.", st.isEmpty()); } public void tearDown() {... }

Metody v testech junit setUp() : nastavení prostředí testu testNazevTestu() : –vlastní testovací metody tearDown() : úklid prostředí po testu

Test zásobníku - spuštění java -cp jass.jar;. jass.Jass Stack.jass javac -classpath junit.jar;jass.jar;. Stack.java StackTest.java java -cp junit.jar;jass.jar;. junit.swingui.TestRunner StackTest

Shrnutí: DbC + testy jednotek n Nesrovnatelně populárnější je testování jednotek - podporuje i řada IDE n Lze kombinovat s DbC n Ani jedno nezpůsobí zhoršení běhových vlastností (rychlost, náročnost) n... n Tak proč to nepoužívat...!?