Az alábbi feladatot kaptam nemrég: Készíteni kell egy sémát egy új web service-hez. Maga a feladat nem túl bonyolult, de egy idő után belefutottam abba, hogy elkezdtem összekeverni, hogy melyik hierarchia szinten melyik adatot ábrázolom, mire hol van szükség.
Ígyhát megszületett az ötlet: csinálok egy XML-t, ami formailag megfelel annak, amit szeretnék, és addig javítom a sémát, amíg validálható az xml. Ez meg is történt, utána nekiálltam a sémát szépítgetni, hogy megfelelő típusok, required attribútumok legyenek. Aztán nekiláttam a következő változtatásnak, először átírva az XML-t, …
Ekkor realizáltam, hogy gyakorlatilag a TDD lépéseit ismétlem. Írok egy tesztet – a formailag helyes XML. Utána lefuttatom a tesztet – validálás – ami piros lesz. Utána addig javítom a sémát, amíg a validálás nem sikerül – development. Majd szépítgetem a sémát – refaktorálás. Végül iterálok.
Érdekes élmény volt

Hát szerencsére autót, házat, liftet stb. -t nem így terveznek
, kivéve Mekk Elek építészmestert
.
No azért a mérnöki tervezés lényege az előre gondolkodás, a tervezés. Elég rossz lenne ha mondjuk erőművet is ez alapján terveznének
Szerintem házat, erőművet, felhőkarcolót is terveznek pont így.
Vonjunk néhány párhuzamot: Mivel a schema, amit tervezek, nem kerül élesbe, amíg kész nem vagyok vele, ezért mondhatom, hogy azok, amiket alkotok, csak modellek, illetve tervrajzok.
Nézzük, hogy készül nagyjából egy tervrajz: Vannak korlátaim – rendelkezésre álló területet, mindenhova el kell tudnom jutni. Vannak elvárásaim: Minden emeleten legyen fürdőszoba, legalább két hálószoba legyen. Ezek alapján aztán rajzol az építész egy tervrajzot. Utána ezt megmutatja valakinek, aki mondjuk fizet érte, az megnézi, és azt mondja, hogy “Nem jó, mert túl közel vannak a hálószobák”. Ez gyakorlatilag egy új elvárás, amit eddig nem hallott az építész. Most újrarajzolja, és ez addig így történik, amíg el nem fogadják a tervrajzot.
Hasonló példát mondhatnék a szélcsatornás épületmodell tesztelésre, ahol addig változtatják a modelleket, amíg egyben nem maradnak a szélcsatornában. Ez is a “próbálgatok, amíg nem lesz jó” elv, folyamatosan javítva a dolgot.
Nagyon fontos észrevenni, hogy ez a fent vázolt módszer ugyanúgy a mérnök agyát dolgoztatja meg, mindössze az a fő különbség jelenik meg, hogy a problémát apró darabokban, inkrementálisan oldja meg ahelyett, hogy egy, átfogó megoldást szállítana, ami időnként jobb, időnként meg nem.
“Ezek alapján aztán rajzol az építész egy tervrajzot. Utána ezt megmutatja valakinek, aki mondjuk fizet érte, az megnézi, és azt mondja, hogy “Nem jó, mert túl közel vannak a hálószobák”.”
– ez lenne a test driven? Emlékeim szerint ez a vevő, aki ritkán nevezhető “tesztelő” mérnöknek. Olvass pár építész történetet, hogy ez hogyan zajlik. Messze van a TDD-től.
A szélcsatorna jobb válasz, mivel ott egy modellen ellenőrzik a kalkulált áramlásatni modell helyességét, figyelembe véve, hogy a szélcsatorna épületmodell az nem 1:1-s, az az áramláastani hasonlóságot is egy modell (hasonlósági számok) alapján garantálják.
De itt is van egy fontos eltérés: a mérnök a készülő “terméket” modellezi, a modellt megfelelő ismeretek alapján építi fel, a tervezés során iterál (anélkül hogy teszt esetet készítene), és a végén a terv a termék, nem egy tesztelhető valami. A teszten (pl.: törésteszt) már csak ellenőrzik, hogy a tervezés és a gyártás során elkészült termék megfelel-e az adott elvárásnak.
Ellenben azzal, amikor addig reszelem a terméket, amíg az elkészült teszt eset hibátlanul lefut rajta. Vegyük észre, mennyire hibás itt az elképzelés, hiszen véges számú, előre elkészített teszt esetnek kell megfelelnünk, nem pedig a komplex termékünk egy-egy tulajdonságát ellenőrizzük vissza egy-egy teszttel (pl.: szélcsatorna az épületmodellről).
Nem a tesztelést mondom rossznak, hanem a megközelítést, hogy mi vezérli a tervezést.
Egy egyszerű példa:
a, megtanulod az egész féléves anyagot, mert a tudás az elvárás,
b, elkéred a tavalyi vizsgasort, hogy mi az elvárás, és annak megfelelően készülsz fel a vizsgára.
Az első esetben részletesebbt udásod lesz a félév végére.