Paperi jota kävin esittelemässä OOPSLA DSM workshopissa kertoi kuinka olisi mahdollista testata domain-specifisellä mallinnuksella tuotettuja sovelluksia automaattisesti ja systemaattisesti. Minä olen työskennellyt mallipohjaisen testauksen parissa jonkinaikaa, joten alkoi tuntua että mallipohjainen testaus sopisi tähän tarkoitukseen todella hyvin. Tätä väittämää pyörittelin paperissa ja tein pienen demon siitä, mutta tuota demoa pitää vielä jatkaa jotta se kattaa koko idean. Esittelen seuraavaksi paperin pääpiirteittäin…
Domain-specifinen mallinnus (DSML)
DSML tarkoittaa käytännössä että tehdään framework ja sen päälle luodaan uusi mallinnuskieli jolla voidaan tehokkaasti generoida erilaisia sovelluksia jotka käyttää frameworkkia. DSML testaus on ymmärretty tähän asti lähinnä manuaalisena testauksena. Eli, muuta kieltä -> tee pari testi sovellusta -> generoi sovellukset -> testaa käsin toimiiko. Tällainen testaus ei ole kovin kattavaa ja tarvii paljon aikaa, koska tämä pitää tehdä jokaisen pienen muutoksen jälkeen.
Mallipohjainen testaus
Mallipohjainen testaus tarkoittaa että tehdään korkean tason malli systeemin käyttäytymisestä vaatimusmäärittelyn perusteella. Siitä testigeneraattori “keksii” testejä, eli käytännössä etsii erilaisia reittejä mallin läpi ja tulostaa ne testi tapauksiksi. Lopuksi testipenkki ajaa tämän testi
setin itse sovellusta vastaan. Näin voidaan säästää aikaa testisetin ylläpidossa koska ei tarvi kuin muuttaa mallia ja generoida uusi testisetti jokaisen muutoksen jälkeen. Samoin testien kattavuus nousee koska kone jaksaa keksiä enemmän testitapauksia kuin laiska ihminen.
Yhden sovelluksen testaus
Koska DSML:ää käytettäessä malli mistä koodit generoidaan on korkean tason malli ja tietokoneen ymmmärrettävissä, joten tätä mallia hyväksikäyttäen voidaan myös generoida testit. Eli samasta mallista generoidaan sekä koodi sovellukselle että testit tätä sovellusta vastaan. Kuulostaa kummalta, vai mitä? Ideanahan ei ole kertoa onko malli oikein, vaan testata että käyttäytyykö itse sovellus niin kuin malli sanoo. Toisin sanoen testin kohteena on koodi-generaattori ja itse domain specifinen kieli niiltä osin kuin se tässä sovelluksessa toteutuu. Kun tämä testijärjestelmä on pystytetty niin sitä voidaan käyttää jokaiselle sovellukselle joka on tehty tällä kielellä.
Koko kielen testaus
Jos yksi sovellus toimii voidaan sano että DSM kieli toimii tämän sovelluksen tapauksessa. Eli yksi sovellus on yksi testi kielelle. Kielellä voidaan kuitenkin tehdä todella paljon erilaisia sovelluksia, joten testikattavuus yhden sovelluksen tapauksessa on pieni. Kun halutaan laajentaa testikattavuutta tarvitaan lisää testejä, eli lisää sovelluksia.
Metamalli määrittää DSM kielen. Metamalli on silti vain yksi malli. Kun käytetään metamallia ja generoidaan siitä testejä saadaankin sovelluksia. Näin voidaan siis käyttää mallipohjaista testausta generoimaan sovelluksia. Tällä saadaan paljon lisää testikattavuutta koko kieltä ajatellen ja lisäksi kokko hommeli voidaan automatisoida. Näin jokaisen kielen muutoksen jälkeen voidaan automaattisesti generoida aplikaatiot ja tarkistaa että toimiiko ne.
Esimerkki kuva miten systeemi vois toimia
Tällaista ei ole siis kukaan vielä tietääkseni tehnyt. Nyt yritän tehdä demon tämän kuvan perusteella:
Seuraavaksi teen tästä jonkinlaisen demon jossa kaikki palaset tulee kokeiltua käytännössä. Sitten vaan kokeilemaan vielä enemmän, etsimään rajoituksia jne… Ja jos kaikki menee hyvin niin kirjoitan tarpeeksi julkaisuja jotta saan väikkärin kasaan
Kommentoikaa ihmeessä, ja jos aihe kiinnostaa enemmän niin otta yhteyttä.




“Eli yksi sovellus on yksi testi kielelle. Kielellä voidaan kuitenkin tehdä todella paljon erilaisia sovelluksia, joten testikattavuus yhden sovelluksen tapauksessa on pieni. Kun halutaan laajentaa testikattavuutta tarvitaan lisää testejä, eli lisää sovelluksia.”
Ymmärsinkö oikein, että tuo tarkoittaa sitä että pelkästään kielen testaamisen (joka on erittäin tärkeää!) vuoksi sillä pitää ensin kehittää uusia sovelluksia? Siis esimerkiksi 10-100-1000 testisovellusta ennen kuin kieli on testattu riittävän kattavasti, osoitettu luotettavaksi ja sitä aletaan käyttää “tuotannossa”?
Mitä etua DSML+MBT varsinaisesti tuo siihen, että ohjelmistoja kehitettäisiin luotettavaksi osoitetuilla yleiskäyttöisillä kielillä ja frameworkeilla, ja testaaminen suoritetaan suoraan softalle, eikä jokaiselle domain-spesifille kielelle. Jos kerran kielen itsensä testaamiseen pitää ensin generoida paljon ohjelmia testitarkoitukseen, ennen kuin sillä voi varsinaisesti aloittaa ohjelmistokehityksen domainin tarpeisiin. Pystytkö tässä vaiheessa arvioimaan näitä esim tehokkuuden, softakehityksen nopeutumisen tai softan laadun paranemisen valossa?
En siis tarkota tyrmätä ideaa, tietenkään, mutta tarvin lisää tietoa jotta ymmärrän mistä on kyse
Ymmärrän mallipohjaisen kehityksen ehkä parhaana puolena sen, että lähes kuka tahansa voi koodata toimivia ohjelmia tiettyyn domainiin kehitetyllä dsm-kielellä. Kunhan kieli on ensin testattu kattavasti ja osoitettu luotettavaksi. Minun ymmärryksen aukko tässä kohti liittyy siihen, onko ohjelmistokehityksen kokonaistehokkuutta ajatellen kielen testaaminen lukuisilla keinotekoisilla testiohjelmilla hyödyllisempää kuin yleiskäyttöisen kielen avulla luodun, suoraan tuotantokäyttöön tulevan softan testaus.