Használd a tesztvezérelt fejlesztés módszertanát és a megadott teszthalmazt a feladatok megoldásához
A tesztvezérelt fejlesztés (amit néha teszttel kezdő fejlesztésnek vagy tesztvezérelt tervezésnek is neveznek) az a gyakorlat, hogy először az egységteszteket írod meg, mielőtt egyetlen sor implementációs kódot írnál.
Minden gyakorlófeladat, amelyen dolgozol (azok, amelyek nem tanítanak új fogalmat), tartalmaz egy útmutatót, amely általános megfogalmazásban leírja, mit kell tenned. Szándékosan nem térnek ki ezek az útmutatók a programozási nyelvre jellemző implementációs részletekre, mert az Exercism mind a 70+ nyelvi kurzusa ugyanezeket használja. Egyes nyelvi kurzusok kiegészítik ezeket a rád vonatkozó konkrétabb részletekkel, de nem mindegyik.
Amikor elkezdesz dolgozni egy gyakorlófeladaton, olvasd el figyelmesen az útmutatót. Áttekintést ad arról, hogyan láss neki a megoldás elkészítésének. A teljes és pontos követelmények megértéséhez viszont el kell olvasnod a teszteket:
Akkor oldottad meg a feladatot, ha az összes megadott teszt lefut és sikeres. Más szóval a megoldásod nem csupán az útmutató egy „helyesnek tűnő” értelmezése, hanem egy olyan program, amely teljesíti a megadott teszteket. A tesztek testesítik meg a feladat teljes követelményeit.
Elvégeztük helyetted az egységteszt-készlet megírásának munkáját. A célod, hogy olyan megoldást írj, amely éppen annyi kódot tartalmaz, hogy az összes egységteszt sikeres legyen.
Tartsd észben: a TDD-megközelítés segít eljutni a megoldásig, de nem kell megállnod ott. Ha a követelményeken túl is szeretnéd bővíteni a megoldásodat, azt is nyugodtan megteheted. Ha úgy döntesz, hogy mentorral dolgozol együtt (és arra biztatunk, hogy tedd ezt meg, amint sikerülnek a tesztek), ő segíthet refaktorálni és finomítani a kezdeti implementációdat, sőt új egységteszteket is javasolhat.
Amikor az Exercism weboldalának kódszerkesztőjében dolgozol, el tudod olvasni a teszteket, de szerkeszteni nem tudod őket. Minden teszt lefut minden alkalommal, amikor futtatod őket, függetlenül a tesztfájlban jelzett „skip” mechanizmusoktól.
Amikor több teszt is sikertelen, a weboldal kezdetben csak az első hiba eredményét jeleníti meg. A többi hibára is kattinthatsz, hogy kibontsd őket! Néha előfordul, hogy az első eredmény nem a legtanulságosabb.
Ne csüggedj el, ha sok teszt sikertelen. Koncentrálj arra, hogy egyenként sikeressé tedd őket.
Sok kurzus „kihagyott” teszteket használ a tesztfájljaiban. Kezdetben csak az első teszt „aktív”, a többi „inaktív” (hogy ez pontosan hogyan valósul meg, kurzusként változik). Amikor a saját környezetedben futtatod a tesztkészletet, csak az első teszt fut le. Ezt azért csináljuk, hogy erre a munkafolyamatra ösztönözzünk:
Ismételd ezeket a lépéseket, amíg az összes tesztet aktiválod. Amint minden teszt sikeres, gratulálunk, megoldottad a feladatot!
Az, hogy pontosan hogyan aktiválod a teszteket, kurzustól függ. Egyes kurzusoknál ez azt jelentheti, hogy kikommentelezsz vagy eltávolítasz egy annotációt. Más kurzusoknál egy attribútum átállítását true-ról false-ra. Szánd rá az időt, hogy elolvasd a kurzushoz tartozó dokumentációt; az elmagyarázza ezeket a részleteket.
Azoknál a kurzusoknál, amelyek nem hagyják ki a teszteket, ez a munkafolyamat egyszerűen annyit jelenthet, hogy kikommentelezed a teszteket, majd egyenként újra aktiválod őket.
Bár elsőre úgy tűnhet, hogy ezzel „szekér elé fogod a lovat”, több jó ok is szól amellett, hogy a megvalósító kód megírása előtt írd meg az egységteszteket.
Tervezés. Arra kényszerít, hogy először a programod interfészére gondolj (arra, hogyan teszi elérhetővé a működését a külvilág számára), ahelyett hogy rögtön belevágnál abba, hogyan valósítod meg a kódot. Egy jól megtervezett (és tesztelhető!) interfész gyakran fontosabb, mint egy hatékony implementáció.
Fegyelem. A tesztírásra sokan teherként vagy utólagos toldalékként tekintenek; ha először írod meg a teszteket, az garantálja, hogy a végére elegendő egységteszt születik a kódod működésének nagy részének vagy egészének lefedésére (ahelyett, hogy esetleg soha nem kerülne rá sor).
Kevesebb munka. Ha szigorú ciklusban dolgozol, azaz írsz egy tesztet, megírod a kódot, amely teljesíti azt a tesztet, majd jön a következő teszt, a kódod szervesen növekszik. Ez gyakran (bár nem mindig) kevesebb felesleges munkához vezet; végül minden szükséges kódot megírsz, és egy feleslegeset sem.