Testování Java EE aplikací Petr Adámek 28. 11. 2011 © 2011 Petr Adámek 2 Testování aplikací Testování aplikací ● Ověřuje soulad implementace se specifikací a s očekáváním zákazníka. ● Je důležitou součástí procesu řízení kvality vývoje software ● Na rozdíl od formální verifikace neumožní odhalit všechny potenciální chyby 28. 11. 2011 © 2011 Petr Adámek 3 Testování aplikací Základní pravidla ● Testy by měly být reprodukovatelné. ● Testy by měly být deterministické, tj. měly by mít na začátku vždy stejné vstupní podmínky. ● Testy by měly být nezávislé, tj. nebýt ovlivněny ostatními testy. ● Testy by měly být levně opakovatelné. 28. 11. 2011 © 2011 Petr Adámek 4 Druhy testování podle metody IBA CZ, s.r.o.© 2009 Druhy testování podle metody ● Ruční testování: ● nízké vstupní náklady, drahé opakování; ● obtížné zajištění reprodukovatelnosti, determinismu a nezávislosti ● Automatizované testování: ● vysoké vstupní náklady, levné opakování; ● snadné zajištění reprodukovatelnosti, determinismu a nezávislosti. 28. 11. 2011 © 2011 Petr Adámek 5 Druhy testování podle cíle IBA CZ, s.r.o.© 2009 Druhy testování podle cíle ● Jednotkové testování ● Integrační testování ● Funkční testování ● Akceptační testování ● Testování výkonu a škálovatelnosti ● Testování uživatelské přívětivosti ● Testování bezpečnosti 28. 11. 2011 © 2011 Petr Adámek 6 Jednotkové testování IBA CZ, s.r.o.© 2009 U jednotkového testování se snažíme otestovat jednotlivé komponenty vyvíjeného systému na té nejnižší úrovni. Jednotlivé testované komponenty by měly být izolovány od svého okolí, aby se zamezilo vlivu tohoto okolí na testovanou komponentu. Interakce s okolím je simulována pomocí falešných objektů, které simulují chování okolí v konkrétním testovacím scénáři (viz Mock Objekty). Čím je lépe provedená dekompozice, tím je snadnější jednotkové testování. 28. 11. 2011 © 2011 Petr Adámek 7 Jednotkové testování v Java EE IBA CZ, s.r.o.© 2009 U Java EE aplikací je nutné vzít v úvahu existenci kontejneru. ● Testy mimo kontejner – otestuje se pouze business logika, nikoliv chování závisející na kontejneru (např. řízení transakcí, autorizace apod.) ● Testy v kontejneru – otestuje se vše, ale tento druh testování se pro jednotkové testy moc nehodí. Při testování mimo kontejner se používá koncept mock objektů, které simulují chování kontejneru. 28. 11. 2011 © 2011 Petr Adámek 8 Jednotkové testování v Java EE IBA CZ, s.r.o.© 2009 Jak testovat vrstvu perzistence dat: ● Mock Objekty (snadné u JPA nebo jiných knihoven a rámců, komplikované u low-level JDBC). ● Datábaze uložená v paměti (snadné u JPA, u low-level JDBC může být problém s SQL dialektem). Nezapomenout na zajištění stejných počátečních podmínek (uvést databázi vždy do stejného počátečního stavu). 28. 11. 2011 © 2011 Petr Adámek 9 Jednotkové testování – nástroje IBA CZ, s.r.o.© 2009 Nástroje pro jednotkové testování ● JUnit ● TestNG ● Artima SuiteRunner ● MockRunner ● dbUnit 28. 11. 2011 © 2011 Petr Adámek 10 Integrační testování IBA CZ, s.r.o.© 2009 Integrační testování slouží k ověření správné interakce jednotlivých komponent a zda se sestavený systém chová tak, jak očekává specifikace. ● Viz též continuous integration 11 Funkční testování IBA CZ, s.r.o.© 2009 Funkční testování slouží k ověření funkcionality z pohledu koncového uživatele. ● Většinou se jedná o testování na úrovni uživatelského rozhraní. Nástroje ● Rational Functional Tester – gui + web http://www-01.ibm.com/software/awdtools/tester/functional/index.html ● Selenium IDE – web http://selenium.openqa.org/ ● Marathon – gui http://marathonman.sourceforge.net/ ● Rational Robot – gui (pro staré aplikace), Rational Quality Manager, JWebUnit 28. 11. 2011 © 2011 Petr Adámek 12 Akceptační testování IBA CZ, s.r.o.© 2009 Akceptačním testováním zákazník ověřuje, zda aplikace odpovídá jeho požadavkům a představám. Absence akceptačního testování (případně jeho podcenění a nedostatečné provedení) téměř spolehlivě vede k pozdějším sporům a problémům. Zákazníci mají bohužel tendenci tuto věc velmi podceňovat a na nesoulad implementace s požadavky zákazníka se tak často přijde až v okamžiku produkčního nasazení :-(. 28. 11. 2011 © 2011 Petr Adámek 13 Testování výkonu IBA CZ, s.r.o.© 2009 Testováním výkonu se ověřuje propustnost a odezvy systému při vysokém zatížení, příp. škálovatelnost. Součástí specifikace by měla být i definice požadované propustnosti a reakčních dob systému při předepsaném zatížení. Nástroje ● Rational Performance Tester (+ extensions) http://www-01.ibm.com/software/awdtools/tester/performance/index.htm ● Rational Service Tester for SOA Quality (funkční testy + testování výkonu) ● JMeter http://jakarta.apache.org/jmeter/ 28. 11. 2011 © 2011 Petr Adámek 14 Testy uživatelské přívětivosti IBA CZ, s.r.o.© 2009 Testy uživatelské přívětivosti ● V USA běžná věc, v Evropě to zatím firmy moc nedělají. ● Definice prototypu cílového uživatele. ● Výběr skupiny testovacích uživatelů (testovací vzorek). ● Testovací uživatel dostane seznam úkolů, které se snaží vyřešit bez pomoci někoho jiného. ● Jeho chování je sledováno a vyhodnocováno. ● Viz Štefkovič, M.: Použitelnost webových aplikací. https://is.muni.cz/auth/th/166042/fi_b/ 28. 11. 2011 © 2011 Petr Adámek 15 Testování bezpečnosti IBA CZ, s.r.o.© 2009 Testování bezpečnosti ověřuje odolnost proti různým typům útoků. Nástroje: ● Rational AppScan – bezpečnost webových aplikací http://www-01.ibm.com/software/awdtools/appscan/ 28. 11. 2011 © 2011 Petr Adámek 16 Závěr IBA CZ, s.r.o.© 2009 Otázky?