Programowanie kontraktowe w Javie



Podobne dokumenty
Wprowadzenie do Behaviordriven

JUnit TESTY JEDNOSTKOWE. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

REFERAT PRACY DYPLOMOWEJ

METODY PROGRAMOWANIA

Klasy abstrakcyjne i interfejsy

Programowanie obiektowe

Specyfikacje w praktyce na przykładzie JML-a. Sesja I

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Programowanie aspektowe na przykładzie AspectJ JUG Poznań, Jacek Pospychała

Specyfikacje formalne

Aplikacje w środowisku Java

Techniki efektywnego testowania kodu dla programistów Java (Spock

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca Norbert Potocki db4o

Enkapsulacja, dziedziczenie, polimorfizm

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Testowanie II. Cel zajęć. Pokrycie kodu

Behavior Driven Development (BDD)

Platformy Technologiczne

Dokumentacja techniczna API systemu SimPay.pl

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Projektowanie obiektowe oprogramowania Testowanie oprogramowania Wykład 13 Wiktor Zychla 2014

Zaawansowane programowanie w języku C++

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Technologie i usługi internetowe cz. 2

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Klasy abstrakcyjne, interfejsy i polimorfizm

Dokument Detaliczny Projektu

Program szkolenia: Test Driven Development (TDD) using Spock or JUnit 5

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

Programowanie obiektowe

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Programowanie obiektowe

Programowanie obiektowe - 1.

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

Programowanie Zespołowe

Multimedia JAVA. Historia

Informatyka I. Dziedziczenie. Nadpisanie metod. Klasy abstrakcyjne. Wskaźnik this. Metody i pola statyczne. dr inż. Andrzej Czerepicki

Tworzenie aplikacji w języku Java

Scala - programowanie obiektowo-funkcyjne

Michał Olejnik. 22 grudnia 2009

Słowa kluczowe jak góry lodowe

JAX-RS czyli REST w Javie. Adam Kędziora

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wstęp do programowania obiektowego. Wykład 2

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

TESTOWANIE OPROGRAMOWANIA

Co jeszcze mogą nam dać adnotacje? Adam Warski

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Języki i metody programowania Java. Wykład 2 (część 2)

TEMAT : KLASY DZIEDZICZENIE

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Programowanie za pomocą kontraktów. Design by Contract

Programowanie poprzez testy z wykorzystaniem JUnit

Rozdział 4 KLASY, OBIEKTY, METODY

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Programowanie obiektowe Object programming. Elektrotechnika II stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny)

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

UML a kod. C++, Java i C#

Początki Javy. dr Anna Łazińska, WMiI UŁ Podstawy języka Java 1 / 8

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017

Programowanie obiektowe

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Szablony funkcji i szablony klas

Program szkolenia: Receptury testowania automatycznego - problemy, strategie, taktyki, techniki, narzędzia

Zaawansowane programowanie obiektowe - wykład 5

Języki i techniki programowania Ćwiczenia 2

Całościowe podejście do testowania automatycznego dla programistów. /C#/PHP (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Wywoływanie metod zdalnych

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Efekty uboczne błędów

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Czym są właściwości. Poprawne projektowanie klas

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Sexy unit testy. czyli o kilku praktykach w testach jednostkowych

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Wzorce projektowe i refaktoryzacja

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Programowanie obiektowe

Języki i techniki programowania Ćwiczenia 4 Wzorce

Zwinna współpraca programistów i testerów z wykorzystaniem BDD i. by Example (JBehave/Spock/SpecFlow)

Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne

Programowanie w Javie nazwa przedmiotu SYLABUS A. Informacje ogólne

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Dokumentacja do API Javy.

Transkrypt:

20 maja 2010

Spis treści 1 Programowanie kontraktowe Geneza Założenia Kontrakty w języku Eiffel 2 Definiowanie specyfikacji Weryfikacja poprawności aplikacji 3 Wykorzystanie założeń kontraktów 4 Asercje Narzędzia wspierające programowanie kontraktowe w Javie 5 6

Cele prezentacji 1 Przedstawienie koncepcji programowania kontraktowego 2 Poznanie narzędzi do CDD w javie 3 Przykład wykorzystania kontraktów

Kontrakt Programowanie kontraktowe Geneza Założenia Kontrakty w języku Eiffel Kontrakt Umowa między dwiema stronami: kupującym i sprzedającym dotycząca dostarczenia przez sprzedającego określonego dobra kupującemu w zamian za zatwierdzoną rekompensatę. Zawartość kontraktu Opis sprawy Warunki akceptacji Zasady zachowania kontraktu Warunki zerwania kontraktu

Wzmianki Programowanie kontraktowe Geneza Założenia Kontrakty w języku Eiffel Pierwsze wzmianki o programowaniu kontraktowym już w 1986 roku Bertrand Meyer - twórca języka Eiffel i propagator Design by Contract Contract Driven Development, Design by Contract, Contract Programming

Kontrakt w programowaniu Geneza Założenia Kontrakty w języku Eiffel Przedstawienie warunków specyfikacji oprogramowania w postaci formalnie zdefiniowanych założeń działania aplikacji. Określanie już na wstępie warunków w jakich dana część kodu może być używana a w jakich nie. Zapewnienie spełniania podanych warunków przez metody w całym okresie tworzenia aplikacji.

Kontrakty w kodzie Geneza Założenia Kontrakty w języku Eiffel Co oznacza uzycie kontraktów przy pisaniu programu? Definiowanie formalnych znanych z OCLa warunków wejściowych, wyjściowych i inwariantów (niezmienników) dla metod programowych i klas je zawierających. Preconditions Postconditions Invariants

Kontrakty w języku Eiffel Geneza Założenia Kontrakty w języku Eiffel Eiffel językiem z natywnie zdefiniowanymi kontraktami Położenie dużego nacisku na definiowanie kontraktów jako nieodłącznych części kodu Instrukcje check, require, ensure jako odpowiednio inwarianty, pre i postconditions Inwarianty także dla warunków pętli (loop invariants)

Definiowanie specyfikacji Definiowanie specyfikacji Weryfikacja poprawności aplikacji Formalne zdefiniowanie założeń działania aplikacji Specyfikacja programowa ubrana w kontrakty What does it expect? What does it guarantee? What does it maintain? Problem? Wymaga wiedzy programisty o kontekście działania klasy

Definiowanie specyfikacji - Zasady Definiowanie specyfikacji Weryfikacja poprawności aplikacji Wazną zasadą łaczacą kontrakty z programowaniem obiektowym jest zasada dziedziczenia kontraktów. Klasa dziedzicząca kontrakt może: 1 Zachować lub zacieśnić warunki wejściowe metody 2 Zachować lub poszerzyć warunki wyjściowe metody 3 Zachować lub zacieśnić niezmienniki klasy require no more, promise no less

Weryfikacja poprawności aplikacji Definiowanie specyfikacji Weryfikacja poprawności aplikacji Jeden kontrakt opisuje wszystkie możliwe przypadki wykorzystania danej klasy. Może to być uznawane za pewną słabość praktyki, gdyż w przeciwieństwie do TDD nie pozwala na zagłębianie się w konkretne przypadki implementacji. Kontrakt jest jasno zdefiniowany i widoczny zarówno dla klienta jak i twórcy Aplikacje weryfikuje się tylko pod względem załozeń kontraktu

Zadania i benefity kienta i dostawcy Definiowanie specyfikacji Weryfikacja poprawności aplikacji Klient Nie musi sprawdzać wyjścia Kontrakt gwarantuje poprawność rezultatu Dba o zapewnienie poprawności danych wejściowych Dostawca Nie musi sprawdzać danych wejsciowych Kontrakt gwarantuje ich poprawność Zapewnia poprawny rezultat operacji

Kontrakt a test jednostkowy Wykorzystanie założeń kontraktów Kontrakt opisuje generalny przypadek testowy dla obejmowanej klasy Definiuje wartości wejściowe parametrów metod Służy jako wyrocznia opisująca warunki poprawności rezultatów metod

Wykorzystanie założeń kontraktów Wspomaganie praktyki testów jednostkowych Kontrakty jako pomocniczy element testowania jednostkowego Pomaga zdefiniować sensowne wartości wejściowe Określa kontekst wykorzystania klasy Ogranicza odpowiedzialność programisty - nie wychodzimy poza kontrakt Mozna na jego podstawie wyspecyfikować szczegółowe przypadki testowe

Asercje jako pseudokontrakty Asercje Narzędzia wspierające programowanie kontraktowe w Javie Jak działają Pozwalają testować założenia programu w samym kodzie Składają się z keywordu assert i wyrażenia logicznego definiującego warunek działania programu Mogą wywoływać metody Niespełnienie warunku wyrzuca AssertionError Wstępnie mogą być wykorzystane do imitacji pre- postconditions i inwariantów

Asercje - Przykład Programowanie kontraktowe Asercje Narzędzia wspierające programowanie kontraktowe w Javie Asercje bezpośrednio w kodzie // assert that the absolute value is >= 0 assert ( number >= 0 && number <= 10 ) : "bad number: " + number; Asercje w testach jednostkowych Assert.assertEquals(5, new Calc().add(2, 3));

Asercje - Problemy Asercje Narzędzia wspierające programowanie kontraktowe w Javie Wymagają pisania asercji w każdej metodzie Ograniczona możliwość kontroli Mogą zostać wyłączone (domyślnie wyłączone) Mimo wszystko stanowią dobry punkt wyjścia do implementacji kontraktów w Javie.

Narzędzia CDD w Javie Asercje Narzędzia wspierające programowanie kontraktowe w Javie Ułatwiają wprowadzenie w życie programowania kontraktowego w języku Java. Przykładowe narzędzia C4J contract4j icontract Każde z nich reprezentuje inne rozwiązanie definiowania kontraktów w kodzie programów języka Java.

C4J Programowanie kontraktowe Asercje Narzędzia wspierające programowanie kontraktowe w Javie Kontrakty jako klasy generyczne parametryzowane typem zakontraktowanej klasy Warunki pre, post i inwarianty jako metody z asercjami Enkapsulacja warunków kontraktu w tych metodach Dzięki parametryzacji klasy można odwoływać się do metod i pól zakontraktowanej klasy Wszystko pisane w standardowym kodzie Javy

C4J - Przykład Programowanie kontraktowe Asercje Narzędzia wspierające programowanie kontraktowe w Javie @ContractReference(contractClassName = "DummyContract") public class Dummy { protected List m_stuff = new LinkedList(); } public int additem(object item) { m_stuff.add(item); return m_stuff.size(); }

C4J - Przykład Programowanie kontraktowe Asercje Narzędzia wspierające programowanie kontraktowe w Javie public class DummyContract extends ContractBase<Dummy> { public DummyContract(Dummy target){ super(target); } public void classinvariant(){ assert m_target.m_stuff!= null; } public void pre_additem(object item) { super.setpreconditionvalue("list-size", m_target.m_stuff.size()); } public void post_additem(object item) { assert m_target.m_stuff.contains(item); int presize = super.getpreconditionvalue("list-size"); assert presize == m_target.m_stuff.size() - 1; assert m_target.m_stuff.size() == super.getreturnvalue(); } }

C4J Programowanie kontraktowe Asercje Narzędzia wspierające programowanie kontraktowe w Javie C4J - Wady i zalety: Odseparowanie kodu klasy od kontraktów Kontrakty pisane w kodzie Javy łatwa możliwość zmiany i odnajdywania błędów Możliwość wykorzystania mechanizmów Javy (np. dziedziczenia) na klasach kontraktów Dostępny plugin do eclipse Konieczność pisania dodatkowych linijek kodu

contract4j Programowanie kontraktowe Asercje Narzędzia wspierające programowanie kontraktowe w Javie Rozwiazanie odmienne od poprzedniego Biblioteka zawierająca warunki Pre, Post i Invarianty jako adnotacje klas i metod W adnotacji w Stringu pisze się warunki logiczne uzywając składni javy i paru słow kluczowych ($old, $result etc.) Wykorzystuje zdobycze programowania aspectowego (AspectJ) Aspekty przy akzdym wywołaniu metody lub odwolaniu się do pola sprawdzają warunki je opisujące

contract4j - Przykład Asercje Narzędzia wspierające programowanie kontraktowe w Javie @Contract interface BankAccount { @Post("$return >= 0"); float getbalance(); @Pre("amount >= 0") @Post("$this.balance == $old($this.balance)+amount && $return == $this.balance") float deposit(float amount); @Pre("amount >= 0 && $this.balance { amount >= 0") @Post("$this.balance == $old($this.balance)-amount && $return == $this.balance") float withdraw(float amount);... }

contract4j Programowanie kontraktowe Asercje Narzędzia wspierające programowanie kontraktowe w Javie contract4j - wady i zalety Proste i intuicyjne użycie Nie wymaga dużego nakładu pracy programisty Brak potrzeby uczenia się nowych technik pisania kodu Programista nie ma większej kontroli nad procesem sprawdzania kontraktów Konieczność podpinania pod projekt biblioteki aspektów W suchym Stringu ciężej można doszukać się błędów w opisie warunków

icontract Programowanie kontraktowe Asercje Narzędzia wspierające programowanie kontraktowe w Javie Podobne do contract4j Warunki zapisywane w dokumentacji klas i metod

icontract - Przykład Asercje Narzędzia wspierające programowanie kontraktowe w Javie /** * @inv!isempty() implies top()!= null // no null objects */ public interface Stack { /** * @pre o!= null * @post!isempty() * @post top() == o */ void push(object o); /** * @pre!isempty() * @post @return == top()@pre */ Object pop();... }

icontract Programowanie kontraktowe Asercje Narzędzia wspierające programowanie kontraktowe w Javie icontract - wady i zalety Proste w użyciu Pomaga w stworzeniu i utrzymaniu pełnej dokumentacji metod Wsparcie dla kwantyfikatorów logicznych Możliwość zdefiniowania licznych odseparowanych warunków dla tej samej metody lub pola Ciężko doszukać się w komentarzu błędów

Programowanie kontraktowe nie jest nowym podejsciem do tworzenia oprogramowania Pomaga w zapewnieniu spójności działania apliakcji z oczekiwaniami Ułatwia pracę i zmniejsza odpowiedzialność programisty Nie zastępuje testów jednostkowych ale je dopełnia

Źródła Programowanie kontraktowe Power of Design By Contract, http://www.eiffel.com/developers/design b y c ontract.htmlretokrame icontract: design by contract in java, http://www.javaworld.com/javaworld/jw-02-2001/jw-0216- cooltools.html C4J - CDD Java tool, http://c4j.sourceforge.net/ contract4j: Design by cotnract for Java, http://www.contract4j.org/contract4j

Przedstawienie uzycia bilbioteki contract4j jako narzedzia wspomagajacego wprowadzanie CDD w projekcie. Potrzebujemy: Eclipse IDE Aspect Development Tool for Eclipse www.eclipse.org/aspectj/ contract4j.jar www.contract4j.org/contract4j