Testování a QA 6. cvičení, A4M33SEP Martin Hasaj

Slides:



Advertisements
Podobné prezentace
Harmonogram implementace IS v běžné praxi - informatika ZMVS.
Advertisements

+ BI-SP1: vManager Adam Staněk, Radek Klein, Petr Tatoušek
Databázové systémy Přednáška č. 2 Proces návrhu databáze.
Autor : Ladislav Ullrich.  Automatizované testování Problematika Přínosy  Funkční testování Problematika Princip  Požadavky na ATN  Přehled komerčních.
 Vyhledání míst v programech vhodných pro optimalizaci  Sleduje se četnost volání a trvání jednotlivých částí programu JetBrains dotTrace Profiler.
IS v surovinovém průmyslu Roman Danel Institut ekonomiky a systémů řízení HGF VŠB – TU Ostrava.
Organon Interaktivní webová aplikace pro výuku logiky
Úvod do SwEng 1. cvičení - A4M33SEP -
Desáté cvičení Java Core API Java Collection Framework JavaDoc.
Ing. Lukáš Burkoň Debugging 2. Testování 3. Unit testy 2.
Tvorba webových aplikací
Podnikový systém SEWSS Jakub Charvát STATISTICA Enterprise-wide SPC System.
Chceme mít také v ČR snadný přístup k vysokoškolským kvalifikačním pracím? (a co je pro to třeba udělat) Asociace knihoven vysokých škol ČR výroční konference.
Lestes C++ compiler. Obsah 1. Úvod 2. Architektura 3. Implementace 4. Framework 5. Závěr.
použitelnost webu (usability)
C# - Exceptions (výjimky)
Michael Juřek Software Architect Microsoft s.r.o.
KEG Použití vzorů při vyhledávání na webu Václav Snášel.
Objektové programování
Rozšíření jednouživatelské verze IS na víceuživatelskou Prezentace Diplomové práce Autor : Libor Tomášek Spoluautoři : Pobucký M., Drábek L. Vedoucí :
8. dubna 2013ISSS - Portál interních identit, Z. Motl1 Portál interních identit jako nadstavba identity managementu Mgr. Boleslav Bobčík, T-Systems Czech.
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Plán testů Tým FelPay. Testování a kvalita obecně Přispívá ke správné funkci systému Přispívá ke správné funkci systému Snižuje finanční a časové ztráty.
4IT445 – Testování a ladění v PHP Ing. Jan Mittner
Zavádění a údržba informačních systémů
PPC workshop Lukáš Pokorný RobertNemec.com. PPC audit Podle struktury účtu: kampaně, sestavy, slova, inzeráty První věc po převzetí účtu nebo při zjišťování.
Databázové systémy Přednáška č. 6 Proces návrhu databáze.
4. Lekce Dílčí procesy funkčního testování
Možnosti modelování požadavků na informační systém
Testování METODOLOGIE PROJEKTOVÁNÍ Roman Danel VŠB–TU Ostrava Hornicko-geologická fakulta Institut ekonomiky a systémů řízení.
2 Ing. Jan Keprt Centrální správa uživatelů 3 Jak to bylo dosud Bylo třeba nastavení uživatelů provést zvlášť, v každém modulu samostatně. Uživatel si.
Gymnázium, SOŠ a VOŠ Ledeč nad Sázavou I NFORMAČNÍ A KOMUNIKAČNÍ TECHNOLOGIE Ing. Jan Roubíček.
Dokumentace informačního systému
Návrh systému evidence komponent měřícího řetězce stanic SampleFx.
PHP Souhrnné cvičení Mgr. Josef Nožička IKT PHP
Přednáška č. 1 Proces návrhu databáze
Základy syntaxe jazyka PHP PHP JE TECHNOLOGIE BĚŽÍCÍ NA SERVERU. PHP JE TECHNOLOGIE BĚŽÍCÍ NA SERVERU. Typický PHP skript obsahuje: Typický PHP skript.
Automatizace testovacích procesů Petr Boháček a Ivo Řezníček.
2 Petr Žitný znalosti.vema.cz 3 Báze znalostí Nová služba zákazníkům ▸Báze naplněná informacemi, ke které mají uživatelé přímý přístup Základní cíl ▸Poskytovat.
PHP PHP - úvod - 02 Mgr. Josef Nožička IKT PHP
Návrh podle kontraktu - klasická metodika a moderní nástroje Tomáš Pitner Masarykova univerzita v Brně Fakulta informatiky
Microsoft SQL server Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Pohled uživatele.
Semestrální projekt Správa webových konferencí Mendelova univerzita Aplikace vývojových technik Jakub Matoušek Květen 2012.
Testování s TestComplete
Detekce a odstraňování chyb Vývoj informačních systémů.
METODY STŘEDNĚDOBÉHO PROGNÓZOVÁNÍ SURO jaro 2010.
Template Method. Motivační příklad – reálný svět Čaj 1) Uvař vodu 2) Dej do hrnku sáček čaje 3) Zalij hrnek 4) Přisyp cukr a vymačkej citrón Káva 1) Uvař.
Statistika v SAS (SAS STUDIO)
PSYCHICKÁ PŘÍPRAVA VE SPORTU
© 2016 InterSystems Corporation. All rights reserved. Integrace OAuth 2.0 a OpenID Connect.
Testování aplikací v Javě Petr Adámek IBA CZ, s.r.o. © 2010.
SOFTWAROVÁ PODPORA PRO VYTVÁŘENÍ FUZZY MODELŮ Knihovna fuzzy procedur Ing. Petr Želasko, VŠB-TU Ostrava.
TDD - Test Driven Development
Ukládání dat biodiverzity a jejich vizualizace
Bohumír Zoubek, Tomáš Krátký
SOLID principy v OOP návrhu
Testování Softwaru a Test-Driven Development
Miroslav Kovář Čeněk Škarda
Návrh, požadavky, implementace
Zvýšení kapacity, dostupnosti a efektivnosti systému SIS II spolufinancovaný z Ročního programu 2013 Fond pro vnější hranice (FVH)
NÁZEV ŠKOLY: Střední odborná škola Net Office, spol. s r. o
Návrhový vzor Flyweight
PRŮBĚH DOKUMENTACE UNIVERZITNÍHO INFORMAČNÍHO SYSTÉMU MZLU V BRNĚ
Tradiční metodiky vývoje softwaru
Demoverze QI Informace pro partnery DCC
Tradiční metody vývoje softwaru
Návrh, požadavky, implementace
Web Application Scanning
Mikroservisy Petr Paloch.
Transkript prezentace:

Testování a QA 6. cvičení, A4M33SEP Martin Hasaj

Program o Opakování o Manuální testování o Automatické testování o Antipatterns o Testování testů o Pokud zbyde čas –Užitečné nástroje Cobertura DbUnit

Opakování - pojmy o Verifikace a validace o Kvalifikační a akceptační testování o Testování vs. QA o Test Case (testovací případ) o Test Scenario (testovací scénář) o Testament –To sem nepatří :-)

Taxonomie o Black box vs. white box o Manuální vs. automatické o Integrační vs. unit o Kvalifikační, akceptační o Regresní o Výkonnostní, zátěžové o Smoke o Usability o Lokalizační testování o Fuzzy testing

Manuální vs. automatické o Vzájemně se doplňují o Většinou není možné (ekonomické) plně pokrýt aplikaci automatickými testy. o Nám se osvědčilo: –Před prvním nasazením se aplikace důkladně prokliká. –Vytvoří se regresní testy (testují aplikaci z GUI) Selenium, HttpUnit, AutoIt –Vytvoří se (během vývoje) unit testy pokrývající „core“ funkcionalitu (výpočty, práce s daty …)

Manuální testování v praxi o Není dobrý nápad provádět testy nad produkční databází –=>Nutnost testovacího prostředí o Testovací prostředí by mělo být co nejpodobnější reálnému (HW, SW) –Drahé – často se sahá ke kompromisům o Testovací prostředí a vývojové prostředí by měly být odděleny. –Jinak se testy mohou chovat nedeterministicky. –Vývojáři a testeři se mohou vzájemně rušit. –Oddělení může být časové (od teď už se nevyvíjí, ale testuje)

Bugzilla o Bug tracking systém –Zřejmě nejpoužívanější (v Profinitu tvoří páteř IS :-) ) o Uchovává historii bugů – i po letech lze zjistit, proč se udělalo to či ono. o Životní cyklus chyby –New (někdo nahlásí chybu) –Assigned (ujme se jí vývojář) –Fixed (chyba je opravena) –Verified (interní přetestování) –Closed (ověření zákazníkem). o Umožňuje připojovat soubory –logy, screenshoty...

Co se nám osvědčilo (2) o Workflow –Před dodávkou si vývojáří rozdělí všechny bugy ve stavu FIXED s targetem rovným dodávané verzi. Nikdo netestuje chyby, které sám opravoval. –Po otestování -> stav VERIFIED (nebo REOPEN) –Zákazník po dodávce přetestovává -> CLOSED

Klasické problémy o Neznalost kontextu zákazníka. –Například máte přetestovat opravu následující chyby: „V pojištění STR se u Doložky 22 špatně aplikuje pro-rata.“ –Může pomoci Bugzilla (nebo kolegové). o Chyba objevená při testování (nebo hůř – v produkci) se nedá v testovacím prostředí reprodukovat. –Syndrom WORKSFORME –Tady je každá rada drahá :-)

Unit testy o Testují „jednotku“ (unit) nezávisle na ostatních –unit většinou = třída. o Mockování ostatních (asociovaných) tříd. –Simulujeme jejich chování => testování třídy nezávisle na ostatních –Typicky – připojení k databázi Vede k výraznému zrychlení –Nástroje: jMock, EasyMock

Unit testy (2) o Specifická forma dokumentace kódu –Z testu lze vyčíst, jak daný kód použít o Dá se na ně dívat jako na rozšíření kompilátoru –Kontrola sémantiky o Frameworky –JUnit, NUnit, … –TestNG (i integrační testy)

Doporučení pro psaní testů o Testy psát co nejkratší – testující jen jednu funkčnost. o Minimálně dva testy na úspěch (různé parametry) o Testovat mezní hodnoty a nepřípustné hodnoty parametrů. –Hlavně pozor na null / 0 o Testy jsou také kód => dodržovat štábní kulturu. –Dokumentace, komentáře, pojmenování proměnných, …

Odbočka – Co musí umět framework o Spouštět testy nezávisle na sobě –Pokud vývojář závislost explicitně nenadefinuje –Zpravidla realizováno pomoci setUp a tearDown metody o Podporovat ověřování předpokladů –Například – testovaná metoda nevrátila null. –Zpravidla se realizuje pomocí metod assertXXX o Přehledně vývojáři zobrazit výsledky testů –Musí být možné rychle určit příčinu selhání

Odbočka – Co by měl umět framework o Spustit jen některé testy –Například jen ty, co selhaly –Spuštění testů musí být snadné a rychlé Jinak to vývojáři nebudou dělat o Spouštět testy ve více vláknech –Testování bezbečnosti vůči přístupu z více vláken o Timeouty testů – kvůli zacyklení či deadlockům o Měl by být snadno integrovatelný s nástroji pro automatický build (CruiseControl, Hudson …)

Automatické testování o Čím jsou testy podrobnější, tím nákladnější je jejich údržba. –Tím větší tlak na „dočasné“ vyřazení rozbitých testů o Čím déle testy trvají, tím menší je ochota vývojářů je pouštět. –Dá se řešit nočními buildy –Vysoká granularita spouštění testů o Někdy je integrace testů do projektu netriviální. –Testování J2EE aplikací v kontejneru.

Automatické testy o Automatické testy většinou zlepšují design aplikace. –Vývojáři jsou nuceni programovat s ohledem na snadnou testovatelnost – loose coupling. o U složitějších aplikací usnadňují ladění –Nemusí se debuggovat přes UI.

Klasické chyby o Odkládání tvorby testů „až bude čas“ o Vývoj testů ad-hoc – bez jakéhokoliv plánu, rozmyšlení, architektury … –Někdy se vyplatí pojmout tvorbu testů jako samostatný projekt. o Duplikace kódu, málo komentářů či absence dokumentace. o Testy jsou, ale nikdo je nepouští. Testy se pouští, ale nikdo nekontroluje výsledky.

Testování testů o Jak poznat, že testy k něčemu jsou? –Teoretici – i testy se musí testovat. Do kódu záměrně zaneseme chyby a zkoumáme, zda je testy odhalí Používá se jen u mission-critical systémů –Praxe – měření pokrytí kódu Pokrytí metod Pokrytí řádků kódu Pokrytí větví.

Pokrytí kódu - Cobertura o Poskytuje vývojáři informace o: –Pokrytí balíčků –Pokrytí tříd –Pokrytí metod –Pokrytí větví o Reporty lze procházet až na úroveň zdrojových kódů –Přehledně znázorněno, kolikrát byl daný řádek navštíven.

Cobertura - nevýhody o Svádí k „uctívání“ pokrytí –100 % pokrytí kódu neznamená, že je program bez chyb –Někteří projektoví vedoucí mají tendence stanovovat minimální procento pokrytí kódu. => Easy testy (testují se gettery, settery …) o Někdy obtížně integrovatelná s projektem –Například pokud testy běží v kontejneru o Pouze pro automatické testy

Cobertura - ukázka Screenshoty pochází z ukázkového reportu na adrese

Antipatterns

Happy path test public class Factorial { public int eval(int cislo) { return (cislo != 1) ? cislo * eval(cislo - 1) : 1; } public void testEval() { Factorial fact = new Factorial(); int vysledek = fact.eval(3); assertEquals(6, vysledek); }

Kde je problém? o Test projde i pro následující implementaci: public class Factorial { public int eval(int cislo) { return (cislo != 1) ? cislo + eval(cislo - 1) : 1; } o Ale i předchozí implementace je chybná –eval(0); –Nutno testovat mezní hodnoty

Easy tests o Testují se snadno testovatelné podpůrné metody, ale ne hlavní logika. –Gettery, settery, toString o Problém hlavně u nezkušených programátorů –Časté rovněž při direktivním stanovení určitého pokrytí kódu testy.

Spoléhání na konkrétní implementaci o Někdy je to vhodné, ale zpravidla je lepší se tomu vyhnout. public class Data { private Collection prvky = new ArrayList(); public void pridej(Object prvek){ prvky.add(prvek); } public Collection getPrvky(){ return prvky;} } public void testPridej () { Data data = new Data(); data.pridej(0);// spolehame na autoboxing assertEquals(0,((ArrayList) data.getPrvky()).get(0)); }

Komplexní testy o Testy by měly být co nejkratší a vždy testovat jen jednu věc o Unit testy slouží i jako dokumentace – jak daný kód použít o Dlouhé a komplexní testy jsou nepřehledné a hůře se udržují –Pokud je rozdělíme do více testů => můžeme tyto testy spouštět samostatně. o Obtížnější analýza výsledků, pokud některé testy testují více funkcí najednou.

Polykání výjimek … try { zavolejTestovanouMetodu(parametry); fail(„Očekávána výjimka“); } catch (Throwable e) { // OK } … o Problém – projde, i když metoda vyhodí například OutOfMemoryError. –Pokrývá více výjimek než jen tu testovanou

Kde je chyba? /** Testuje, zda metoda dokaze pracovat s null parametry. Pokud ne, test zkonci s chybou. */ public void testScitaniSmoke { // null na vstupu nesmi zpusobit NPE secti(null,null); secti(null,0); secti(0, null); }

Cvičení - TC o Specifkace říká: 2.1 Autentizace Systém bude podporovat dva druhy autentizace – doménovou a autentizaci pomocí přihlašovacího jména a hesla Doménová autentizace Pokud je uživatel v doméně určené konfigurací systému, je autentizován automaticky bez nutnosti zadávat přihlašovací jméno nebo heslo Formulářová autentizace Anonymní uživatel na kterého se nevztahuje bod je při přístupu na libovolnou stránku vyžadující neanonymní úroveň oprávnění přesměrován na Login stránku. Zde musí zadat svoje přihlašovací jméno a heslo. Přihlašovací údaje se poté ověří proti databázi a pokud je autentizace úspěšná, je uživatel přesměrován na původně požadovanou stránku. Při neúspěšné autentizaci se zobrazí chybová hláška.

Cvičení – plán testů o Napište plán testů pro projekt Profik: –Rozsah projektu – 200 MD, 4 měsíce o Nejprve vytvořte osnovu plánu –Pak si ukážeme šablonu o Poté vyplňte konkrétní údaje (ty nejzásadnější) –Není třeba zabývat se TCs

Otázky ???