Vývoj aplikací řízený testy. Miroslav Beneš

Podobné dokumenty
Obsah přednášky. Vývoj aplikací řízený testy. Extrémní programování (XP) Požadavky na nástroje pro XP. Testování aplikací

Testování, ladění a dokumentace programů

Základy programovaní 3 - Java. Unit testy. Petr Krajča. Katedra informatiky Univerzita Palackého v Olomouci. 26.,27.

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Správa projektů a testování

Semináˇr Java X J2EE Semináˇr Java X p.1/23

Technologie Java Enterprise Edition. Přemek Brada, KIV ZČU

JAVA Unit testing Java, zimní semestr

Testování software. Jaroslav Žáček

Tvorba informačních systémů

Tvorba informačních systémů

Systémová administrace portálu Liferay

Architektury informačních systémů

Architektury informačních systémů

Semin aˇr Java N astroje Radek Koˇc ı Fakulta informaˇcn ıch technologi ı VUT Bˇrezen 2012 Radek Koˇc ı Semin aˇr Java n astroje 1/ 42

Tvorba informačních systémů

Tvorba podnikových aplikací v jazyce JAVA. Josef Pavlíček KII PEF CZU

Úvod. Petr Aubrecht (CA) Martin Ptáček (Wincor Nixdorf) Je 10 typů lidí: ti, kteří znají binární kód, a ti, kteří ne.

PA165: Úvod do Java EE. Petr Adámek

Softwarové komponenty a Internet

Testování SOA systémů v Oracle SOA Suite

Úvod do problematiky vývoje Vývoj informačních systémů

Testování aplikací do náročného provozu

Tvorba informačních systémů

(Enterprise) JavaBeans. Lekce 7

Specifikace. Odevzdání do

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

1 Webový server, instalace PHP a MySQL 13

Tvorba informačních systémů

Jak testovat software v praxi. aneb šetříme svůj vlastní čas

Spring framework 2.0. Roman Pichlík CZJUG

Platformy / technologie. Jaroslav Žáček

Nástroje a frameworky pro automatizovaný vývoj. Jaroslav Žáček jaroslav.zacek@osu.cz

PLATFORMY / TECHNOLOGIE JAROSLAV ŽÁČEK

1. Webový server, instalace PHP a MySQL 13

Agenda. Opakování Manuální testování Automatické testování Antipatterns Testování testů Pokud zbyde čas. Užitečné nástroje

Java a XML. 10/26/09 1/7 Java a XML

Agenda. Opakování Manuální testování Automatické testování Antipatterns Testování testů Pokud zbyde čas. Užitečné nástroje

Vývoj řízený testy Test Driven Development

Testování software. Jaroslav Žáček

Google Web Toolkit. Martin Šurkovský, SUR března Katedra informatiky

Formy komunikace s knihovnami

Obsah. Předmluva Začínáme: překlad, spuštění a ladění 27

Karel Bittner HUMUSOFT s.r.o. HUMUSOFT s.r.o.

Testování Java EE aplikací Petr Adámek

9. Ladění a testování programů. booleovský výraz

TÉMATICKÝ OKRUH Softwarové inženýrství

Agenda. Smysl teoretických cvičení Klasifikace Obecná pravidla Bugzilla Klasické problémy Poznámky k jednotlivým pojmům Antipatterns Testování testů

Testovací metoda. Testovací metoda. public class SimpleTest {

GTL GENERATOR NÁSTROJ PRO GENEROVÁNÍ OBJEKTŮ OBJEKTY PRO INFORMATICA POWERCENTER. váš partner na cestě od dat k informacím

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Elektronická podpora výuky předmětu Komprese dat

UJO Framework. revoluční architektura beans. verze

MBI - technologická realizace modelu

Tvorba informačních systémů na platformě J2EE Petr Hetmánek Masarykova Univerzita, Fakulta Informatiky, Botanická 68a, Brno

Ant aneb Ferda Mravenec, práce všeho druhu

Metodiky pro automatické testování webové aplikace. Ondřej Melkes, Martin Komenda

[ASP].NET Core Demystified. Miroslav Holec. Konzultant a lektor [ASP].NET Core.

Server-side technologie pro webové aplikace

Využití chemie v procesu testování webových aplikací vytvořených pomocí technologií PHP a Java

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

RadioBase 3 Databázový subsystém pro správu dat vysílačů plošného pokrytí

2012 ET NETERA a.s. Wicket přehled technologie Martin Strejc

Část IV - Bezpečnost 21. Kapitola 19 Bezpečnostní model ASP.NET 23

Java testovací třída

Analýza a Návrh. Analýza

Servlety a JSP. Petr Adámek, petr.adamek@ibacz.eu

ADMINISTRACE POČÍTAČOVÝCH SÍTÍ. OPC Server

Převod 4GL aplikací do webového prostředí. Ing. Jan Musil, IBM ČR Community of Practice for

Správa verzí souborů na cvičení

Úvodem 9. Zpětná vazba od čtenářů 10 Zdrojové kódy ke knize 10 Errata 10. Než začneme 11

Jalapeño: pekelně ostrá Java persistence v Caché. Daniel Kutáč Senior Sales Engineer

1. Úvod do Ajaxu 11. Jak Ajax funguje? 13

Základy analýzy. autor. Jan Novotný února 2007

Vytváření a použití knihoven tříd

Testovací protokol USB Token Cryptomate

Quality assurance a testovací nástroje v praxi. Bohumír Zoubek bohumir.zoubek@profinit.eu

Oracle XML DB. Tomáš Nykodým

Aplikace s grafickým uživatelským rozhraním

Maven. Aplikační programování v Javě (BI-APJ) - 2 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Zajištění kvality programového vybavení - testování

Joelův test. 12 kroků k lepšímu programování. Jaroslav Šnajdr

Úvod. Únor Fakulta informačních technologií VUT. Radek Kočí Seminář Java Úvod 1/ 23

WPA - Konfigurace Java EE aplikace (Maven, struktura war arch. kontejnerem Tomcat 8

Nástroje pro průběžnou integraci a testování

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

Jádrem systému je modul GSFrameWork, který je poskytovatelem zejména těchto služeb:

Projekt JetConf REST API pro vzdálenou správu

8 Třídy, objekty, metody, předávání argumentů metod

7 Jazyk UML (Unified Modeling Language)

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

1. Distribuce Javy. 2. Vlastnosti J2EE aplikace. 3. Fyzická architektura J2EE aplikace. Distribuce Javy se liší podle jejího zamýšleného použití:

Automatizace testování

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Obsah. Úvod 11 O autorovi 11 Koncept knihy 11 Zpětná vazba od čtenářů 12 Zdrojové kódy ke knize 12 Errata 12 ČÁST I VÝVOJ MOBILNÍ APLIKACE

1 Nástroje pro správu verzí. 1.1 Pojmy:

Tvorba informačních systémů

X33EJA Enterprise Java

Vývoj informačních systémů. Přehled témat a úkolů

Transkript:

Vývoj aplikací řízený testy Miroslav Beneš

Obsah přednášky Principy extrémního programování (XP) Open Source nástroje pro XP Testy v prostředí Java JUnit Testy v prostředí.net NUnit Testování webových aplikací Mock Objects Testování výkonnosti aplikací Generování souborů XDoclet Další nástroje Testování aplikací 2

Extrémní programování (XP) Evoluční proces vytváření návrhu Vývoj aplikací v malých přírůstcích Úzká spolupráce programátorů (dvojice) Vývoj je řízen pomocí testů Nejdříve testujeme, pak píšeme zdrojový text Častá integrace Integrace (a integrační testy) následuje hned po vývoji Využití automatizačních nástrojů Testování aplikací 3

Požadavky na nástroje pro XP Automatizace Časté opakování základních kroků: překlad, instalace, testování One-button testing provedení celého procesu jedním příkazem, např. ant junit Využití generátorů zdrojového kódu pro opakující se vzory Hlavní cíl: snížit množství chyb zaviněných člověkem, minimalizovat rutinní činnosti Testování aplikací 4

Požadavky na nástroje pro XP Regresní testování Hlavní princip XP Každá nová vlastnost se vyvíjí zároveň s testem (nejprve test) Při objevení chyby vytvoříme test, na němž se chyba projevuje Psaní, spouštění a vyhodnocování testů musí být jednoduché (jinak to programátoři nebudou dělat ) Testování aplikací 5

Požadavky na nástroje pro XP Konzistence mezi vývojáři Časté změny pracovního prostředí (počítače, týmy), zásahy do celého vytvářeného systému Nutné identické prostředí pro všechny členy týmu (např. stejné akce spouštěné stejným způsobem) Podpora týmové práce konzistentní konfigurace projektů Stejné verze vývojových nástrojů, komponent a utilit Testování aplikací 6

Požadavky na nástroje pro XP Refaktorizace Vylepšování návrhu programů bez porušení jejich funkčnosti Důraz na neustálou refaktorizaci udržení co nejjednoduššího kódu bez velkých skoků Podpora vývojového prostředí Přejmenování Přesun ve struktuře (např. package) Vytvoření metody z úseku programu Testování aplikací 7

Požadavky na nástroje pro XP Spojitá integrace Časté vytváření kompletní aplikace (i několikrát denně) Umožňuje nabídnout zákazníkovi něco co funguje již během vývoje Snaha o automatizaci celého procesu až po vytvoření obrazu instalačního CD Nutnost malých kroků omezení šíření změn do velké části projektu Testování aplikací 8

Open Source nástroje pro XP Řízení verzí (CVS) http://www.cvshome.org Repository originální kopie všech souborů Programátoři pracují na svých kopiích modifikované soubory posílají zpět (commit) aktualizují kopie modifikované ostatními programátory řeší konflikty slévání (merge) Požadavky: Práce v malých krocích (méně konfliktů) Častá synchronizace s repository Udržování repository v provozuschopném stavu Testování aplikací 9

Open Source nástroje pro XP Ant http://ant.apache.org/ systém pro automatizaci opakovaných operací při vytváření aplikace XML soubor - build.xml Zajišťuje jednotně konfigurované prostředí přístup ke zdrojovému kódu, nastavení classpath, komponent a knihoven, instalace aplikace, Typické cíle: prepare, compile, clean, junit, Testování aplikací 10

Open Source nástroje pro XP JUnit http://www.junit.org/ Framework pro testování na úrovni programových jednotek tříd, metod Unit test testuje jednu funkční vlastnost aplikace Akceptační test testuje aplikaci jako celek, je řzeno zákazníkem Automatizované spouštění a vyhodnocení sady testů v grafickém nebo textovém prostředí Rozšiřitelné prostředí, na kterém jsou založeny další testovací nástroje Spolupráce CVS / Ant / JUnit Testování aplikací 11

Doporučený postup 1. Aktualizace zdrojových textů z CVS 2. Vytvoření testů pro JUnit (nová vlastnost nebo pokrytí objevené chyby) 3. Překlad zdrojových textů a spuštění testů (ant junit) 4. Při chybě oprava zdrojového textu 5. Opakování kroků 2-5 až do úspěšného běhu všech testů 6. Další aktualizace zdrojových textů z CVS zachycení změn provedených ostatními 7. Spuštění ant clean junit 8. Při úspěšném provedení všech testů vložení změn do CVS, jinak návrat zpět na 4 Testování aplikací 12

Open Source nástroje pro XP DbUnit http://www.dbunit.org/ Rozšíření JUnit na testování databázových aplikací Uvedení databáze do definovaného počátečního stavu před každým testem Testovací data např. XML Testování aplikací 13

Open Source nástroje pro XP HttpUnit Testování webových aplikací Testy probíhají na straně klienta Simulace webového prohlížeče http://www.httpunit.org/ Testování funkčnosti (ne programových jednotek) Cactus http://jakarta.apache.org/cactus/ Mnohem komplikovanější Testy servletů, JSP, filtrů Běží současně na straně serveru i klienta Testování aplikací 14

Open Source nástroje pro XP JUnitPerf Rozšíření JUnit pro testování výkonnosti aplikací Ověřuje, zda konkrétní test proběhne v zadané době Nevyhledá slabá místa - používá se typicky ve spolupráci s profilery Testování aplikací 15

Open Source nástroje pro XP StrutsTestCase http://strutstestcase.sourceforge.net/ Rozšíření třídy TestCase pro testování aplikací vytvořených pomocí Struts Nepotřebuje servletový kontejner mock objects ( falešné objekty ) in-server ( Cactus ) testing Podpora speciálních testů mapování, form beans, forwards Testování aplikací 16

Server pro budování aplikací Sdílený server Vytvoření aplikace z čistého stavu Získá čerstvou kopii zdrojových textů Vytvoří aplikaci Spustí testy Oznámí výsledky testování (např. e-mail) autorům provedených změn Testování aplikací 17

Server pro budování aplikací Automatické spouštění v době nečinnosti uživatelů CruiseControl http://cruisecontrol.sourceforge.net Zajišťuje provoz serveru Linux / Windows Testování aplikací 18

Testy v prostředí Java - JUnit programátorské rozhraní pro tvorbu testů nástroje pro automatické provádění testů grafické rozhraní příkazový řádek, akce pro Ant využití reflexe pro vyhledání testů uvnitř tříd rozšíření pro testování webových aplikací, servletů,... Testování aplikací 19

JUnit import junit.framework.testcase; public class TestXYZ extends TestCase { } void setup() { } inicializace void teardown() { } finalizace void testx() { } krok testu Testování aplikací 20

JUnit assertequals(, x, y) assertfalse(, podmínka) assertnotnull(, x) assertnotsame(, x, y) assertnull(, x) assertsame(, x, y) asserttrue(, podmínka) fail( ) Testování aplikací 21

Příklad import junit.framework.testcase; public class TestPerson extends TestCase { public void testgetfullname() { Person p = new Person( Bill, Gates ); assertequals( Bill Gates, p.getfullname()); } } public void testnulls() { Person p = new Person(null, Gates ); assertequals(? Gates, p.getfullname()); } Testování aplikací 22

Příklad Spuštění java junit.textui.testrunner TestPerson java junit.swingui.testrunner TestPerson Testování aplikací 23

Testy v prostředí.net - NUnit http://www.nunit.org/ Implementace JUnit pro.net Využívá principů atributově orientovaného programování [TestFixture] [Test] [SetUp] [TearDown] [TestFixtureSetUp] [TestFixtureTearDown] Testování aplikací 24

Příklad [TestFixture] public class CountryBoxTest { [Test] public void CheckContent() { CountryLib.CountryList list = new CountryLib.CountryList(); } } Assert.AreEqual("UK", list.getcountry(1)); Assert.AreEqual("US", list.getcountry(2)); Assert.AreEqual("CZ", list.getcountry(3)); Assert.AreEqual(null, list.getcountry(4)); Testování aplikací 25

Testování webových aplikací Potřebujeme simulovat činnost webového prohlížeče Analýza HTML Odesílání formulářů Sledování hyperlinků Nastavování cookies HttpUnit Poskytuje rozhraní pro interakci s HTTP servery Metody testxxx() využívají HttpUnit API Testování aplikací 26

Příklad import com.meterware.httpunit.*; import junit.framework.testcase; public class TestApp extends TestCase { public void testindexpage() { WebConversation web = new WebConversation(); WebResponse resp = web.getresponse( http://localhost:8080/app ); String text = response.gettext(); asserttrue(text.indexof( Hello ) > -1); } } Testování aplikací 27

Mock Objects Jak řešit složité závislosti mezi různými částmi aplikace? Nahradíme některé objekty falešnými Jednoduchá implementace Poskytují dobře definovaná data Možnost testovat, zda se správně používají (např. zda se inicializace volá právě jednou) Měly by se samy validovat Testování aplikací 28

Mock Objects http://www.mockobjects.com Sada hotových objektů nahrazujících často používané objekty Např. JDBC Connection, ResultSet http://www.mockmaker.org/ Generátor mock objektů pro zadané rozhraní Testování aplikací 29

Testování výkonnosti aplikací Obvykle se používají nástroje, jejichž výsledky je třeba vyhodnotit ručně JUnitPerf http://www.clarkware.com/software/junitperf.html TimedTest kontroluje dobu běhu testu LoadTest testuje chování při určité zátěži (např. počet současně pracujících uživatelů) Využívá návrhového vzoru Dekorátor Testování aplikací 30

Příklad public static Test suite() { Test testcase = new TestSearchModel( testsearch ); } TestSuite suite = new TestSuite(); suite.addtest( new TimedTest(testCase, 2000, false) ); return suite; Testování aplikací 31

Příklad public static Test suite() { Test testcase = new TestSearchModel( testsearch ); Timer timer = new RandomTimer(1000, 500); } TestSuite suite = new TestSuite(); suite.addtest( new LoadTest(testCase, 100, 10, timer) ); // 100 uživatelů, každý 10 krát return suite; Testování aplikací 32

Generování souborů - XDoclet http://xdoclet.sourceforge.net Rozšíření Javadoc Doclet API pro generování souborů na základě Javadoc značek @ a šablon (.xdt) Předdefinované šablony JavaBean, EJB Struts Hibernate Testování aplikací 33

Důvody pro použití XDoclet Zajištění konzistence Konfigurační soubory Struktura dat např. databáze / aplikační objekty Zjednodušení údržby Odstranění redundantní práce Rozhraní a implementace Abstrakce Atributově orientované programování (i v.net) Testování aplikací 34

XDoclet Systém předdefinovaných šablon Podpora aplikací v prostředí J2EE Podpora hlavních serverů JBoss, WebSphere, Resin, JonAS, SunONE, Spolupráce s programem Ant Možnost rozšiřování Uživatelem definované šablony Testování aplikací 35

Příklad /** * Přidělení externích oponentů projektům. * * @struts.action * path="/pridelenioponentuext" * name="seznamprojektuform" * scope="request" * validate="false" * @struts.action-forward * name="success" * path="/web-inf/jsp/ok/prideloponentyext.jsp" * * $Revision: 1.6 $ $Date: 2004/05/18 14:15:36 $ */ Testování aplikací 36

Příklad <target name="xdoclet.web"> <webdoclet destdir="${web.dir}/web-inf" mergedir="${xdoclet.dir}"> <fileset dir="${src.dir}"> <include name="**/*action.java"/> <include name="**/*form.java"/> <include name="**/*tag.java"/> <include name="**/*filter.java"/> <include name="**/*servlet.java"/> </fileset> <deploymentdescriptor servletspec="2.3"> <taglib uri="page" location="/web-inf/page.tld"/> </deploymentdescriptor> <strutsconfigxml version="1.1"/> <strutsvalidationxml/> </webdoclet> </target> Testování aplikací 37

Další nástroje XMLUnit http://xmlunit.sourceforge.net Testování XML aplikací Validace, XSLT transformace, vyhodnocení XPath výrazů a testování výsledku, HTML ServletTestCase, J2EEUnit Testování J2EE aplikací na straně serveru JFCUnit, Abbot, Pounder, Jemmy Testování Swing GUI Testování aplikací 38

Literatura Kent Beck: Extrémní programování. Grada Publishing, 2002, ISBN 80-247-0300-9 Eric M. Burke, Brian M. Coyner: Java Extreme Programming Cookbook. O Reilly, 2003, ISBN 0-596-00387-0 Testování aplikací 39