Ohjelmistoarkkitehtuurit Kevät 2014 Kertausta Samuel Lahtinen http://www.cs.tut.fi/~ohar/ 1
Sisältöä Hieman uutta asiaa/kertausta harjoitustöiden pohjalta Kurssin avainasioiden pikakelaus Tentin rakennetta, kysymyksiä 2
Tiedon mallintamisesta Järjestelmien ideana usein liikutella tietoa Tiedon käsittelymuoto, välitysmuoto, rakenne tärkeässä osassa Arkkitehtuuripäätös/ratkaisu Viestit, rajapinnat, tieto+metadata, rakenteinen tieto..., malli Vaikuttaa ohjelmiston rakenteeseen, ohjaa komponenttien jne. tarkempaa suunnittelua Mitkä asiat kiinnitetään, missä on joustavuutta? määrät, tyyppi, eri arvot/skaalat/tietotyypit Mahdollistaa konkreettisen suunnittelun 3
Esimerkkijärjestelmä: Autojen huollot, ajanvaraus, huoltotunnit, varaosat, laskutus nysväystä puljaamista Tietovarasto Käyttöliittymää, huoltamo käpistelyä Käyttöliittymää, laskutus 4
Esimerkkijärjestelmä: Autojen huollot, ajanvaraus, huoltotunnit, varaosat, laskutus 5
Tietomalli? käsitteeellisestä mallista konkreettisiin malleihin, tietokantatasolle Tietokanta ei välttämättä tallenna tietoja muun järjestelmän käyttämässä muodossa Data Modeling: http://www.sei.cmu.edu/reports/09tn024.pdf Yksi esimerkki: http://www.agiledata.org/essays/agiledatamodeling.html 6
Kurssiyhteenvetoa 7
Kurssihenkilökunnan ajatuksia Videojutuista alkuun vähän liikaa hässääkkää ja häiriötä, luennoija meni sekaisin Jos jatkoa tulee, niin tää homma toiminee paremmin ATAMit/DCARit menivät pääosin mukavasti, hyvin valmistautunutta porukkaa jne. Aikataulujutut jne liikaa säätöä Työkalut vaihtoon, IDLE käsin HTML:n nysvääminen, jne. aunarista, saadaanko jostain toimiva julkaisujärjestelmä Viikkoharkat sujuivat pienen alkusäädön jälkeen ok Aikataulu turhan repaleinen 8
Harjoitustyön tavoitteista Arkkitehtuurin luomiseen tarvitaan sovellusalueen, toteutustekniikoiden, yleisten hyvien ratkaisujen tuntemista, Itsenäinen selvitystyö Miten tämä toimisi, löytyykö tähän hyviä ratkaisutapoja? Mitä tekniikoita/alustoja on olemassa asiaa x varten? Lainsäädäntöä, tietoturvaan liittyvää asiaa, jne. Puuttuu vielä jonkun harjoitustyön osan tarkempi suunnittelu ja toteuttaminen 9
Kurssin asiat pikakelauksena 10
Mitä on ohjelmistoarkkitehtuuri? http://www.lessonsoffailure.com/developers/avoid -asshole-architect/ 11
Arkkitehtuurien kuvaamisesta 12
Arkkitehtuurinäkökulmat ja kuvaustyypit Näkökulmat: Skenaarionäkymät Vuorovaikutus ulkomaailman kanssa Loogiset näkymät Ohjelmistoyksiköiden vastuut Prosessinäkymät Prosessit ja niiden vuorovaikutus "4+1" (Kruchten) Kehitysnäkymät Järjestelmän jakaminen eri kehittäjille UML Fyysiset näkymät Ohjelmiston jako eri laiteyksiköille, verkko Muuntelunäkymät Ohjelmiston laajentaminen ja muuntelu 13
4+1 Prosessinäkymä(process view) Järjestelmän toiminnan jako loogisiin prosesseihin Prosessien kommunikointi - kontrollin kulku Rakenteet ja instanssit -samasta prosessirakenteesta voi olla useita instansseja Tärkeä rinnakkaisuutta sisältävien järjestelmien kuvauksessa Järjestelmän suorituskyvyn ja skaalautuvuuden arviointi Kehitysnäkymä (development view) Kuvaa järjestelmän jakoa kehitysyksiköihin pakkaukset, ohjelmistotekninen rakenne Fyysinen näkymä (physical view) Järjestelmän prosessointiyksiköt ja niiden yhteydet Prosessointiyksiköiden sisältämät fyysiset ohjelmistot (komponentit, resurssitiedostot, tietokannat,...) 14
4+1, osa 2 Skenaarionäkymä(scenario view) Nitoo yhteen 4 muuta näkymää ( +1 ) Järjestelmän vuorovaikutus käyttäjien ja muiden järjestelmien kanssa tietyssä käyttöskenaariossa Kuvaa järjestelmän rajapinnat ympäristöönsä Looginen näkymä (logical view) Toiminnallisuuden jakautuminen eri rakenneosien kesken Komponenttien velvollisuudet Koskee sekä staattisia rakenteita (esimerkiksi luokkia) että dynaamisia rakenteita (esimerkiksi olioita) 15
Skenaarionäkymä: käyttötapauskaavio CarRentalSystem Reserve vehicle Deliver vehicle Client Return vehicle Clerk <<include>> Service Service 16
RentableItem Car RentableStorage regnumber RentManager reserve(car,client) release(car) engage(car) return(car) update() setreturned setreserved setactive setid PrivateClient id name address creditcard Transaction kind info setkind setinfo TransactionManager handletransaction * 1 1 1 creates uses * manages * 1 rents setreturned Database Feature code description * <<interface>> LocationControl getpos(car) ItemManager 1 0..1 setcar(car) start() stop() reserve() release() engage() return() lost() recover() * creates Garage GPSService controller Client Store service information Looginen näkymä (rakenne): luokkakaavio 17
Fyysinen näkymä, sijoittelukaavio An XML infrastructure for archives, libraries and museums: resource discovery in the COVAX project 18
Muunneltavuusnäkymä: luokkakaavio feature Adding new item feature palette FeaturePalette Feature code description seticon(featureicon) price(): Integer * 1 FeatureIcon draw iconinterface initializer initcode add(feature) NewFeature price(): Integer myfeature NewFeatureIcon draw myicon initialize() Main... f = new NewFeature(...); fi = new FeatureIcon(...); f.seticon(fi); featurepalette.add(f);... 19
Komponentit Komponentit ovat arkkitehtuurin perusyksiköitä, jotka liitetään toisiinsa tarjottujen ja vaadittujen rajapintojen kautta Rajapintojen tulisi määritellä paitsi kutsumuoto myös sopimus rajapinnan käytöstä (esi- ja jälkiehdot) Komponentteja voidaan räätälöidä sen alkutilaa muuttamalla, vaihtamalla sen vaadittuihin rajapintoihin liittyviä muita komponentteja tai periyttämällä siitä erikoistettu komponentti Ohjelmistoarkkitehtuurit 2014 20
Suunnittelumalleista Suunnittelumallit antavat hyväksi havaittuja ratkaisuja yleisiin suunnitteluongelmiin Käytä suunnittelumallia vasta kun ongelma on selvästi ymmärretty Suunnittelumallit ovat kokemusperäistä tietoa, eivät innovaatioita Antisuunnittelumallit auttavat tunnistamaan ongelmakohtia Suunnittelumallit organisoidaan mallikieleksi käytön helpottamiseksi 21
Mitä pitää tietää Suunnittelumallien ulkoaopettelu tenttiin ei tarpeellista, ymmärrys ideasta ja käyttötavasta olennaisempaa Löydä annettu malli (patlet-kuvaus mallista annettuna) suunnittelumallin pidempi kuvaus, mitä ongelmia käytöstä (huolettomasta) saattaa olla? Komponenttien vuorovaikutus ja niihin liittyvät suunnittelumallit, perusideat koneenohjaus, pilvimaailma 22
Arkkitehtuurityylit Mitä löytyy, mihin soveltuvat, mikä perusidea? Kerros-, tietovuo-, asiakas-palvelin (eri muotoineen), viestinvälitys, tulkki jne. 23
Kerrosarkkitehtuurit Kerrosarkkitehtuuri (layer/tier architecture): Järjestelmän organisointi käsitetasoltaan nouseviin kerroksiin.. Ohjelmistoarkkitehtuurit 2014 30.4.2014 24
Tietovuoarkkitehtuurit (pipes and filters) Tietovuoarkkitehtuuri koostuu komponenteista (filter), jotka tuottavat ja kuluttavat tietoalkioita, ja tietoalkioita komponentilta toiselle kuljettavista väylistä (pipe). filter pipe filter pipe filter pipe pipe filter pipe filter Ohjelmistoarkkitehtuurit 2014 30.4.2014 25
Viestinvälitysarkkitehtuuri: perusidea rekisteröidyt komponentit 1) luo viesti 2) lähetä välittäjälle Komponenttien yhteinen rajapinta: receive(message) 3) päätä vastaanottaja(t) ja välitä viesti sille/niille rekisteröidyt komponentit 4) vastaanota Viesti Viestinvälittäjä 5) tulkitse/ prosessoi viesti Ohjelmistoarkkitehtuurit 2014 30.4.2014 26
Tulkkiarkkitehtuurin perusidea toimintakuvauksen sisäinen esitys Tuloste Jokin toiminnallinen kuvaus (teksti, XML, graafinen, ym.) Tulkki kutsuu Konkreettinen suoritusalusta noudattaa toteutus Syöte Kielen määritys Ohjelmistoarkkitehtuurit 2014 30.4.2014 27
Muunneltavuutta ja käärimistä Muunneltavuuden hallinnan ideat, muunneltavuuspisteet ja niiden dokumentointi Ylläpito ja evoluutio, muunnetavuus olemassa olevaan ohjelmistoon, kääriminen 28
Arkkitehtuurien arviointi Mitä tavoitteita, mitä tapoja on? Minkälaisiin kysymyksiin halutaan vastauksia? 29
Tuoterungot Mikä idea, miten voidaan varautua eri versioihin/eri alustoihin? 30
Ohjelmistokehykset Mikä idea, eri kehystyyppejä Hyödyt / ongelmat? Käyttäjä tai kehittäjä, mitä huomioita? 31
Yritysjärjestelmäjutut ja ekosysteemit Tiedon kulkua, integrointia, jne. Ekosysteemiajatelma Miten ekosysteemi vaikuttaa ohjelmistoon? (ohjelmistoalusta+muut vaikutukset) 32
Tent(e)istä
Mitä kuuluu tenttialueeseen? Karkeasti kaikki luennoilla käydyt jutut (myös spesiaalisessiot&vierailuluennot) Viikkoharjoitusten juttuja, kaikki normisessioiden perusjutut (tenttitehtävä voi olla viikkoharjoitustehtävän kaltainen) 34
Tenttiarkisto & kysymystyyppejä Kurssin sivuilta löytyy tenttiarkisto: http://www.cs.tut.fi/~ohar/tenttiarkisto Muutama esseehtävä tehtävä Joku kuvanpiirto tai kuvan ymmärtämistehtävä Väärin-oikein-väittämiä Suunnittelutehtävä tai olemassa olevan suunnitelman parantelu/muuttaminen 35
Esimerkkitehtäviä Alla on kuva järjestelmästä XYZ. Mitä arkkitehtuurityyliä on käytetty, entä mitä muita suunnitteluratkaisuita bongaat? Kuvaa lyhyesti esimerkin avulla tietovuoarkkitehtuuri (pipes-and-filters). Mitä etuja ja haittoja on tällä arkkitehtuurityylillä? Selitä lyhyesti mitä ongelmia voi liittyä valmiin tuoterungon käyttöön. Selitä lyhyesti mitä ongelmia voi liittyä tuoterungon kehittämiseen? Kerro lyhyesti millaisia erikoistamistekniikoita ohjelmistokehyksissä käytetään. Alla on kuvattu järjestelmä ja siihen liittyviä haasteita ja ongelmia. Olet saanut myös kokoelman erilaisia potentiaalisia patterneita/suunnittelumalleja. Mitä näistä käyttäisit, missä ja miksi? 36
Yhteenveto Tentti 7.5. klo 10-13, ei tarvitse ilmoittautua POP- ROCKissa Tentti alkaa tasan klo 10 Tentistä pääsee pois aikaisintaan 10:30 Materiaali-sivuilla koosteena joitakin kiinnostavia kirjoja ja koostetta julkaisuista yms. 37
Kysyttävää?