zondag 8 april 2018

Zinvol, snel en eenvoudig prioriteren op een Agile manier

Ook binnen het testen moet je soms prioriteren. Welke testverbeteringen voeren we het eerst door? Wat voegen we het eerst aan een automatische test toe? Welk testdocument werken we het eerste bij? En Agile zou inhouden dat je dit niet in je eentje doet. De praktijk houdt in dat je juist alleen het prioriteren snel kan laten verlopen en je je einddoel beter kan bewaken. Maar er is een tussenweg.

Het probleem van prioriteren is, dat iedereen andere zaken belangrijk vindt. En dan bedoel ik niet de te prioriteren zaken, maar de zaken waar je de prioritering op baseert. Zaken als: hoe vaak, hoe belangrijk, hoe risicovol. "Dit gaat vaak gebeuren" wordt naar beneden gehaald met "Maar er is nauwelijks risico". En "Dit niet belangrijk" wordt tegengesproken met "Maar we doen het wel veel". En zo ontstaat een discussie. Het probleem is, dat je eigenlijk meerdere zaken tegelijk bediscussieerd. Niet alleen hoe vaak en hoe belangrijk en hoe risicovol iets is, maar ook hoe deze zich tot elkaar verhouden. De truck: maak er meerdere kortere discussies van.

Elk van de onderstaande stappen kan op twee manieren worden aangepakt. Er kan van tevoren een voorstel worden gedaan, waar de betrokkenen op kunnen reageren. Maar de stap kan ook gezet worden zonder voorstel. Dit laatste is beter voor het draagvlak, maar mijn ervaring is, dat sturing door een voorstel zeker niet standaard verkeerd is. Er is vaak een einddoel wat je wil bereiken. En een vorm van sturing door een voorstel, kan daar een middel voor zijn. Deze keuze is sterk afhankelijk van de eisen, die je zelf (of je bedrijf/manager) stelt aan de uitkomst. Hoe minder eisen, hoe vrijer je een meeting kan inrichten.

Stap 1 Bepaal de te prioriteren items
Bepaal de items, die je wil prioriteren. Let er hierbij wel op dat je niet alvast met prioriteren begint. Dus geen discussies over "Is dit wel belangrijk?" of soortgelijke discussies. Die komen later.

Stap 2 Bepaal de weegfactoren
Bepaal op welke factoren je wil prioriteren. Vaak zullen dit varianten zijn op "Hoe vaak", "Hoe belangrijk" en "Hoe risicovol". Maar dan wel wat beter uitgewerkt. Bijvoorbeeld "Hoe vaak gaan we dit gebruiken?", "Hoe risicovol is dit voor de organisatie?", "Hoe belangrijk is dit voor de kwaliteit van ons product?".

Stap 3 Bepaal de weegverhouding
Als je de weegfactoren hebt bepaalt, bepaal je de weegverhouding. Hoe verhouden de weegfactoren zich tot elkaar? Bij drie weegfactoren kan dit 1:1:1 zijn, maar het kan ook juist 5:2:1 zijn. Om alvast iets vooruit te lopen: de waarde die een item op de lijst bij het prioriteren krijgt, wordt vermenigvuldigd met de verhoudingswaarde. En uiteindelijk vormen de totalen van de "waarde x verhouding" berekening de eindwaarde, op basis waarvan de uiteindelijke prioritering bepaalt wordt.

Stap 4 Bepaal de weegwaarde
Je kan prioriteren per groep waarbij bijvoorbeeld "5" het zwaarste is en "1" het lichtste. Je kan ook de hele lijst prioriteren, waarbij de weegwaarde de positie op de lijst is. Dit hangt sterk af van hoe eenvoudig het prioriteren is. In groepen is eenvoudiger, maar het risico is groter op een "Gelijk spel". Helemaal prioriteren is moeilijker, maar de eindprioritering zal vaak eenvoudiger zijn. Meestal zal prioriteren in groepen voldoende zijn. Het gaat vaak niet om een uitkomst, die 100% geprioriteerd is, maar meer om het proces, dat zorgt voor meer draagvlak en meer controle door een groep als geheel.

Stap 5 Prioriteer de items per weegfactor
Na alle voorgaande stappen kan het echte prioriteren starten. De items kunne nu volgens de bepaalde weegwaardes per bepaalde weegfactor ingedeeld worden. Vervolgens kan de totale waarde berekend worden. Zoals al eerder beschreven, krijg een item per weegfactor een waarde "waarde x verhouding". Vervolgens worden de waardes per weegfactor bij elkaar opgeteld en deze lijst levert een totale lijst op.

Waarom niet in 1 stap?
Een fout, die veel mensen maken, is dat 1 stap "Een meeting organiseren voor prioriteren" vaak minder werk lijkt dan 5 stappen. Maar het is makkelijker om een groep op 1 onderwerp op 1 lijn te krijgen, dan op vele onderwerpen. Uiteindelijk bespaar je juist tijd, door eerder overeenkomst te hebben. Daarnaast kan je bepaalde onderwerpen in kleinere groepen bespreken, waardoor je elke stap kan nemen met personen, die echt input kunnen en willen leveren. Dit levert niet alleen snellere meetings op, maar ook minder tegenzin tijdens de meeting van de deelnemers. Omdat het een onderwerp is, waar ze over mee kunnen en willen praten, zijn ze automatisch gemotiveerder.

Probeer het eens uit. Speel ermee. En als je wil, bedenk je eigen variant. Het belangrijkste is: "1 onderwerp tegelijkertijd".

vrijdag 19 januari 2018

(Geen) Testverbetering: Als SMART doelen niet SMART zijn

Als je aan de gang gaat met verbetering, kom je al snel op SMART. Om na te gaan of je je doelen bereikt, moeten ze specifiek, meetbaar, acceptabel, realistisch en tijdgebonden zijn. En dat geldt dus zeker ook voor testverbeteringen. Je wil na kunnen gaan of je je doel bereikt op een duidelijke en objectieve wijze. En je wil ze communiceren, zonder al te veel kans op misverstanden.

Op zich dus niets mis mee. Maar regelmatig loopt het opstellen van duidelijke doelen uit op een teleurstelling. De SMART goals zijn gehaald, toch is het eindresultaat een teleurstelling. Wat kan er mis gaan?

Het checklist effect

Stel je wil het aantal bugs, dat door de klant gebracht wordt terugbrengen. Als een van de onderdelen om dit te bereiken, wil je je testtraject verbeteren. Je wil daarom je regressietesten uitbreiden, de testdekking vergroten, unit testen invoeren en de kennis van je tester uitbreiden. Op basis van deze doelen voor testverbeteringen maak je een mooi plan met hierin elk onderwerp beschreven als een volledig correct en SMART doel.

Vervolgens gaat iedereen met het plan aan de gang. Elk doel wordt gehaald. Een jaar later krijg je opnieuw de statistieken over het aantal bugs van klanten onder ogen. En ondanks het uitstekende gevoerde plan, is het aantal bugs niet gezakt. Wat blijkt? Het grootste percentage bugs bevindt zich in de rapportages. En in geen enkele van de aanpassingen is de test van de rapportages verder uitgebreid.

Wat hier gebeurt, is dat het uiteindelijke doel uit het oog is verloren. Men heeft een lijstje met doelen gekregen en dat lijstje is een doel op zich geworden. Dit kan al gebeuren bij slechts 1 doel. Maar zeker als het er meer zijn, is de neiging groot om niet meer te weten wat het echte doel eigenlijk is. Soms wordt het je niet eens meer verteld. Het is tenslotte niet van belang, je weet op basis van het SMART doel toch wel wat je moet doen?

Wat zou moeten gebeuren, is het volgende:
Er wordt niet alleen gekeken naar het netjes geformuleerde SMART doel. Nee, er wordt ook gekeken naar het hogere doel. Breiden we de testen uit op een wijze, die werkelijk de bugs van klanten terug kan brengen? Melden klanten bugs over de applicatie onderdelen, die we willen aanpassen? En zo ja, hoeveel en hoe vaak dan? Het SMART doel gecombineerd met het kijken naar het hogere doel leiden vervolgens tot een goede aanpak en een goede testverbetering.

Zorg er ook voor dat je dit hogere doel objectief kan controleren. Er moeten minimaal statistieken zijn, die dit hogere doel meten en die je regelmatig kan controleren. Dit geeft je de optie je aanpak tussendoor te evalueren en eventueel aan te passen.

Ieder zijn deeltje

Neem nu 1 item van deze checklist: het uitbreiden van de regressietesten. Deze taak komt bij een tester terecht. Deze vraagt vervolgens: "Welke testen moet ik uitbreiden?". De maker van het plan was er heilig van overtuigd, dat dit toch wel door de tester bepaalt zou worden. Maar de tester is van mening, dat dit al uitgewerkt had moeten zijn in de taak. Beide hebben een manager, die ze gelijk geeft: ze hebben het al druk, ze moeten geen onnodig werk op zich nemen.

Hoeveel mensen je ook in een SMART doel neerzet, uiteindelijk moet er 1 hoofdverantwoordelijke zijn. Deze heeft als doel, ongeacht wie, wat of welke afdeling, ervoor te zorgen dat vragen beantwoord worden en problemen opgelost worden. Je kan niet alles in een SMART doel vastleggen. Tenslotte is het verstandig zo'n doel qua tekst niet al te lang te maken. Maar juist daarom hoort iedereen te weten, bij wie je terecht kan met vragen en problemen. Want hoe SMART een doel ook is, alleen dan is deze ook werkelijk haalbaar.

Het beloningseffect

SMART doelen zijn ideaal om mensen te beoordelen en te belonen. Waarbij ik belonen nu even ruim zie: zowel met complimenten voor goed werk als financieel. Er is een probleem: het is zeer moeilijk om een SMART doel op te stellen, wat zich niet tegen de opdrachtgever kan keren. Als iemand de opdracht heeft het aantal testen te verdubbelen, kan hij de bestaande testen splitsen in tweeën. Als iemand de opdracht heeft het aantal gemelde bugs te verminderen, kunnen bugs plotseling "Change requests" worden. Tenslotte is het een wijziging op de huidige werking, waarmee ze akkoord zijn gegaan. Toch?

Maar de SMART doelen kunnen ook in het nadeel van de uitvoerende werken. Iemand kan oprecht het aantal testen willen verdubbelen, maar vervolgens te horen krijgen, dat hij te weinig tijd besteed aan concreet testen. Of werkelijk de bugs willen verminderen, maar niet de tijd krijgen om de bestaande bugs te analyseren.

In beide gevallen kan de situatie ontstaan, dat een persoon bestraft wordt voor het doen wat het beste is voor het bedrijf of het gehoorzaam uitvoeren van een opdracht. En het is zelfs mogelijk dat een persoon beloond wordt voor het leveren van slecht werk. Dit kan "verstandige" testers dan ook nog eens stimuleren om bij de "onverstandige" testers te gaan horen. Die worden tenminste wel beloond.

SMART doelen werken alleen als de opdrachtgever en de uitvoerder(s) elkaar vertrouwen. Het vertrouwen dat beide partijen het beste willen halen uit het testen en de doelen kunnen behalen, maar tegelijkertijd beseffen dat doelen kunnen wijzigen. Beiden moeten bereid zijn om de doelen aan te passen, als dit noodzakelijk is. En, misschien een klein extra detail, ook zelf het recht hebben om tot deze aanpassing over te gaan.

Moet je SMART ontwijken?

Als je dit alles leest, zou je bijna de SMART doelen gaan ontwijken. Maar SMART doelen hebben ook hele grote voordelen, zoals in de inleiding al genoemd. Het grootste probleem is, dat juist een SMART geformuleerd doel stimuleert om niet verder te kijken dan je neus lang is. Want het doel is al zo ontzettend duidelijk, dat meer niet nodig lijkt. Toch moet je blijven kijken naar het grotere geheel en met elkaar blijven praten, om op 1 lijn te blijven. Als je dat niet vergeet en je weet ook nog eens als team, maar met leider, de situatie SMART aan te pakken, is er absoluut niets mis met SMART.

zondag 7 januari 2018

De verboden bugs bij regressietesten

Bij het maken van een regressietest, al of niet geautomatiseerd, gebeurt soms iets, wat eigenlijk niet zou moeten kunnen. Je komt een bug tegen, die nog niet gevonden is. Dit zou een zeer uitzonderlijke situatie moeten zijn, omdat de functionaliteit eerder getest moet zijn. Maar het opstellen van een regressietest gaat vaak samen met het verbeteren van het testen in het algemeen. Daardoor kan de kwaliteit van de test tijdens de regressietest veel hoger zijn dan de kwaliteit van de test, waarmee de functionaliteit hiervoor is getest. En hierdoor kunnen bugs naar boven komen, die nog niet eerder gevonden zijn.

Iets wat je vlak daarna vaak zal horen: maar de bugs zijn niet gemeld door onze gebruikers of klanten. Ook deze gaat meestal niet op. Als er behoefte is aan kwaliteitsverbetering in testen, is dit vaak omdat gebruikers en klanten te veel bugs melden. En juist in zo'n situatie concentreren klanten en gebruikers zich vooral op de belangrijkste. Ze hebben de tijd niet beschikbaar, om je alles wat ze tegenkomen te laten weten. Zeker niet als ze regelmatig bugs tegen komen. Dus je weet eigenlijk niet of deze bug al eerder ontdekt is door een klant of niet. Alleen dat er voor de klant in ieder geval belangrijkere bugs zijn.

Maar dan kom je in de volgende situatie: hoe ga je om met deze "verboden" bugs bij het opstellen van regressietesten? Als je dit leest, voor je begint met het invoeren of verbeteren van regressietesten, is de beste actie in de voorbereiding. Vertel je opdrachtgever of leidinggevende, dat je onbekende bugs kan tegenkomen. En leg uit waarom dit het geval is. Begrip is de basis. En maak meteen afspraken over de afhandeling van deze bugs. Ook achteraf, als de bugs al gevonden zijn, is dit een verstandige stap om alsnog te doen.

Er zijn twee belangrijke argumenten om deze bugs op te lossen. Ten eerste het algemene streven naar een kwalitatief goed product. Ten tweede het streven naar een goede, betrouwbare regressietest. De tweede vraagt misschien wat toelichting. Een regressietest moet testen of de applicatie nog steeds goed werkt. Hiervoor bepaal je een bepaalde dekking. Je test bijvoorbeeld alle velden in een scherm of alle situaties, die voortkwamen uit een bestaande testtechniek. Maar een bug maakt een goede dekking onmogelijk. Je kan niet alle velden of situaties goed en volledig testen, zonder de test elke keer te laten falen. Want je moet om de bug heen testen, waardoor je niet alle velden en situaties test. Of je moet de bug accepteren als goed, waardoor je niet echt test of de applicatie goed is. Of je moet de test steeds laten falen, waardoor de regressietest niet goed meer uitgevoerd kan worden.

Als je slechts 1 bug vindt, is dit nog wel overkomelijk. Maar hoe meer bugs, hoe beschadigder je regressietest wordt. En je krijgt uiteindelijk twee hele verschillende regressietesten: een niet bestaande, die zou testen hoe de applicatie goed werkt en de bestaande, die test rekening houdend met de gevonden bugs.

Het algemene streven naar kwaliteit lijkt een stuk simpeler. In de praktijk is juist dit het minder sterke argument. De bug komt niet van een klant of gebruiker af en zit waarschijnlijk al vrij lang in de applicatie. Dus zelfs als je de bug wil oplossen, zullen er altijd belangrijkere bugs zijn. Namelijk de bugs, die wel door de klant of gebruiker zijn gemeld. Zelfs als tester kan je tegen dit argument weinig inbrengen.

Van belang is dan ook om beide argumenten goed naar voren te brengen. De reden om toch deze bugs op te lossen, zit namelijk in de combinatie. Om goed te testen moet je een betrouwbare regressietest kunnen opstellen. Een, die niet om de fouten heen werkt. En als bedrijf moet je streven naar een kwalitatief goed product, ongeacht of de klanten alle bugs melden of niet. Ook bij niet gemelde bugs is het van belang goed te kijken naar de andere zaken, die prioriteit bepalen: hoe vaak kan de bug in de praktijk voorkomen en hoe groot zijn de gevolgen van de bug. Anders gezegd: hoe groot is de kans dat gebruikers (denk hierbij ook vooral aan nieuwe gebruikers) de bug (alsnog) tegenkomen en hoe groot zijn de gevolgen als dit gebeurt.

Maar ga er niet vanuit, dat alle bugs in een keer worden opgelost. Dit verwachten schept vaak al meteen een jij-tegen-zij houding. Ga voor een afspraak, waarin de bugs meegenomen worden in de planning. Het belangrijkste is, dat eraan gewerkt wordt. Maar hou wel statistieken bij. Hou bij hoeveel van dit soort bugs je hebt gevonden en hoeveel er zijn opgelost. Zeker in het begin kunnen de bugs in aantal zeer sterk groeien, maar het gezamenlijke doel moet zijn de groei te stoppen. Zowel voor jezelf als voor de organisatie is het dan ook van belang om na te kunnen gaan of dit doel gehaald wordt. Zodat je weet of je misschien nog iets harder moet vechten. En als dat zo is, heb je in ieder geval de onderbouwing, via de statistieken, al gestart.


zondag 17 december 2017

Een Agile aanpak voor een teststrategie

Als je kijkt naar een teststrategie of soortgelijke documenten, loop je tegen een standaard Agile probleem aan. Een veel gehoorde Agile klacht is: "We werken nu Agile, maar we worden nog steeds nergens bij betrokken". En een andere veel gehoorde Agile klacht is: "We hebben sinds de invoering van Agile veel te veel meetings. Ik wil meer tijd om gewoon mijn werk te doen." Beiden komen regelmatig uit dezelfde monden. Hoe ga je hiermee om bij een onderwerp als de teststrategie? Mensen zijn vaak nauwelijks bereid hier veel tijd in te steken, maar zeer bereid om te laten weten, dat zij het anders wilden.

Om dit te bespreken, moet ik eerst een misverstand uit de weg helpen. Ik heb bijna geen invoering van Agile of Scrum meegemaakt, zonder dat mensen gingen klagen over het aantal meetings. En de meest getrokken conclusie naar aanleiding van die klachten, is dat mensen niet betrokken willen zijn. Die conclusie is in de meeste gevallen te snel. Vaak willen mensen wel degelijk betrokken zijn. Maar niet bij alles. Ze willen niet gedwongen worden om tijd te besteden aan zaken waar ze geen kennis van hebben en geen interesse in hebben. Meetings, waar ze vooral luisterend tijd doorbrengen. Als ze het al de moeite vinden om te luisteren. Wanneer je het voor elkaar krijgt een meeting te organiseren op het gebied van hun kennis of hun interesse, zal je niet snel horen klagen over "te veel meetings". Dat in het achterhoofd houdend, is het zeer goed mogelijk om tot een Agile teststrategie te komen.

Maar er is nog een probleem. Een teststrategie kan niet 100% democratisch bepaald worden. Er is namelijk een langere termijn opgelegd doel. Dit kan zijn opgelegd door hoger management, maar dit kan ook een doel zijn, dat je zelf wil bereiken. Dit doel kan niet zomaar aan de kant worden geschoven, al zou het hele team tegen zijn. Er zijn dus grenzen. En die grenzen moeten, hoe Agile de aanpak ook is, wel bewaakt worden.

Alternatieven

Een van de meest logische wijze om inspraak te geven, is om mensen de mogelijkheid geven met een alternatief plan te komen. Juist door het bovenstaand beschreven probleem rond het lange termijn doel, lijkt dit geen handige aanpak. Maar ongeacht of je dit officieel vraagt of niet, juist als je echt Agile wil samenwerken, moet je altijd open staan voor een ander idee. Juist binnen een teststrategie kan er sprake zijn van experts op een bepaald gebied, zoals testautomatisering en performance. Maar ook een testspecialist in een bepaalde applicatie kan inzichten hebben, die jij niet hebt. Bijvoorbeeld waar de grootste kwaliteitsrisico's liggen.

Meestal zullen de geboden alternatieven afgewezen worden. Ze bereiken namelijk niet het doel, dat je voor ogen hebt. Niet zo vreemd, want het alternatief is namelijk niet bedoeld om jouw doel te bereiken. Het is bedoeld om het doel van de indiener te bereiken. Juist daarom kunnen afwijzingen van een alternatief zo'n groot effect hebben. Voor je het weet, is de indiener ervan overtuigd, dat zijn of haar probleem voor jou dus niet belangrijk is. Ongeacht of dit waar is of niet.

Om de samenwerking en de betrokkenheid goed te houden, zijn goede alternatieven van de mensen om je heen van groot belang. Door hun specialisaties, die doorklinkt in hun alternatieven, wordt jouw strategie al snel beter, als je dit weet te gebruiken. Maar om bovenstaande situatie te voorkomen, is het wel jouw taak anderen een eerlijke kans te geven met hun alternatief. En dat doe je door niet alleen de oplossing te vertellen, maar ook het probleem.

Zorg dat alle betrokkenen op de hoogte zijn van de doelen, die jij dit jaar met je teststrategie wil bereiken. En vermeldt hierin welke problemen je hiermee hoopt op te lossen of te verminderen. Vooral het laatste is ook van groot belang. Het kan je doel zijn om meer de facturatie te testen. Maar als je hier niet bij vermeldt, dat je het aantal door de klanten gevonden fouten in de factuurbedragen wil terugbrengen? Dan hebben anderen veel sneller niet genoeg informatie om tot een goed alternatief te komen. Want "Meer facturatie testen" kan bijvoorbeeld ook om een performance probleem gaan. Of om layout problemen.

Je mag dan wel verwachten dat mensen, die een alternatief aanbieden, hierbij aansluiten bij de genoemde doelen en ook de genoemde problemen willen oplossen. Maar daarnaast zullen ze ook hun eigen problemen tot een oplossing willen brengen. Dit maakt het alternatief niet opeens standaard bruikbaar. Maar zelfs bij een afwijzing, is het makkelijker om het probleem van de ander te verwerken in het eindresultaat. Omdat beide voorstellen al dichter bij elkaar liggen.

Overleggen

Samenwerken is overleggen, daar is niets aan te veranderen. De meest logische Agile aanpak voor een teststrategie, is dan ook een meeting beleggen met alle betrokkenen. En omdat er veel te bespreken valt, een lange meeting beleggen. Zo een, waar veel mensen al door de lengte geen zin in zullen hebben.

Samenwerken door overleggen kan echter ook op andere manieren. Je kan thema overleggen doen, bijvoorbeeld een losse meeting voor de testautomatisering, een losse meeting voor testtools, enz. En bij deze meetings alleen de direct betrokken van deze onderwerpen uitnodigen.

Daarnaast kan je ervoor zorgen, dat alleen de mensen die willen aanwezig zijn. Dit lijkt misschien niet netjes en verstandig. Maar mensen, die verplicht zijn te komen en er niet willen zijn, zullen meestal geen bijdrage leveren aan de meeting. Dus ze de gelegenheid geven niet te komen, heeft voor beide partijen alleen maar voordelen.

Let wel op, dat het niet komen hun keuze is. Dit doel kan heel eenvoudig bereikt worden door mensen voor een vergadering optioneel uit te nodigen. Maar je kan er ook voor kiezen, dit van tevoren mondeling te bespreken. Het tweede is natuurlijk meer tijdrovend, maar geeft wel de optie om de ander ervan te overtuigen dat zijn of haar kennis in de meeting zeer waardevol zal zijn.

Daarnaast hoeft overleggen niet in een groep. Een op een meetings kosten in basis meer tijd, maar de waardering voor zo'n meeting van de ander is vaak groter. Juist door de een op een aandacht, zal de ander zich niet snel niet serieus genomen voelen. Het is makkelijker om de onderwerpen op de ander af te stemmen. En de ander zal ook sneller zijn of haar mening geven. Zeker in een omgeving waar het vertrouwen in Agile of de organisatie laag is en er in meetings weinig input is, kan juist een meeting een op een de doorbraak geven. Maar houdt wel een belangrijk nadeel in je achterhoofd: er is geen wisselwerking tussen de verschillende betrokkenen qua ideeën. Daardoor kan de kwaliteit lager zijn.

Als het vertrouwen in Agile en in de organisatie wel aanwezig is, kan je er ook voor kiezen om geen echt overleg te hebben, maar te overleggen per e-mail. Dit kan door een concreet voorstel te sturen of door vragen rond te sturen. Waarbij mensen de kans krijgen via e-mail, al dan niet aan een hele groep, te reageren. Een goed alternatief, als men wel wil overleggen, maar geen tijd heeft. Maar hierbij moet je wel iets zeker weten: iedereen aan wie je de e-mail stuurt, moet in staat zijn om het met je oneens te zijn, En wel openlijk. Als iemand nooit tegen jou heeft gezegd, dat je iets verkeerd hebt gedaan. Of dat je iets beter had kunnen doen, is dit niet de persoon om via e-mail mee te overleggen. Ongeacht de situatie, zal je eerst mondeling de samenwerking moeten verbeteren.

Het eind- of tussenresultaat

Het belangrijkste voor een goede Agile aanpak, is dat mensen zich vrij blijven voelen opmerkingen en ideeën in te brengen. En daarvoor is het van belang, dat mensen het gevoel hebben serieus genomen te worden. Maar een teststrategie is keuzes maken. Je kan niet alle problemen nu oplossen. En je kan je tijd maar 1 keer besteden. Dus regelmatig zal niet iedereen blij zijn met je voorstel of je eindproduct, hoe vaak je ook overlegd. Of nog erger, juist door de overleggen, omdat je verwachtingen hebt geschept, enkel door naar hun problemen te luisteren. De verwachting, dat je iets met hun input gaat doen. Hoe onbelangrijk het misschien ook lijkt voor een teststrategie, juist hier moet je ook aandacht aan besteden.

De belangrijkste wijze is een goed begin van je document. Beschrijf nogmaals de doelen van de teststrategie en de problemen die je hiermee wil oplossen. Als je bepaalde problemen van anderen hebt overgenomen, benoem deze dan ook. Laat al aan het begin van het document merken, dat je die problemen ook belangrijk hebt gevonden.

Besteed daarnaast aandacht aan de langere termijn. Als je teststrategie voor een jaar is, beschrijf dan ook de teststrategie voor een flink aantal jaren meer. Dit mag natuurlijk op hoofdlijnen. Niet alleen geef je hiermee belangrijke informatie aan de lezer. Je kan dit ook gebruiken om onderwerpen, waar je nu geen tijd voor hebt, alsnog te benoemen. Te laten merken dat je ze wel degelijk belangrijk vindt. Probeer ook uit te leggen waarom je dit jaar niet hebt gekozen voor deze onderwerpen, dat maakt de kans op acceptatie groter.

Pas hierbij wel op, dat je geen verwachtingen schept, die je niet waar kan maken. Iemands probleem schriftelijk erkennen is een goede stap, zelfs als je niets oplost. Maar jaar na jaar na jaar schriftelijk laten weten dat er belangrijkere problemen zijn, kan vertrouwen juist om zeep helpen.

De Agile aanpak samengevat

Er is dus een manier om op een Agile wijze tot een teststrategie te komen.
  • Laat duidelijk weten wat je doelen zijn en welke problemen je op wil lossen, zodat andere makkelijker waardevolle input kunnen geven
  • Plan overleggen met personen, die echt willen. Als de situatie dit toestaat of zelfs aanraad, kan dit met een op een meetings of via e-mail
  • Laat in je uiteindelijke teststrategie of een voorstel hiervoor duidelijk de problemen van de ander terugkomen, als je deze inderdaad wil oplossen. Een middel hiervoor is een beschrijving van de doelen, die gaat over een langere periode dan de periode van de teststrategie.


vrijdag 1 december 2017

Hoe verminder je testspecialisaties bij Scrum?

Specialisaties is een algemeen probleem bij Scrum. Het streven om als team altijd onafhankelijk te kunnen werken, wordt steeds moeilijker naarmate er meer teamleden zijn met specialisaties. Of er steeds meer specialisten buiten het team komen. Zolang je bedrijf alleen testers heeft, is het een probleem van iemand anders. Maar juist binnen testen komen steeds vaker specialisaties voor: performance tester, testautomatiseerder, security tester, noem maar op.

Juist bij een onderwerp, waar een bedrijf en de testers in de Scrum teams niet zo bekend mee zijn, ontstaat er snel een specialist. Een tester in een Scrum team, die de tijd neemt of krijgt, om een nieuw onderwerp te leren. Of iemand buiten het team, al of niet ingehuurd, die al ervaring heeft met het onderwerp. Deze specialist zal, geheel tegen de Scrum goals in, door de teams gedeeld worden. De kennis is vaak nodig in alle teams, niet in slechts 1 team. Het belangrijkste is wel: probeer dit als een tijdelijke situatie te zien, met als doel zo snel mogelijk zo veel mogelijk zonder de specialist te kunnen werken. En ga dit niet als de gewenste situatie zien.

Nu gaat het werk overnemen van een specialist meestal niet in een keer. Die tijd is er vaak niet. En het is ook wat veel voor de persoon, die de nieuwe stof moet leren. Het overnemen kan echter ook in kleinere stappen gebeuren. De stappen, die je kan zetten om de zelfstandigheid weer terug te krijgen, zijn bijvoorbeeld de volgende:

Testuitvoering

  1. Leer het resultaat lezen. Is de test geslaagd of gefaald?
  2. Leer het resultaat beoordelen. Welke test is gefaald? En wat test deze test?
  3. Indien mogelijk: leer de test handmatig herhalen
  4. Leer de test uitvoeren. Hoe start je hem op? En hoe start je, indien van toepassing, een deel op?
  5. Leer het resultaat analyseren. Hoe bepaal je bij een gefaalde test wat er fout gaat?
In veel gevallen is het slim om het analyseren na het opnieuw uitvoeren te doen. Dit is, omdat vaak het zien van de test veel informatie geeft over wat er fout gaat. Het kan daarom handig zijn, dat je zelf in staat bent de test verschillende keren te herhalen, waarbij je bijvoorbeeld kleine verschillen in de data hebt of de omgeving iets hebt aangepast.

Testaanpassing
  1. Leer bestaande testen aanpassen, als deze door een wijziging in de applicatie falen
  2. Leer nieuwe testen maken op basis van bestaande testen, bijvoorbeeld een andere invoer, maar wel dezelfde controles
  3. Leer nieuwe testen maken zonder gebruik te maken van bestaande testen
Het allerbelangrijkste blijft: beschouw een specialist, al of niet in je eigen Scrum team, niet als het eindstation. Zet een traject in werking om in ieder geval de testuitvoering te kunnen binnen het team. En bij voorkeur ook de bestaande testcases aanpassen. Meer kan eventueel buiten het team. Dat is niet ideaal, maar brengt de Scrum principes niet meer gevaar.

Veel leerplezier!



zondag 12 november 2017

De Ja-Nee-Ja-Nee-Ja-Nee testtechniek

Als je mijn blog regelmatig leest, weet je dat ik het belangrijk vind om invoervelden met verschillende waarden te testen. Maar soms heb je maar twee mogelijke waardes: Ja en Nee. En op je scherm staan misschien zelfs meerdere van dit soort invoervelden. Hoe test je nu of deze waardes goed werken?

Stel je hebt 5 velden met de keuze Ja/Nee. Om deze goed te testen heb je 2 X 2 X 2 X 2 X 2 = 32 testcases nodig. Alleen dan weet je zeker, dat elke mogelijkheid werkt. En als je de tijd hebt, moet je deze 32 testcases zeker allemaal testen. Als je de tijd niet hebt, kan je al heel veel met slechts 2 testcases.

Veel fouten rond Ja/Nee invoervelden ontstaan door kopiëren van bestaande code of elementen. De ontwikkelaar neemt het dichtstbijzijnde bestaande invoerveld en kopieert het element en/of de code. Deze wordt dan vervolgens aangepast voor het nieuwe invoerveld. Door de velden, die dicht bij elkaar staan, nu andere waardes te geven, test je of deze velden ook werkelijk hun eigen waarde gebruiken. En niet die van hun mogelijke "oorsprong". Maar naast dit kopieer argument is het ook handig om ingevoerde waardes snel te kunnen controleren. Een bepaald patroon in de invoer maakt dit makkelijker.

Hoewel ik deze testtechniek nergens heb kunnen vinden, ben ik daarom in de loop van de tijd dit soort velden met de Ja-Nee-Ja-Nee-Ja-Nee techniek gaan testen. Het eerste veld zet ik op Ja, het tweede op Nee, het derde op Ja, enz. En voor de tweede testcase zet ik het eerste veld op Nee, het tweede op Ja, de derde op Nee, enz. Dit heeft dus drie duidelijke voordelen: elk veld wordt zeker getest met beide waardes, ik kan de door mij gekozen invoer eenvoudig onthouden en, zeker niet onbelangrijk, er is een flink grotere kans dat kopieerfouten ontdekt worden.

Een hele eenvoudige, snelle techniek met een vaak goed resultaat. Probeer hem eens zelf uit!

zondag 29 oktober 2017

Problemen bij Scrum en Automatisch testen - Ze bestaan echt

Scrum en automatisch testen worden vaak als perfect koppel gezien. Dus hoeveel problemen kan je tegenkomen, als je deze twee combineert? Een heleboel! Hoe komt dit?

Automatisch testen werkt het beste als deze op de ideale wijze uitgevoerd kan worden. Dit houdt in dat er per Scrum team een stabiele omgeving is, waar op een afgesproken tijd opgeleverd wordt. Deze afgesproken tijd is afgestemd op de automatische testen, zodat de automatische test tegen een voorspelbare applicatie draait. Onderhoud aan de automatische testscripts wordt binnen de teams zelf afgehandeld als onderdeel van de story. Bugs worden opgelost bij het team, waar de bug vastgesteld wordt. De perfecte omgeving. Een perfecte omgeving, die er dus niet altijd is.

Meer Scrum teams is niet altijd meer testomgevingen
De meeste problemen ontstaan als er meerdere Scrum teams in een bedrijf aanwezig zijn. Bij het toevoegen van Scrum teams, zal er niet altijd sprake zijn van het toevoegen van testomgevingen. En zeker niet van testomgevingen, die stabiel genoeg zijn voor een automatische test. Hierdoor zal de automatische test draaien op een omgeving, waarin de code van meer dan 1 team wordt opgeleverd.

Dat maakt analyse noodzakelijk bij het falen van de test. Niet alleen moet worden nagegaan of er echt sprake is van een fout, maar ook moet worden nagegaan welk team deze veroorzaakt heeft. Als je tenminste het streven wilt vasthouden, dat er alles aan gedaan moet worden om de story's met de beste kwaliteit mogelijk op te leveren. Het eindproduct van een sprint moet tenslotte geschikt zijn voor productie. En dat is zeker niet het geval, als je weet dat er nog een fout in zit.

Tijdstip afstemmen op de oplevering
Elke wijziging, die opgeleverd is, moet een keer automatisch getest zijn. In de meest ideale situatie vindt er daarom na elke oplevering van een story een volledige automatische test plaats. Maar als dit (nog) niet mogelijk is, moet er meer afstemming plaats vinden. De automatische test kan als eindcontrole gebruikt worden aan het eind van een sprint. Dit is het meest eenvoudig, maar maakt de afstand tussen oplevering van de story en de automatische test wel erg groot.

Ook kan de automatische test met een vaste, korte frequentie draaien. Maar het heeft geen zin om de automatische test dagelijks te draaien, als je de story's pas 1 keer in de week op een stabiele omgeving neerzet. Deze oplossing kan dus pas als de story's ook minimaal 1 keer per dag opgeleverd worden naar een stabiele omgeving, die geschikt is voor de automatische test.

Onderhoud van de testscripts
Testautomatisering begint vaak als een los project, buiten de bestaande Scrum teams op. Regelmatig vraagt het kennis, die in de teams nog niet beschikbaar zijn. En tijd, die binnen het team niet vrijgemaakt kan worden. Om onderhoud van de testscripts onder te brengen in de Scrum teams is als gevolg daarvan een uitdaging. En zeker op korte termijn met regelmaat (nog) niet haalbaar.

Dit staat dan nog los van de verantwoordelijkheid van de testscripts. Het meest eenvoudig is om een Scrum team verantwoordelijk te maken voor de testscripts, die "hun" applicaties of modules raken. Maar wat als twee Scrum teams werken aan dezelfde applicatie, zelfs aan dezelfde schermen? Beide onderhouden hun eigen wijzigingen? Wie voegt deze wijzigingen dan weer samen en controleert het geheel?

Niet vreemd dat onderhoud van de testscripts bij testautomatisering nog wel eens wordt losgetrokken van de Scrum teams. Maar in dat geval zal je wel afspraken moeten maken over het melden van de benodigde wijzigingen. Hoe weet de testautomatiseerder welke functionaliteit wijzigt? Waar velden worden toegevoegd of gewijzigd? En waar controles worden aangepast?

Toch doen!
Laat deze problemen je er niet van weerhouden om met testautomatisering te starten. Afspraken zijn te maken en problemen zijn op te lossen. Het kan alleen handig zijn om er van tevoren alvast bij stil te staan. Dat maakt de kans op het slagen van testautomatisering alleen maar groter!