Testovanie
Základy softvérového inžinierstva
Sergej Chodarev (sergejx.net), Filip Gurbáľ
Ako vieme, či program funguje?
Manuálne testovanie
- veľmi zdĺhavé
- na niečo môžeme zabudnúť
Test Early, Test Often, Test Automatically
Tests that run with every build are much more effective than test plans that sit on a shelf.
– The Pragmatic Programmer
Cena neskorého testovania
Automatické testy
- rýchle
- spúšťané keď je to potrebné
Softvérové chyby a zlyhanie
Softvérová chyba - fault, error, bug - chyba v kóde, ktorá spôsobuje chybné správanie programu (správanie sa líši od očakávaného)
Softvérové zlyhanie - nie je možné dokončiť scenár (program padne, nespustí sa)
Verifikácia a validácia
Verifikácia – overenie správnosti produktu vzhľadom k formulovaným požiadavkám (Vytvárame produkt správne?)
Validácia – overenie správnosti produktu vzhľadom k potrebám zákazníka (Vytvárame správny produkt?)
Testovací prípad a testovacia sada
Test case - testovací prípad (konkrétny test)
Test suite - sada testov
Test scenario - testovací scenár sa využíva hlavne pri manuálnom testovaní
Skrinky
Black box testing - testovanie čiernej skrinky
White (clear) box testing - testovanie bielej skrinky
Grey box testing - kombinácia testovania čiernej a bielej skrinky
Testovanie na základe špecifikácie alebo kódu
Specification-based testing - testovanie len na základe špecifikácie
Code-based testing - testovanie na základe implementácie
Testing pyramid
Jednotkové testy
- testovanie jednotlivých modulov
- píšu priamo autori modulov
- integrálna súčasť vývoja
Čo testovať?
- verejné rozhranie modulu
- test je špecifikácia
Testing Is Not About Finding Bugs
A test is a perspective into your code, and gives you feedback about its design, API, and coupling.
– The Pragmatic Programmer
Mocking
- náhrada iných modulov
- možnosť sledovať interakcie
Štýly testovania
- solitary unit tests
- sociable unit tests
Štruktúra testu
3A:
Testovacie knižnice:
- Setup - príprava prostredia
- Test
- Teardown - prečistenie prostredia
Integračné testy
- integrácia medzi modulmi
- integrácia s inými službami
- zvykne sa automatizovať
- menej stabilné ako jednotkové testy
End-to-end testy
- aplikácia ako celok
- v reálnych podmienkach
- z pohľadu používateľa
- automatizujú sa len často opakované testovacie scenáre
- zvyčajne trvajú dlhšie, aj keď sú automatizované
Akceptačné testy
- testovanie z pohľadu zákazníka
- očakávané správanie systému
- Behaviour-Driven Development (BDD)
Pokrytie kódu testmi
- test coverage
- podiel kódu, ktorý sa vykonáva počas testovania
- dobrý nástroj, zlý cieľ
Test-driven development (TDD)
- Napísať test (alebo jeho časť) – červená
- Napísať kód, aby testy prešli – zelená
- Zlepšiť kód – refactoring
Test Your Software, or Your Users Will
Test ruthlessly. Don’t make your users find bugs for you.
– The Pragmatic Programmer
Never Expect Your Software to be Perfect
Program testing can be used to show the presence of bugs, but never to show their absence!”