Test Driven Development (TDD) tairanskankielistentestien ohjaama kehitys on menetelmäohjelmistokehitykseksi, joka on suunnitellaohjelmistopienin askelin iteratiivisesti ja vähitellen kirjoittamalla kukin testi ennenlähdekoodinkirjoittamistaja päivittämällä koodia jatkuvasti.
Alun perin se kirjoitti vain testit ennen koodausta, ja sitä kutsuttiin Test First Designiksi . Sitten menetelmä kehittyi kohti hienompaa kehitystyötä: epäonnistuneelle testiriville kirjoitetaan tuotantolinja koodia testin läpäisemiseksi. Kolme lakia on vahvistettu tämän testikoodin ja tuotantokoodin välisen riveittäin-rakeisuuden vahvistamiseksi.
Näillä laeilla on erilaisia hyvin samanlaisia muunnelmia vuosien 2005 ja 2008 välillä (2005, 2006, 2007 ja 2008), kirjoittanut edelleen Robert C. Martin: ne on esitetty tässä vuonna 2008 käytettyjen termien mukaisesti. testiyksikkö "näissä laeissa on tässä suurelta osin hämmentävää. Yksikkötestillä nämä lait eivät tarkoita täydellistä testitapausta, vaan itse asiassa yhtä testiä. Koko testitapaus tulisi saada sen jälkeen, kun kaikki nämä 3 lakia on toistettu useita kertoja, tietäen, että kokoamisvirheen ratkaisu on jo itsessään iteraatio. Vuonna 2014 Robert C. Martin muotoili lisäksi TDD: n kolme lakia ja termi "yhtenäinen" katoaa.
Näiden kolmen lain tarkka ja yksiselitteinen sanamuoto olisi pikemminkin seuraava.
Täten erotetaan väite, joka aiheutti testin epäonnistumisen, ja testi, joka epäonnistui sen suorittamisen aikana. Emme myöskään oleta sopivinta testiä, emmekä rajoita vain yhtä mahdollista, mikä on sitäkin käytännöllisempää. Se tosiasia, että TDD: n 3 lakia lopetetaan yhdellä iteraatiolla, on niin kutsuttu TDD: n nanosykli. Huomaa, että nämä 3 lakia kattavat vain ehdot, joita TDD: ssä on noudatettava onnistuneen testin saavuttamiseksi, ilmaisemalla epäonnistuneesta testistä odotettavan minimalismin.
TDD: n suosittelemalla prosessilla on viisi vaihetta:
Tätä prosessia toistetaan useissa jaksoissa, kunnes alkuperäinen ongelma on täysin ratkaistu. Näitä iteratiivisia kehitysjaksoja kutsutaan TDD: n mikrosykleiksi.
TDD: ssä käytetyt testit mahdollistavat tarpeen selvittämisen ja määrittelemisen, minkä jälkeen ohjelmiston haluttu käyttäytyminen voidaan määrittää ennen jokaista koodausvaihetta. Täten tuotettu ohjelmisto on suunniteltu vastaamaan tarpeita tarkasti ja suunniteltu niin, että se on mahdollisimman monimutkainen . Tuloksena on paremmin suunniteltu, testattu ja luotettavampi ohjelmisto, toisin sanoen parempi laatu.
Kun testit kirjoitetaan koodauksen jälkeen, kuten perinteisesti, toteutusvalinnat rajoittavat testien kirjoittamista: testit kirjoitetaan koodin mukaan, ja jos tiettyjä koodin osia ei voida testata, niitä ei voida testata. ei testata. Päinvastoin, testaamalla ennen koodausta käytämme koodia ennen sen käyttöönottoa, jolloin toteutukselle asetetaan testien määrittelemät rajoitukset: koodi kirjoitetaan testien mukaan. Testien kirjoittaminen ennen koodia TDD: ssä on siis testattavien toteutusten lähtökohta, toisin sanoen helposti testattava ja 100-prosenttisesti testattava. Koodin testattavuus kuitenkin parantaa suunnittelua löysällä kytkennällä ja vahvalla yhteenkuuluvuudella, mikä välttää yleisiä suunnitteluvirheitä.
Koska jokainen testi vastaa koodin vähäistä muutosta, testi mahdollistaa selvän yhteyden muodostamisen regression ja sen lähteen välille, jos se epäonnistuu. Tämä linkki tekee testien suorittamisesta keskeisen hetken TDD-syklissä: sieppaamme ohjelmiston hetkellisen tilan ja havaitsemme kaikki regressiot viimeisen muutoksen jälkeen. Haluamme todellakin välttää koodin muokkaamisen regressiossa. Jos näin on, ei voida varmuudella sanoa, johtuvatko epäonnistuneet testit nykyisestä vai edellisestä muutoksesta. Tässä jo kirjoitetut testit muodostavat tietenkin valjaat onnettomuuksia vastaan, joissa menetetään yhteys muutoksen ja taantuman välillä. Tällaisen valjaiden läsnäolo tekee siten mahdolliseksi harkita rauhaa kaikesta koodin muutoksesta, onko kyseessä muunnos (käyttäytymiseen vaikuttava muutos) vai uudelleenjärjestely (muutos, joka ei muuta käyttäytymistä), samoin kuin ohjelmisto toimitukset versiosta toiseen.
Syklisten koodimuutosten haasteena on mukauttaa koodin suunnittelu tunnettujen tarpeiden kanssa ohjelmistojen entropian torjumiseksi ja teknisen velan estämiseksi . Koodin rakenteen muuttaminen muuttamatta sen käyttäytymistä edellyttää testausta, jolla varmistetaan, ettei regressiota ole. Tätä varten meidän tulisi käyttää erilaisia täydentäviä testimuotoja, jotta niitä ei kirjoitettaisi uudelleen jokaiselle koodin uudelleenkäsittelylle uudelleenkäsittelyn laajuudesta riippumatta: joskus testit tarkistaakseen hoidon tarkat tulokset, toisinaan testit varmistaakseen, että komponentit toimivat yhdessä oikein , ilman että nämä erilaiset testit hajoavat yhdessä samoista syistä.
Kun testit kirjoitetaan ennen koodaamista, ne löytävät TDD: stä useita käyttötarkoituksia: ne auttavat ensin ratkaisemaan ongelman ohjaamalla koodauksen jokaisen vaiheen läpi, sitten tarjoavat testien valjaat regressioita vastaan ja lopuksi dokumentoivat ohjelmiston käyttäytymisen . Testien käytön ansiosta TDD säästää tuottavuutta useammalla kuin yhdellä tavalla.
Kun kaksi ihmistä tulevat yhteen pareittain ratkaista ohjelmoinnin ongelma, ne vievät vuorotellen kaksi roolia samanlaisia kuin on miehistön on ralliauton : kuljettaja, joka on avaimet, koodi, kun perämies valvoo, ottaa askel taaksepäin ja ohjaavat sen ohjaaja vaiheittain, sitten roolit vaihdetaan säännöllisin väliajoin. Soveltamalla TDD: tä pari voi vaihtaa rooleja eri tavoin: joko kahden kehitysjakson välillä iteroinnin aikana tai uuden epäonnistuneen testin kirjoittamisen ja uuden käyttäytymisen koodaamisen välillä. Toinen tapa vaihtaa rooleja pakottaa meidät erottamaan testin ja toteutuksen huolenaiheet ja panee perämiehen osallistumaan vain testin kirjoittamiseen, kun taas ensimmäinen antaa mahdollisuuden avata koko sykli samalla roolilla.