Är det en bugg, en CR eller ett förbättringsförslag?

Är det en Bugg, en CR eller förbättrings förslag?
Min fråga är: Spelar det någon roll? Borde vi inte istället fråga oss om det är ett beteende i produkten som vi vill förändra eller ej?
Anledningen till att jag tar upp denna fråga är att jag i många projekt jag varit i kontakt med sett att väldigt mycket tid spenderas på att följa processen istället för att testa produkten eller på att agera på den information test tar fram. Ett exempel på detta är med vilken process man hanterar förändringar i systemet. Om vi genom vår testning kan peka på ett beteende i produkten som vi tycker är märkligt, så vill vi naturligtvis förmedla denna information snabbt och smidigt.
Ofta bollas informationen runt i stora system om man angett den som en bugg från början. Om någon bestämmer att det är ett förändringsförslag så kastas man ut ur buggprocessen och in i CR-processen, gärna med en tillhörande change control board som inte träffas så ofta. Samtidigt går tiden. Information är en färskvara med ett bäst före datum, problemet är att vi inte vet exakt vilket detta bäst före datum är. Därför är det väldigt viktigt att informationen som testningen tar fram faktiskt behandlas så fort som möjligt och att vi minimerar tiden som den slungas runt i processen.
Jag blir ofta väldigt imponerad (eller förskräckt är kanske ett rättvisare ord) när jag ser hur många olika status en bugg kan ha och hur buggen dribblas runt mellan dessa. Det kan ibiland tolkas som att man bygger en lång och komplicerad process bara för att faktiskt slippa ta itu med informationen. Om vi bara följer processen så kan ingen klandra oss för att vi inte gör något produktivt. Speciellt gillar jag statusen “works as designed”. För att citera min danske vän Carsten Feilberg: “Well, Mr Developer, maybe there is something wrong with your design then.”. “Works as designed” är bara en bakdörr för utvecklare att slippa göra om sin implementation, ett “get out of jail”-kort.
Ett annat problem med att inte behandla informationen direkt är att man ofta sparar den i ett fräckt bugghanteringsverktyg (gärna med dyra licenser kopplade till sig). Där slänger man ohämmat in alla buggar och så låter man dom ligga där tills någon behagar titta på dem. Dessa databaser blir snabbt stora och ohanterliga och efter ett tag börjar utvecklare klaga på att testaren lägger in samma bugg två gånger. Den naturliga lösningen på detta är då att säga åt testarna att dom måste säkerställa att den bugg dom hittat inte redan är inlaggd i databasen. Hur vore det om utvecklaren behandlade informationen direkt istället.? Detta resulterar i att alla testare spenderar en enligt min mening oförsvarbart lång tid att leta i en databas av gamla fel. Givetvis skriver inte alla personer samma sak i sina buggrapporter, så det är väldigt svårt att ta reda på om exakt den bugg man har hittat finns där redan eller ej.
Ofta ser man också att en utvecklare börjar kika på en gammal bugg och det första han gör är att skicka tillbaka den till test med frågan om buggen fortfarande finns kvar i produkten. Så nu ska vi testa samma sak en gång till för att ta reda på om informationen vi tidigare la in fortfarande är gilltig. Var det då lönt att vi testade detta första gången om vi ändå måste göra om det senare? Är inte detta slöseri med tid så säg.
Lösningen på detta problem är att behandla information direkt och inte spara undan den till senare. Ska något rättas gör det då direkt annars lev med beteendet. Undvik att spara information i oöverskådliga databaser. De sväljer allt och det är inte lätt att få en uppfattning om hur mycket relevant information som ligger där inuti. Har ni en sådan buggdatabas nu så släng den (bry er inte om att försöka rädda någon data som finns i den) och börja om från början, fast på ett sätt som passar er bättre.
En annan oönskad effekt av att inte behandla information från testningen direkt är att man ständigt bygger ny funktionallitet på en sedan felaktig och instabil kodbas, vilket leder till att man kontinuerligt adderar mer och mer skräp in i kodbasen och sakta men säkert bryter ner den.
Till min förvåning ser jag även projekt som kallar sig agila gå rakt in i denna fälla. Här har vi en beslutsfattare närvarande och tillgänglig i form av produktägaren som direkt kan proiritera och ta beslut utan några långa omvägar. Jag coachar för närvarande ett Scrum-team där vi förändrat vårt arbetsätt till att just agera på information från test direkt och som mål har vi att aldrig vid sprintavslut ha en lista med oanalyserade buggar. Därmed inte sagt att vi rättar alla buggar. Vissa beteenden väljer vi att leva med istället och så kastar vi buggrapporten. Vi sparar inte onödig information och vi använder inte något bugghanteringsverktyg. Vi har papperslappar på vår storyboard. Vi blandar inte heller in produktägaren i alla beslut att rätta en bugg eller ej, utan det är bara om det är ett beteende vi är tveksamma på som vi lyfter det vidare, annars rättar teamet den direkt. Vi ser att vårt arbete flyter på mycket smidigare när vi jobbar på detta sättet. Vi har förbättrat vår kodbas kontinuerligt. Vi spenderar ingen tid att leta i buggdatabaser utan vi lägger vår tid på att test produkten istället. Vi känner ett större värde av testningen och vi ökar efterhand vår tilltro till kodmassan.
Så mina två korvören är att frågan vi bör ställa är om det är ett beteende vi vill förändra eller ej och om vi vill ändra så gör vi det direkt. Skippa alla olika benämningar så som buggar, förändringar, förbättringar o.s.v. Skippa också onödiga tillstånd en benämning kan ha. Allt detta slöar bara ner processen och tillför inget värde. Är ni i stora projekt, bryt ner teamen till en hanterbar storlek och låt varje team ta ansvar för sin producerade kod, så att vi får snabbare komunikationsvägar.
Jag ser väldigt lite nytta med det sätt som man ofta hanterar dessa frågor på och tycker mest att det är ett sätt att fly undan ansvar och att slippa göra värdefullt arbete. Dessa processer är sjuka och vi behöver bota dem omgående.  Mycket av det jag tar upp är inte vi testare direkt inblandade i, men min uppmaning är att följ inte en process som fungerar dåligt, utan jobba aktivt för att förändra den. Att blint följa med bara minskar en del av det värde som ni tillför som testare och gör ert jobb både tråkigare och omständigare och er själva mer utsatta.
Jag vet att det finns många som gillar fräcka, stora och komplicerade processer för att hantera detta och ni får gärna motbevisa mig i denna fråga.

Min fråga är: Spelar det någon roll? Borde vi inte istället fråga oss om det är ett beteende i produkten som vi vill förändra eller ej?

Anledningen till att jag tar upp denna fråga är att jag i många projekt jag varit i kontakt med sett att väldigt mycket tid spenderas på att följa processen istället för att testa produkten eller på att agera på den information test tar fram. Ett exempel på detta är med vilken process man hanterar förändringar i systemet. Om vi genom vår testning kan peka på ett beteende i produkten som vi tycker är märkligt, så vill vi naturligtvis förmedla denna information snabbt och smidigt.

Ofta bollas informationen runt i stora system om man angett den som en bugg från början. Om någon bestämmer att det är ett förändringsförslag så kastas man ut ur buggprocessen och in i CR-processen, gärna med en tillhörande change control board som inte träffas så ofta. Samtidigt går tiden. Information är en färskvara med ett bäst före datum, problemet är att vi inte vet exakt vilket detta bäst före datum är. Därför är det väldigt viktigt att informationen som testningen tar fram faktiskt behandlas så fort som möjligt och att vi minimerar tiden som den slungas runt i processen.

Jag blir ofta väldigt imponerad (eller förskräckt är kanske ett rättvisare ord) när jag ser hur många olika status en bugg kan ha och hur buggen dribblas runt mellan dessa. Det kan ibiland tolkas som att man bygger en lång och komplicerad process bara för att faktiskt slippa ta itu med informationen. Om vi bara följer processen så kan ingen klandra oss för att vi inte gör något produktivt. Speciellt gillar jag statusen “works as designed”. För att citera min danske vän Carsten Feilberg: “Well, Mr Developer, maybe there is something wrong with your design then.”. “Works as designed” är bara en bakdörr för utvecklare att slippa göra om sin implementation, ett “get out of jail”-kort.

Ett annat problem med att inte behandla informationen direkt är att man ofta sparar den i ett fräckt bugghanteringsverktyg (gärna med dyra licenser kopplade till sig). Där slänger man ohämmat in alla buggar och så låter man dom ligga där tills någon behagar titta på dem. Dessa databaser blir snabbt stora och ohanterliga och efter ett tag börjar utvecklare klaga på att testaren lägger in samma bugg två gånger. Den naturliga lösningen på detta är då att säga åt testarna att dom måste säkerställa att den bugg dom hittat inte redan är inlaggd i databasen. Hur vore det om utvecklaren behandlade informationen direkt istället.? Detta resulterar i att alla testare spenderar en enligt min mening oförsvarbart lång tid att leta i en databas av gamla fel. Givetvis skriver inte alla personer samma sak i sina buggrapporter, så det är väldigt svårt att ta reda på om exakt den bugg man har hittat finns där redan eller ej.

Ofta ser man också att en utvecklare börjar kika på en gammal bugg och det första han gör är att skicka tillbaka den till test med frågan om buggen fortfarande finns kvar i produkten. Så nu ska vi testa samma sak en gång till för att ta reda på om informationen vi tidigare la in fortfarande är gilltig. Var det då lönt att vi testade detta första gången om vi ändå måste göra om det senare? Är inte detta slöseri med tid så säg.

Lösningen på detta problem är att behandla information direkt och inte spara undan den till senare. Ska något rättas gör det då direkt annars lev med beteendet. Undvik att spara information i oöverskådliga databaser. De sväljer allt och det är inte lätt att få en uppfattning om hur mycket relevant information som ligger där inuti. Har ni en sådan buggdatabas nu så släng den (bry er inte om att försöka rädda någon data som finns i den) och börja om från början, fast på ett sätt som passar er bättre.

En annan oönskad effekt av att inte behandla information från testningen direkt är att man ständigt bygger ny funktionallitet på en sedan felaktig och instabil kodbas, vilket leder till att man kontinuerligt adderar mer och mer skräp in i kodbasen och sakta men säkert bryter ner den.

Till min förvåning ser jag även projekt som kallar sig agila gå rakt in i denna fälla. Här har vi en beslutsfattare närvarande och tillgänglig i form av produktägaren som direkt kan proiritera och ta beslut utan några långa omvägar. Jag coachar för närvarande ett Scrum-team där vi förändrat vårt arbetsätt till att just agera på information från test direkt och som mål har vi att aldrig vid sprintavslut ha en lista med oanalyserade buggar. Därmed inte sagt att vi rättar alla buggar. Vissa beteenden väljer vi att leva med istället och så kastar vi buggrapporten. Vi sparar inte onödig information och vi använder inte något bugghanteringsverktyg. Vi har papperslappar på vår storyboard. Vi blandar inte heller in produktägaren i alla beslut att rätta en bugg eller ej, utan det är bara om det är ett beteende vi är tveksamma på som vi lyfter det vidare, annars rättar teamet den direkt. Vi ser att vårt arbete flyter på mycket smidigare när vi jobbar på detta sättet. Vi har förbättrat vår kodbas kontinuerligt. Vi spenderar ingen tid att leta i buggdatabaser utan vi lägger vår tid på att test produkten istället. Vi känner ett större värde av testningen och vi ökar efterhand vår tilltro till kodmassan.

Så mina två korvören är att frågan vi bör ställa är om det är ett beteende vi vill förändra eller ej och om vi vill ändra så gör vi det direkt. Skippa alla olika benämningar så som buggar, förändringar, förbättringar o.s.v. Skippa också onödiga tillstånd en benämning kan ha. Allt detta slöar bara ner processen och tillför inget värde. Är ni i stora projekt, bryt ner teamen till en hanterbar storlek och låt varje team ta ansvar för sin producerade kod, så att vi får snabbare kommunikationsvägar.

Jag ser väldigt lite nytta med det sätt som man ofta hanterar dessa frågor på och tycker mest att det är ett sätt att fly undan ansvar och att slippa göra värdefullt arbete. Dessa processer är sjuka och vi behöver bota dem omgående. Mycket av det jag tar upp är inte vi testare direkt inblandade i, men min uppmaning är att följ inte en process som fungerar dåligt, utan jobba aktivt för att förändra den. Att blint följa med bara minskar en del av det värde som ni tillför som testare och gör ert jobb både tråkigare och omständigare och er själva mer utsatta.

Jag vet att det finns många som gillar fräcka, stora och komplicerade processer för att hantera detta och ni får gärna motbevisa mig i denna fråga.

About Henrik Andersson

Henrik Andersson En av grundarna av House of Test Consulting Henrik hjälper företag att öka sin effektivitet och förändra sin testprocess till att leverera värdefull information som dess intressenter behöver för att fatta genomtänkta beslut. Henrik erbjuder sina klienter effektiva testlösningar för att på bästa möjliga sätt uppfylla de behov företaget har. Henrik erbjuder ledarskap och rådgivning inom context-driven testning, exploratory testing, SBTM och agila metoder. Henrik testar, coachar, lär ut, rådgiver, talar, tycker, tänker och skriver om testning och problemlösning. Henrik är aktiv inom "the context driven testing community”. Henriks sätt att testa är influerad, utvecklad och inspirerad genom personer som James Bach, Michael Bolton, Cem Kaner, Scott Barber, Jerry Weinberg och andra.