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

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

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.

Správa projektů a testování

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

Tvorba informačních systémů

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

Architektury informačních systémů

Architektury informačních systémů

Tvorba informačních systémů

Softwarové komponenty a Internet

Testování software. Jaroslav Žáček

Tvorba informačních systémů

Systémová administrace portálu Liferay

Tvorba 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 podnikových aplikací v jazyce JAVA. Josef Pavlíček KII PEF CZU

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

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

Tvorba informačních systémů

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

(Enterprise) JavaBeans. Lekce 7

Specifikace. Odevzdání do

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

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

1 Webový server, instalace PHP a MySQL 13

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

Platformy / technologie. Jaroslav Žáček

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

PLATFORMY / TECHNOLOGIE JAROSLAV ŽÁČEK

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

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

1. Webový server, instalace PHP a MySQL 13

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

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

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

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

Spring framework 2.0. Roman Pichlík CZJUG

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

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

MBI - technologická realizace modelu

Tvorba informačních systémů

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

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

Databázové a informační systémy

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ů

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

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

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

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

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

Tvorba informačních systémů

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

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

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

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

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

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

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

Návrhové vzory pro J2EE

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

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

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

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

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

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

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

Formy komunikace s knihovnami

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

Komponenty v.net. Obsah přednášky

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

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

Skriptovací jazyky. Obsah

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

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

Projekt JetConf REST API pro vzdálenou správu

UJO Framework. revoluční architektura beans. verze

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.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Základy programování Úvodní informace. doc. RNDr. Petr Šaloun, Ph.D. VŠB-TUO, FEI (přednáška připravena z podkladů Ing. Michala Radeckého)

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

Úvod do programovacích jazyků (Java)

VÝVOJ INTERNETOVÝCH APLIKACÍ - VIA

Automatizace testování

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

Transkript:

Obsah přednášky Vývoj aplikací řízený testy Miroslav Beneš Principy extrémního programování (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ů 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í 3 Testování aplikací 4 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 1

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 ) 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í 5 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 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í 7 Testování aplikací 8 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 2

Ří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 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í 9 Testování aplikací 10 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 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í 11 Testování aplikací 12 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 3

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 HttpUnit http://www.httpunit.org/ Testování webových aplikací Testy probíhají na straně klienta Simulace webového prohlížeče 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í 13 Testování aplikací 14 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 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í 15 Testování aplikací 16 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 4

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 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í 17 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ů,... JUnit import junit.framework.testcase; public class TestXYZ extends TestCase { void setup() { inicializace void teardown() { finalizace void testx() { krok testu Testování aplikací 19 Testování aplikací 20 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 5

JUnit assertequals(, x, y) assertfalse(, podmínka) assertnotnull(, x) assertnotsame(, x, y) assertnull(, x) assertsame(, x, y) asserttrue(, podmínka) fail( ) 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í 21 Testování aplikací 22 Spuštění java junit.textui.testrunner TestPerson java junit.swingui.testrunner TestPerson 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í 23 Testování aplikací 24 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 6

[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í 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í 25 Testování aplikací 26 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); 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í 27 Testování aplikací 28 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 7

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í 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í 29 Testování aplikací 30 public static Test suite() { Test testcase = new TestSearchModel( testsearch ); TestSuite suite = new TestSuite(); suite.addtest( new TimedTest(testCase, 2000, false) ); return suite; 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í 31 Testování aplikací 32 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 8

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 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í 33 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 /** * 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í 35 Testování aplikací 36 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 9

<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> 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í 37 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 (c) Miroslav Beneš, Katedra informatiky FEI VŠB-TU Ostrava 10