Mitä tarkoitetaan mustalla tai valkoisella laatikolla testauksessa? Aloitetaan laatikoiden määritelmillä.
Musta laatikko (Black-box) on järjestelmä, jonka sisäinen toimintalogiikka on tuntematon. Pystymme havaitsemaan järjestelmään liitetyt sisääntulot (input) ja siitä lähtevät ulostulot (output), muttemme tiedä, miten ulostuloa on tässä välissä muokattu. Usein pystymme päättelemään sisään- ja ulostulon eroista, mitä muutoksia järjestelmä tekee sisääntuloon, muttemme voi varmuudella sanoa, miten tai millä logiikalla ne on toteutettu.
Valkoinen laatikko (White-box) on järjestelmä, jonka sisäinen toimintalogiikka on tunnettu. Meillä on tietoa järjestelmän toteutuksen teknisistä yksityiskohdista ja sen logiikkaa kuvaava tekninen dokumentaatio. Logiikkakuvauksen avulla tiedämme täsmälleen, miten tai millä logiikalla järjestelmä muokkaa sisääntuloa.
Entä näiden laatikoiden testaus? Mitä black-box & white-box testing tarkoittavat käytännössä ja mitä eroja niillä on?
White-box testauksessa (tunnetaan myös nimellä Structure-based testing) järjestelmän sisäisestä rakenteesta johdetaan dynaamisesti testicaset, kun taas black-box testauksessa meillä on käytössä vain tiettyjä, järjestelmän ulkoisiin ominaisuuksiin nojaavia, spesifejä testejä. White-box testaus on siis testaajan kannalta monta kertaa mukavampaa ja tehokkaampaa, koska tiedämme, miten järjestelmä toimii, eikä sitä tarvitse arvuutella. Black-box testauksessa olemme täysin omillamme, eikä meillä ole mitään varmuutta siitä, että käyttämämme testit suorittavat kaiken ohjelmakoodin - vaikka maailman osaavin testausammattilaisten tiimi black-box testaisi mitä tahansa järjestelmää, on silti hyvin mahdollista, että peräti 70 prosenttia kaikesta koodista ei suoritettaisi kertaakaan! (Mitchell & Black, 2015)
Boris Beizer kirjoittaa kirjassaan Software Testing Techniques (ITC Press, 1990) yleisiä sääntöjä liittyen ohjelmakoodin suoritukseen ja bugien todennäköisyyteen:
1. Testaamatta jätetty koodinpätkä jättää järjestelmään bugeja. Bugien määrää voidaan arvioida kaavalla: testaamaton koodi * bugien todennäköisyys
2. Ohjelman yleisimpien suoritusteiden (pathien) testaus, varsinkin yksikkötestitasolla, ei ole niin tärkeää kuin harvinaisten suoritusteiden, koska järjestelmän toiminta kokonaisuudessaan testataan vielä myöhemmin järjestelmätasolla.
3. Logiikkavirheet tai logiikan sumeus (fuzzy thinking) ovat kääntäen verrannollisia pathin suorittamisen todennäköisyyteen.
4. Ohjelmoijat eivät useinkaan osaa arvioida ohjelman käyttämien pathien suoritustodennäköisyytttä - vain analyysi kertoo, mitä patheja suoritetaan todennäköisimmin.
5. Koodisegmenttien tärkeyden arviointi on subjektiivista ja voi johtaa virheisiin. Ohjelmoija voi olla niin ylpeä kauniista koodistaan tai tekemästään monimutkaisesta algoritmista, että testaa sen monta kertaa, mutta jättää testaamatta yksinkertaisen for-loopin, koska ajattelee "Mikä noin yksinkertaisessa lauseessa voi mennä pieleen?".
Listassa on ainakin muutama hyvä syy, miksi testaajan on tärkeää tietää suoritetun koodin määrä ja miksi järjestelmiä pitäisi aina testata white-box testauksella - testaus on siis sitä helpompaa, mitä enemmän tietää ohjelman suorittamista reiteistä tai koodin määrästä. Mustat laatikot kannattaa suosiolla jättää lentokoneisiin.
Lähteet:
Mitchell, Jamie L. & Black, Rex. "Advanced Software Testing, Vol. 3. Second Edition". (2015). p. 24-26. Rocky Nook.
Beizer, Boris. "Software Testing Techniques". (1990). ITC Press.
Musta ja valkoinen laatikko (black-box & white-box testing)
torstai 29. joulukuuta 2016
Tunnisteet:
black-box,
bugi,
fuzzy thinking,
musta laatikko,
ohjelmoija,
todennäköisyys,
valkoinen laatikko,
white-box
Paljonko bugit maksavat?
Paljonko virheet koodissa voivat pahimmillaan maksaa? Tämähän on se syy, miksi testataan - jotta vältyttäisiin katastrofeilta ja miljoonien eurojen vahingonkorvauksilta. Tiedämme, että määrittelyvaiheessa löydetyn bugin hinta on keskimäärin 100€, laatutestausvaiheessa 1500€ ja tuotannossa 10 000 euroa (Leon, 2015). Toisten arvioiden mukaan hintaluokka kasvaa aina tason noustessa yhdellä nollalla. Joka tapauksessa kallista. Ja aina silloin tällöin epätodennäköisiltäkin vaikuttaneet riskit voivat realisoitua ja pahin tapahtua.
Tähän alas olen kerännyt muutaman esimerkin projekteista, joissa testaus on pettänyt ja kaikki on mennyt pahimman laatuisesti pieleen:
- Ariana 5 avaruusraketti:
Ariane 5:n ensimmäinen testilento 4.6.1996 päättyi näyttävään räjähdykseen 37 sekuntia lähtönsä jälkeen, koska sitä ohjanneessa ohjelmistossa oli bugi - tyyppimuunnos 64-bittisestä liukuluvusta (floating point number)16-bittiseksi etumerkilliseksi kokonaisluvuksi (signed integer) aiheutti virheen, koska liukuluku oli liian suuri esitettäväksi 16-bittisenä etumerkillisenä kokonaislukuna.
BUGIN HINTA: Raketin lähdön hinnaksi oli arvioitu 165 - 220 miljoonaa dollaria (Wikipedia, 2016)
- Toyotan takaisinveto:
Elokuussa 2009 neljää matkustajaa kuljettanut Toyota Lexus ES350 alkoi yllättäen kiihdyttää yli 160 km/h nopeuteen, kunnes ajoi ulos tieltä, tappaen matkustajat. Toyotan mukaan autossa oli ohjelmistovirhe, joka aiheutti lagia auton lukituksenestojärjestelmässä. Toyota päätyi vetämään maailmanlaajuisesti takaisin yli 9 miljoonaa autoa vuonna 2010.
BUGIN HINTA: Takaisinvedot, vahingonkorvausvelvoitteet ja markkinointikulujen arvioidaan maksaneen Toyotalle jopa 3 miljardia dollaria. (Leon, 2015)
-Knight Capital:
Vuonna 2012 pörssivälitysyhtiö Knight Capital otti käyttöön uuden osakkeiden välitysohjelmansa. Valitettavasti ohjelman osto- ja myyntialgoritmi toimi hieman kehnosti, se nimittäin osti osakkeita pyydetyllä hinnalla, mutta myi ne välittömästi 15 prosenttia halvemmalla.
BUGIN HINTA: Vääriä välityksiä tapahtui 40 kertaa sekunnissa, 2400 kertaa minuutissa ja ne polttivat rahaa Knight Capitalilta lähes 440 miljoonaa dollaria. (Gang, 2016)
Tästä voi ottaa vain opiksi. Testaa tai itke.
Lähteet:
Ariane 5, Wikipedia. Saatavilla: https://en.wikipedia.org/wiki/Ariane_5
Janet Leon, "The True Cost of a Software Bug: Part One". 28.02.2015. Celerity. Saatavilla: http://blog.celerity.com/the-true-cost-of-a-software-bug
Gang, T. Penn State University. Saatavilla: http://www.cse.psu.edu/~gxt29/bug/softwarebug.html
Tähän alas olen kerännyt muutaman esimerkin projekteista, joissa testaus on pettänyt ja kaikki on mennyt pahimman laatuisesti pieleen:
- Ariana 5 avaruusraketti:
Ariane 5:n ensimmäinen testilento 4.6.1996 päättyi näyttävään räjähdykseen 37 sekuntia lähtönsä jälkeen, koska sitä ohjanneessa ohjelmistossa oli bugi - tyyppimuunnos 64-bittisestä liukuluvusta (floating point number)16-bittiseksi etumerkilliseksi kokonaisluvuksi (signed integer) aiheutti virheen, koska liukuluku oli liian suuri esitettäväksi 16-bittisenä etumerkillisenä kokonaislukuna.
BUGIN HINTA: Raketin lähdön hinnaksi oli arvioitu 165 - 220 miljoonaa dollaria (Wikipedia, 2016)
- Toyotan takaisinveto:
Elokuussa 2009 neljää matkustajaa kuljettanut Toyota Lexus ES350 alkoi yllättäen kiihdyttää yli 160 km/h nopeuteen, kunnes ajoi ulos tieltä, tappaen matkustajat. Toyotan mukaan autossa oli ohjelmistovirhe, joka aiheutti lagia auton lukituksenestojärjestelmässä. Toyota päätyi vetämään maailmanlaajuisesti takaisin yli 9 miljoonaa autoa vuonna 2010.
BUGIN HINTA: Takaisinvedot, vahingonkorvausvelvoitteet ja markkinointikulujen arvioidaan maksaneen Toyotalle jopa 3 miljardia dollaria. (Leon, 2015)
-Knight Capital:
Vuonna 2012 pörssivälitysyhtiö Knight Capital otti käyttöön uuden osakkeiden välitysohjelmansa. Valitettavasti ohjelman osto- ja myyntialgoritmi toimi hieman kehnosti, se nimittäin osti osakkeita pyydetyllä hinnalla, mutta myi ne välittömästi 15 prosenttia halvemmalla.
BUGIN HINTA: Vääriä välityksiä tapahtui 40 kertaa sekunnissa, 2400 kertaa minuutissa ja ne polttivat rahaa Knight Capitalilta lähes 440 miljoonaa dollaria. (Gang, 2016)
Tästä voi ottaa vain opiksi. Testaa tai itke.
Lähteet:
Ariane 5, Wikipedia. Saatavilla: https://en.wikipedia.org/wiki/Ariane_5
Janet Leon, "The True Cost of a Software Bug: Part One". 28.02.2015. Celerity. Saatavilla: http://blog.celerity.com/the-true-cost-of-a-software-bug
Gang, T. Penn State University. Saatavilla: http://www.cse.psu.edu/~gxt29/bug/softwarebug.html
Tunnisteet:
Ariane 5,
bug,
bugi,
esimerkki,
hinta,
Knight Capital,
lista,
maksaa,
realisoitua,
riski,
Toyota,
vahingonkorvaus
tiistai 27. joulukuuta 2016
Mitä ominaisuuksia ohjelmistotestaaminen vaatii testaajalta? Mitä ominaisuuksia vaaditaan hyvältä testaajalta? Voidaanko luetella lista ominaisuuksia, jotka testaajan tulisi täyttää ollakseen alansa ammattilainen? Entä tulevaisuudessa?
Jan Mellemanin kirjoituksen "What type of human will still be a tester in 2025?" (Neil's Quest for Quality, 2014) mukaan tulevaisuuden testaaja on puhdasverinen, pur sang, ammattilainen, jonka osaaminen perustuu tietoon (knowledge), taitoihin(skills) ja kokemukseen (experience). Hänen mielestään testiammattilaisen pitää seurata alansa kehitystä, uusimpia työkaluja ja innovaatioita ja oikeasti haluta käyttää niitä jokapäiväisessä testauksessa. Testausammattilaisen pitää kehittää persoonansa emotionaalisia puolia, jotta hänestä tulee tiimipelaaja, joka ymmärtää missä bisneksen arvo (value) ja edut (benefits) majailevat. Testausmmattilainen on se ihmislinkki, joka yhdistää eri osastot ja järjestelmät toisiinsa ja valvoo niiden laatua. Testausmmattilainen kuuntelee asiakkaan toiveet, muuttaa ne vaatimusmäärittelyiksi ja rakentaa siltoja ohjelmisto-arkkitehdin ja kehittäjien välille.
Aika moneen pitäisi testaajan siis taipua.
Voisiko tuon edellisen kappaleen tiivistää listaksi hyvän testaajan ominaisuuksia? Kokeillaan:
Aika moneen pitäisi testaajan siis taipua.
Voisiko tuon edellisen kappaleen tiivistää listaksi hyvän testaajan ominaisuuksia? Kokeillaan:
Luova, utelias, analyyttinen, hyvä kuuntelija, proaktiivinen, nopea oppija, tekninen suuntautunut, asiakassuuntautunut, organisointi- ja priorisointikyvykäs, laatusuuntautunut, määrätietoinen ja peräksiantamaton. Tällaisia ominaisuuksia ISTQB koe -harjoitussivusto (ISTQB Exam Certification) listaa hyvälle testaajalle.
Okei, lista näyttää jo vähän selkeämmältä. Mutta mitä nuo ominaisuudet tarkoittavat käytännössä? Mitä taitoja ohjelmistotestaajalta vaaditaan käytännön työelämässä? Tmap Nextin (2006, Chapter 16 Test Roles) Testaajien roolit -luvun määritelmän mukaan Test Team Leaderin vaatimuksena on, että testaaja on laajalti tietoinen TMap life cycle -mallista sekä primaarisista testiaktiviteeteista, hänellä on erikoisosaamista testauksen arvioinnissa ja testisuunnittelutekniikoissa, hän osaa käyttää testityökaluja, hänellä on yleiset tiedot ja taidot informaatiotekniikassa, hänellä on tietoa järjestelmien kehityksestä ja kyvykkyys määrittää testauksen laajuus, johtamistaitoja, kokemusta projektisuunnittelusta ja -johtamisesta ja kyvykkyys valmentaa muita.
Mutta hyväksi testaajaksi ei pääse (pelkästään) lukemalla kirjoja. Hyväksi testaajaksi kasvaminen on pitkä ja vaikea prosessi. Jonkin tietyn kyvyn (lähes) täydellinen oppiminen vie ihmiseltä aikaa keskimäärin n. 10 000 tuntia, tai toisin sanoen, 10 vuotta jokapäiväistä parin tunnin harjoittelua. Eli helppoa tietä hyväksi testaajaksi ei ole. Ainoa, mikä siihen auttaa on testaus. Ja testaus. Ja testaus. Enää 9 000 tuntia jäljellä...
Lähteet:
Neil's Quest for Quality - A TMap HD Story (Alder Boersma & Erik Vooijs, 2014). "What type of human will still be a tester in 2025?". Jan Mellema. pp. 224 - 225. Sogeti.
ISTQB Exam Certification, istqexamcertification.com. (2016). Saatavilla: http://istqbexamcertification.com/software-tester/
TMap Next: for result-driven testing (2006). Chapter 16 Test Roles, s. 726. Sogeti Nederland B. V.
Neil's Quest for Quality - A TMap HD Story (Alder Boersma & Erik Vooijs, 2014). "What type of human will still be a tester in 2025?". Jan Mellema. pp. 224 - 225. Sogeti.
ISTQB Exam Certification, istqexamcertification.com. (2016). Saatavilla: http://istqbexamcertification.com/software-tester/
TMap Next: for result-driven testing (2006). Chapter 16 Test Roles, s. 726. Sogeti Nederland B. V.
Tunnisteet:
hyvä testaaja,
testaajan ominaisuudet,
testausammattilainen
keskiviikko 21. joulukuuta 2016
Neil’s Quest for Quality – A TMap HD Story (Alder Boersma & Erik Vooijs, 2014) on mielenkiintoinen yhdistelmä fiktiivistä tarinankerrontaa ja ohjelmistotestauksen teoriaa. Kirjassa seurataan päähenkilö Neilin silmin, millaista elämä on Test Managerina suuressa vakuutusalan yrityksessä ja sitä, miten Neil pärjää yrityksen uuden ohjelmistoprojektin Seabiscuitin testauksen toteuttamisessa. Fiktiivisen tarinan väliin on ripoteltu testauksen rakennuspalikoita (building blocks), jotka taustoittavat tarinassa etenevää testausprosessia aina lukujen välissä.
Kirjan nimessä oleva HD ei
viittaa tässä teräväpiirtotarkkuuteen, vaan ihmisvetoisuuteen – Human Driven. Kirjan parasta antia onkin
sen ihmiskeskeinen näkökulma testausprosessiin. Testaajien henkilökemioiden ja
motivaation merkityksen huomioiminen on jotakin, mikä on puuttunut esimerkiksi
alkuperäisestä TMap Nextistä (Sogeti
Netherlands, 2006).
Kaunokirjallisena teoksena kirja jää vaisuksi. Kielelliset kikkailut
on jätetty suosiolla pois ja tekstistä on pyritty tekemään mahdollisimman
funktionaalista ja selkeää. Päähenkilö Neil jätetään harmittavan etäiseksi,
eikä tähän tutustuta pintaa syvemmin. Tiedämme sivulauseiden perusteella, että
hän viettää liikaa aikaa töissä ja tämä aiheuttaa kitkaa kotona odottavan
Danielle-vaimon kanssa. Neilin sisäinen dialogi on käytännössä pohtimista
testauksesta kirjan kirjoittajien äänellä, mikä on toisaalta oiva tapa saada
yhdistetty draamaa ja teoriaa, mutta samalla se vie tilaa Neilin
hahmonkehitykseltä jättäen tämän ontoksi.
Monet sivuhahmot jäävät työrooliensa vangeiksi ja litistyvät karikatyyrimäisiksi
kuvauksiksi testianalyytikon, projektijohtajan, business managerin ja senior
managerin rooleista. Onneksi valopilkkujakin on – pohjoismaalainen testausasiantuntija
Mr. Mikkel on salamyhkäisyydessään herkullinen hahmo, jonka suulla sanotaan
kirjan mieleenpainuvimmat viisaudet. Usein Mr. Mikkelin hahmo toimii Neilille
pelastavana enkelinä, kun tämä kohtaa testaukseen liittyvän pulman, eikä tiedä,
miten edetä. Tämä onkin kirjan draaman kaari – aina luvun alussa Neil törmää
joko testauksen suunnitteluun tai toteutukseen liittyvään ongelmaan ja yrittää
ratkoa sitä, kunnes luvun lopussa Mr. Mikkel pelastaa tilanteen tarjoamalla
tälle uutta testauksen rakennuspalikkaa.
Varsinainen testaussisältö on hyvin oivallista ja rakentaa TMapin
viitoittamalle pohjalle. Kirjassa esitellään neljä testauksen rakennuspalikkaa:
Integrate (yhdistä), Industrialize (teollista), People (inhimillistä) ja Simplify (yksinkertaista). Näiden
neljän palikan päälle rakentuu Confidence,
luottamus tuotteen laatuun. Rakennuspalikat
myös nivoutuvat hyvin juonen etenemiseen ja antavat kirjalle helppolukuisen rakenteen.
Teoriaa annostellaankin sopivan pituisissa pätkissä ja tärkeimmät ideat esitetään
selkeästi ja havainnollisesti erilaisten taulukoiden ja kaavioiden avulla.
Yleisesti ottaen kirja on onnistunut kokeilu yhdistää testauksen teoriaa ja käytäntöä. Vaikka osa kaunokirjallisesta osuudesta on välillä ohutta, kirja etenee vauhdilla ja uusia rakennuspalikoita tuodaan lukijan eteen ennen kuin tämä ehtii kyllästyä. Kirja sopiikin pokkarimuodossaan helposti luettavaksi testaajan matkaevääksi, jonka pääasiat on esitetty viihteellisessä kehyksessä napakasti. Kirja tarjoaa rennon sukellusmatkan testauksen maailmaan ilman ikävää saarnaamiseen makua. Kirjaa voi surutta suositella kaikille ohjelmistotestauksesta kiinnostuneille, erityisesti, jos ei ole siitä aikaisempaa kokemusta.
Neil’s
Quest for Quality – A TMap HD Story (Alder
Boersma & Erik Vooijs, 2014). 240s. Sogeti.
Tilaa:
Blogitekstit (Atom)