Harjoitustyö Ohjaaja: Outi Räihä TE213



Samankaltaiset tiedostot
Harjoitustyö Ohjaaja: Outi Räihä TE213. OHJ-3100 Ohjelmien ylläpito ja evoluutio. Yleiskatsaus.

OHJ-3100 Ohjelmien ylläpito ja evoluutio. Harjoitustyö. Ohjaaja: Outi Sievi-Korte TE213 Päivystys ti klo 14-16

OHJ-3100 Ohjelmien ylläpito ja evoluutio. Harjoitustyö 2011

Arkkitehtuurien tutkimus Outi Räihä. OHJ-3200 Ohjelmistoarkkitehtuurit. Darwin-projekti. Johdanto

Darwin: Tutkimusprojektin esittely

Geneettiset algoritmit

Harjoitustehtävät viikolle 42

Ohjelmistojen mallintaminen, kesä 2010

ohjelman arkkitehtuurista.

Ohjelmistotekniikan menetelmät, kesä 2008

Ohjelmistojen mallintaminen, kesä 2009

Ohjelmistoarkkitehtuurit. Syksy 2008

AS Automaation signaalinkäsittelymenetelmät. Tehtävä 1. Käynnistä fuzzy-toolboxi matlabin komentoikkunasta käskyllä fuzzy.

Ohjelmistotekniikan menetelmät, kevät 2008

TIES592 Monitavoiteoptimointi ja teollisten prosessien hallinta. Yliassistentti Jussi Hakanen syksy 2010

Ohjelmistoarkkitehtuurit. Kevät

Avainsanojen poimiminen Eeva Ahonen

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Ohjelmistoarkkitehtuurit. Syksy 2010

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

Analyysi, dynaaminen mallintaminen, yhteistoimintakaavio ja sekvenssikaavio

GA & robot path planning. Janne Haapsaari AUTO Geneettiset algoritmit

Ohjelmistoarkkitehtuurit Syksy 2009 TTY Ohjelmistotekniikka 1

S Laskennallinen systeemibiologia

Toinen harjoitustyö. ASCII-grafiikkaa

Ohjelmistojen suunnittelu

9. Muunneltavuuden hallinta

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

OHJ-7400 Graafisen käyttöliittymän ohjelmointi 4/6 op

Toiminnot eli käyttäytyminen. Tieto eli rakenteelliset ominaisuudet

Ohjelmistojen mallintaminen. Luento 11, 7.12.

Algoritmit 1. Luento 13 Ti Timo Männikkö

Ohjelmistoarkkitehtuurit Kevät käytäntöjä

Visual Case 2. Miika Kasnio (C9767)

Tenttikysymykset. + UML- kaavioiden mallintamistehtävät

Algoritmit 2. Luento 12 To Timo Männikkö

Perinnöllinen informaatio ja geneettinen koodi.

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Järjestelmäarkkitehtuuri (TK081702) Web Services. Web Services

Kirjanpidon ALV-muutos

Harjoitustehtävät ja ratkaisut viikolle 48

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Ohjelmistoarkkitehtuurit harjoitustyö RobotWarGame RobotFW SimulationFW SimulationGUIFW SWT/Java Kuva 1: Esimerkki arkkitehtuurin kerroskuvasta

OHJ-7400 Graafisen käyttöliittymän ohjelmointi, Harjoitustyö

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Pelaajan ja kilpailun järjestäjän ohjekirja

Analyysi on tulkkaamista

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

Ohjelmistoarkkitehtuurit. Syksy 2007

UML- mallinnus: Tilakaavio

Ohjelmistojen mallintaminen, mallintaminen ja UML

käyttötapaukset mod. testaus

CAD-kuvat, käyttöohjeet ja muut dokumentit helposti netistä

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

T SEPA - päiväkirja: Design Patterns. ETL työkalu

10. Muunneltavuuden hallinta: variaatiopisteet

Evoluutio. BI Elämä ja evoluutio Leena Kangas-Järviluoma

Palveluperustaiset arkkitehtuurityylit

10. Muunneltavuuden hallinta: variaatiopisteet

Digi-tv vastaanottimella toteutetut interaktiiviset sovellukset

6. laskuharjoitusten vastaukset (viikot 10 11)

Algoritmit 1. Luento 1 Ti Timo Männikkö

Lomalista-sovelluksen määrittely

TOIMINNALLINEN MÄÄRITTELY MS

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Ohjelmistoarkkitehtuuri

Ohjelmistotekniikan menetelmät, UML

Vaatimusmäärittely Ohjelma-ajanvälitys komponentti

58160 Ohjelmoinnin harjoitustyö

805324A (805679S) Aikasarja-analyysi Harjoitus 4 (2016)

Poikkeusinfo XML-rajapinnan kuvaus, rajapinnan versio 2 Seasam Group

HUOMAUTUS! Älä kytke Cometia USB-kaapelilla tietokoneeseesi, kun lataat satunnaiskoodeilla.

Action Request System

Ohjelmistotekniikan menetelmät Luokkamallit ohjelmiston mallintamisessa Harri Laine 1

Yhteistoimintakaavio (Esimerkki)

DNA-testit. sukututkimuksessa Keravan kirjasto Paula Päivinen

Ohjelmisto on selainpohjaisen käyttöliittymän tarjoava tietokantajärjestelmä merikotkien seurantaan WWF:n Merikotka-työryhmän tarpeisiin.

eshop lisenssiopas Ohjelmistolisenssiopas 2013

Luku 8. Aluekyselyt. 8.1 Summataulukko

SEPA - Design Patterns

T SEPA - päiväkirja: Design Patterns. ETL työkalu

Algoritmit 2. Luento 12 Ke Timo Männikkö

1 + b t (i, j). Olkoon b t (i, j) todennäköisyys, että B t (i, j) = 1. Siis operaation access(j) odotusarvoinen kustannus ajanhetkellä t olisi.

Toinen harjoitustyö. ASCII-grafiikkaa 2017

Hakemistojen sisällöt säilötään linkitetyille listalle.

1. Palaute viikkoharjoituksesta, Taustatutkimus

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

WCONDES OHJEET ITÄRASTEILLE (tehty Condes versiolle 8)

Tietorakenteet ja algoritmit - syksy

TIES592 Monitavoiteoptimointi ja teollisten prosessien hallinta. Yliassistentti Jussi Hakanen syksy 2010

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Ylläpito. Ylläpito. Ylläpidon lajeja Ohjelmistotuotanto, syksy 1998 Ylläpito

Asiointipalvelun ohje

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

WCONDES OHJEET ITÄRASTEILLE (tehty Condes versiolle 8)

Harjoitustyö Case - HelpDesk

1. Tarkastellaan seuraavaa kaaviota

Web-palvelu voidaan ajatella jaettavaksi kahteen erilliseen kokonaisuuteen: itse palvelun toiminnallisuuden toteuttava osa ja osa, joka mahdollistaa k

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Transkriptio:

OHJ-3100 Ohjelmien ylläpito ja evoluutio 1 Harjoitustyö Ohjaaja: Outi Räihä outi.raiha@tut.fi TE213 2 Yleiskatsaus Yleisesittely Geneettiset algoritmit Ohjelmistoarkkitehtuurit Darwin-työkalu Tehtävänanto Johdanto Skenaarioiden määrittely Käyttöliittymä Skenaarioiden tulkinta Fitness-arvon laskeminen Output Arvioitu työjakauma Dokumentti Arvostelu Palautus 1

Yleisesittely 3 Toteutetaan Darwin-työkalun laajennus Darwin tuottaa automaattisesti ohjelmistoarkkitehtuurisuunnitelmia Darwin lähtee nolla-arkkitehtuurista ja kehittää arkkitehtuuria käyttämällä suunnittelutyylejä ja malleja Arkkitehtuurin laatua arvioidaan muunneltavuuden, tehokkuuden ja ymmärrettävyyden suhteen Laadukasta arkkitehtuuria etsitään geneettisellä algoritmilla Laajennuksessa mahdollistetaan tehokkuusskenaarioiden määrittely ja tulkinta Työssä oletetaan tuntemusta Eclipse-rajapinnoista ja Javaohjelmointikielestä Geneettiset algoritmit 4 Geneettiset algoritmit kuuluvat meta-heuristisiin etsintäalgoritmeihin Etsintä on epädeterminististä Käytetään, kun ratkaisujoukko on suuri, ja determinististä algoritmia ei voida toteuttaa Geneettiset algoritmit pohjautuvat darwinistiseen teoriaan evoluutiosta Yksilöt katsotaan sitä laadukkaammiksi, mitä paremmin ne ovat sopeutuneet ympäristöönsä, ja mitä paremmat mahdollisuudet niillä on tuottaa laadukkaita jälkeläisiä Luonnonvalinta korjaa huonot yksilöt pois, jotta populaation koko pysyy hallinnassa 2

Geneettiset algoritmit - peruskäsitteitä 5 Geneettiset algoritmit nojautuvat biologisiin käsitteisiin. Populaatio = ratkaisujoukko tietyllä ajanhetkellä Sukupolvi = ajanhetki, n. sukupolvi ilmaisee, että on tehty n iteraatiota, puhutaan n. sukupolven populaatio == n. populaatio Yksilö = ratkaisu Kromosomi = ratkaisun mallinnos Geeni = kromosomin (ratkaisun) muunneltava osa Alleeli = geenin saama arvo, osan eri variaatiot Mutaatio = geeniin (ratkaisun osaan) kohdistuva muutos Risteytys = kahden yksilön (ratkaisun) eri ominaisuuksien yhdistäminen Fitness-funktio = hyvyysfunktio = laatufunktio, laskee yksilön hyvyyden. Mitä parempi hyvyysarvo, sitä todennäköisemmin yksilö selviää luonnonvalinnasta ja osallistuu risteytyksiin Geneettiset algoritmit - prosessi 6 Input: ratkaisun formalisointi kromosomimuodossa Luo populaatio Mutatoi kromosomeja Risteytä kromosomeja Laske hyvyysarvo yksilöille Suorita luonnonvalinta 3

7 Geneettiset algoritmit esimerkki Esimerkki: repuntäyttöongelma. Reppuun mahtuu 9 tilavuusyksikön verran tavaraa. Tarkoitus on saada reppu mahdollisimman täyteen niin, että reppu painaa mahdollisimman paljon, mutta tilavuus ei ylitä repun tilavuutta. 8 Geneettiset algoritmit - esimerkki Reppuun yritetään saada mahtumaan seuraavat esineet: Tiili Cokis Kirja Läppäri Kengät Paino 5 1 3 4 2 Tilavuus 1 2 3 4 5 4

9 Geneettiset algoritmit esimerkki Mallinnus: Validi ratkaisu on joukko esineitä, jotka eivät yhteensä ylitä repun tilavuutta. Ratkaisu voidaan mallintaa bittivektorilla, jossa 0 tarkoittaa, että kyseisen indeksin määrittämää esinettä ei pakata reppuun ja 1 tarkoittaa, että kyseinen esine pakataan. Nyt vektori on kromosomi, vektorin kentät ovat geenejä ja bititovat alleeleja. Esimerkki: Oletetaan, että esineet mallinnetaan samassa järjestyksessä kuin edelle, eli: Tiili cokis kirja läppäri kengät 0 1 0 0 0 Tässä ratkaisussa vain cokis on otettu reppuun mukaan, ja näin ollen reppu painaa 1 yksikön ja sen tilavuudesta on käytetty 2 yksikköä. Ratkaisu on validi, sillä tilavuusrajoite ei ylity, mutta ratkaisu ei varmasti ole optimaalinen. 10 Geneettiset algoritmit - esimerkki Mutaatio muuttaa ratkaisua. Mutaatio kohdistuu yleensä yhteen geeniin, mutta voi kohdistua myös koko kromosomiin. Mutaatio riippuu aina valitusta mallinnuksesta, sillä se vaihtaa geenin alleelin toiseen. Bittivektorin tapauksessa mutaatio on selkeä: 0 vaihtuu 1:ksi tai toisinpäin. Esimerkki: mutaatio 0 1 0 0 0 0 1 1 0 0 Nyt reppuun on pakattu cokiksen lisäksi kirja, ja reppu painaa 4 yksikköä. Tilavuudesta viedään 5 yksikköä, joten ratkaisu on validi. 5

Geneettiset algoritmit - esimerkki 11 isä Risteytys yhdistää eri ratkaisuja. Yksinkertaisimmillaan risteytyskohta arvotaan, ja ratkaisun puoliskat yhdistetään, jolloin tuloksena on kaksi uutta ratkaisua. Risteytykseen osallistuvia ratkaisuja sanotaan vanhemmiksi, ja tuotettuja ratkaisuja jälkeläisiksi. Esimerkki: 0 1 1 0 0 1 0 0 0 1 äiti lapsi 1 lapsi 2 0 1 0 0 1 1 0 1 0 0 Geneettiset algoritmit - esimerkki 12 Fitness-arvolla mitataan ratkaisun hyvyyttä. Reppuesimerkissä fitness-arvo on suoraviivaisesti laskettavissa: mikäli tilavuutta ei ole ylitetty, ratkaisu on sitä parempi mitä painavampi se on. Yleensä fitness-arvon laskeminen ei ole yhtä suoraviivaista, eikä arvojen perusteella voida tehdä vertailua, ts. jos ratkaisu A saa fitness-arvon 1 ja ratkaisu B arvon 10, todennäköisesti B ei kuitenkaan ole 10 kertaa parempi kuin A. Fitness-arvoilla voidaan kuitenkin järjestää ratkaisut. Edellisen kalvon ratkaisuille voidaan laskea hyvyysarvot: Isä-ratkaisu sisältää cokiksen ja kirjan 1 + 3 = 4 Äiti-ratkaisu sisältää tiilen ja kengät 5 + 2 = 7 Lapsi 1 sisältää cokiksen ja kengät 1 + 2 = 3 Lapsi 2 sisältää tiilen ja kirjan 5 + 3 = 8 yksikköä 6

Geneettiset algoritmit - esimerkki 13 Luonnonvalinta toteutetaan karsimalla huonot yksilöt pois. Helpoimmillaan pidetään vain populaation parhaat yksilöt, eliitti, ja karsitaan suoraan huonoimmat pois. Tällöin kuitenkin on riski, että algoritmi konvergoituu liian nopeasti. Jotta populaatiossa olisi riittävästi hajontaa, toteutetaan valinta todennäköisyyksiin perustuvalla valinnalla. Yleensä tähän yhdistetään elitismi. Esimerkki: Tarkistetaan, ovatko ratkaisut valideja: Isä-ratkaisu sisältää cokiksen ja kirjan 2 + 3 = 5 Äiti-ratkaisu sisältää tiilen ja kengät 1 + 5 = 6 Lapsi 1 sisältää cokiksen ja kengät 2 + 5 = 7 Lapsi 2 sisältää tiilen ja kirjan 1 + 3 = 4 Kaikki tilavuudet ovat alle sallitun (9). Lapsi 2 on paras yksilö (fitness-arvo 8); valitaan se eliittinä suoraan seuraavalle kierrokselle. Lopuille (isä, äiti, lapsi1) määrätään todennäköisyydet niiden fitness-arvojen perusteella. Ohjelmistoarkkitehtuurit 14 Ohjelmistoarkkitehtuuri on ikään kuin ohjelmiston luuranko ISO standardi määrittelee arkkitehtuurin käsittävän järjestelmän peruskäsitteet tai ominaisuudet omassa ympäristössään, kuvattuna elementteinä, niiden välisinä suhteina ja suunnittelua ohjaavina periaatteina Arkkitehtuurin voidaan katsoa olevan ikään kuin laki, joka ohjaa järjestelmän toteutusta Arkkitehtuuria suunnitellessa sovitaan esim. tiettyjen teknologioiden käytöstä, tietorakenteiden käytöstä ja suunnittelumallien käytöstä 7

Ohjelmistoarkkitehtuurit 15 Ohjelmistoarkkitehtuurin pääasiallinen tarkoitus on vastata laatuvaatimuksiin Järjestelmä voidaan yleensä toteuttaa toiminnallisuuden puolesta hyvin monella eri tavalla, mutta nämä eri toteutustavat voivat olla laadultaan hyvin erilaisia Laatua arvioidaan eri ominaisuuksien perusteella, esim. muunneltavuus, tehokkuus, luotettavuus ja käytettävyys Arkkitehtuuri pyritään suunnittelemaan niin, että mahdollisimman moni laatuvaatimus täyttyy Ohjelmistoarkkitehtuurit 16 Arkkitehtuurityylit ja suunnittelumallit ovat hyväksi havaittuja ratkaisuja tiettyihin ongelmiin Arkkitehtuurityylejä käytetään yleensä ratkaistaessa korkean tason ongelmia, jotka käsittävät koko arkkitehtuurin, kun taas suunnittelumalleja käytetään paikallisempiin, muutaman komponentin käsittäviin ongelmiin Darwinissa on käytössä kaksi arkkitehtuurityyliä (viestinvälittäjä ja asiakas-palvelin) sekä viisi suunnittelumallia (Mediator, Façade, Strategy, Adapter, Template Method) 8

Ohjelmistoarkkitehtuurit tyylit ja mallit 17 Viestinvälittäjä Ohjelmistoarkkitehtuurit tyylit ja mallit 18 Asiakas-palvelin (Client-server) 9

Ohjelmistoarkkitehtuurit tyylit ja mallit 19 Façade Ohjelmistoarkkitehtuurit tyylit ja mallit 20 Mediaattori 10

Ohjelmistoarkkitehtuurit tyylit ja mallit 21 Strategia Ohjelmistoarkkitehtuurit tyylit ja mallit 22 Adapteri 11

Ohjelmistoarkkitehtuurit tyylit ja mallit 23 Template Method Ohjelmistoarkkitehtuurit - arviointi 24 Arkkitehtuurille ei voida antaa yksikäsitteistä laatuarvosanaa Yksi tunnetuimpia arkkitehtuurien arviointimekanismeja on ATAM. Eri sidosryhmät esittävät laatuvaatimuksia omasta näkökannastaan Vaatimukset ovat usein ristiriitaisia Laatuvaatimukset esitetään ATAM-arvioinnissa skenaarioiden avulla Skenaario kuvaa todennäköistä tilannetta jonkin tietyn laatuattribuutin suhteen Skenaarioille annetaan prioriteetti ja muutosskenaarioiden kohdalla arvioitu todennäköisyys 12

Darwin 25 Tarjoaa käyttöliittymän työkalun taustalla olevalle GA-moottorille. GA-moottori toteuttaa geneettisen algoritmin ja kehittää arkkitehtuurin. Darwinissa puolestaan on toteutettu rajapinnat GA-moottoriin sekä käyttöliittymä. Darwin on toteutettu Java-ohjelmointikielellä, joten Javan osaaminen on oleellista. Darwin on Eclipse plug-in, joten Eclipse API:n tunteminen on suureksi hyödyksi harjoitustyössä. Eri kaavioiden tuottamiseen käytetään Papyrus -plug-iniä, ja fitness-käyrän kuvaamiseen on käytetty JFreeChart -plug-iniä. Darwin 26 Generation 1..* 1..* Architecture FitnessValue Evolution Period Scenario MutationProbabilities 1..* Weights * Settings MODEL CONTROLLER VIEW Scenarios View Weights View Settings View Mutations View Generation View Evolution Controls Evolution Explorer 13

27 Darwin Use case diagram Evolution controls Class diagram Family tree Settings view Evolution explorer Menu group Mutations view Scenarios view Weights view Generation view 28 Darwin GA -moottori 14

Tehtävänanto - johdanto 29 Darwin-työkalua laajennetaan siten, että tehokkuutta voidaan arvioida skenaarioiden kautta Tehokkuusskenaarioina käytetään käyttötapauksia. Skenaarion katsotaan toteutuvan sitä paremmin, mitä nopeammin käyttötapauksesta suoriudutaan Jokaisesta käyttötapauksesta suoriudutaan tehokkaimmin nollaarkkitehtuurivaiheessa. Kun arkkitehtuuria parannellaan muunneltavuuden suhteen, sen tehokkuus laskee Tehokkuusskenaarioiden avulla arkkitehtuurisuunnittelua voidaan ohjailla arvottamalla tehokkuuskriittiset käyttötapaukset muita korkeammiksi Jotta tehokkuusskenaarioita voidaan käyttää, tulee toteuttaa niiden määrittely, tarvittavat muutokset käyttöliittymään, skenaarioiden tulkinta, skenaariofitness-arvon laskeminen ja fitness-arvon näyttäminen käyttäjälle Tehtävänanto skenaarion määrittely 30 Yksi käyttötapaus määrittelee yhden skenaarion. Käyttötapaus voi olla yksi (nolla-)arkkitehtuurin määrittelevistä käyttötapauksista, määrittelevän käyttötapauksen osa tai täysin uusi käyttötapaus. Käyttäjä määrittelee skenaariot antamalla tarvittavat sekvenssikaaviot, joissa yksi sekvenssikaavio kuvaa yhden käyttötapauksen eli skenaarion. Käyttötapaus on käytännössä sarja operaatioiden välisiä kutsuja, esim. keitäkahvia laitakahvikonepäälle mittaavesi mittaakahvi avaavesi lämmitäkahvi päivitänäyttö. Sekvenssikaavioon mahdollisesti tulevat toimintaok -tyyliset paluukutsut eivät kuulu skenaarioon. 15

Tehtävänanto skenaarioiden määrittely 31 HUOM! Uusia operaatioita tai operaatioiden välisiä riippuvuuksia ei voida määritellä skenaarioita määritellessä! Käytännössä siis uusi käyttötapaus tulee rakentaa olemassa olevien käyttötapausten pohjalta käyttämällä samoja kutsusekvenssejä tai niiden osia. Tehtävänanto - käyttöliittymä 32 Skenaariot syötetään erillisinä sekvenssikaavioina. Annetut skenaariot tulee voida tallentaa (esim. XML-muodossa tai sekvenssikaaviomuodossa) ja jälleen ladata Scenarios-näkymää tulee laajentaa siten, että nykyisten muunneltavuusskenaarioiden lisäksi se listaa myös tuotetut/annetut tehokkuusskenaariot ja mahdollistaa tehokkuusskenaarioiden lataamisen ja rangaistuskertoimien antamisen Listassa jokaiselle skenaariolle tulee olla nimi sekä sekvenssikaavion kutsujen määrä Weights-näkymään tulee lisätä kohta tehokkuusskenaarioille, ts. tehokkuusskenaariolle tulee voida antaa oma painonsa 16

Tehtävänanto skenaarion tulkinta 33 Kun skenaariot on annettu sekvenssikaavioina, ne tulee koodata muotoon, jonka GA ymmärtää GA:n käsittelemää koodattua muotoa käytetään tehokkuuslaskennassa Olemassa olevaa koodausta ja tulkintaa muunneltavuusskenaarioille voi käyttää pohjana, mutta on huomioitava, että tehokkuusskenaariot ovat luonteeltaan hyvin erilaisia Valitun koodaus/tulkintatavan tulisi olla joustava ja ottaa huomioon, että vastaisuudessa voidaan haluta lisätä erityyppisiä tehokkuusskenaarioita. Tehtävänanto fitness-arvon laskeminen 34 Fitness-funktioon lisätään uusi osafitness-funktio tehokkuusskenaarioiden fitness-arvon laskemiseen. Skenaariofitness-arvon käyttöönottoa säädellään painolla; mikäli paino on 0, osafunktiota ei luonnollisesti tule laskea mukaan. Muissa tapauksissa (paino > 0) tehokkuusskenaariofitness käyttäytyy kuten muutkin osafitness-funktiot, eli se lasketaan osaksi kokonaisfitness-arvoa. Tehokkuusseknaariofitness-arvot tulee rekisteröidä erikseen, jotta arvon kehitystä voidaan tarkastella ajon jälkeen. 17

Tehtävänanto fitness-arvon laskeminen 35 Tehokkuutta heikentäviä ratkaisuja rankaistaan seuraavasti: Jokaisesta luokkien välisestä kutsusta tulee rankaisu -1 Jokaisesta serverikutsusta lisärankaisu -s Jokaisesta viestinvälittäjän (dispatcher) käytöstä lisärankaisu -d Serveri- ja viestinvälittäjärankaisut tulee voida asettaa niin, että niitä voidaan joustavasti vaihtaa! Lähtökohtaisesti s ja d > 1. Huomaa, että kutsu luokasta rajapintaan katsotaan yhtäläiseksi suoran kutsun (luokasta luokkaan) kanssa. Ts. jos a b, ja b on eri luokassa kuin a, on skenaarion kannalta yhdentekevää, toteuttaako b jonkin rajapinnan vai ei. Tehtävänanto fitness-arvon laskeminen 36 Esimerkki: Asetetaan s = 2 ja d = 2. Oletetaan, että käyttötapauksessa on kutsu keitäkahvia laitakahvikonepäälle ts. keitäkahvia(){.. laitakahvikonepäälle(); }. Tapaus 1: keitäkahvia ja laitakahvikonepäälle ovat samassa luokassa: tehokkuusrankaisu 0 18

Tehtävänanto fitness-arvon laskeminen 37 Tapaus 2: keitäkahvia ja laitakahvikonepäälle ovat luokissa A ja B, luokkien välillä on suora kutsu tai keitäkahvia kutsuu B-luokan rajapintaa (jonka laitakahvikonepäälle toteuttaa): tehokkuusrankaisu -1 Tehtävänanto fitness-arvon laskeminen 38 Tapaus 3: keitäkahvia ja laitakahvikonepäälle ovat eri luokissa, ja luokkien välissä on ylimääräinen komponentti, esim. Adapteri: tehokkuusrankaisu: -1-1 = -2 (Kuva 15) Huom! Frankensteinin koodissa Adapteri-patterni esiintyy nimellä Proxy. 19

Tehtävänanto fitness-arvon laskeminen 39 Tapaus 4: keitäkahvia ja laitakahvikonepäälle ovat eri luokissa, ja laitakahvikonepäälle luokka on merkattu serveriksi: tehokkuusrankaisu: -1-2 = -3 Tehtävänanto fitness-arvon laskeminen 40 Tapaus 5: keitäkahvia ja laitakahvikonepäälle ovat eri luokissa ja käyttävät viestinvälittäjää kommunikointiin: tehokkuusrankaisu: -1-2-1 = -4 20

Tehtävänanto fitness-arvon laskeminen 41 Tapaus 6: keitäkahvia ja laitakahvikonepäälle ovat eri luokissa, ja laitakahvikonepäälle luokka on merkattu serveriksi. Lisäksi laitakahvikonepäälle-operaatiota tulisi käyttää Adapterin kautta: tehokkuusrankaisu -1-1 -2 = -4 Tehtävänanto fitness-arvon laskeminen 42 Tapaus 7: keitäkahvia ja laitakahvikonepäälle ovat eri luokissa, ja kommunikoivat viestinvälittäjän kautta. Lisäksi laitakahvikonepäälleoperaatiota tulisi käyttää Adapterin kautta: tehokkuusrankaisu -1-1 -1-2 = -5 21

Tehtävänanto fitness-arvon laskeminen 43 Käyttötapauksen lopullinen fitness-arvo on summa kaikista tehokkuusrangaistuksista, jotka lasketaan aina kahden operaation välisestä yhteydestä. Esim. Jos skenaario on yllämainittu keitäkahvia laitakahvikonepäälle mittaavesi mittaakahvi avaavesi lämmitäkahvi päivitänäyttö, saadaan tästä 6 eri operaatioiden välistä yhteyttä, joille jokaiselle lasketaan tehokkuusrankaisu esitetyllä tavalla, ja kokonaisrankaisu on näiden summa Ratkaisun (arkkitehtuurin) tehokkuusskenaariofitness-arvo on luonnollisesti kaikkien yksittäisten käyttötapaustehokkuuksien summa. Tehtävänanto - output 44 Työkalu näyttää reaaliajassa, miten arkkitehtuurien (yhteis)fitness-arvojen keskiarvo kehittyy Lisäksi on mahdollista erotella eri osafitness-funktioiden fitnesskäyrät, kun tulos on valmistunut Tehokkuusskenaarioiden erillistä fitness-käyrää tulee voida tarkastella vastaavasti kuin muitakin osafitness-funktioiden käyriä nykyisessä toteutuksessa Tehokkuusskenaariofitness tulee olla mukana yhteisfitnessin laskennassa 22

Tehtävänanto arvioitu työjakauma 45 Darwin: Syötteen antamisen toteutus, n. 20h Sekvenssikaaviot (antaminen, tallentaminen, lataaminen) Skenaario- ja painonäkymät Syötteen koodaus Frankenstein: Skenaariototeutus GA:lle n. 30h Koodaus ja sen tulkinta Fitness-funktion toteutus Koodin ymmärtäminen (Cromosome-tietorakenne) Darwin: Tulosteen antaminen n. 10h Fitness-käyrä Tehtävänanto - dokumentti 46 Dokumenttipohja on vapaamuotoinen. Dokumentista tulee ilmetä, mitä lisäyksiä/muutoksia koodiin on tehty kussakin eri vaiheessa, minne ko. muutokset/lisäykset on tehty (luokan nimi), ja miten uudet komponentit (erityisesti skenaarioiden (syötteen) koodaus ja tulkinta) on toteutettu Käytännössä tulee käydä läpi edellä olevat kohdat skenaarioiden määrittelystä tulosteeseen. Lisäksi koodiin tulee kommentoida tehdyt muutokset SELKEÄSTI. Muutetut/lisätyt kohdat tulee jokainen kommentoida alla olevaan tyyliin /** * * <Ryhmän jäsenten nimet> *<lyhyesti, mitä on lisätty/muutettu> *<lyhyt esittely koodin/muutoksen tarkoituksesta> */ 23

Arvostelu - minimivaatimukset 47 Hyväksytystä harjoitustyöstä saa 3p. Hyväksytyn harjoitustyön kriteerit ovat (pakolliset vaatimukset): Tehokkuusskenaariot (käyttötapaukset) pystyy syöttämään jotenkin Ei siis vaadita välttämättä sekvenssikaavioita, vaan riittää esim. teksti- tai XML-tiedosto. Skenaariot voi ladata työkaluun. Käyttöliittymässä Skenaarionäkymä on päivitetty niin, että syötetyt skenaariot voidaan nähdä listana. Serveri- ja viestinvälittäjäkertoimet voidaan antaa Skenaarionäkymässä. Skenaarioiden koodaus ja tulkinta on toteutettu toimivasti Arvostelu - minimivaatimukset 48 Skenaariofitnessin laskenta on toteutettu toimivasti Fitness-käyrään päivittyy myös tehokkuusskenaarioarvo ja tehokkuusskenaario-fitnessin saa tarvittaessa näkymään omana käyränään Weights-näkymä on päivitetty (tehokkuusskenaarioille oma kenttä) 24

Arvostelu - täydellisesti toteutettu tehtävänanto 49 Harjoitustyöstä voi saada maksimissaan 6 pistettä. Pakollisen osuuden lisäksi voi toteuttaa valinnaisia osuuksia, joilla voi nostaa pistemäärää. Tehokkuusskenaarioiden antaminen tehtävänannon mukaisesti sekvenssikaavioilla, ja skenaariot pystytään tallentamaan ja jälleen lataamaan (2 p) Käyttöliittymässä Skenaarionäkymä on päivitetty niin, että syötetyt skenaariot voidaan nähdä listana (1p) HUOM! Skenaarionäkymän listatoteutus on PAKOLLINEN, jos skenaarioiden syöttö muuten kuin sekvenssikaavioilla. Listatoteutus VALINNAINEN (saa lisäpisteen), jos syöttö sekvenssikaavioilla. Arvostelu lisäpisteet/kompensoinnit 50 Lisätehtäviä, joilla voi korvata valinnaisia toteutuksia tai kompensoida puutteita. (HUOM! Pisteitä voi saada MAX 6p, eli lisätehtävillä EI VOI nostaa kokonaispistemäärää yli 6 pisteen.): Skenaarioiden priorisoinnin toteuttaminen (priorisointi käyttöliittymän kautta, loogisinta käyttää Skenaario-näkymää) ja priorisoinnin ottaminen huomioon fitness-funktiossa(1p) Frankensteinia (eli GA-moottoria) voi käyttää myös komentorivin kautta. Tällöin loppuratkaisu eli luokkakaavio piirretään Frankensteinin UMLGenerator luokassa. Luokan koodi on kamalaa. Lisätehtävä: UML-kaavioluokan (UMLGenerator) siistiminen (1.5p) 25

Palautus 51 Harjoitustyö tulee palauttaa vastaavanlaisena pakettina kuin se on tällä hetkellä ladattavissa. Ts. ryhmien tulee toteuttaa muutoksensa koodiin, tallentaa paketti, ja palauttaa se harjoitustyön ohjaajalle. Zip-paketti tulee nimetä ryhmän mukaan esim: Virtanen_Nieminen_Koskinen.zip Dokumentti tulee olla mukana zip-paketissa. Paketin voi ladata joko verkkoon tai sen voi tuoda USB-tikulla ohjaajan työhuoneeseen TE213 arkisin klo 9-15.30 välisenä aikana. Harjoitustyö on palautettava viimeistään 9.12. 2011 26