© ocf81 1981-infinity
Live the dream! | Politiek Incorrecte Klootzak uitgerust met The Drive to Survive
Bestrijd de plaag die woke heet! | Servitisatie plaveit de weg naar slavernij. Kies je eigen weg!
Je hoeft natuurlijk niet al je tests te schrijven voordat je gaat developen.
Als je nou eerst een globale opzet maakt.
Dan per functie:
* uitwerken specificatie
* tests schrijven
* implementeren.
Op die manier zou jouw probleem voorkomen bij het kopje "uitwerken specificatie", en niet bij het kopje "implementeren".
Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info
* Schrijf een test die faalt
* Schrijf het minimale nodig om de test te laten slagen
* Refactor
Dat impliceert dat je dus per method bezig bent met het schrijven van tests en het implementeren. Tijdens het schrijven van je tests/implementatie kan je dan ontdekken dat je andere functionaliteit nodig hebt. Deze kan je dan aan je todo-list toevoegen en bouwen op het moment dat je klaar bent met het implementeren van de eerste functie.
In principe zou de manier waarop je een functie implementeert niet moeten uitmaken voor je tests. Schrijf je dan misschien niet tests die al te specifiek op de implementatie ingaan waar dat niet hoeft?
Daarna schrijf ik de methode, maar dan kom ik vaak dus het in de OP beschreven fenomeen tegen.
Als alles werkt en de specs klaar zijn schoon ik de code op zodat het minder rommelig is.
Het punt is niet dat ik niet met een testframework kan omgaan ofzo, het zit hem in de manier van werken.
© ocf81 1981-infinity
Live the dream! | Politiek Incorrecte Klootzak uitgerust met The Drive to Survive
Bestrijd de plaag die woke heet! | Servitisatie plaveit de weg naar slavernij. Kies je eigen weg!
Deze presentatie is een uitwerking van de Bowling Game kata (kata = TDD oefening). In deze uitwerking wordt goed duidelijk dat je met (teveel) design vooraf het gevaar loopt van overengineering. De kracht van TDD is IMO nu juist dat je door het bijbehorende YAGNI principe kunt voorkomen dat je een te lomp programma schrijft voor je probleem.
Mijn voorlopige conclusie tot nu toe is dat ik me bij wat grotere programma's vooraf probeer te beperken tot het definiëren van de "architectuur" van het programma. In de praktijk komt dat erop neer dat ik probeer te bepalen welke patterns ik nodig denk te hebben. Bijvoorbeeld MVC voor GUI en Dependency Injection voor het backend gedeelte. Ik probeer ook te bepalen welke classes ik nodig ga hebben, maar ga dan niet verder dan het benoemen van die classes. De benodigde methods ontstaan tijdens het TDD proces.
Edit:
Aanvullende voorlopige conclusie: Hoe gedetailleerder het ontwerp vooraf, hoe minder design-level voordeel je gaat hebben met een TDD aanpak. Waar precies de grens ligt, en of die grens überhaupt eenduidig te definiëren is, is mij echter nog niet duidelijk.
[ Voor 9% gewijzigd door Dricus op 17-07-2012 21:53 ]
Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...
TDD gaat niet zozeer (of toch niet enkel) over het testen an-sich. Het gaat net over het 'nadenken over je API' en het ontwerpen daarvan. De test die je dan hebt, is natuurlijk een bonus.
Ik hoop dat ik me hier een beetje duidelijk heb gemaakt.
Kata is een term die o.m. uit de Karate stamt. Het is een reeks van vastgelegde, opeenvolgende bewegingen / oefeningen, waardoor een soort van automatisme wordt aangeleerd.kata (kata = TDD oefening)
[ Voor 27% gewijzigd door whoami op 17-07-2012 23:10 ]
https://fgheysels.github.io/