Tekniikkakatalogi: Sulautetun kehittämisen omat käytännöt
Testivetoinen kehitys
Ongelma: Suunnitteluprosessissa tehtäviä virheitä ei havaita ajoissa jolloin tuotteen laatu, kustannusarviot ja aikataulut kärsivät.
Ratkaisu: Testivetoisessa kehityksessä ominaisuuksien kehittäminen aloitetaan aina määrittelemällä testit lopulliselle, valmiille ominaisuudelle. Kehityksen edetessä ominaisuuksia testataan aina näitä testejä vasten.
Tavoite: Vältetään projektin aikaiset harha-askeleet ja käytetään aika alusta asti tehokkaasti oikeiden asioiden tekemiseen. Varmistetaan uusien ominaisuuksien ja toteutusten oikeellisuus mahdollisimman aikaisessa vaiheessa.
Testivetoinen kehitys on paitsi yksi iteratiivisen ja inkrementaalisen kehityksen muoto, myös yksi XP:n käytännöistä . Testivetoisessa kehityksessä suunniteltujen ominaisuuksien oikeellisuus pyritään varmistamaan automatisoiduilla testeillä, jotka määritellään vaatimusten perusteella ennen varsinaisen ominaisuuden toteutusta. Testivetoinen kehitys tähtää yksinkertaisiin toteutuksiin, jotka tekevät juuri sen, mitä niiden on suunniteltukin tekevän, eivätkä mitään muuta.
Testivetoisessa kehityksessä uuden ominaisuuden suunnittelu aloitetaan määrittelemällä tälle ominaisuudelle automatisoidut testit. Kehitettävä ominaisuus saattaa myös olla jonkin olemassa olevan ominaisuuden uusi kehitysversio. Laitteistoa suunniteltaessa suunniteltu testi ei välttämättä ole automatisoitu mutta sisältää keskeiset testit ja mittaukset, jotka toimivan laitteen ominaisuuden pitäisi toteuttaa.
Alkutilanteessa uudet testit luonnollisesti tuottavat virheilmoituksen tai muutoin virheellisen tuloksen. Tämä on itse asiassa tärkeää kokeilla heti alkuvaiheessa. Jos uusi testi läpäistään ilman testattavaan ominaisuuteen tehtyjä muutoksia, uusi testi on hyödytön, eikä se toimi tarkoituksessaan.
Testivetoinen kehitys on luonteeltaan iteratiivista. Jokainen iteraatio aloitetaan testien laadinnalla, jonka jälkeen kehitetään ensin toivottua uutta ominaisuutta, ja tämän jälkeen testataan ominaisuus alkuvaiheessa laadituilla testeillä. Tavoitteena alkuvaiheessa on läpäistä uudet testit mahdollisimman vähällä vaivalla. Vasta tämän jälkeen jatketaan ominaisuuden kehittämistä pidemmälle laatimalla testit, toteuttamalla ja testaamalla. Näin varmistetaan toteutuksen pysyminen mahdollisimman yksinkertaisena.
Testivetoisessa suunnittelussa yksittäisen ominaisuuden, jolle laaditaan oma testinsä, koko on suositeltavaa pitää mahdollisimman pienenä. Kokonaisvaltaisten testien suunnittelu pienelle yksikölle on yksinkertaisempaa ja virheiden paikantaminen niiden ilmetessä helpompaa. Lisäksi dokumentoinnin tarve on vähäisempi, koska pienten yksiköiden toiminta on helpommin käsitettävissä.
Testivetoisen suunnittelun nähdään tuovan monia hyötyjä sulautettujen järjestelmien ohjelmistojen kehitykseen. Testivetoinen kehitys ohjaa suunnittelua modulaarisempaan suuntaan, jolloin tuotosten yleiskäyttöisyys lisääntyy ja elinkaari pitenee. Lisäksi menetelmällä voidaan varmistaa, että kaikki laitteen ominaisuudet tulevat myös testatuksi, eivätkä ohjelmistoon päätyneet, sinne kuulumattomat ominaisuudet aiheuta laitteen toimintaan häiriöitä. Testivetoisella kehityksellä vähennetään näin turhan työn tekemistä ja parannetaan suunniteltavan järjestelmän laatua. Testivetoinen kehitys mahdollistaa myös aikaisen ja jatkuvan regressiotestauksen, jolla varmistetaan, että yhteen osaan tehdyt muutokset eivät aiheuta uusia virheitä ohjelmiston tai laitteiston muissa osissa. Testien kautta saadaan nopeasti varmuus muutoksen vaikutuksista ominaisuuden ja koko järjestelmän toimintaan, jolloin kynnys pienten muutosten tekemiselle madaltuu.
Tuotekehityksen alkuvaiheissa testivetoinen kehitys voi hyötyä kaksikohdesuunnittelusta , jolloin lopullisen laiteympäristön omainen testaaminen saadaan aloitettua jo suunnittelun alkuvaiheissa.
Resepti
1. Määrittele, minkälaisen ominaisuuden haluat.
2. Laadi ominaisuudelle testit. Varmista, että nykyinen järjestelmä ei läpäise testiä.
3. Laadi pienin mahdollinen toteutus, joka läpäisee testit.
4. Kehitä ominaisuutta eteenpäin kohti lopullista muotoaan.