Automatisera före eller efter?

Jag blir lite förvirrad av vissa idéer. Nu har jag läst lite om ”anti patterns” i ATDD. En punkt säger att det är fel att skriva koden först och sedan testet. Ja, precis som namnet säger är det idén; det är acceptanstesterna som ska driva utvecklingen. Jag förstår bara inte hur det ska kunna realiseras på ett effektivt sätt.

Att skriva tester på låg nivå fungerar eftersom man där har inblick i hur koden fungerar, man kan förvänta sig utvärden baserat på invärden. Exempelvis ett testfall för funktionen ”Addition” skulle kunna se ut såhär;

pseudo class Addition {
public int addition(int i, int v) {
return i + v;
}
}
pseudo testclass TestAddition {
public bool testAddition() {
return (addition(4,5) == 9);
}
}

Fine. Det är jättelätt att göra, man känner till vad som ska vara metodens namn och vad den ska göra. Men på acceptanstestnivå?!

Den här metoden kanske används i en räknare som har ett gui, acceptanstesten måste kunna interagera med det för att inte behöva känna till designspecifika detaljer om interfacet. Problemet är större när det gäller en webbsidan eftersom logiken påverkar utseendet; datainnehåll påverkar utseende.

Innan man börjar utveckla logik-koden, den HTML-genererande koden, brukar den som är ansvarig för att anpassa utseende lägga en form av specifikation, en så kallad mock-up, för utvecklarna att följa. Om man fick in en fot här och såg till att den mock-up:en innehåller det man behöver skulle man kunna utveckla tester mot den kanske.

Men här finns ytterligare problem; det är inte alltid man har full kontroll över det som kommer ut i HTML-koden, ramverk skapar sina egna strukturer.

Jag tror ändå att det i webbsammanhang än så länge fungerar bäst att hålla testerna strax efter utvecklingen av systemet förutsatt att systemet är indelat i så pass små delar / funktioner att tester kan skapas löpande under utvecklingsperioden, allteftersom nya funktioner integreras, och inte i slutet av utvecklingstiden.