ºÝºÝߣ

ºÝºÝߣShare a Scribd company logo
Test och Check – Komplex och Komplicerad
James Bach och Michael Bolton har tillsammans precis skrivit en artikel
om testning och checkning [1], där de utvecklar definitionerna av och
distinktionen mellan de två termerna. Flera i den svenska testgemenskapen
har varit delaktiga i processen och hjälpt James Bach att hamra ut
definitionen ytterligare på SWET 5.
Även andra kända testare har skrivit kring begreppen den senaste tiden.
Marcus Gärtner skrev en artikel som diskuterade behovet av både
automatisering och utforskande testning och hur de kompletterar varandra.
Hur automatisering kodifierar det vi redan vet och hur utforskande testning
lär oss nya saker.[2]
Marcus artikel fick mig att fundera över hur testning och checkning kan
kopplas till specifikationen eller kraven och hur all testning mer och mer
detaljerar specifikationen genom att utforska okända scenarion och
dokumentera hur produkten beter sig, medan checkning mer konfirmerar att
specifikationen stämmer [4]. Egentligen bara en omformulering av Marcus
tankar.
I denna diskussion är det så klart alltid viktigt att ha Cem Kaners ord i
bakhuvudet [3]. Det handlar inte om automatisering och dess värde. Alla
borde vara överens om att automatisering är önskvärt när det är effektivt
och att skriva automatiska testfall är lika mycket test, och kräver lika stor
förståelse för test, som någonting annat. Testning och checkning handlar inte
om automatisering mot utforskande testning. Båda har sitt värde i olika
sammanhang och båda kräver en extensiv kunskap inom test.
Frågan är om det finns ytterligare sätt att formulera skillnaden mellan
testning och checkning. Inte som en alternativ definition, utan som en
kompletterande eller omformulerad definition, som kanske i vissa fall kan
vara användbar. Detta är mitt försök till en sådan definition, som kanske har
något värde för någon – åtminstone för mig själv.
Orden komplex och komplicerad har olika innebörd [5]. Ett magnifikt
urverk är väldigt komplicerat, men också väldigt förutsägbart. Varje insignal,
varje tillstånd, och varje utsignal är känd. Luffarschack kan också vara
komplicerat, men med lite erfarenhet av spelet kan man implementera
strategier som gör att man åtminstone aldrig kan förlora. Varje drag är
förutsägbart.
Även fullständigt slumpmässiga händelseförlopp är förutsägbara. De är
förutsägbart slumpmässiga.
När någonting är förutsägbart så kan det antingen uppföra sig som det
borde göra, eller ha ett felaktigt beteende. Då finns det goda möjligheter
att skriva ner och exekvera ett automatiskt testfall, eller ett skriptat
manuellt testfall, som säkrar att beteendet följer prediktionerna. Detta är
vad jag definierar som en check.
En människa, till skillnad från ett urverk, är långt ifrån förutsägbar.
Insignaler är oklara, tillstånden dunkla, och utsignalerna överraskande.
Människan är en komplex varelse. Detsamma gäller tyvärr för många av de
system som vi jobbar med idag. En mobiltelefon med sina miljoner rader
kod, interagerande subsystem, komplicerade hårdvaruplattformar,
mängder av kopplingar till omgivningen, oklara beroenden, integrerad
kod från tredje part, och så vidare, blir också omöjlig att förutsäga. Ett
komplext system, om än inte lika komplext som en människa.
I vissa fall kan man avgränsa sitt testobjekt från den omliggande osäkerheten
i systemet. Om man bara kör ett detaljerat komplicerat testfall steg för steg
utan att bry sig om vad som händer runt omkring, så har man utfört en check.
Det samma gäller om man exekverar ett redan skapat automatiskt testfall.
Man bryr sig inte om komplexiteten runt omkring, utan följer ett icke-
komplext scenario som man exekverar. Man väljer att begränsa systemet man
betraktar till någonting icke-komplext och förutsägbart. Det har definitivt
sitt värde, men någon gång måste man ta sig an systemets komplexitet.
Det är när man gör detta som man utför tester.
Det kan vara när man noggrant designar automatiska tester för att nå insikt i
hur systemet reagerar på dem, det kan vara när man exekverar utforskande
tester för att kartlägga systemets komplexitet, eller när man kör ett skriptat
testfall utan att begränsa sig till de teststeg som finns, utan låter systemets
komplexitet skölja över en.
Man kan kombinera användandet av checker och tester genom att t.ex. först
använda sig av ett set med checker för att identifiera vilka områden som inte
möter grundläggande förväntningar, för att sen övergå till tester för att
kartlägga komplexiteten och systemets beteende.
Slutsats
SÃ¥ vad leder resonemanget ovan mig till?
Check – Systemet på vilket aktiviteten utförs, är enkelt eller
komplicerat, men förutsägbart
Test – Systemet på vilket aktiviteten utförs är komplext och
oförutsägbart
Ofta utförs dock tester och checker på samma komplexa system. För att
kunna göra en check måste man därför då medvetet begränsa den del av
systemet man betraktar, och inte ta hänsyn till många av de variabler och
utfall som gör systemet så komplext.
Hoppas detta resonemang har väckt några tankar hos läsaren, som i sin tur
kanske genererar ytterligare en kompletterande definition av testning och
checkning som jag kan se fram emot att läsa.
Johan Hoberg
Referenser
[1] Testing and Checking Redefined
http://www.satisfice.com/blog/archives/856
[2]Automated vs. Exploratory
http://www.shino.de/2013/03/21/automated-vs-exploratory-we-got-it-wrong/
[3] The Insapience of Anti-Automationism
http://context-driven-testing.com/?p=69
[4] Testing vs. Checking Rephrased
http://www.slideshare.net/JohanHoberg/testing-vs-checking-rephrased/
[5] Komplexitet
http://sv.wikipedia.org/wiki/Komplexitetsteori
Christer Hoberg – Komplexitetsmax
http://kth.diva-portal.org/smash/record.jsf?searchId=1&pid=diva2:10395
Tor Nörretranders – Märk Världen
http://www.bokus.com/bok/9789100570705/mark-varlden/

More Related Content

Test och check komplex och komplicerad

  • 1. Test och Check – Komplex och Komplicerad James Bach och Michael Bolton har tillsammans precis skrivit en artikel om testning och checkning [1], där de utvecklar definitionerna av och distinktionen mellan de tvÃ¥ termerna. Flera i den svenska testgemenskapen har varit delaktiga i processen och hjälpt James Bach att hamra ut definitionen ytterligare pÃ¥ SWET 5. Även andra kända testare har skrivit kring begreppen den senaste tiden. Marcus Gärtner skrev en artikel som diskuterade behovet av bÃ¥de automatisering och utforskande testning och hur de kompletterar varandra. Hur automatisering kodifierar det vi redan vet och hur utforskande testning lär oss nya saker.[2] Marcus artikel fick mig att fundera över hur testning och checkning kan kopplas till specifikationen eller kraven och hur all testning mer och mer detaljerar specifikationen genom att utforska okända scenarion och dokumentera hur produkten beter sig, medan checkning mer konfirmerar att specifikationen stämmer [4]. Egentligen bara en omformulering av Marcus tankar. I denna diskussion är det sÃ¥ klart alltid viktigt att ha Cem Kaners ord i bakhuvudet [3]. Det handlar inte om automatisering och dess värde. Alla borde vara överens om att automatisering är önskvärt när det är effektivt och att skriva automatiska testfall är lika mycket test, och kräver lika stor förstÃ¥else för test, som nÃ¥gonting annat. Testning och checkning handlar inte om automatisering mot utforskande testning. BÃ¥da har sitt värde i olika sammanhang och bÃ¥da kräver en extensiv kunskap inom test. FrÃ¥gan är om det finns ytterligare sätt att formulera skillnaden mellan testning och checkning. Inte som en alternativ definition, utan som en kompletterande eller omformulerad definition, som kanske i vissa fall kan vara användbar. Detta är mitt försök till en sÃ¥dan definition, som kanske har nÃ¥got värde för nÃ¥gon – Ã¥tminstone för mig själv. Orden komplex och komplicerad har olika innebörd [5]. Ett magnifikt urverk är väldigt komplicerat, men ocksÃ¥ väldigt förutsägbart. Varje insignal, varje tillstÃ¥nd, och varje utsignal är känd. Luffarschack kan ocksÃ¥ vara komplicerat, men med lite erfarenhet av spelet kan man implementera strategier som gör att man Ã¥tminstone aldrig kan förlora. Varje drag är förutsägbart.
  • 2. Även fullständigt slumpmässiga händelseförlopp är förutsägbara. De är förutsägbart slumpmässiga. När nÃ¥gonting är förutsägbart sÃ¥ kan det antingen uppföra sig som det borde göra, eller ha ett felaktigt beteende. DÃ¥ finns det goda möjligheter att skriva ner och exekvera ett automatiskt testfall, eller ett skriptat manuellt testfall, som säkrar att beteendet följer prediktionerna. Detta är vad jag definierar som en check. En människa, till skillnad frÃ¥n ett urverk, är lÃ¥ngt ifrÃ¥n förutsägbar. Insignaler är oklara, tillstÃ¥nden dunkla, och utsignalerna överraskande. Människan är en komplex varelse. Detsamma gäller tyvärr för mÃ¥nga av de system som vi jobbar med idag. En mobiltelefon med sina miljoner rader kod, interagerande subsystem, komplicerade hÃ¥rdvaruplattformar, mängder av kopplingar till omgivningen, oklara beroenden, integrerad kod frÃ¥n tredje part, och sÃ¥ vidare, blir ocksÃ¥ omöjlig att förutsäga. Ett komplext system, om än inte lika komplext som en människa. I vissa fall kan man avgränsa sitt testobjekt frÃ¥n den omliggande osäkerheten i systemet. Om man bara kör ett detaljerat komplicerat testfall steg för steg utan att bry sig om vad som händer runt omkring, sÃ¥ har man utfört en check. Det samma gäller om man exekverar ett redan skapat automatiskt testfall. Man bryr sig inte om komplexiteten runt omkring, utan följer ett icke- komplext scenario som man exekverar. Man väljer att begränsa systemet man betraktar till nÃ¥gonting icke-komplext och förutsägbart. Det har definitivt sitt värde, men nÃ¥gon gÃ¥ng mÃ¥ste man ta sig an systemets komplexitet. Det är när man gör detta som man utför tester. Det kan vara när man noggrant designar automatiska tester för att nÃ¥ insikt i hur systemet reagerar pÃ¥ dem, det kan vara när man exekverar utforskande tester för att kartlägga systemets komplexitet, eller när man kör ett skriptat testfall utan att begränsa sig till de teststeg som finns, utan lÃ¥ter systemets komplexitet skölja över en. Man kan kombinera användandet av checker och tester genom att t.ex. först använda sig av ett set med checker för att identifiera vilka omrÃ¥den som inte möter grundläggande förväntningar, för att sen övergÃ¥ till tester för att kartlägga komplexiteten och systemets beteende.
  • 3. Slutsats SÃ¥ vad leder resonemanget ovan mig till? Check – Systemet pÃ¥ vilket aktiviteten utförs, är enkelt eller komplicerat, men förutsägbart Test – Systemet pÃ¥ vilket aktiviteten utförs är komplext och oförutsägbart Ofta utförs dock tester och checker pÃ¥ samma komplexa system. För att kunna göra en check mÃ¥ste man därför dÃ¥ medvetet begränsa den del av systemet man betraktar, och inte ta hänsyn till mÃ¥nga av de variabler och utfall som gör systemet sÃ¥ komplext. Hoppas detta resonemang har väckt nÃ¥gra tankar hos läsaren, som i sin tur kanske genererar ytterligare en kompletterande definition av testning och checkning som jag kan se fram emot att läsa. Johan Hoberg
  • 4. Referenser [1] Testing and Checking Redefined http://www.satisfice.com/blog/archives/856 [2]Automated vs. Exploratory http://www.shino.de/2013/03/21/automated-vs-exploratory-we-got-it-wrong/ [3] The Insapience of Anti-Automationism http://context-driven-testing.com/?p=69 [4] Testing vs. Checking Rephrased http://www.slideshare.net/JohanHoberg/testing-vs-checking-rephrased/ [5] Komplexitet http://sv.wikipedia.org/wiki/Komplexitetsteori Christer Hoberg – Komplexitetsmax http://kth.diva-portal.org/smash/record.jsf?searchId=1&pid=diva2:10395 Tor Nörretranders – Märk Världen http://www.bokus.com/bok/9789100570705/mark-varlden/