On vuosi 2021, ja olemme lähettämässä ihmisiä Marsiin. Tämän piti olla tulevaisuus? Miksi silti koodaamme sovelluksemme pääosin edelleen käsin? Entä jos vain määritteltäisiin haluttu lopputulos, ja annettaisiin algoritmien, logiikan ja tekoälyn hoitaa homma?

Mallipohjainen kehittäminen (Model driven development, MDD) on lähestymistapa, jossa sovellus määritellään joukkona malleja, ja  joista transformaatioiden avulla muodostetaan sovelluksen lähdekoodi ja/tai valmis ajettava sovellus. Kantavana ajatuksena on, että mallimäärityksistä voidaan johtaa suoraan toimiva sovellus. [MacDonald et al., 2005] [Mellor et al., 2003]

Tai yksinkertaisemmin: Syötä määritykset taikalaatikkoon, ja saat lopputuloksena toimivan sovelluksen.

 

Malli (Model) sisältää käsityksesi rakennettavasta sovelluksesta. Malleja voi pitää eräänlaisena vaatimusmäärityksenä: Minkälaista dataa sovellus käsittelee, mitä prosesseja se toteuttaa ja muutamia muita yksityiskohtia. Transformaatiot ovat joukko prosesseja, algoritmejä, logiikkaa ja nippu tekoälyjä jotka tutkivat mallisi, ja tuottavat halutut lopputulemat (outputs); tärkeimpänä tietenkin toimiva sovellus.

Menetelmää voi hyödyntää esim. raudan suunnittelussa, sulautettujen järjestelmien rakentamisessa tai missä tahansa muussa ohjelmistotuotannossa, mutta tässä artikkelissa keskitytään erityisesti liiketoimintasovellusten rakentamiseen (Line-of-business apps, LOB apps), joita tarvitaan liiketoiminnan päivittäisessä pyörittämisessä.

Tutkimusten mukaan MDD vähentää noin 40-70% sovelluskehitykseen liittyvää työtä (engl. effort), ja mahdollistaa suurempien sovellusten rakentamisen vähemmillä resursseilla. [Parviainen et al. 2009] [Domingo et al. 2020]. Esitetyt tulokset ovat linjassa omien kokemusteni kanssa – itse odotan noin 50% säästöä projektissa, jossa menetelmää hyödynnetään täysimääräisesti.

Mihin MDD sopii?

Paras hyöty saadaan keskikokoisten ja suurten sovellusten kehityksessä, ja menetelmä sopii sekä uusien sovellusten rakentamiseen, että sovellusmodernisointeihin. Tyypillisiä tämän kokoluokan sovelluksia ovat esimerkiksi tiedon tallennus- ja käsittelyjärjestelmät (systems-of-records), laskutus ja maksuliikenne, varastonhallinta, markkinointi, CRM ja HR-järjestelmät, sisällönhallinta, tuki- tai tiketöintijärjestelmä, tuotehallinta, ERP:it ja muut vastaavankaltaiset suurehkot sovellukset.

MDD siis loistaa erityisesti isoissa sovelluksissa niiden toteutuksen vaatiman suuren työmäärän takia. Itse käytän menetelmää lähes kaikissa projekteissani – pienissä ja suurissa – automatisoimaan joka sovelluksessa toistuvat tehtävät ja sovellusrakenteet.

Tuottavuusloikka

Menetelmää käytettäessä strategia on keskittyä olennaiseen, ja automatisoida loput. Kun malli on määritelty, odotan saavani 80% sovelluksesta valmiina kirjoittamatta itse riviäkään koodia. Loppu 20% on olennainen osuus, joka on oikeasti järkevää ja ihmisen huomion arvoista työtä.

Olennaiset

Kutsun olennaisiksi toimintoja, jotka oikeasti tuovat rahaa pöytään, tai aiheuttavat suoria kustannussäästöjä. Syyt, miksi sovellus on olemassa. Toiminnot, joilla on oikeasti arvoa liiketoiminnalle. Tyypillisesti noin 20% sovelluskoodista voidaan luokitella olennaiseksi. Olennaisiin voi kuulua esimerkikiksi keskeisten käyttötapausten käyttäjäkokemuksen virittäminen, back end prosessien optimointi, tietyt ei-triviaalit integraatiot tai ulkoisten API-rajapintojen kutsut osana prosessiasi.

Tukitoiminnot

Tavoitteena on automatisoida sovelluksen tukitoimintojen tuottaminen, jotka kattavat tyypillisesti noin 80% sovelluksesta. Nämä sisältävät mm. sovelluksen ei-toiminnalliset vaatimukset (eli vaatimukset, jotka eivät tuota/säästä senttiäkään rahaa, mutta on silti tehtävä), sovelluksen tiedon käsittelyyn ja prosesseihin liittyvät perusoperaatiot, käyttäjä- ja sovellushallinta, ytimen API-rajapinnat sekä toiminnot joita ei käytetä usein, tai niitä käyttää vain muutama käyttäjä. Tämän lisäksi tukitoiminnoiksi voidaan laskea joukko vakiotoimintoja, joita tarvitaan aina liiketoimintasovelluksissa.

Aikaisempi blogikirjoitukseni “Menetelmä legacy-sovellusten uudistamiseksi” käsittelee toiminnallisuuden jakamista olennaisiin ja tukitoimintoihin hieman tarkemmin. Lue!

Menetelmän hyödyt

  • Tyypillisesti ~80% sovelluksesta tuotetaan transformaatioilla suoraan määrityksistä.
  • Laadun parantuminen, koska automaattisesti tuotettu koodi on virheetöntä. Joudut esimerkiksi testaamaan ainoastaan ihmisen kirjoittamat osuudet, joka väistämättä vähentää työtaakkaa ja kehitysiteraatioita.
  • Järjestelmä on helpompi ymmärtää, ja siitä on helpompi keskustella. Transformaatiot ovat deterministisiä (eli sama määritelmä johtaa aina samaan lopputulokseen), ja koodi on koherenttia eli sama tehtävä ratkaistaan aina samalla tavalla. Automaattisesti tuotettu koodi ei sisällä eri kehittäjien näkemyksiä siitä, miten vakio-ongelma (kuten vaikkapa tietokannan luku ja/tai kirjoitus) tulisi juuri tällä kertaa toteuttaa.
  • Helpottaa suunnittelutaakkaa: Sovelluksen arkkitehtuuri ja ratkaisumallit ovat valmiiksi parhaiden nykykäytäntöjen mukaisia, ja sisältävät vuosikymmenten kokemuksen liiketoimintasovellusten rakentamisesta. Mahdollistaa keskittymisen olennaiseen.

Eli?

Pitäisikö meidän käyttää MDD:tä projekteissamme? Lyhyt vastaus on: Kyllä.

Hieman pidempi vastaus: Edut ovat merkittäviä. Kokeile MDD:tä oikeassa projektissa, tarkkaile, mittaa ja arvioi lopputulos objektiivisesti. Huomaa, että päätös on liiketoimintapäätös, ei niinkään teknologiapäätös. Autamme teitä mielellämme!

Pidetään intro tällä kertaa lyhyenä. Jos haluat kuulla lisää aiheesta, laita viestiä!

Pysy kanavalla, lisää aiheesta tulossa!

 

Viitteet

  • [MacDonald et al., 2005] MacDonald, A., Russel, D., Atchison, B., Model-driven Development within a Legacy System: An industry experience report, in Proceedings of the Australian Software Engineering Conference (ASWEC’05), 2005
  • [Mellor et al., 2003] Mellor, S. J., Clark, A. N., Futagami, T., Model-Driven Development, IEEE Software, IEEE Computer Society, 2003
  • [Parviainen et al. 2009] Parviainen, P., Takalo J., Teppola S., Tihinen M., Model Driven Development, Processes and Practices. VTT Working Papers 1459-7683, ISBN 978-951-38-7175-8, VTT 2009
  • [Domingo et al. 2020] Domingo Á., Echeverría J., Pastor Ó., Cetina C. (2020) Evaluating the Benefits of Model-Driven Development. In: Dustdar S., Yu E., Salinesi C., Rieu D., Pant V. (eds) Advanced Information Systems Engineering. CAiSE 2020. Lecture Notes in Computer Science, vol 12127. Springer, Cham. https://doi.org/10.1007/978-3-030-49435-3_22
  • Method for Legacy App Modernization