Hannes Lindblom

Problemet med att känna igen problem

2019-01-23 Blogg Test Läst 725 gånger

“I know it when I see it” är ett uttryck på engelska som antyder att man inte definierar alla kriterier för något på förhand, utan att man istället behöver observera för att kunna göra en bedömning. För vi människor har på något sätt inbyggda mekanismer som hjälper oss att identifiera saker som inte passar in och går mot våra förväntningar. Det är dessa mekanismer vi ska prata om i det här inlägget, både hur du kan tänka runt dem och hur du kan använda dem i din förståelse för kravhantering och test av komplexa system.

Som levande varelser samlar vi på oss erfarenheter under vår livstid som tillsammans bildar ett slags inre modell över världen. Saker som inte passar in i modellen uppmärksammar vi snabbt som något avvikande, och potentiellt ett problem, även om vi inte alltid är så bra på att uttrycka varför. I testvärlden finns ett begrepp för saker som hjälper oss att känna igen problem: orakel. Begreppet orakel känner du kanske mest till som platser de gamla grekerna och romarna besökta för att söka råd från gudarna. Det sägs att det berömda oraklet i Delfi andades in giftiga svavelångor för att hamna trans och på så sätt komma i kontakt högre makter. I dagens moderna tappning ska vi nog se liknelsen som något som kan ge oss svar, ett slags referens. Orakel kan vara både explicita i form av formulerade krav eller specifikationer, men också inbyggda i vår inre modell och mer vaga. Det är också viktigt att förstå att orakel inte är ofelbara, utan bara ger en indikation på att något kan vara fel eller problematiskt. För att ytterligare förstå begreppet orakel kan vi nu gå in på några exempel på dessa:

  • Uttryckta krav - Den mest uppenbara formen av orakel. Dessa ger en förhoppningsvis en tydlig bild av vad vi vill att systemet ska göra, men det är långt ifrån det enda vi behöver ta hänsyn till.
  • Jämförbara system - Ett system beter sig avvikande jämfört med liknande system på marknaden. Tänk dig till exempel ett virtuellt tangentbord där mellanslagsknappen hamnat överst istället för underst. Kanske är det ett genidrag, men det skulle också kunna vara en bugg i layout-hanteringen.
  • Lagar och regleringar - Ett system bryter mot någon känd lag eller reglering. Tänk dig till exempel att Facebook i tidslinjen plötsligt skulle börja visa andra användares personnummer. Väldigt troligt ett allvarligt problem, men kanske inte något vi kommit på att kontrollera i förhand.
  • Historia - Ett system beter sig annorlunda jämfört med tidigare versioner av systemet. Det här oraklet behöver väl egentligen inget förtydligande exempel, vi har väl alla upplevt känslan när vår favoritapplikation plötsligt börjar bete sig annorlunda efter en uppdatering och hur jobbigt det kan kännas initialt.

Jag har inte för avsikt att lista alla tänkbara orakel här, men om du är intresserad av en mer uttömmande lista kan du följa denna länken.

Vad är då poängen med att känna till orakel? Jo det är ett viktigt begrepp för att inse att för ett givet system så finns det både explicita krav som går att verifiera men också mycket undermedvetet som är svårare att uttrycka i ord. Av denna anledning är det omöjligt att fullständigt specificera ett system och kunna förutsäga att det kommer att tillgodose det tänkta behovet. Vi behöver testa och utforska systemet för att kunna springa på dessa beteenden som bryter mot förväntningar som vi inte visste att vi hade, eller i alla fall inte hade lyckats uttrycka på förhand. Med denna insikt kan vi också konstatera de stora begränsningarna i att automatisera tester. Här behöver vi explicit uttrycka våra förväntningar i kod. Det skulle ju vara trevligt att kunna skriva kod för “verifiera att inget avvikande inträffar”, men en dator kräver tyvärr lite mer specifika instruktioner än så. För varje (icke-trivialt) automatiserat test går det att hitta på scenarion där testet går igenom trots att uppenbara konstigheter skett, konstigheter som en människa omedelbart skulle ha reagerat på.

Den som testar ett system och har koll på sina orakel har också en bättre möjlighet att uttrycka varför saker skulle kunna vara problematiska. Bedöm skillnaden på “i alla andra liknande system jag har använt så är Fil-menyn längst upp till vänster, men vi har lagt den till höger, det skulle kunna orsaka förvirring hos vissa användare” jämför med “det känns inte bra att ha Fil-menyn där”. 

Sammanfattningsvis kan vi konstatera att begreppet orakel ger oss bättre insikt i hur testningen fungerar, begränsningen i automatiserade tester och en förmåga att tydligare uttrycka oss om testarbetet. Så nästa gång du testar, fundera på vilka orakel du använder och varför du reagerade på något beteende. Förklara dock begreppet för din omgivning innan du börjar prata om att "träna upp dina inre orakel", bara så att inte någon tror att du andats in för mycket svavelångor.

Dela artikeln