Hoe zwaar testen jullie je code?
Ik gebruik al een paar jaar unittests en ik merk dat het me niet alleen een lading tijd scheelt (ik hoef minder te debuggen), maar het geeft ook een stuk vertrouwen. Tegenwoordig maak ik behoorlijk zware unit tests en vooral met het huidige project waarmee ik bezig ben (een prolog compiler) wil je door de complexe flow van informatie, echt niet met writeln`s op zoek gaan naar je bugs. En ook al is een stuk code uiteindelijk bugvrij, er komen toch wijzigingen en daarmee kun je nieuwe bugs introduceren (zelfs in de 'bugvrije' code). De unit testen blijven altijd aanwezig en je kunt ze dus ook altijd opnieuw uitvoeren. In tegenstelling tot de debugger en de writeln`s blijven unit testen hun waarde houden.
Unit testen is een vast deel van XP en unit testen moet je volgens XP ook tot in het extreme doorvoeren. Ik zet echter mijn vraagtekens bij de X (eXtreme) van XP, maar unittesten is toch een van de uitzonderingen hierop. Unit testen vind ik persoonlijk een onmisbaar onderdeel en ze worden ook steeds zwaarder omdat ik merk dat ik er tijd mee win. Je bent idd even bezig om unit test code toe te voegen, maar dat hoeft geen al te groot probleem te zijn aangezien je met een template al een heel eind komt. Verder worden mijn test directories door ANT ook automatisch afgescanned naar *TestSuite.java bestanden zodat ik alleen maar TestSuite bestanden hoef toe te voegen aan de test directories.
Unit testen kun je op verschillende tijdstippen toevoegen. Als ik aan het prototypen ben wil ik geen blok aan mijn been in de vorm van unittests en maak ik alleen hele lichte tests als ik een stuk functionaliteit wil doorfluiten. Maar op het moment dat je van een prototype een serieus stuk software wilt maken, wordt iedere niet triviale methode grondig getests. Ik heb al zo`n enorme collectie met simpele foutjes verwijdert door unit testen, dat ik eigelijk geen software meer durf te schrijven zonder dit te testen.
Verder hoeven unit testen ook geen onfunctioneel stuk code te zijn, want eigelijk zijn ze meer waard dan documenatie. In een unittest staat namelijk exact je contract beschreven: je ziet wat een object kan en niet kan. Unit testen zijn in dat opzicht uitvoerbare documentatie.
Tot zover mijn verhaal over unit testen.. Ik wil dus graag weten wat jullie vinden van unit testen. Of jullie het gebruiken, in welke vorm en mate. Als je het niet gebruik, de argumenten waarom niet. En welke tools jullie hiervoor gebruiken.
[edit]
Ik heb het hier alleen gehad over unit testen, maar uiteraard heb je ook acceptance en integration tests. Voeren jullie deze testen ook uit, en zo ja, hoe?
Ik gebruik al een paar jaar unittests en ik merk dat het me niet alleen een lading tijd scheelt (ik hoef minder te debuggen), maar het geeft ook een stuk vertrouwen. Tegenwoordig maak ik behoorlijk zware unit tests en vooral met het huidige project waarmee ik bezig ben (een prolog compiler) wil je door de complexe flow van informatie, echt niet met writeln`s op zoek gaan naar je bugs. En ook al is een stuk code uiteindelijk bugvrij, er komen toch wijzigingen en daarmee kun je nieuwe bugs introduceren (zelfs in de 'bugvrije' code). De unit testen blijven altijd aanwezig en je kunt ze dus ook altijd opnieuw uitvoeren. In tegenstelling tot de debugger en de writeln`s blijven unit testen hun waarde houden.
Unit testen is een vast deel van XP en unit testen moet je volgens XP ook tot in het extreme doorvoeren. Ik zet echter mijn vraagtekens bij de X (eXtreme) van XP, maar unittesten is toch een van de uitzonderingen hierop. Unit testen vind ik persoonlijk een onmisbaar onderdeel en ze worden ook steeds zwaarder omdat ik merk dat ik er tijd mee win. Je bent idd even bezig om unit test code toe te voegen, maar dat hoeft geen al te groot probleem te zijn aangezien je met een template al een heel eind komt. Verder worden mijn test directories door ANT ook automatisch afgescanned naar *TestSuite.java bestanden zodat ik alleen maar TestSuite bestanden hoef toe te voegen aan de test directories.
Unit testen kun je op verschillende tijdstippen toevoegen. Als ik aan het prototypen ben wil ik geen blok aan mijn been in de vorm van unittests en maak ik alleen hele lichte tests als ik een stuk functionaliteit wil doorfluiten. Maar op het moment dat je van een prototype een serieus stuk software wilt maken, wordt iedere niet triviale methode grondig getests. Ik heb al zo`n enorme collectie met simpele foutjes verwijdert door unit testen, dat ik eigelijk geen software meer durf te schrijven zonder dit te testen.
Verder hoeven unit testen ook geen onfunctioneel stuk code te zijn, want eigelijk zijn ze meer waard dan documenatie. In een unittest staat namelijk exact je contract beschreven: je ziet wat een object kan en niet kan. Unit testen zijn in dat opzicht uitvoerbare documentatie.
Tot zover mijn verhaal over unit testen.. Ik wil dus graag weten wat jullie vinden van unit testen. Of jullie het gebruiken, in welke vorm en mate. Als je het niet gebruik, de argumenten waarom niet. En welke tools jullie hiervoor gebruiken.
[edit]
Ik heb het hier alleen gehad over unit testen, maar uiteraard heb je ook acceptance en integration tests. Voeren jullie deze testen ook uit, en zo ja, hoe?
[ Voor 4% gewijzigd door Alarmnummer op 28-05-2004 09:44 ]