(toiminnot)

hwechtla-tl: Testausstrategioista

Kierre.png

Mikä on WikiWiki?
nettipäiväkirja
koko wiki (etsi)
viime muutokset


(automatisoitu testi on jatkoa tälle sivulle.)

Olen pikku hiljaa alkamassa kallistua kannalle, että testikoodin kirjoittaminen ensin (http://c2.com/cgi/wiki?CodeUnitTestFirst) on fiksua. Ei niinkään siksi, että minulta puuttuisi kuria kirjoittaa se sitten jälkeenpäin; testaaminen on vain paljon hauskempaa, kun kirjoittaa testin ensiksi.

Kun kirjoittaa testin, saa samalla hahmotella, mitä testattava softan osa tulee tekemään. Joskus voi saada jopa (verrattain halpaan hintaan) jonkin valaistumisen, mitä on tekemässä väärin. Kun testi sitten on valmis, sen voi ajaa heti. Jos se ei mene läpi, se on osoitus, että testi on (ainakin senhetkistä tilannetta varten) oikea. Jee! Olet kirjoittanut toimivan testin.

Sitten, kun softaa alkaa kirjoittaa, testin ajaminen kaikissa väleissä on vähän samanlaista kuin kääntäjän ajaminen: se huomaa heti triviaalit virheet ja joskus monimutkaisempiakin. Testistä on siksi hyvä (käytännöllisyyden rajoissa) tehdä niin kattava kuin mahdollista. Ja kun testi menee läpi, tulee kiva fiilis. Yleensä, jos alkaa kirjoittaa testiä tässä vaiheessa, siitä ei tule kiva fiilis - jompikumpi on aina väärässä, toteutus tai testi, ja jos jostain syystä testi menee heti läpi, joudut erikseen tarkistamaan, että se on kunnossa.

Ja tuloksena on mukava regressiotesti, jota voi ajaa automaattisesti aina tehdessään muutoksia.

Mutta sitten vähän teknisempää. Näitä testausmetodologioita kannatan:

Testaaminen ei saa viedä liikaa aikaa. Jos jokin asia on vaikea testata, sitä on turha alkaa pakolla testaamaan. Mutta on hyvä suunnitella ohjelmistonsa siten, että ne sallivat paljon testausta. Tämäkin on yksi PHP:n heikkouksia.

Invariantit eivät oikeastaan ole niinkään testausstrategia kuin debuggausapu. Mutta voi pojat, se apu on suuri. On ihanan huojentavaa nähdä, kun vaikkapa pointtereiden käsittelyssä tehty virhe, joka tavallisesti eskaloituisi ja sekottaisi mahdollisesti puolet heapista, jää heti kiinni ja assert() osoittaa suoraan syyllisen.

kategoria: ohjelmointi


kommentoi (viimeksi muutettu 19.09.2005 11:17)