Od wymagań do Javy w mgnieniu oka: modelowanie oprogramowania w praktyce

Podobne dokumenty
Od wymagań do Javy w mgnieniu oka

WZORCE LOGIKI APLIKACJI Reużywalne składniki wymagań

Programowanie obiektowe

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

Wzorce logiki dziedziny

Diagramy maszyn stanowych, wzorce projektowe Wykład 5 część 1

Kontrola spójności modeli UML za pomocą modelu. Stanisław Jerzy Niepostyn, Ilona Bluemke Instytut Informatyki, Politechnika Warszawska

Narzędzia CASE dla.net. Łukasz Popiel

MVC w praktyce tworzymy system artykułów. cz. 1

Programowanie obiektowe

ZARZĄDZANIE WYMAGANIAMI ARCHITEKTONICZNYMI

Laboratorium 8 Diagramy aktywności

Programowanie obiektowe

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 7 Modelowanie klas i stanów, generacja kodu. Materiały dla studentów

Cel wykładu. Literatura. Wyższa Szkoła Menedżerska w Legnicy. Modelowanie wymagań Wykład 2

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Wykład 1 Inżynieria Oprogramowania

Konfiguracja modelowania w procesie wytwarzania oprogramowania

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP

1. WYMAGANIA WSTĘPNE W ZAKRESIE WIEDZY, UMIEJĘTNOŚCI I INNYCH KOMPETENCJI

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Programowanie obiektowe

Analiza biznesowa a metody agile owe

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Karta opisu przedmiotu Zaawansowane techniki analizy systemowej oparte o modelowanie warsztaty

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Programowanie obiektowe zastosowanie języka Java SE

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

Laboratorium Programowania Kart Elektronicznych

Gdzie jest moja tabela?

I.Wojnicki, Tech.Inter.

Automatyczne generowanie testów z modeli. Bogdan Bereza Automatyczne generowanie testów z modeli

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 2

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Diagram stanów Laboratorium 9

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

Receptury - niezbędnik projektanta i architekta

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

DSL w środowisku Eclipse. Grzegorz Białek Architekt techniczny, Sygnity S.A.

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6

STANOWISKA JĘZYKOWE DO BUDOWY SERWISÓW INFORMACYJNYCH

Produktywne tworzenie aplikacji webowych z wykorzystaniem Groovy i

INŻYNIERIA OPROGRAMOWANIA

Jarosław Żeliński analityk biznesowy, projektant systemów

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

PRZEWODNIK PO PRZEDMIOCIE

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 2 Ćwiczenia w narzędziu CASE diagram klas. Materiały dla nauczyciela

Android, wprowadzenie do SDK

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

Analiza i projektowanie aplikacji Java

Ewolucyjna architektura

Diagramy czynności Na podstawie UML 2.0 Tutorial

Projekt architektury systemów informatycznych Uniwersytetu Warszawskiego w oparciu o metodykę TOGAF. Tomasz Turski

Programowanie Obiektowe GUI

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Programowanie w języku Java WYKŁAD

Metryki oprogramowania. Marian Jureczko

Praktyczne aspekty stosowania metody punktów funkcyjnych COSMIC. Jarosław Świerczek

WICKET VS. DJANGO. Leszek Gawron vs. Michał Leszczyński

MODELOWANIE OBIEKTOWE

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Rok akademicki: 2012/2013 Kod: ZIE s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

Scala - programowanie obiektowo-funkcyjne

Wymiana opisu procesów biznesowych pomiędzy środowiskiem Eclipse i EMC Documentum

Metody dostępu do danych

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 5 Ćwiczenia w narzędziu CASE diagram przypadków uŝycia. Materiały dla nauczyciela

Aplikacje WWW - laboratorium

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

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

REQB POZIOM PODSTAWOWY PRZYKŁADOWY EGZAMIN

Krótka Historia. Co to jest NetBeans? Historia. NetBeans Platform NetBeans IDE NetBeans Mobility Pack Zintegrowane moduły. Paczki do NetBeans.

Systemy operacyjne na platformach mobilnych

Projektowanie Graficznych Interfejsów Użytkownika Robert Szmurło

PRZEWODNIK PO PRZEDMIOCIE

Część I - Załącznik nr 7 do SIWZ. Warszawa. 2011r. (dane Wykonawcy) WYKAZ OSÓB, KTÓRYMI BĘDZIE DYSPONOWAŁ WYKONAWCA DO REALIZACJI ZAMÓWIENIA

Testowanie według modelu (MBT) Stowarzyszenie Inżynierii Wymagań wymagania.org.pl

Model przestrzenny Diagramu Obiegu Dokumentów. Stanisław Niepostyn, Ilona Bluemke Instytut Informatyki, Politechnika Warszawska


Grupy pytań na egzamin magisterski na kierunku Informatyka (dla studentów niestacjonarnych studiów II stopnia)

JAVA Materiały do laboratorium III wersja niezaawansowana Marcin Borkowski WSEiZ czerwiec 2006

Wstęp - Prosta aplikacja internetowa w technologii Java EE 5. Programowanie komponentowe 1

BEAN VALIDATION. Waldemar Korłub. Narzędzia i aplikacje Java EE KASK ETI Politechnika Gdańska

Budowanie aplikacji biznesowych przy użyciu. Presentation Foundation i wzorca MVVM

Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej. Wstęp. Programowanie w Javie 2. mgr inż.

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Projektowanie oprogramowania

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

Języki i paradygmaty programowania - 1

UML w Visual Studio. Michał Ciećwierz

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Nowocześnie zaprojektowana e-usługa - studium przypadku

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

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP002017_ Laboratorium 11 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

STUDIA STACJONARNE I STOPNIA Przedmioty kierunkowe

Przykład zastosowania notacji UML dla realizacji zastosowania wzorca Mediator (materiały dla studentów na prawach rękopisu)

Transkrypt:

Od wymagań do Javy w mgnieniu oka: modelowanie oprogramowania w praktyce Michał Śmiałek Politechnika Warszawska Wyzwania Modelowania Inżynierskiego i Biznesowego Warszawa, 5 kwietnia 206 Prelegent Czym się zajmowałem (od ok. 99 r.) Profesor nzw. (informatyka) Politechnika Warszawska; UML, Inżynieria Wymagań, Projektowanie, MDD/MDA, Kierownik grupy SMoG (modelowanie oprogramowania) Kierownik zespołu PW w projekcie REMICS (7PR) Koordynator naukowy konsorcjum projektu ReDSeeDS (6PR): główny współautor języka RSL Trener w wielu szkoleniach dla profesjonalistów (> 200 edycji szkoleń) z zakresu inżynierii oprogramowania Konsultant w firmie Infovide-Matrix Kierownik projektów z zakresu budowy oprogramowania Inżynier procesu (pierwszy w Polsce certyfikat trenera RUP) Analityk wymagań oprogramowania i biznesu Projektant oprogramowania i programista WMIiB 206 2

Treść seminarium Wprowadzenie wymagania i MDD/MDA Modelowanie wymagań i transformacje w mgnieniu oka Programowanie na poziomie wymagań Wyjaśnienie semantyki przypadków użycia Logika aplikacji i logika dziedziny/biznesu Programowanie dla zwykłych ludzi? Od wymagań do kodu Automatyczna transformacja wymagań (scenariuszy przypadków użycia) w kod logiki aplikacji i logiki dziedziny/biznesu Szczegóły transformacji Metamodel języka (Requirements Specification Language) Reguły transformacji z RSL do kodu Podsumowanie WMIiB 206 3 :: WPROWADZENIE WYMAGANIA I MDD/MDA :: 2

Marzenie kierownika projektu IT Deweloper Użytkownik Wymagania TEXT Kod Czego potrzebujemy Język specyfikowania wymagań Dobra komunikacja Automatyczna translacja WMIiB 206 5 Od biznesu do kodu - tradycyjnie Specyfikacja wymagań w języku naturalnym specyfikacja projektowa wywiedziona z wymagań kod wywiedziony z modeli projektowych Ręczne przekształcenie Biznes Specyfikacja Wymagań TEXT Dokumentacja Projektowa Kod Zamawiający Analityk Projektant Programista WMIiB 206 6 3

Od biznesu do kodu sterowane modelami Specyfikacja wymagań z półformalnymi modelami modele projektowe ze śladem od wymagań kod częściowo generowany z modeli projektowych Śledzenie wymagań wsparte narzędziami Projektant transformacji Biznes Specyfikacja Wymagań Dokumentacja Projektowa Kod Zamawiający Analityk Projektant Programista Częściowo automatyczna transformacja WMIiB 206 7 Od biznesu do kodu języki dziedzinowe Specyfikacja systemu używając języków spec. dla dziedziny (DSL) wygenerowany kod W pełni automatyczna transformacja Znaczące przyrosty produktywności! Biznes Projektant języka Specyfikacja Wymagań DSL Projektant transformacji Kod Domain Specific Language Zamawiający Analityk Ograniczony zakres dziedzin, potrzebne wysokie kwalifikacje w tworzeniu języków, wymagania? WMIiB 206 8 4

Programowanie na poziomie wymagań? Specyfikacja wymagań przy użyciu formalnych modeli kod wygenerowany z wymagań W pełni automatyczna transformacja Pstryk! Pomysł: częściowa generacja kodu Biznes Specyfikacja Wymagań RPL Kod Ujednolicony język Zamawiający Analityk Brak technologii! WMIiB 206 9 Proponowane rozwiązanie Wymagania z częściowo formalnymi modelami kod częściowo generowany z wymagań W pełni automatyczna transformacja Formalne Wymagani Kod Autom. RSL Biznes Półformalne Wymagania Analityk Zamawiający Programista Kod Półautom. RSL Częściowo automatyczna transformacja WMIiB 206 0 5

@svo : SVOSentence {SVOSentences} @svo : SVOSentence {SVOSentences} dobject : NounLink {Phrases} {ELSE} @svo : SVOSentence {SVOSentences} source predicate source cverb : PhraseVerbLink {Phrases} noun {ELSE} predicate source pred : Predicate {SVOSentences} object : NounLink {Phrases} cpred : Predicate {SVOSentences} verb cnph : NounPhrase {Phrases} @cl : Class {Kernel} predicate target noun predicate object source target 2 vph : SimpleVerbPhrase {Phrases} object @genop : Operation {Kernel} verbphrase nph : NounPhrase {Phrases} cvph : ComplexVerbPhrase {Phrases} complexverbphrase simpleverbphrase svph : SimpleVerbPhrase source {Phrases} 3 @ui_op : Operation 4 {Kernel} verb : PhraseVerbLink {Phrases} utl_addprocedurecall(@verb.value, @object.v alue, "", @genop, @cl, @ui_op) verbphrase source cnph2 : NounPhrase {Phrases} iobject : NounLink {Phrases} utl_addprocedurecall(@cverb.v alue, @dobject.value, @iobject.value, @genop, @cl, @ui_op) verb verbphrase object noun source Od biznesu do kodu - ReDSeeDS Specyfikacja wymagań przy użyciu precyzyjnych wymagań kod wygenerowany z wymagań Automatyczna generacja Biznes Specyfikacja Wymagań Model Projektowy Kod RSL Zamawiający Analityk Agile Programista WMIiB 206 ReDSeeDS: jak to działa? Model przypadków użycia Reguły transformacji Wykonywalny kod public void SelectsOK(XStudent pstudent){ int res; astudent = pstudent; mstudent.validates(astudent); res = mstudent.getresult(); if (res == 0) { vacknowledgement = new VAcknowledgement(); vacknowledgement.caddstudent = this; vacknowledgement.presents(); } else if (res == ) { verrormessage = new VErrorMessage(); verrormessage.caddstudent = this; verrormessage.shows(); } } Model scenariuszy: RSL Model projektowy: UML + metody w Javie WMIiB 206 2 6

:: PROGRAMOWANIE NA POZIOMIE WYMAGAŃ :: Jeszcze wyższy poziom programowania? Tradycyjnie Specyfikacja wymagań Ogólne stwierdzenie problemu Szczegółowe wymagania na oprogramowanie Propozycja Specyfikacja wymagań Ogólne stwierdzenie problemu Program zorientow. na użytkownika Historie (logika aplikacji) Słownik dziedziny (logika biznesu) WMIiB 206 4 7

Precyzyjny język naturalny? RSL? Użytkownicy Analitycy Programiści Mniej formalny Bardziej formalny WMIiB 206 5 Historia i środowisko 4. Tom rides to the old hut. 2. Lord Mark goes to the old hut. 3. Aunt Martha goes to Tom the wise..a. Lord Mark runs to aunt Marta s house. b. He talks with aunt Martha. WMIiB 206 6 8

Pisanie dobrych opowiadań a pisanie dobrych wymagań Połączenie opowiadania (sekwencji zdarzeń) i opisów środowiska (ludzie, wnętrza, krajobraz ). WMIiB 206 7 Rozdzielenie opowiadania od środowiska Zdarzenia a sceny WMIiB 206 8 9

Styl pisania opowiadań Najprostsze możliwe zdania Student enters the semester. Teacher accepts the current marks. Subject Verb Objects ( or 2) System assigns the student to the new semester. WMIiB 206 9 Rozszerzenie opowiadania o środowisko Uwaga: opowiadania nie zawierają definicji pojęć Student enters the semester where the semester is a number between and 0 denoting the level of studies ale gdzieś w innym odległym opowiadaniu: Dean accepts the semester for the new student where the semester is a number denoting the current student s status? WMIiB 206 20 0

Oddzielenie pojęć od opowiadań Osobny słownik pojęć, ale spójny z opowiadaniami Student enters the semester where the semester is a number between and 0 denoting the level of studies Semester Dean accepts number the between semester and 0 denoting for the the new level student of studies and where the semester is a number the current student s status. denoting the current student s status WMIiB 206 2 Pisanie scenariuszy Scenariusz jest sekwencją zdań Dean adds new lecture to a course. Dean selects to add new lecture to course 2. System asks for semester 3. Dean enters the semester 4. System asks for data of the lecture 5. Dean enters the data of the lecture 6. System adds the lecture to the list of lectures WMIiB 206 22

Budowanie słownika Słownik jest mapą terenu dla użytkownika. Warto, aby mapa miała formę graficzną.. Deanwants to add new lecture to course 2. System asks for semester 3. Dean enters the semester. 4. DeanSystem asks for data of the lecture 2. 5. Dean Dean enters the semester 3. System asks. enters for Dean the data data of enters of the lecture the the semester lecture 6. System 4. Dean enters 2. adds the System the lecture data of the asks to lecture for the datalist of of the lectures lecture 5. System assigns 3. the Dean teacher enters to the the data lecture of the lecture 4. System prints the data of the student Lecture Student Course Teacher List of lectures Semester WMIiB 206 23 Odgrywanie opowiadań Spójność opowiadań można sprawdzić uzupełniając słownik. Deanwants to add new lecture to course 2. System asks for semester 3. Dean enters the semester 4. System asks for data of the lecture 5. Dean enters the data of the lecture 6. System adds the lecture to the list of lectures add new lecture enter ask for Lecture Student Course Teacher List of lectures Semester WMIiB 206 24 2

Mapowanie wymagań na strukturę systemu Opowiadania Warstwa interfejsu GUI presentation view (MVC*) Logika aplikacji workflow logic (Fowler 2002) controller (MVC*) Logika dziedziny data processing algorithms model (MVC*) *Reenskaug 977 Słownik dziedziny WMIiB 206 25 Koncepcja: program na poziomie wymagań Requirements Specification Language (RSL) Przypadek użycia Logika aplikacji Logika dziedziny Step Step Step Step Step Step Krok Action on a domain element Action on a domain element Action on a domain element Action on a domain element Action on a domain element Action on a domain element Action on a domain element Action on a domain element Akcja na elemencie dziedziny Element dziedziny Akcja(reguła biznesowa) WMIiB 206 26 3

Dygresja: wzorce logiki aplikacji enter book data validate book data register book data Library domain Step Step Step Step Book data validate enter sales item validate sales item register sales item E-shop domain Step Step Sales item Step Step Step Step validate WMIiB 206 27 :: OD WYMAGAŃ DO KODU :: 4

Całościowe rozwiązanie Requirements Specification Language: język formalny (DSL) dla specyfikowania typowej logiki aplikacji biznesowych + przetwarzane dane + elementy UI (brak logiki dziedzinowej) Składnia abstrakcyjna oparta na precyzyjnym metamodelu Składnia konkretna: graficzne diagramy + ograniczony język naturalny Elastyczna semantyka czasu wykonania W pełni automatyczna transformacja z języka RSL do kodu dla wybranych technologii Całościowe wsparcie narzędziowe (edytor języka RSL, automatyczna, parametryzowalna transformacja) Bardzo szybkie prototypowanie Całościowa realizacja idei MDD/MDA WMIiB 206 29 Zasada działania narzędzia? Wymagania Kompilator MOLA Transformati Program on on program MOLA Java formułowanie Edytor RSL kompilacja Maszyna Transformująca MOLA ReDSeeDS wyjście generacja Edytor UML zapis Model RSL wejście Model UML + kod metod eksport Repozytorium modeli WMIiB 206 30 5

AuthorDAO + AuthorDAO(Connection) + delete(int) :int + delete(object) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<XAuthor> + read(object) :List<XAuthor> + read(int) :XAuthor + update(object, int) :int + updatelist(list<?>) :int[] «interface» IObjectDAO + delete(object) :int + delete(int) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(int) :Object + read(list<?>) :List<?> + read(object) :List<?> + update(object, int) :int + updatelist(list<?>) :int[] BookDAO + BookDAO(Connection) + delete(object) :int + delete(int) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<XBook> + read(int) :XBook + read(object) :List<XBook> + update(object, int) :int + updatelist(list<?>) :int[] util::connectionfactory + getconnection() :Connection + getinstance() :ConnectionFactory util::daomanager # connection :Connection = null {bag} # daoobject :IObjectDAO = null {bag} + executeandclose(daocommand) :Object + getdaoobject(object) :IObjectDAO + getinstance() :DAOManager + transaction(daocommand) :Object + transactionandclose(daocommand) :Object # getconnection() :Connection # gettxconnection() :Connection Wnętrze transformacji RSL metamodel MOLA program UML metamodel meta-level M2 «use» «use» «instanceof» «instanceof» Show course list meta-level M Course manager indexnumber name. Course manager selects courselist button 2. System fetches courselist 3. System showscourselist page => invoke: Add newcourse student savestudent deletstudent MOLA transformation engine Model in RSL Model in UML + methods WMIiB 206 3 Możliwości transformacji RSL to UML Component architecture model in UML Design model based on Abstracat Factory pattern Code skeleton in an objectoriented language RSL model RSL to code Platformspecific design model in UML Runnable application code RSL to SOA SOA model in SoaML Specific cloud platform model RSL to? * WMIiB 206 32 6

ContentPane VAddNewPublisherPage + actionperformed(actionevent) :void + init(ipresenter) :void WindowPane VIncorrectBookMessage + actionperformed(actionevent) :void + init(ipresenter) :void PAddReview + callingpclass :IInvoke {bag} + res :int {bag} + sentence_no :int {bag} + view :IView {bag} + _first(iinvoke) :void + returnfrominvoke(int) :void + SelectsAddReviewButton() :void + SelectsSaveReviewButton() :void ReviewDAO + deletelist(list<?>) :int[] «interface» IModel + DeletesAuthor() :void + DeletesBook() :void + FetchesAuthorList() :void + FetchesBook() :void + FetchesBookList() :void + SavesAuthor() :void + SavesBook() :void + SavesPublisher() :void + SavesReview() :void + ValidatesAuthor() :void + ValidatesBook() :void + ValidatesPublisher() :void ApplicationInstance EchoApp + closecurrentpage() :void + init() :Window + setpresenter(ipresenter) :void + showaddnewauthorpage() :void + showaddnewbookpage() :void + showaddnewpublisherpage() :void + showaddreviewpage() :void + showauthorlistpage() :void + showauthorsbooklistpage() :void + showbookdetailspage() :void + showbooklistpage() :void + showeditbookpage() :void + showhomepage() :void + showincorrectbookmessage() :void + showinvalidauthormessage() :void + showinvalidpublishermessage() :void PEditBook + callingpclass :IInvoke {bag} + res :int {bag} + sentence_no :int {bag} + view :IView {bag} + _first(iinvoke) :void + returnfrominvoke(int) :void + SelectsEditBookButton() :void + SelectsSaveBookButton() :void «interface» IObjectDAO + read(int) :Object + updatelist(list<?>) :int[] PublisherDAO + deletelist(list<?>) :int[] WindowPane VInvalidPublisherMessage + actionperformed(actionevent) :void + init(ipresenter) :void PAddNewPublisher + callingpclass :IInvoke {bag} + res :int {bag} + sentence_no :int {bag} + view :IView{bag} + _first(iinvoke) :void + returnfrominvoke(int) :void + SelectsAddNewPublisherButton() :void + SelectsAddPublisherButton() :void ModelImpl + DeletesAuthor() :void + DeletesBook() :void + FetchesAuthorList() :void + FetchesBook() :void + FetchesBookList() :void + SavesAuthor() :void + SavesBook() :void + SavesPublisher() :void + SavesReview() :void + ValidatesAuthor() :void + ValidatesBook() :void + ValidatesPublisher() :void ContentPane VEditBookPage + actionperformed(actionevent) :void + init(ipresenter) :void BookDAO + delete(int) :int Reguły transformacji i sterowanie Arch = MVP View = Echo JavaFX DL = DAO Transformation Transformation program RSL program to Code UML + method bodies V Course manag er Nonfunctional reqs. Show course list. Course manager selects course list button 2. System fetches courselist 3. System showscourselist page => invoke: Add newcourse input input MOLA transformati on engine output P M indexnumber student savestudent + delete(int) :int + delete(object) :int name deletstudent + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<?> + read(object) :List<?> + update(object, int) :int Model in RSL + delete(int) :int + delete(object) :int + delete(object) :int + delete(int) :int + BookDAO(Connection) + delete(object) :int + insert(object) :int + insertlist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + deletelist(list<?>) :int[] + insert(object) :int + read(int) :XReview + read(object) :List<XReview> + PublisherDAO(Connection) + read(list<?>) :List<XPublisher> + insertlist(list<?>) :int[] + read(int) :XBook + read(list<?>) :List<XReview> + ReviewDAO(Connection) + read(object) :List<XPublisher> + read(int) :XPublisher + read(list<?>) :List<XBook> + read(object) :List<XBook> + update(object, int) :int + updatelist(list<?>) :int[] + update(object, int) :int + updatelist(list<?>) :int[] + update(object, int) :int + updatelist(list<?>) :int[] WMIiB 206 33 Najpierw: piszemy wymagania add student to course User course add student to course remove student from course save course Developer Zrozumiałe, ale precyzyjne WMIiB 206 34 7

Potem: naciskamy guzik public void SelectsOK(XStudent pstudent){ int res; astudent = pstudent; mstudent.validates(astudent); res = mstudent.getresult(); if (res == 0) { vacknowledgement = new VAcknowledgement(); vacknowledgement.caddstudent = this; vacknowledgement.presents(); } else if (res == ) { verrormessage = new VErrorMessage(); verrormessage.caddstudent = this; verrormessage.shows(); } } WMIiB 206 35 Wygenerowana struktura systemu show() buttonclicked() Interfejs użytkownika Logika aplikacji Przejrzysta struktura logiczna Wybrana technologia save() verify() Logika dziedziny WMIiB 206 36 8

Wygenerowany działający kod aplikacji Interfejs użytkownika show() buttonclicked() Logika aplikacji res = mstudent.getresult(); if (res == 0) { vacknowledgement = new VAcknowledgement(); vacknowledgement.caddstudent = this; vacknowledgement.presents(); } else if (res == ) { verrormessage = new VErrorMessage(); verrormessage.caddstudent = this; verrormessage.shows(); } save() verify() Logika dziedziny W pełni działający kod Tylko dodaj logikę dziedziny WMIiB 206 37 Wymagania + technologia = działający system show() Add new course Show extended course list buttonclicked() res = mstudent.getresult(); if (res == 0) { vacknowledgement = new VAcknowledgement(); vacknowledgement.caddstudent = this; vacknowledgement.presents(); } else if (res == ) { verrormessage = new VErrorMessage(); verrormessage.caddstudent = this; verrormessage.shows(); } Course manager save() verify() Złożoność właściwa Złożoność poboczna WMIiB 206 38 9

:: SZCZEGÓŁY TRANSFORMACJI :: RSL metamodel: frazy (Phrase) Phrase NounPhrase object verbphrase VerbPhrase 0.. * * SimpleVerbPhrase ComplexVerbPhrase modifier 0.. Term Modifier noun Term Noun * verb Term Verb 0.. 0.. * Term Preposition preposition name :String name :String name :String name :String add selected student student to course WMIiB 206 40 20

RSL metamodel: pojęcia (Notion) source DomainElement Relationship * target DomainElement Actor * * name source Multiplicity 0.. target Multiplicity 0.. Notion * name NounPhrase DomainElement Multiplicity statement * DomainStatement statement name Phrase 0.. Course Manager course entry form show course entry form course addstudent to course remove student from course save course * 2..2 student modify class class check availability of class WMIiB 206 4 RSL metamodel: zdania SVO (SVOSentence) ConstrainedLanguageSentence source SVOSentence source subject PhraseHyperlink Subject subject * predicate PhraseHyperlink Predicate predicate * target target NounPhrase object verbphrase 0.. VerbPhrase Course manager System fills course entry form adds student to course WMIiB 206 42 2

RSL metamodel: scenariusze +scenariostep * {ordered} ConstrainedLanguageSentence +scenario 0.. ContrainedLanguageScenario SVOSentence ControlSentence +scenarios..* RSLUseCase ConditionSentence InvocationSentence +source +target InvocationRelationship Course manager Browse course details Add new course «invoke». Course manager selects add course option 2. System shows course entry form 3. Course manager fills course entry form 4. Courses manager selects save course option 5. System validates course cond: course valid 6. System saves course invoke: Browse course details WMIiB 206 43 0..* Przykład RSL do kodu User Add new book «invoke» Add new author «trigger» save book button «trigger» add new book button. Userselects add new book button 2. System shows add new book page. Userselects add new book button invoke Add new author 2. Systemshowsadd newbook page 3. User enters book invoke 4. User selects save book button invoke 5. System validates book 3. User enters book cond: book valid 6a. 4. System User selects saves book save book button 5. System validates book cond: book invalid 6b. System shows invalid book message «list» book list «frame» addnewbookpage * book «message» invalid book message * * author «attr» title: Text «attr» hardcover: Boolean «attr» issuedate: Date WMIiB 206 44 22

Generowanie interfejsów «interface» IView User Addnew book. Userselectsadd newbook button. Userselectsadd newbook button 2. System shows add new book page 2. invoke Systemshowsaddnewbook Add author page 3. User invoke enters book 4. User invoke selects save book button 5. System 3. Uservalidates enters book book 4. cond: User selects book valid save book button 6a. System saves book 5. System validates book cond: book invalid user-totrigger sys-toconcept sys-to-frame sys-tomessage + setpresenter(ipresenter) :void + showaddnewauthorpage() :void + showaddnewbookpage() :void + showaddnewpublisherpage() :void + showbooklistpage() :void + showinvalidauthormessage() :void + showinvalidbookmessage() :void + showinvalidpublishermessage() :void «interface» IPresenter + SelectsAddNewAuthorButton() :void + SelectsAddNewBookButton() :void + SelectsAddNewPublisherButton() :void + SelectsAddPublisherButton() :void + SelectsDeleteBookButton() :void + SelectsSaveAuthorButton() :void + SelectsShowBookListButton() :void + SelectsSaveBookButton() :void + setmodel(imodel) :void + setview(iview) :void V P 6b. System shows invalid book message «interface» IModel + DeletesBook() :void + FetchesBookList() :void + SavesAuthor() :void + SavesBook() :void + SavesPublisher() :void + ValidatesAuthor() :void + ValidatesBook() :void + ValidatesPublisher() :void M WMIiB 206 45 Semantyka scenariuszy 3 4 2 User IView User Addnew book. Userselectsadd newbookbutton. Userselectsadd newbookbutton 2. Systemshows add new book page 2. invoke Systemshows Addnewadd author new book page 3. User invoke enters book 4. User invoke selects save book button 5. 3. System User enters validatesbook 4. User cond: selects booksave validbook button 6a. 5. System savesbook validatesbook cond: book invalid 6b. System showsinvalid book message invoke 4 public class PresenterImpl implements IPresenter { private IModel model; private IView view; public void SelectsAddNewBookButton() { view.showaddnewbookpage(); } public void SelectsSaveBookButton(){ int res = model.validatesbook(); if ( res == /*book valid*/) { model.savesbook(); } else if ( res == 2 /*book invalid*/) { view.showinvalidbookmessage(); } } public void SelectsAddNewAuthorButton(){ // code for Add new author use case... } 6a 2 5... IModel WMIiB 206 46 23

Generowanie UI User Addnew book. Userselectsadd newbookbutton 2. System showsadd new bookpage. invoke Userselectsadd Addnewauthor newbookbutton 3. 2. User System entershowsadd book new bookpage 4. User invoke selects save book button 5. System invoke validatesbook 3. User enters book cond: bookvalid 4. User selects save book button 6a. 5. System System saves validatesbook book cond: bookinvalid 6b. System showsinvalidbook message «frame» booklist page «list» booklist «trigger» savebookbutton «frame» addnewbookpage * book «message» invalidbookmessage * * author Book BookList list Page «attr» title: Text «attr» hardcover: Boolean «attr» issuedate : Date Book List Title Issue date Hard cover Author Addnewbook AddNew BookPage Book Book Title Author Issue date Text Field Select author(s) 203-04-08 Title Author Issue date Hard cover Text Field Select author(s) 203-04-08 Invalid book message The entered book data is invalid OK Hard cover < Back Save book Add new author < Back WMIiB 206 47 Generowanie DTO book * * author «attr» title: Text «attr» hardcover: Boolean «attr» issuedate: Date «attr» name: Text «attr» birthyear: Number XBook - xbookid :int - title :String - issuedate :Date - hashardcover :boolean XAuthor - xauthorid :int - authorsname :String - birthyear :int Auto-generated getters and setters + getauthorlist() :List<XAuthor> + gethashardcover() :boolean + getid() :int + getissuedate() :Date + gettitle() :String + setauthorlist(list<xauthor>) :void + sethashardcover(boolean) :void + setid(int) :void + setissuedate(date) :void + settitle(string) :void -booklist * -authorlist + getauthorsname() :String + getbirthyear() :int * + getbooklist() :List<XBook> + getid() :int + setauthorsname(string) :void + setbirthyear(int) :void + setbooklist(list<xbook>) :void + setid(int) :void Auto-generated getters and setters WMIiB 206 48 24

Generowanie DAO author * * book «interface» IObjectDAO CRUD operations + delete(object) :int + delete(int) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(int) :Object + read(list<?>) :List<?> + read(object) :List<?> + update(object, int) :int + updatelist(list<?>) :int[] util::connectionfactory + getconnection() :Connection + getinstance() :ConnectionFactory AuthorDAO BookDAO + AuthorDAO(Connection) + delete(int) :int + delete(object) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<XAuthor> + read(object) :List<XAuthor> + read(int) :XAuthor + update(object, int) :int + updatelist(list<?>) :int[] + BookDAO(Connection) + delete(object) :int + delete(int) :int + deletelist(list<?>) :int[] + insert(object) :int + insertlist(list<?>) :int[] + read(list<?>) :List<XBook> + read(int) :XBook + read(object) :List<XBook> + update(object, int) :int + updatelist(list<?>) :int[] util::daomanager # connection :Connection = null {bag} # daoobject :IObjectDAO = null {bag} + executeandclose(daocommand) :Object + getdaoobject(object) :IObjectDAO + getinstance() :DAOManager + transaction(daocommand) :Object + transactionandclose(daocommand) :Object # getconnection() :Connection # gettxconnection() :Connection WMIiB 206 49 :: PODSUMOWANIE :: 25

Dla kogo jest ReDSeeDS? Sformułowanie wymagań Sprecyzowanie wymagań Zaprojektowanie systemu Zamawiający Oszacowanie pracochłonności Przetestowanie systemu Zamawiający Wykonawcy Zaimplementowanie systemu Organizacje zamawiające oprogramowanie Firmy produkujące oprogramowanie Osoby amatorsko tworzące oprogramowanie WMIiB 206 5 Aktualny status Dostepna pełna specyfikacja języka RSL ReDSeeDS Engine ver. 0.6.5 dostępna on-line Edytor RSL: przypadki użycia, scenariusze, pojęcia dziedzinowe Edytory graficzne Edytory tekstowe Automatyczne tworzenie modelu dziedziny Zintegrowana maszyna transformacji Integracja z Enterprise Architect i Modelio Generacja UML i kodu Java + MVP + Swing Java + MVP + Echo web framework WMIiB 206 52 26

Przyszłość Rozszerzenie możliwości generacji kodu Rozszerzenie docelowych technologii UI (JavaFX, Flex, Android SDK, ) Rozszerzenie docelowych modeli architektury i języków Nowe zastosowania: odzyskiwanie i migracja wyeksploatowanych systemów Projekt REMICS (www.remics.eu) Odzyskiwanie na podstawie obserwowalnego zachowania (zapisywanie skryptów UI) do RSLa i generacja w nowej technologii Niezależna od pokręconego wnętrza wyeksploatowanego systemu WMIiB 206 53 www.redseeds.eu Dziękuję za uwagę! 27