Abstraktiotason nostoa, mallipohjainen ohjelmistokehitys Samuel Lahtinen Ohjelmistoarkkitehtuurit 20.4.2016
Viimeinen oikea luento
Erilaisia mallipohjaisuuteen viittaavia juttuja Low code platforms, vähäisen koodin alustat Visuaalinen ohjelmointi Mashup-ohjelmointi, sovellusten koostaminen Erilaiset mallipohjaiset tekniikat Domain specific models Model-based engineering, Model-driven engineering, mallipohjaisuus ja sen eri asteet Mallien osittainen käyttö Kokonaan malleihin perustuva ohjelmistokehitys Ajoaikainen mallien tulkinta vs. koodin tuottaminen mallien pohjalta
Lisää kysymyksiä Mihin käyttötarkoitukseen esimerkiksi mallipohjaiset tekniikat mielestäsi sopivat? Mitkä olisivat niistä saavutetut suurimmat hyödyt? Low-code platforms, mitä hyviä puolia niissä voi olla, entä huonoja? Mikseivät erilaiset mashup-alustat saavuttaneet juurikaan suosiota vaan katosivat?
Mallipohjainen ohjelmistokehitys Hypetetty ja hehkutettu reilu 10 vuotta sitten, hopealuoti joka tuo ohjelmistokehityksen loppukäyttäjällekin Mallinnustyökalut ja myös UML olivat vielä hyvin epäkypsiä Hautautui pikkuhiljaa, mutta alkanut ilmestyä pintaan uudestaan Esim. laitteistopuolella paljon intoa Matlab, Simulink mallien hyödyntäminen osana toteutusta Yleisesti käytetty huonompi vaihtoehto, joku systeemi-insinööri tai matemaatikko mallintaa prosesseja jne. ja sitten koodari koittaa tulkita malleja ja koodailla ne esimerkiksi c:llä saadaan moninkertaistettua virheiden mahdollisuudet (kaikista huonoin vaihtoehto, mitään ohjelmistoista ymmärtämättömät kaverit koodaavat itse toteutuksen )
Mallipohjainen ohjelmistokehitys Mallipohjainen (model-based), kaikkea mallien avulla tehtävää koodin tuottamista tai mallien ajoaikaista käyttöä Mallien hyödyntämisen iloja: Korkeamman abstraktiotason käyttö Saman toteutuksen/mallin hyödyntäminen usealle eri alustalle ja jopa ohjelmointikielelle Mallit ovat muutakin kuin dokumentaatiota, mallit osana toteutusta mallit ja toteutus vastaavat toisiaan, ei tarvetta päivitellä ees taas Jäljitettävyysvaatimukset, vaatimusten jäljittäminen helpompi kytkeä toteutukseen mallien kautta Mallien simulointi ja testaaminen koodi on kunnossa ja tekee mitä pitää Visuaalisuus voi auttaa
OMG ja MDA OMG:n oma näkemys mallikeskeisestä suunnittelusta, MDA Modeldriven architecture Sovellus tehdään mallintamalla ja mallitransformaatioita määrittelemällä Korkeimmalla tasolla toimialuekohtaiset mallit (domain spesific models ), joilla mallinnetaan toiminnallisuutta jne. korkealla tasolla, jopa loppukäyttäjän toimesta
Esimerkkejä Mallipohjaisuutta http://se.mathworks.com/products/simulink/ http://www.ni.com/labview/ OMG:n visio http://www.omg.org/mda/ Luennoilta tuttua lapsille suunnattua https://scratch.mit.edu/ Visuaalista ohjelmointia Raspberrylle (toisaalta Low code platform-alustaajatelmaa): https://projects.wyliodrin.com/wiki/languages/visual Blockly, johon edellämainittukin perustuu (koodin tuottamista JavaScript, Python, and Dart) https://developers.google.com/blockly/about/examples Lego Mindstorms: http://www.lego.com/en-us/mindstorms/learn-to-program
Simulink ja Matlab http://ctms.engin.umich.edu/ctms/index.php?example=suspension§ion=simulinkcontrol
Visuaaliset kielet ja konfigurointiympäristöt Kielen määrittely, mikä on sallittua ja mikä ei on usein fiksua tehdä malleja hyödyntämällä Säännöstökokoelma, instanssi määrittää mitä halutaan tehdä Konfiguraatioiden hallinta, toiminnallisuuden yhdistäminen jne.
Simulink-mallit ja niiden hyödyntäminen Usein tarvetta tehdä sovittimia, joilla mallit/niistä tuotettu koodi saadaan liitettyä mukaan muuhun järjestelmään Arkkitehtuurisuunnittelua ja ohjelman rakenteen suunnittelua Ongelmana miten välittää tietoa mallille ja mallista siististi ja oikeaan aikaan
Yksinkertainen esimerkki, karsittu sijoittelukaavio D E A B C
Kielen määrittely noudattaa (ilmentymä) Säännöt MOF yksinkertaistettu MOF in MOF Class 1 M in M * AssocEnd noudattaa (ilmentymä) L in M noudattaa (ilmentymä) Association 1 2 multiplicity kind P in L noudattaa (ilmentymä) P:n ilmentymä visualisointi A MySystem B 13
UML:n mallit, staattiset Luokkakaaviot: ohjelman luokkarakenne, funktiot jne, osien välisiä suhteita Olio-kaavio, ajoaikaisia suhteita Olio-, komponentti-, jne. Kaavioiden instanssiesitykset, voidaan ketoa esimerkiksi mitkä asiat kytketään toisiinsa ja miten (porttien käyttö jne) voidaan luoda automaattisesti päivityssuhde muuttujien välille Esimerkki: Rational Rhapsody luo Mediator-patternin mukaelmalla suhteet ja rajapinnat, joiden avulla päivitys tapahtuu ilman suoran riippuvuuden syntyä
UML:n mallit, dynaamiset Tilakaavioiden käyttö toiminnallisuutta kuvaamaan Luokan toiminnallisuuden kuvaaminen tilakaaviolla, reaktiiviset järjestelmät Tilakaaviot toimivat hyvin esimerkiksi sulautettujen järjestelmien (osa)toiminnallisuuden kuvaamiseen Aktiviteettikaaviot, kuten tilakaaviotkin Sekvenssikaavioiden käyttö harvinaisempaa
Mallipohjaisuus yksinkertaisimmillaan Otetaan koodin tuottamista tukeva mallinnustyökalu (esim. PTC, Rational Rhapsody, ) Piirretään staattinen rakenne luokkakaavioiden avulla Toiminnallisuuden määritteleminen käyttämällä tilakaavioita
Pikainen esittely tilakaavioiden maailmasta stm statechartsample Initial [heatingbuttonpressed] Heating entry / heateron exit / heateroff [temperarature > 350] [temperature < 300] Ov erheating entry / warninglighton exit / warninglightoff entry / coolingfanon exit / coolingfanoff [3min timeout] /heatingfinished [cancelbyuser] [cancelbyuser] Final
Demoesimerkki
Takaisinmallinnuksen käyttö Yksinkertainen perusmalli, luokkakaavioiden ja rakenteen mallintaminen mallinnustyökalulla Koodin tuottaminen ja takaisinmallinnuksen käyttö koodin muutokset näkyvät mallissa, mallin muutokset koodissa Molemmat pysyvät ajan tasalla
Mallipohjainen ohjelmistoprosessi Käyttötapauksien määrittely Sekvenssikaavioiden käyttö käyttötapausten tarkentamiseen Ohjelmisto- ja laitteistokomponenttien koostaminen käyttäen esimerkiksi sijoittelukaavioita Kohti toteutusta luokkakaavioita käyttäen Toteutus joko koodaillen tai käyttäen malleja toteutuksen määrittelyssä
Graafisuus, mallipohjaisuus Vaatimusten tarkastelu graafisena vs. loputtomina listoina, helpompi nähdä mitkä vaatimukset riippuvat toisistaan Vaatimusten jäljittäminen, vaatimusten kytkeminen malleihin (malli tyydyttää vaatimuksen) Jos mallista tuotetaan koodia, vaatimusten näkyminen suoraan kooditasolla
Jotain MDE-juttuja http://ftp.icm.edu.pl/packages/ace/ace/pdf/gei.pdf http://www.idt.mdh.se/kurser/isd_cdt417/files/articles/bystudents/ Hutchinson_et_al-MDE%20practices%20in%20industry.pdf http://www.infoq.com/articles/8-reasons-why-mde-fails
Suunnittelutehtävä Internet of things henkistä suunnittelua: laitteiden netti on uusimpia hype-sanoja ja haluatte ratsastaa aallonharjalla. Kun tähän yhdistää jo 90-luvulta tutun älykotiajatuksen, päästään sovellukseen, jolla tehdään isot rahat. Tehtävänänne on suunnitella uuden ajan älykodin konfigurointiin ja hallintaan soveltuva ohjelmisto, jossa loppukäyttäjä voi yhdistellä erilaisia kodin älykkäitä laitteita ja luoda niille uusia sääntöjä. Lisäksi järjestelmä osaa hakea esimerkiksi sääennustuksia ja sähkön hinnan. Esimerkkiskenaarioita: ulkovalaistus syttymään, kun valittujen kännyköiden kanssa tullaan pihalle tai poistutaan sisältä (auringon laskun ja auringon nousun välisenä aikana). Lämmitys pois päältä huoneistossa arkisin työajan aikana, jos ulkolämpötila yli tietyn rajan (eikä huonelämpö laske alle viidentoista). Mitkä asiat olisivat käyttäjän määriteltävissä, missä muodossa käyttäjä määrittelisi asioita? Minkälainen rakenne ohjelmallenne tulisi? (miten käyttäjän tekemät määritykset otettaisiin käyttöön?) Ajoaikaisesti käytettäviä malleja/määrityksiä, käännetäänkö johonkin muotoon vai mitä tehdään?
Ekosysteemijuttuja
Mikä ekosysteemi? Ohjelmistoalusta ja yhteisö, joka tuottaa sovelluksia alustalle Laajentavat alustaa, tekevät alustalla toimivia sovelluksia, voivat olla avoimia/suljettuja Alunperin käyttöjärjestelmä ja sen palvelut Siihen päälle ajureita, apupalveluita Sovelluksia, niitä hyödyntäviä muita sovelluksia jne. Ei tehdä enää pelkästään oman firman sisällä, laajentuminen organisaation ulkopuolelle mukana sosiaalinen ekosysteemipuoli (community) 27.4.2016 Ohjelmistoarkkitehtuurit 2016 25
Määritelmää David G. Messerschmitt and Clemens Szyperski (Software ecosystems kirja): A set of businesses functioning as a unit and interacting with a shared market for software and services, together with relationships among them. These relationships are frequently underpinned by a common technological platform and operate through the exchange of information, resources, and artifacts. Lungu : A collection of systems, which are developed and co-evolve in the same environment (company/social/technical) Jan Bosch: Software ecosystems take various forms but typically consist of a company providing a software platform and a community of external developers providing functionality that extends the basic platform. 27.4.2016 Ohjelmistoarkkitehtuurit 2016 26
Ekosysteemiajatelma, muutakin kuin käyttöjärjestelmätaso Ekosysteemiajattelua Tarjotaan kehitystyökalut (+rajataan asioita) Tarjotaan valmiita ratkaisumalleja, näin ohjelma jaetaan esim. MVC:n, MVVM:n mukaisesti/active record, näin käsittelet asian x Sovelluskauppa/sovellusten keskitetty haku & hallinta Vaatimukset, mitä sovellus saa/ei saa tehdä Käyttöliittymävaatimuksia ja toiminnallisia vaatimuksia (mitä tapahtuu mistäkin napista, mitä tapahtuu, kun ohjelmasta poistutaan jne.) Mahdollinen ohjelmistojen verifiointi 27.4.2016 Ohjelmistoarkkitehtuurit 2016 27
Käyttöjärjestelmä ja sen vaatimuksia 27.4.2016 Ohjelmistoarkkitehtuurit 2016 28
Esimerkkejä ekosysteemeistä Facebook, Google, Windows 8, Android, Linux eri versioineen, i-tuotteet, konsolit Raspberryt, Arduinot (alusta ja fyysisiä & ohjelmistokomponentteja, yhteisöä) Pilvimaailman tuotteet 27.4.2016 Ohjelmistoarkkitehtuurit 2016 29
Pilvinen ekosysteemi esimerkki http://www.cloudel.com/dell-launches-new-version-of-openstack-powered-cloudsolution/ 27.4.2016 Ohjelmistoarkkitehtuurit 2016 30
Taksonomiaa Entä nykyaikaistettuna? Software Ecosystem Taxonomy (Bosch, 2009) 27.4.2016 Ohjelmistoarkkitehtuurit 2016 31
Alusta ja ekosysteemi ohjaavat arkkitehtuuria Sovellusten kehittämisessä ajateltu käytettävän tiettyjä ratkaisutapoja ohjaa toteutettavan ohjelman arkkitehtuurin tähän suuntaan. Helpottaa suunnittelua, mutta jos yritetään tehdä jotain ajatellun muotin ulkopuolelle ulottuvaa, asiat monimutkaisempia Ekosysteemin valintaa, tuki, stabiilius, jatkokehitys, soveltuvuus Useat ekosysteemit ja niiden yhteensovittaminen 27.4.2016 Ohjelmistoarkkitehtuurit 2016 32
Sopimuksia, vaatimuksia Vaatimuksia: valmiina annettu arkkitehtuuri, työkalujen mahdollisuudet, aihealuerajoitteet, UI, toiminnallisuus, sisältö, teknologia/laitteiston käyttö ( mitä sovellus voi tehdä) http://msdn.microsoft.com/en-us/library/windows/apps/hh694083.aspx https://developer.apple.com/app-store/review/ https://developer.apple.com/design/tips/ 27.4.2016 Ohjelmistoarkkitehtuurit 2016 33
Oma ekosysteemi? Esimerkki: Tehdään universaali kalenterisovellus, jossa voi ripustella muistilappuja jne. Kalenterioikeuksien jako, Facebook-yhteydet jne. Tietojen säilöntä palvelinpäässä (pilvessä tms.) Alustat: puhelimet (i-sellaiset, Win, Android), tabletit, läppärit/pöytäkoneet Samoja toimintoja, ilmettä, mutta noudatettava kohdealustan sääntöjä Mitä huomiota, mistä osasta tulisi järjestelmän ekosysteemiosio? 27.4.2016 Ohjelmistoarkkitehtuurit 2016 34
Oman ekosysteemin osia Varsinaiset sovellukset, front-end, käyttöliittymäpuoli Yhteinen osa, tiedon käsittely, tallennus, haku jne. Tämä osa voidaan toteuttaa & suunnitella omien halujen mukaan Käytetyt tekniikat, kielet, toimintatavat, arkkitehtuuriratkaisut 27.4.2016 Ohjelmistoarkkitehtuurit 2016 35
Sovelluskohtaiset osat, vaatimuksia? Mitä erilaisia vaatimuksia/mahdollisuuksia erikoistettujen osien toteuttamisessa tulee vastaan? Käyttöliittymä ja sujuvuus myyntivaltteina, erikoistetut versiot joka alustalle Tekniikka- ja kieli (millä kielellä käyttäjän osa toteutetaan osaaminen (HTML5, JavaScript, Obj-C, Java, C#, C++ ) Käyttöliittymäpuoli: yhtenäisyys vs. eri alustojen omat vaatimukset Ulkopuoliset kehittäjät/community: rajapintojen dokumentointi, esimerkit, tietoturvallisuus, varmennetaanko ulkopuolinen ohjelmisto jne. Voidaanko tehdä jotain geneeristä yhteistä osaa, jota kaikissa järjestelmissä voitaisiin hyödyntää? esim. Tiedonsiirto, käsittely, paketointi 27.4.2016 Ohjelmistoarkkitehtuurit 2016 36
Ekosysteemiajattelua, Atom.io Avoimen lähdekoodin koodieditori Painottuu voimakkaasti plugineihin, Node.js GitHub-integraatio, pakettien hallinta mukana, tuo mukanaan tavan julkaista ja kehittää lisäosia Pakettien hallinta hieman jalostettu npm (Node Package Manager), hieman enemmän parametreja, asennushakemisto atomin alla & hakee paketteja suoraan Githubista Electron framework pohjalla(http://electron.atom.io/) (myös Visual Studio Codessa) https://atom.io/docs
Yhteenvetoa Ekosysteemi ajatusmalli (muutakin kuin kasa tarjottua koodia) yhteisö Ekosysteemit ja sovelluskehitys, vaatimukset & hyödyt, ekosysteemi ja oletusarkkitehtuuri Ekosysteemiajattelu omissa projekteissa? 27.4.2016 Ohjelmistoarkkitehtuurit 2016 38