Először két idézet a kommentlőktől a korábbi bejegyzésekre:
fqqdk 2009.05.30. 15:45:22
"Ami azt illeti, az egységteszteket a programozónak kell írnia"
brslc 2009.05.11. 10:54:00
"legjobban a program írója tudja tesztelni a programját, mégpedig úgy hogy a csak tesztelésre használható rutinokat ír"
Ahogy a nagykönyvben meg van írva:
Elkészítjük a dokumentációt, hogy a rutin mit fog végrehajtani. Java esetében ez a kód elé írt JavaDoc dokumentáció és a metódus feje.
Elkészítjük a unit teszteket, amelyek a dokumentáció alapján használják a metódusokat és tesztelik azokat.
Elkészítjük a metódust, és futtatjuk a unit tesztet, és addig javítjuk a kódot, amíg a unit tesztek le nem futnak.
Mi a valóság, a gyakorlat?
Ez OK, ez így van
Ha fegyelmezettek vagyunk, akkor előre megírjuk a teszteket, de mivel már ismerjük, hogy mi jön a következő pontban, inkább csak utólag.
Elkészítjük a metódust, és tapasztaljuk, hogy nem csak a metódusban, hanem a unit tesztben is vannak hibák, ezért addig reszeljük a kódot, és a tesztelő kódot, amíg azok meg nem felelnek egymásnak.
Jó ez így? Maradjunk abban, hogy nem rossz, és ha nem sikerül nagyon fegyelmezettnek lenni, akkor ez az elérhető legjobb.
És most akkor a tanmese
Főhősünket nevezzük Palinak a példa kedvéért, meg mert ez egy jó név, meg speciel tényleg így hívják: Pál.
Pál feladata volt egyebek mellett, hogy írjon egy kamatszámító metódust, aminek volt három paramétere: kamatperiódus kezdete, kamatperiódus vége és kamatozó összeg.
/**
* javadoc
*/
ForintÖsszeg kamatSzámítóMetódus(Időpont periódusVége,
Időpont periódusKezdete,
ForintÖsszeg forintÖsszeg){
. . .
}
A valóságban voltak még paraméterek, de a példa szempontjából mindegy. A kamatszámító kódban a periódus kezdetét és végét jelentő változók meg voltak cserélve, és emiatt (átadás után funkcionális integrációs tesztelésen derült ki) negatív kamatok jöttek ki. Ennek a hitelesek speciel örültek volna, és nem tudom, hogy Palinak van-e hitele az adott banktól …
Hibabejelentés, hibajegy, feladat diszpécselés (ki javítsa ki), javítás, új teszt, release gyártás, release szállítás, mintegy laza egy óra munka két változó megcserélése a kódban.
De ez hogy fordulhatott elő? Nem volt unit teszt?
De volt. A unit tesztben is meg voltak cserélve a változók a paraméter listában. És akkor most gondolkodjunk el a fent idézett két kommenten. Nem gondolom, hogy nincs igazuk. Nem gondolom, hogy igazuk van. Csak erősen gondolkodom...