Sulautetun järjestelmän testilähtöinen ohjelmistokehitys
Saastamoinen, Matias (2019)
Saastamoinen, Matias
2019
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-201904256051
https://urn.fi/URN:NBN:fi:amk-201904256051
Tiivistelmä
Opinnäytetyössä tutustuttiin testilähtöiseen ohjelmistokehitykseen ja sen soveltamista laitteistoläheisessä ohjelmistoprojektissa. Työssä käytiin läpi testilähtöisen ohjelmointityylin työtapoja, sääntöjä ja vaiheita. Lisäksi tutkittiin, mitä lisävaatimuksia sulautettu järjestelmä tuo testilähtöiseen ohjelmointiin.
Testilähtöisessä ohjelmointityylissä ominaisuudelle pitää rakentaa testi ennen itse ominaisuuden ohjelmointia. Työtä tehdään pieninä askelina eteenpäin vuorotellen testin rakentamisen ja ominaisuuden ohjelmoinnin välillä. Testin läpäisevää ominaisuutta pystytään uudelleen muotoilemaan turvallisesti, koska epäonnistunut testi kertoo heti, jos ominaisuus hajoaa. Testilähtöisen ohjelmoinnin tavoitteena on löytää ohjelmointivirheet mahdollisimman nopeasti ja saada aikaan kattavat testit ohjelmistolle.
Sulautetun järjestelmän testaamisessa on monia haasteita. Laitetta, jolle ohjelmisto kehitetään, ei ole projektin alussa olemassa. Laitteistoläheiset ominaisuudet ja erilaiset käyttöjärjestelmät vaativat lisähuomioita testattavan koodin aikaansaamiseksi. Haasteiden vaikutuksesta koodista on tehtävä modulaarista ja rajapintoja hyödyntävää, mikä tekee koodista vähemmän riippuvan tietystä alustasta.
Usein testattava ohjelma riippuu toisen ohjelman tai laitteen ominaisuuksista. Testin aikana monia näitä riippuvuuksia ei pystytä käyttämään tai niiden käyttö on testin kannalta hankalaa. Testin ajaksi riippuvuuksia esittämään on luotava testisijaisia. Testisijainen esittää testattavalle koodille sen tarvitsemia toimintoja ja raportoi testille sijaisen saamia parametreja. Yksinkertainen testisijainen palauttaa testattavalle ohjelmalle testin vaatiman arvon. Monimutkaisempi sijainen palauttaa eri arvoja riippuen sille syötetyistä parametreista ja sijaisen kutsuntakertojen määrästä.
Testin ajaksi testisijaiset pitää saada osaksi testattavaa ohjelmaa ilman, että siihen joutuu tekemään muokkauksia testin takia. C-kielellä sijaisia pystytään sijoittamaan linkkauksen aikana, jolloin koko riippuvuus korvataan toisella ohjelmamoduulissa. Yksittäisen riippuvuuden korvaaminen sijaisella voidaan tehdä myös ajon aikana funktioosoitinmuuttujan avulla. Viimeisenä tapana on korvata riippuvuus esikääntäjällä, mutta tällöin testin aikainen koodi on hieman erilaista tuotantokoodin verrattuna.
Testilähtöisessä ohjelmointityylissä ominaisuudelle pitää rakentaa testi ennen itse ominaisuuden ohjelmointia. Työtä tehdään pieninä askelina eteenpäin vuorotellen testin rakentamisen ja ominaisuuden ohjelmoinnin välillä. Testin läpäisevää ominaisuutta pystytään uudelleen muotoilemaan turvallisesti, koska epäonnistunut testi kertoo heti, jos ominaisuus hajoaa. Testilähtöisen ohjelmoinnin tavoitteena on löytää ohjelmointivirheet mahdollisimman nopeasti ja saada aikaan kattavat testit ohjelmistolle.
Sulautetun järjestelmän testaamisessa on monia haasteita. Laitetta, jolle ohjelmisto kehitetään, ei ole projektin alussa olemassa. Laitteistoläheiset ominaisuudet ja erilaiset käyttöjärjestelmät vaativat lisähuomioita testattavan koodin aikaansaamiseksi. Haasteiden vaikutuksesta koodista on tehtävä modulaarista ja rajapintoja hyödyntävää, mikä tekee koodista vähemmän riippuvan tietystä alustasta.
Usein testattava ohjelma riippuu toisen ohjelman tai laitteen ominaisuuksista. Testin aikana monia näitä riippuvuuksia ei pystytä käyttämään tai niiden käyttö on testin kannalta hankalaa. Testin ajaksi riippuvuuksia esittämään on luotava testisijaisia. Testisijainen esittää testattavalle koodille sen tarvitsemia toimintoja ja raportoi testille sijaisen saamia parametreja. Yksinkertainen testisijainen palauttaa testattavalle ohjelmalle testin vaatiman arvon. Monimutkaisempi sijainen palauttaa eri arvoja riippuen sille syötetyistä parametreista ja sijaisen kutsuntakertojen määrästä.
Testin ajaksi testisijaiset pitää saada osaksi testattavaa ohjelmaa ilman, että siihen joutuu tekemään muokkauksia testin takia. C-kielellä sijaisia pystytään sijoittamaan linkkauksen aikana, jolloin koko riippuvuus korvataan toisella ohjelmamoduulissa. Yksittäisen riippuvuuden korvaaminen sijaisella voidaan tehdä myös ajon aikana funktioosoitinmuuttujan avulla. Viimeisenä tapana on korvata riippuvuus esikääntäjällä, mutta tällöin testin aikainen koodi on hieman erilaista tuotantokoodin verrattuna.