Quality assurance a testovací nástroje v praxi Bohumír Zoubek bohumir.zoubek@profinit.eu http://www.profinit.cz
Quality Assurance
QA obsah Kvalita proč, co, kde? DMAIC model Plánování Validace a verifikace Měření a historie projektu Komplexní pohled na QA v organizaci Poznatky z praxe Doporučená literatura
Co je cílem? Ukázat proč je řízení kvality důležité Ukázat možné způsoby, jak zvýšit kvalitu SW Pragmaticky Efektivně Nezkresleně Ukázat, jak funguje projekt ve firmě, která si na skutečné (nikoli papírové) kvalitě velmi zakládá.
Stručný úvod do tématu
Proč kvalita? Čtvrtá planeta sluneční soustavy Druhá nejmenší Má dva měsíce
Mars Polar Lander 3.1.1999 Mys Canaveral 3.12.1999 vstup do atmosféry
Plán přistání a realita 40 metrů na povrchem vypnuty motory Volný pád Víc se neví
Pravděpodobná příčina Falešný signál od jedné nohy vyhodnocen jako informace o tom, že modul přistál. Chyba identifikována na 1 řádku kódu Cena mise 327,6 mil. USD (celý Mars Surveyor 98)
Víc? Mars Climate Orbiter (MCO) metric/imperial (náklady viz MPL) Ariane 5 64 floating point -> 16 bit signed integer (7 billion USD/10 let vývoje) Procesor Pentium chybný algoritmus dělení
Obsah Stručný přehled tématu Proč kvalita Jak na kvalitu Kvalita a softwarový proces Poznatky z praxe Goodies templates, checklists Doporučená literatura
Proč kvalita? Údaj Hodnota Chybovost (počet chyb na 1000 SLOC) 2 Produktivita (počet řádků kódu na 1MD) 14-17 Poznámka průměr v IT odvětví je 7 průměr v IT odvětví (COCOMO) je 4 Softwarový proces Rozsah projektů pragmaticky definovaný a dodržovaný 50-5000 MD Průměrná velikost týmu 4 Průměrná délka projektů měsíce obrat (mil. Kč) 250 200 150 100 50 135 170 230 počet změstnanců 70 60 50 40 30 20 10 36 49 62 0 2004 2005 2006 0 2004 2005 2006 rok rok
Kde je kvalita?
Quality Assurance vs. Validace & Verifikace vs. Testing
DMAIC model
Plánování
Plán QA Je nutné plánovat jednotlivé aspekty QA Definice procesů Plán testů Plán přezkoumání a revizí Je nutné plánovat minimálně na úrovni Organizace (firmy) Projektu Jedince
Jak vybrat správný postup?
Minimální nároky Pragmatické a efektivní Základ firemního procesu Projekt se vůči nim vymezuje
Validace, Verifikace
Verifikace & Validace Am I building the product right? Am I building the right product? V&V je realizováno pomocí Testování (unit, integrační, ) Review, Inspekce, Walkthroughs,
Přezkoumání přezkoumání projektu přezkoumání nabídky přezkoumání designu přezkoumání kódu
Testování
Cíle Testování je součástí procesu vývoje. Testování je snadné. Testování je rychlé. Testování je automatizované. Testování je důkladné.
Typologie testů Unit testy Integrační testy Systémové testy Funkční Výkonové Uživatelské akceptační testy Regresní testy
V - model Business case Product verification review Requirements User acceptance tests review Functional design System, integration tests review Design & Coding review Unit tests, code analysis
Statická analýza kódu Analýza zdrojového kódu SW bez jeho spuštění Dokáže najít velké množství opakujících se problémů Používání synchronizačních primitiv Manipulace s I/O resources Problémy v dizajnu Dodržování konvencí v kódu (jména, styl, ) Nástroje dostupné pro mnoho platforem
Testy v kontextu projektu Smoke testing, Continuous Integration Vývojová platforma Pravidelný commit SCM Pravidelný build Integrační platforma Lokální vývoj Povinná sada testů (krátké a rychlé) Všechny automatické testy Regresní testy (automatické a manuální) Výkonové a jiné nefunkční testy, manuální testy dodávka Testovací platforma
Měření, historie Sledovat vlastní vývoj Srovnání s předchozími výsledky Povinnost vytvořit historii projektu Pragmatický cenový model Základní metriky size, time, effort, quality Pragmatická evidence Sybis, Bugzilla, SVN/CVS,
Big picture
Pohled na proces vývoje v organizaci
Poznatky z praxe QA je nutné naplánovat Proces musí být pragmatický Bez měření se nelze zlepšovat O kvalitě je nutné uvažovat na všech úrovních od organizace až po jedince Přezkoumání je efektivní (a mnohdy jediný) způsob zajištění kvality
Doporučená literatura Little Book of Testing Volume I, Volume II, Software Program Managers Network James A. Whittaker, What Is Software Testing? And Why Is It So Hard?, IEEE Software, vol. 17, no. 1, pp. 70-79, 79, Jan/Feb., 2000 ESA SOFTWARE ENGINEERING STANDARDS, ESA PSS-05-0 Issue 2, February 1991. SOFTWARE ASSURANCE GUIDEBOOK, NASA-GB-A201 Overcoming the NAH Syndrome for Inspection Deployment. ICSE 1998 Sanders, J. et al. Software Quality: A Framework for Success in Software Development and Support. Addison-Wesley. 1995
Testovací nástroje
Agenda Typologie testů vs. dostupné nástroje Koncept Continuous Integration Udržovatelnost testů Volně dostupné nástroje TestNG, Findbugs, PMD, Selenium, AutoIt jmeter,
Typologie testů vs. nástroje
Typologie testů Unit testy Přezkoumání kódu Statická analýza kódu Integrační testy Systémové testy Funkční Výkonové
Kde nám pomáhají nástroje? Příprava testovacího prostředí Vytvoření testovacích scénářů Naplánování testů Testování Exekuce testů Vyhodnocení testů, reporting
Continuous Integration
Testy v kontextu projektu Smoke testing, Continuous Integration Vývojová platforma Pravidelný commit SCM Pravidelný build Integrační platforma Lokální vývoj Povinná sada testů (krátké a rychlé) Všechny automatické testy Regresní testy (automatické a manuální) Výkonové a jiné nefunkční testy, manuální testy dodávka Testovací platforma
Volně ě dostupné nástroje
Tlustý / tenký klient Liší se hlavně při systémových testech Funkční testy (GUI) Výkonové testy Bez výrazného rozdílu Unit a integrační testy Statická analýza kódu
Nástroje bez rozdílu Unit a integrační testy junit, TestNG, jmock, EasyMock, DbUnit, Statická analýza kódu Findbugs, PMD, FxCop, Continuous Integration CruiseControl, Hudson, Team Foundation Server,
Nástroje tenký klient Funkční testy Selenium, jwebunit, Watij, Výkonové testy JMeter, Dieseltest, Komplexní řešení HP Test Suite, Rational Test Suite,
Nástroje tlustý klient Quick Test Professional Rational Functional Tester AppPerfect Functional Tester GUI Automation White AutoIt
Příklad č. 1 TestNG
Ukázka TestNG Framework pro tvorbu (nejen) unit testů Velmi dobrá podpora pro integrační testy Vysoká granularita spouštění testů test methods groups tests suites Závislosti mezi metodami, skupinami Parametry testů Definice timeout
Ukázka TestNG
Příklad č. 2 Findbugs, PMD
Ukázka PMD / CPD Statická analýza kódu Detekce potenciálních problémů (PMD) Možné chyby Mrtvý kód (nepoužívané metody, proměnné, ) Neoptimální / příliš komplikovaný kód Velké množství pravidel / kontrol Pouze zdrojové soubory (Java, JSP, JSF), ne JAR Velmi dobrá detekce duplicit v kódu (CPD) Konzolová aplikace, CPD má GUI Integrace s Ant, Maven,
Ukázka PMD / CPD Seznam pravidel PMD Příklad konfiguračního ního souboru Příklad PMD reportu Příklad CPD
Ukázka Findbugs Konkurence PDM Podobná pravidla / kontroly Bez detekce duplicit Umí bytecode (schopnost kontroly JAR) Integrace s Ant, Maven, Konzole, GUI
Ukázka Findbugs Příklad GUI Příklad reportu
Příklad č. 3 Selenium
Ukázka Selenium Funkční ní testování web aplikací Testy lze psát v mnoha jazycích (Java, C#, ) Lze využít Selenium IDE Podpora řady prohlížečů (Firefox, IE, Opera, ) Integrace s junit, TestNG, nunit, Testy jako Javascript v prohlížeči Omezeno možnostmi Javascriptu Opravdu testuje aplikaci v prohlížeči, nesimuluje
Ukázka Selenium
Příklad č. 4 AutoIt
Ukázka AutoIt AutoIt skripty + data Aplikace Test report
Příklad č. 5 jmeter
Ukázka jmeter Výkonové testování (nejen) web aplikací Opensource nástroj Specializované IDE (Swing desktop aplikace) Lze spustit i konzolově Ne moc dobrá podpora pro Ant, lepší pro Maven Velmi široká paleta možností ( / ) HTTP(S), SOAP, JDBC, LDAP, JMS, Pokročilé statistiky, monitoring, vizualizace
Ukázka jmeter
Faktory TCO AT
Podstatné faktory TCO AT Faktor TCO % funkčního pokrytí systému Míra automatizace testů Architektura AT Zakomponování AT do vývoje Vnímání symbiózy aplikace a AT Built-to-test aplikace
Shrnutí Různé typy testů, různé nástroje všechny jsou nutné, doplňují se Lze automatizovat (s rozmyslem ) OpenSource nástroje dostatečně kvalitní Podstatný je design podpora pro testy (na všech úrovních) velmi pomáhá DI a TDD
Diskuse
Diskuse Komentáře Otázky Připomínky Upřesnění Poznámky