Unit- & Regressietesten in Visual FoxPro – deel 1 van 3
Introductie
In dit artikel ga ik in op hoe u automatisch uw Visual FoxPro code kunt testen. Naast een korte inleiding bied ik u een praktische tutorial. De stof wordt verondersteld voor alle niveaus toegankelijk te zijn.
Alvorens verder op de stof in te gaan presenteer ik u eerst een aantal begrippen, waarvoor ik nuttige en relevante verklaringen kon vinden.
Unit - Engels voor “eenheid”:
- A part of a machine which performs a particular function (Cassel Paperback English Dictionary)
- [vertaling van Lat. unitas] samenhangend geheel (van Dale)
- In software engineering: een compileerbaar stuk code, bijvoorbeeld een module, of een klasse, of een functie
Regressie:
Refactoring:
- Het aanpassen van de structuur van een module, zonder dat de functie ervan wordt veranderd (vertaald uit het artikel “Introduction & Advanced Refactoring” van Steve Sawyer, CttM 2002)
- Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior (Martin Fowler)
“Test First” principe
Men dient bij het maken van een ontwerp al de tests te definiëren die straks zullen bepalen of het gebouwde (sub)systeem correct is geïmplementeerd.
Unit tests worden geschreven alvorens aan de bouw wordt begonnen!
De resultaten van de tests leiden het ontwikkelproces. Dit wordt o.a. strak toegepast in Extreme Programming (XP valt buiten het bestek van dit artikel)
Waarom Geautomatiseerde Unit Tests?
Ondersteunen “Test First” principe
Wanneer is het systeem klaar? Het antwoord hierop is simpel: als de vooraf gemaakte tests geen fouten meer geven! Dan weet u dat uw systeem voldoet aan de specificaties. Programmeurs werken veel slagvaardiger wanneer ze een meetinstrument in hun gereedschapskist hebben die hen op de hoogte houdt van precies wat er nog geprogrammeerd moet worden en wat ze nog niet bug-vrij hebben opgeleverd.
Onmisbaar bij Refactoring
Het test-first principe levert tests op, die in het vervolg de contracten in uw systeem blijven waarborgen. Dit geldt ook voor refactoring, wanneer u een oud ontwerp met een nieuw, verbeterd ontwerp wilt vervangen. Een reeks unit tests waarschuwt u op het moment dat een contract wordt geschonden of wanneer er iets in de interne werking van een unit per abuis is ‘stuk gemaakt’. VFPUnit, de Visual FoxPro tool voor unit testen, helpt verder ook bij het experimenteren welke ontwerpen beter zijn en laat u ‘spelen’ met verschillende conceptontwerpen, voordat u daadwerkelijk uw bestaande code moet aanpassen. Dit wordt in de paragraaf Geavanceerde onderwerpen kort toegelicht.
Dienen tevens voor Regressietesten
Uw inspanning is nooit weg: gemaakte tests blijven waarborgen dat uw systeem door toekomstige versies heen blijft functioneren zoals oorspronkelijk bedoeld was.
Regressietests
Regressietests kunnen u op verschillende vlakken van dienst zijn. Vaak dienen bestaande tests bij het maken van een toekomstige versie als regressietests, soms moet u ze expliciet maken om een systeem weer te helpen functioneren ‘als vanouds’. Hieronder treft u de belangrijkste kenmerken van regressietests
- Waarborgen functionaliteit tegen toekomstige aanpassingen in de code
- Kunnen worden gebruikt om aanwezigheid van een bug te “bewijzen”
- Worden gebruikt om te bewijzen dat de bug opgelost is
- Zorgen ervoor dat deze bug nooit meer terugkeert
VFPUnit
Unit Test Framework voor Visual FoxPro vanaf versie 7.0
VFPUnit is getest met Visual FoxPro 7.0, 8.0 en 9.0 (beta).
Freeware
Het gebruik van VFPUnit is volledig gratis, dankzij het belang dat de schrijver van deze tool, Larry Teske, aan Test-First development hecht. Larry neemt ook graag commentaar en ideeën aan van gebruikers en belooft alle ideeën serieus te overwegen en eventueel het debat aan te gaan omtrent verschillen in inzicht in hoe men de begrippen Agile en Test-First development persoonlijk invult.
Eenvoudig in het gebruik
Na het volgen van de tutorial uit dit artikel zult u in staat zijn om alle basisoperaties van VFPUnit zelfstandig uit te voeren, en zult u een dusdanig goed beeld van de geavanceerde onderwerpen hebben gekregen, dat u deze ook zelfstandig verder zou kunnen onderzoeken.
Doen!
Na zo lang te hebben gewacht op een dergelijke tool voor Visual FoxPro hebben we eigenlijk geen smoes meer om niet m.b.v. geautomatiseerde unit-testing onze Visual FoxPro middle-tier klassen te ontwikkelen. Gewoon doen, dus! Vooral bij een nieuw project zult u merken dat de inspanning minimaal is, als u eenmaal een beetje handigheid met VFPUnit hebt gekregen. Alle gemaakte tests blijven als een goede investering ‘rondhangen’ om als regressietests bij wijzigingen en refactoring te functioneren.
VFPUnit – Tutorial
Om de VFPUnit workbench te starten, voert u het volgende commando uit:
DO [VFPUnit Directory name\]VFPUnit.app

Figuur 1: Een nieuw menu “VFPUnit” verschijnt

Figuur 2: Het venster “Suites of Experiments” verschijnt tegelijkertijd
Let op: De eerste keer dat u deze opdracht uitvoert, kan het voorkomen dat het venster “Suites of Experiments” een zeer klein formaat heeft. In dit geval hoeft u slechts het venster eenmalig te vergroten – Visual FoxPro onthoudt vervolgens de dimensies van alle schermen nadat u ze afgesloten heeft.
Klik op Experiment >> om een nieuwe unit test te maken
De term “experiment” wordt door VFPUnit heen gebruikt als begrip voor wat meestal door testers onder een “test” wordt verstaan. In deze tekst zullen we de term “test” gebruiken voor het algemene begrip en de term “experiment” wanneer we aan VFPUnit zelf refereren.
Wanneer u reeds tests heeft gemaakt en deze zichtbaar zijn in het venster “Experiments, resulteert het klikken op Experiment >> in het tonen van het geselecteerde test in het venster “Experiment”. In dat geval kunt u alsnog op de knop New klikken om een nieuwe test aan te maken. Het dubbelklikken op een test volstaat overigens ook om deze in te openen (om te wijzigen).

Figuur 3: Het venster “Experiment” verschijnt
Tutorial – Experiment
- Voer een unit test naam in naast “Experiment”
- Voer testcode in onder “Test Code”
- Klik op Run

Figuur 4: Een eenvoudige test wordt uitgevoerd
- Test Code knop geeft venster met syntax-coloring en IntelliSense
- Apply and Run om code uit te voeren
- Save om unit test te bewaren
- Close sluit venster zonder te bewaren!

Figuur 5: Het “Testing Code” venster met uitgebreide editing mogelijkheden
Tutorial – Test Results
Runtime fouten worden weergegeven als “SAMPLING FAILURE”
Voer onderstaande code in en klik op Apply and Run:
*- Note: there is an INTENTIONAL error in the following line!!!
lnX = _screen.formCount +" Forms Active" && number+string = error
WAIT WIND NOWAIT "There Are " +ALLTRIM(STR(lnX))
Listing 1: Een eenvoudige test

Figuur 6: Merk de syntax-coloring op in het “Testing Code” venster

Figuur 7: Het “Test Results” venster verschijnt
Fouten kunnen trapsgewijs optreden
1 Fout kan tot meerdere berichten in het “Test Results” venster leiden.

Figuur 8: Result Details >> of dubbelklikken op een fout in het “Test Results” venster geeft een aparte venster met meer info
Telkens op Result Details >> klikken schakelt tussen het tonen en verbergen van het “Test Result Details” venster.

Figuur 9: De Clear en Reset knoppen wissen oude resultaten
Let op!
Er dient opgemerkt te worden dat de resultaten uit de tests op generlei wijze persistent zijn, m.a.w. ze blijven bestaan zolang de VFPUnit workbench open is. Dit is een punt dat reeds op de lijst van Larry Teske als een zeer gewenste verbetering staat.

Figuur 10: We verbeteren de sampling error in onze test en draaien de test nogmaals
Wordt vervolgd
Tot zover de (evt.) eerste stappen in de VPFUnit-wereld. In het volgende deel werk ik deze tutorial verder uit en ga ik wat dieper in op hoe een geautomatiseerde testsuite u bij uw software engineering activiteiten kan helpen.
Links:
Klik hier voor deel 2 van dit artikel.
Klik hier voor deel 3 van dit artikel.