3 March 2015

A jó manuális teszt nem automatizálható

2014. június 5-én, a budapesti Teszt & Tea rendezvényen elhangzott előadásom automatizálást érintő  részlete.

Az egyik üzenetem a négy hónappal ezelőtt előadó egyik kollégának szól, aki azt mondta, „milyen jó lenne, ha minden tesztelés automatizált lenne”. Nos, nem lenne jó és azt is elmondom, hogy miért.

Amikor egy ember hajt végre egy tesztet, képességeinek és érzékszerveinek teljes skáláját viszi harcba. Improvizálhat közben, tetszés szerint változtathat például az előre eltervezett lépéssorrenden, vagy a végrehajtás sebességén valamilyen érdekes, de előre nem látható információ hatására. Észrevehet nem várt, vagy előzetesen elképzelhetetlennek hitt dolgokat. Az emberi kiszámíthatatlanság önmagában is egy teszt variáló tényező. Ezek a variációk újabb és újabb problémákat fedhetnek fel. 

Az automatizálás során egyszerűen arra kérjük a számítógépet, hogy az általunk explicit módon specifikált utasításokat a megadott sorrendben hajtsa végre. A gép természetesen minden egyes alkalommal fáradhatatlanul teszi a dolgát, de ugyanazzal a sebességgel, (jellemzően) ugyanabban a lépéssorrendben, ugyanazokat a szimulált egérmozdulatokat használva stb. És nem rendelkezik a humán tesztelő készségeivel, hallgatólagos tudásával (tacit knowledge) ill. az érzékelésének előnyeivel. Az eredmények automatikus kiértékelésének szintén megkerülhetetlen korlátai vannak. A felkészült emberi agy jobb bármilyen elképzelhető automatánál.


Ember
Számítógép
fáradtság, szétszórtság

+
zavar
?
+
érzékelés
+

intuíció
+

kíváncsiság
+

gyanú
+

nyomozás
+

megismételhetőség

+
eltérés tervezett úttól
+

kiszámíthatóság

+
kritikus gondolkodás
+


Az automatizált tesztelés (vagy az ennek nevezett folyamat) tehát mindössze halvány leképzése egy intellektuálisan szerteágazó tevékenyégnek. Ezért nonszensz úgy beszélni az automatizált tesztekről, mintha azok gépesített emberi tesztek lennének. Ne hasonlítsátok a manuális teszteket az automatizáltakhoz! Inkább úgy tekintsetek ez utóbbiakra, hogy segítenek kiterjeszteni a képességeiteket: olyan tesztek végezhetők el számítógépek segítségével, amelyek az ember által nem.

Természetesen szükség van az automatizálás nyújtotta előnyökre, de az automatizált tesztelés sohasem fogja átvenni a manuális tesztelés helyét. Legalábbis addig nem, amíg nem sikerül emulálni az emberi agyműködést és ettől még nagyon messze van a tudomány. Mikor lesz képes például eldönteni egy mesterséges intelligencia, hogy tetszik-e majd megcélzott felhasználói felhasználói bázisnak a program megjelenése, vagy bonyolult, nehézkes -e egy felhasználói interfész használata? Nagyon sokan próbálták már helyettesíteni a manuális tesztelést az automatikussal, eddig mind kudarcot vallottak. Ez egy rossz cél. Maga az automatizálás nem is lehet cél. Az automatizálás az, ami kell, hogy segítsen a tesztelésbeli céljaink elérésében. Még rengeteg lehetőség van az automatizálásban, nagyon sokat fog fejlődni az elkövetkező években.

Érdemes lehet eszünkbe vésni a fentiekkel kapcsolatban az automatizálás Bach-féle három szabályát:

  1. A jó manuális teszt nem automatizálható.
  2. Amennyiben sikerül automatizálni egy manuális tesztet, az nem volt jó manuális teszt.
  3. Ha van egy nagyszerű automatizált teszted, ez biztosan nem egyenértékű azzal a manuális teszttel, amelyikről azt gondolod, hogy automatizáltad.

Források, ajánlott olvasnivaló

[1] C Kaner, J Bach, B Petticord: Lessons Learned in Software Testing
     Chapter 5: Automating Testing
[2] Can Automation Aid Manual Testing? An Interview with Jonathan Kohl
[3] J Bach: Manual Test Cannot Be Automated
[4] Cem Kaner on Automated Testing - 'We are just scratching the surface'

5 January 2015

Teszt dokumentáció

2014. június 5-én, a budapesti Teszt & Tea rendezvényen elhangzott előadásom dokumentációval, dokumentációs szabványokkal foglalkozó részének bővített változata.




A legtöbb mérnök a teszt dokumentáció készítése alatt unalmas, szükségtelennek tűnő irodai munkát ért, amely megszakítja az egyébként produktív, érdekes, intellektuális tesztelői tevékenységet. Nem véletlenül. A szövegek jelentős része jellemzően "másol-beilleszt" módon keletkezik, nem informatív, nem segíti elő a hatékonyabb tesztelést. Az emberek érzik, hogy a készülő dokumentumokat senki sem fogja olvasni, létrehozásuk csak a munkájukat szabályozó folyamatok kielégítése miatt történik.

Miért támasztanak értelmetlen dokumentációs elvárásokat a munkafolyamat leírások?

Véleményem szerint részben a teszt dokumentációs "szabványok" (pl. IEEE 829, ISO 9000-3, CMM) erőltetett követése, részben a dokumentációt körülölelő alaptalan hiedelmek miatt. (A két tényező sajnos egymást is erősíti.)

Tipikus mítoszok például:
  • professzionális tesztelés nem létezik nagy mennyiségű, jellemzően prózai formában írott dokumentáció nélkül (ld. teszt terv, teszt eset leírások stb.)
  • ezeknek a dokumentumoknak a fejlesztés minél korábbi szakaszában meg kell születnie és formális felülvizsgálaton átesnie
  • egy adott környezetben, projektben működő dokumentációs gyakorlat jól működik majd egy másik környezetben is
  • a szabványok dokumentációs ajánlásainak követése megfelelő lépés bárhol és bármikor
  • egy tapasztalatlan tesztmérnök fejlődését az segíti elő (akkor tanul gyorsan), ha terjedelmes dokumentációt kap a kezébe
  • a részletesen dokumentált teszt esetek garantálják a megismételhetőséget, könnyen végrehajthatók tapasztalan tesztelők által is és védenek a munkaerő-vándorlással szemben (a dokumentáció helyben marad).

A dokumentáció szerves része a formalizált teszt folyamatoknak. A dokumentációs szabványok valamiféle keretrendszert, struktúrát és egy definícióhalmazt próbálnak nyújtani, teszik mindezt az ajánlott dokumentumok leírásával, az egyes dokumentumok közötti kapcsolatok ismertetésével ill. a munkafolyamatokban betöltött szerepük meghatározásával.
A szabványok nem kötelező erejűek. Születésüket a tesztelői közösség a '90-es években kezdetben izgatottan fogadta. A gyakorlatban viszont az alkalmazásuk komoly problémákhoz vezetett - olyan problémákhoz, amelyeket nem lehetett a szabványok inkompetenciából adódó helytelen használatának a számlájára írni.

A tapasztalatokra építve a szakterület több nagyágyúja is megkérdőjelezte a szabványok szükségességet. Az IEEE 829-ről Cem Kaner 2003-ban úgy nyilatkozott, valószínűleg több kárt okozott, mint hasznot ("has probably done more harm than good" [1]), James Bach egyértelműen ártalmasnak ("harmful document") nevezte. Liberalizációs szándékkal mindketten tagjai voltak ekkor a IEEE 829 frissítését célzó munkacsoportnak, sikertelenül. (A viták később sem szűntek meg, a most születő IEEE 29119 szabványt is komoly ellenérzések övezik a tesztelői közösségen belül.)


Tekintsük át a dokumentációs szabványok jellemző problémáit!

Arra a beágyazott feltételezésre épülnek, hogy a fejlesztés szigorúan fázisos életciklusban zajlik (ld. V- ill. vízesés modellek). Ennek megfelelően a teszteket a fejlesztés korai fázisban, részletesen dokumentáltan létre kell hozni, majd ezek a későbbiekben nem változnak.

A tesztelés egyik alapvető problémája az, hogy végtelen számú lehetséges tesztet hajthatnánk végre, de csak egy nagyon kis részhalmaz végrehajtására van lehetőség. A teszt tervezés többek között arról szól, mi kerüljön ebbe a részhalmazba. Nyilván minél jobban ismerjük ill. értjük a készülő terméket, annál okosabban tudunk válogatni a tesztek között. A projekt korai szakaszában pedig értelemszerűen kevesebb információval rendelkezünk.
A jó tesztelő folyamatosan tanul. Ahogy a projekt előrehalad egyre mélyebben lát bele a rendszerbe, fokozatosan fejlődnek azok az érzékei, képességei, amelyek fontosak az adott projektben. Újabb és újabb részleteket tud meg például a leendő a felhasználókról, az applikációról, ennek különböző felhasználási módjairól, az esetleges kockázatokról, a tesztek kivitelezésével kapcsolatos problémákról. Ahogy a tudása nő, más szemmel látja majd a korán megtervezett tesztjeit, vagy azokat a teszteket, amelyeket éppen érdemes lenne végrehajtani. Magának a programnak az érettsége is változni fog az idő előrehaladtával: más jellegű tesztekre van szükség a fejlesztés korai szakaszában, mint később, amikor már elért valamilyen érettségi fokot a program.
(Az IEEE 29199 már próbálja figyelembe venni az agilis fejlesztés eltérő igényeit.)

Nagy mennyiségű információ formális, prózai szöveges rögzítését igénylik, tekintet nélkül az ehhez kapcsolódó munkamennyiségre ill. költségekre.

A szabványok teljesen figyelmen kívül hagyják azt a tényt, a rendelkezésünkre álló idő korlátos (a munka pedig mint fentebb jeleztem, végtelen), azaz mérlegelni kell a dokumentálás ill. azon tevékenységek között, amelyet egy tesztelőnek érdemes vagy kell elvégeznie. (A dokumentációra fordított idő másra már nem fordítható.) Nem írnak az ajánlott struktúrában megszülető dokumentumok jellemzően óriási költségéről sem (létrehozás, karbantartás).

Elterelik a figyelmet a tényleges célokról.

Túlságosan csábító a különböző típusú, terjedelmes, komplex dokumentumok elkészítésére koncentrálni a tervezés során, ahelyett hogy minél jobb elképzeléseket próbálnánk létrehozni azzal kapcsolatban, hogyan is teszteljük az adott rendszert. (ld. goal displacement)

Univerzális, kulcsrakész megoldást próbálnak nyújtani.

A szabványok teljesen figyelmen kívül hagyják a projektek környezeti jellemzőit, illetve azokat az összefüggéseket, hogy ezek a jellemzők hogyan befolyásolják a projekt tényleges dokumentációs igényeit. Nem nyújtanak semmilyen iránymutatást az igények feltérképezésével, analízisével kapcsolatban. Felelőtlenség egy javaslatlistát kőbe vésni és „ipari szabvány”-nak nevezni, amikor a tényleges dokumentációs igények projektről projektre, cégről cégre, területről területre változnak.

A hangsúly jellemzően a dokumentumok terjedelmén és a formalizmuson van.

Ez ágyaz meg annak a hitnek, hogy professzionális tesztelés nem létezik nagy mennyiségű dokumentáció nélkül. A több, terjedelmesebb dokumentum alaposabb tesztelést sugall. (Egy külső szemlélőt -pl. menedzsert, auditort- meggyőzhet a teszt terv terjedeleme arról, hogy a tervezéssel tényleg eltöltött annyi időt a tesztelő, mint amennyit állít, viszont nem szolgáltat információt arról, hogy a megfelelő módon töltötte -e el ezt az időt.)

Azt vizionálják, hogy a tesztelés jól körülhatárolható, absztrakt egységekből áll (teszt esetek) és minden egyes teszt esetre külön dokumentációt kell készíteni. 

Ez végtelenül ostoba dolog, sajnos a teszt eset menedzsment eszközök többségét már ez alapján a feltételezés alapján készítették. Ha van 50 teszt esetünk, amelyek mindegyike tartalmaz egy bizonyos dolgot, és ezt a dolgot mi megváltoztatjuk, akkor minden egyes teszt esetet meg kell változtatnunk. Ha az egyes teszt esetek dokumentációja teljesen független egymástól, akkor változtathatjuk meg az összes dokumentumot. Mondanak -e a valamit a modularizáció, komponens, metódus szavak a programozásban?

Egyes tesztelési paradigmák, módszerek ismeretlenek a szabvány készítői előtt.

Bizonyos eszközök képesek nagy mennyiségű tesztet végrehajtani és kiértékelni, például bemenő adatok millióinak, vagy tetszőlegesen hosszú eseménysorozatnak a véletlenszerű létrehozásával. Ezeknek a teszteknek a dokumentálása egyszerűen nem illik bele a szabványok által vázolt világképbe. A dokumentáció ilyenkor elmarad, vagy vagy más módon történik. Szélsőséges esetben akár tesztek létrehozása is elmaradhat a kapcsolódó dokumentációs nehézségek miatt.

A szabványok által javasolt sablonok használata kétélű fegyver.

A sablonok segíthetik a kevésbé gyakorlottakat az információ struktúrálásában és prezentációjában, de súlyos tévedés azt hinni, hogy kiküszöbölik majd a kompetencia hiányából fakadó problémákat, vagy helyettesítik a teszteléshez (vagy teszt dokumentáció írásához) szükséges készségeket. Elősegíthetik egységes dokumentációs kép kialakítását a külvilág számára, de komolyan korlátozhatják az emberi gondolkodást.
Paradox módon a sablonok akkor segíthetnek nekünk, amikor igazából nincs rájuk szükség. Értenünk kell, milyen információt hordoznak az egyes fejezetek, miért szerepel ott ez az információ, mikor hagyhatók ezek adott esetben el. Amennyiben mindezekkel tisztában van a tesztelő, nincs szüksége a sablonra. Aki önállóan is képes hatékony teszt dokumentáció írására, annak a sablon felgyorsíthatja a munkáját. Ha viszont valaki nem képes sablon nélkül dolgozni, akkor számára nem sablon kell, hanem egy tanár, mert ez annak a jele, hogy önállóan még nem tudja végezni az adott feladatot.


Hogyan döntsük el, hogy érdemes -e a szabványok által megfogalmazott ajánlásokat figyelembe venni?
Milyen projektek esetén érdemes ill. nem érdemes ezeket követni?

A megoldás a már említett dokumentációs követelmények analízise. Azaz annak eldöntése, hogy milyen dokumentumokra, pontosabban (mivel maga a dokumentum csak információhordozó, közvetítő közeg) milyen információ rögzítésére és milyen célból van szükségünk - még mielőtt azzal foglalkozunk, hogy hogyan hozzuk létre ezeket.

Gause és Weinberg Exploring Requirements c. könyve remek bevezető a követelmények analízisébe ill. ezek felderítéséhez környezetfüggetlen kérdések megfogalmazására és használatára. A dokumentációval kapcsolatos, tipikus kérdések lehetnek például:
  • Milyen információs céljai vannaka teszt csoportunknak?
  • Eszköz vagy termék a teszt dokumentáció? 
  • Kik a célközönség, a leendő olvasók?
  • Milyen tudást feltételezünk róluk?
  • Milyen információt szeretnénk közölni velük?
  • Milyen hosszú ideig  lesz szükség a dokumentumra? 
  • Meddig lesz érvényes a dokumentált információ, mennyire valószínű, hogy változni fog?
  • Hogyan osszuk fel időben a dokumentált munkamennyiséget (tudván azt, hogy pl. egy hónap múlva többet tudunk, mint most)?
  • A teszt stratégiánk a felfedezésre épül inkább, vagy előregyártott tesztek végrehajtására?
  • stb.
Mindezek mellett tartsd még szem előtt a következő irányelveket:
  • A terjedelem nem jelent minőséget, vagy alaposságot.
  • A próza helyett használhatsz tömörebb, alternatív módszereket, pl. vizuális formátumok (mindmap), ellenőrző listák (checklist). 
  • Kerüld el a túlságosan korai, vagy túlságosan formális dokumentáció okozta csapdákat! A terveid menet közben változnak majd. Törekedj retrospektivitásra! Kevésbé érdemes azt nagy részletességgel rögzíteni, hogy "mit akarok majd hetekkel később csinálni?", mint azt, hogy "mit csináltam ma? mit láttam, tapasztaltam? mi és hogyan hasznosítható mindezekből?"
Illetve tedd fel a legfontosabb kérdést: Mi az a létező legolcsóbb dokumentáció, ami még elegendő?

Források, ajánlott olvasnivaló

[1] C Kaner, J Bach, B Petticord: Lessons Learned in Software Testing
     Chapter 6: Documenting Testing
[2] C Kaner: Requirements for test documentation
[3] J Bach: Fighting Bad Test Documentation
[4] J Christie: When Documentation is a Waste of Time
[5] M Bolton: Worthwhile Documentation
[6] F Charles: Unburdening Testing. Finding the balance point for test documentation
     EuroSTAR Conference presentation (2012)
[7] A Hodder: Using Mind Mapping Software as Visual Test Management Tool


9 November 2014

A tesztelés nem biztosít minőséget

2014. június 5-én, a budapesti Teszt & Tea rendezvényen elhangzott előadásom részlete.


A helyzet az, nem gondolkodtam sokat azon, hogy mi legyen az előadás bemelegítő témája. Egy tesztmenedzser barátom jutott eszembe, aki többször panaszkodott nekem arról, hogy -természetesen szigorúan a hatékonyságnövelés érdekében- a felettesei csökkentettek valamilyen rendelkezésére álló erőforrást (idő, tesztmérnökök), és mindeközben azt várják tőle, hogy továbbra is “biztosítsa ugyanazt a minőséget”.
Persze erre én rögtön ugrottam, rendszerint nyílt kritikával illetve az elhangzottakat: "Szereptévesztésben élsz, te is és a feletteseid is."

A tesztelők nem biztosítanak minőséget. Még csak meg sem kell, hogy próbálják.

A tesztelés információgyűjtés (illetve a különböző jelentéseken keresztül információszolgáltatás is).
Egy tesztelő által előállított legfontosabb termék nem valamiféle írásos teszt terv, nem a teszt esetek esetleges scriptjei, vagy ezek formális dokumentációja, hanem a tesztelt rendszer (vagy a projekt) minőségi jellemzőivel kapcsolatos információ. És információk, bizonyítékok egyszerű gyűjtése még nem jelent cselekvést is ezek alapján. Márpedig a minőség biztosítása mindkettőt igényelné: egyrészt visszajelzéseket, másrészt a beavatkozást.

Kaner és szerzőtársai ill. Bolton a következőképpen fogalmaznak: a tesztelők önmaguk nem hoznak létre minőséget és nem is vesznek el ebből. (Mondhatjuk, hogy sikerült elrontanunk a programot, de a helyzet az, hogy rossz volt már akkor is, amikor ideadták nekünk.) Természetesen felelősek vagyunk a saját munkánk minőségéért, vagy annak az információnak a minőségéért, amit mások számára nyújtunk -jellemzően a tesztek eredményein és a hibajelentéseken keresztül, ezáltal segítve azoknak, akik közvetlenül hatnak a minőségre - de ez nem a szoftver minőségének a biztosítása.

A minőség azoktól jön, akik építik a programot, ennek biztosítása pedig a döntéshozóktól függ: jellemzően a fejlesztők és a menedzsereink hatóköre ez. A mi feladatunk az, hogy megkönnyítsük a munkájukat jó minőségű információ átadásával. Ez segíti a döntéshozatalt és így egy projekt folyamán a minőség biztosítását. De mi, tesztelők nem tervezünk rendszereket a felhasználók igényei alapján, nem írunk kódot, nem javítunk hibákat, nem mi döntünk az alkalmazásfejlesztés menetrendjéről, vagy arról, hogy mennyi pénzt fordíthatunk rá. Nem mi határozzuk el, kik dolgoznak majd a projekten, milyen kapcsolatot kell kiépíteni a felhasználókkal és még hosszasan lehetne folytatni a felsorolást. A tesztelők szerepe szolgáltatás jellegű, nem pedig kontroll vagy döntéshozatali. 

Az előadást megelőző este kíváncsiságból végigpörgettem a résztvevők névsorát, vajon kik ők, honnan, milyen szakmai titulussal érkeznek. Néhány ember neve mellett szembeötlő volt a "QA - Quality Assurance" jelzés. Hívhatják a csoportotokat "Quality Assurance"-nak, de ez ne maradjon meg a fejetekben. Amit csinálunk, az inkább "Quality Assistance".

És ha valaki ezen a ponton arra gondol, hogy ez csak játék a szavakkal, arra kérem, nézze egyszerű technikai szemmel a kérdést:
Végtelen számú lehetséges tesztből végrehajtunk és kiértékelünk néhányat. Ugyan mit biztosít ez?

3 December 2013

Domain Testing Workbook is published


Cem Kaner and Douglas Hoffman needs no introduction among the students of software testing. Coauthored with Sowmya Padmanabhan, the trio released the bible of the domain testing technique (also known as equivalence class analysis or boundary testing).

The book is quite extensive thanks to the large number of worked examples. It is composed of three well-separable sections. An academic level overview of the domain testing concept is provided first. The authors describe a scheme then in the second section that identifies the tasks which are well worth to think about during domain testing analysis. Each of these tasks are illustrated by realistic practical examples and exercises. The final, third section reverses the approach and places the focus on the application of the schema on complete examples.



I practiced domain testing in my daily work when it seemed suitable to do so, I tried to teach its fundamentals (at least what I knew about it) to newbies at the company I work for. I had completed the BBST Test Design course and had been aware of Kaner's Teaching Domain Testing publication for a while. In spite of these all, when I went through the draft volume, I immediately recognized how shallow my knowledge is about this technique and how limited my thinking is about its applicability.

The decision whether to opt for this book is a no brainer for anyone who has a deeper interest in software testing and intends to improve his test design skills via practical examples.

The book is on sale on Amazon, you can order here.

21 October 2013

Software Quality Characteristics from The TestEye / Hungarian translation

Here you can find the Hungarian translation of "Software Quality Characteristics" document written by Rikard Edgren, Henrik Emilsson and Martin Jansson.