SlideShare a Scribd company logo
1 of 4
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

More from Johan Hoberg

Approaches to unraveling a complex test problem
Approaches to unraveling a complex test problemApproaches to unraveling a complex test problem
Approaches to unraveling a complex test problemJohan Hoberg
 
A business case for a modern QA organization
A business case for a modern QA organizationA business case for a modern QA organization
A business case for a modern QA organizationJohan Hoberg
 
Signing off on Quality
Signing off on QualitySigning off on Quality
Signing off on QualityJohan Hoberg
 
Quality Information Coverage - A QI Concept
Quality Information Coverage - A QI ConceptQuality Information Coverage - A QI Concept
Quality Information Coverage - A QI ConceptJohan Hoberg
 
The Bug Backlog - An Evergrowing Mountain
The Bug Backlog - An Evergrowing MountainThe Bug Backlog - An Evergrowing Mountain
The Bug Backlog - An Evergrowing MountainJohan Hoberg
 
Quality Intelligence: Transparency & Visibility
Quality Intelligence: Transparency & VisibilityQuality Intelligence: Transparency & Visibility
Quality Intelligence: Transparency & VisibilityJohan Hoberg
 
Building a QA Mindset
Building a QA Mindset Building a QA Mindset
Building a QA Mindset Johan Hoberg
 
Building High Quality Software
Building High Quality Software Building High Quality Software
Building High Quality Software Johan Hoberg
 
Testit 2017 - Exploratory Testing for Everyone
Testit 2017 - Exploratory Testing for EveryoneTestit 2017 - Exploratory Testing for Everyone
Testit 2017 - Exploratory Testing for EveryoneJohan Hoberg
 
Don’t celebrate failure. Don’t celebrate success. Celebrate commitment, owner...
Don’t celebrate failure. Don’t celebrate success. Celebrate commitment, owner...Don’t celebrate failure. Don’t celebrate success. Celebrate commitment, owner...
Don’t celebrate failure. Don’t celebrate success. Celebrate commitment, owner...Johan Hoberg
 
Moving from scripted regression testing to exploratory testing
Moving from scripted regression testing to exploratory testingMoving from scripted regression testing to exploratory testing
Moving from scripted regression testing to exploratory testingJohan Hoberg
 
Building High Quality Software
Building High Quality SoftwareBuilding High Quality Software
Building High Quality SoftwareJohan Hoberg
 
Quality, Testing & Agile Methodologies
Quality, Testing & Agile MethodologiesQuality, Testing & Agile Methodologies
Quality, Testing & Agile MethodologiesJohan Hoberg
 
Defining Test Competence
Defining Test CompetenceDefining Test Competence
Defining Test CompetenceJohan Hoberg
 
Why all deadlines are bad for quality
Why all deadlines are bad for qualityWhy all deadlines are bad for quality
Why all deadlines are bad for qualityJohan Hoberg
 
Do we really need game testers?
Do we really need game testers?Do we really need game testers?
Do we really need game testers?Johan Hoberg
 
Hardware/Software Integration Testing
Hardware/Software Integration TestingHardware/Software Integration Testing
Hardware/Software Integration TestingJohan Hoberg
 

More from Johan Hoberg (20)

Approaches to unraveling a complex test problem
Approaches to unraveling a complex test problemApproaches to unraveling a complex test problem
Approaches to unraveling a complex test problem
 
A business case for a modern QA organization
A business case for a modern QA organizationA business case for a modern QA organization
A business case for a modern QA organization
 
Signing off on Quality
Signing off on QualitySigning off on Quality
Signing off on Quality
 
Quality Information Coverage - A QI Concept
Quality Information Coverage - A QI ConceptQuality Information Coverage - A QI Concept
Quality Information Coverage - A QI Concept
 
The Bug Backlog - An Evergrowing Mountain
The Bug Backlog - An Evergrowing MountainThe Bug Backlog - An Evergrowing Mountain
The Bug Backlog - An Evergrowing Mountain
 
Quality Intelligence: Transparency & Visibility
Quality Intelligence: Transparency & VisibilityQuality Intelligence: Transparency & Visibility
Quality Intelligence: Transparency & Visibility
 
Building a QA Mindset
Building a QA Mindset Building a QA Mindset
Building a QA Mindset
 
What is QI?
What is QI?What is QI?
What is QI?
 
Building High Quality Software
Building High Quality Software Building High Quality Software
Building High Quality Software
 
Testit 2017 - Exploratory Testing for Everyone
Testit 2017 - Exploratory Testing for EveryoneTestit 2017 - Exploratory Testing for Everyone
Testit 2017 - Exploratory Testing for Everyone
 
Don’t celebrate failure. Don’t celebrate success. Celebrate commitment, owner...
Don’t celebrate failure. Don’t celebrate success. Celebrate commitment, owner...Don’t celebrate failure. Don’t celebrate success. Celebrate commitment, owner...
Don’t celebrate failure. Don’t celebrate success. Celebrate commitment, owner...
 
Moving from scripted regression testing to exploratory testing
Moving from scripted regression testing to exploratory testingMoving from scripted regression testing to exploratory testing
Moving from scripted regression testing to exploratory testing
 
Building High Quality Software
Building High Quality SoftwareBuilding High Quality Software
Building High Quality Software
 
Quality, Testing & Agile Methodologies
Quality, Testing & Agile MethodologiesQuality, Testing & Agile Methodologies
Quality, Testing & Agile Methodologies
 
QI, not QA
QI, not QAQI, not QA
QI, not QA
 
Defining Test Competence
Defining Test CompetenceDefining Test Competence
Defining Test Competence
 
Why all deadlines are bad for quality
Why all deadlines are bad for qualityWhy all deadlines are bad for quality
Why all deadlines are bad for quality
 
QI, not QA
QI, not QAQI, not QA
QI, not QA
 
Do we really need game testers?
Do we really need game testers?Do we really need game testers?
Do we really need game testers?
 
Hardware/Software Integration Testing
Hardware/Software Integration TestingHardware/Software Integration Testing
Hardware/Software Integration Testing
 

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/