Testowanie oprogramowania cz. 1



Podobne dokumenty
Testowanie oprogramowania. Marian Jureczko

ZAUTOMATYZOWANE TESTY AKCEPTACYJNE DLA APLIKACJI INTERNETOWYCH W PROGRAMOWANIU STEROWANYM TESTAMI. Marian JURECZKO 1,2, Michał MŁYNARSKI 34

Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Wprowadzenie do Behaviordriven

Testowanie aplikacji mobilnych na platformie Android - architektura, wzorce, praktyki i narzędzia

Testowanie oprogramowania. Piotr Ciskowski

Całościowe podejście do testowania automatycznego dla programistów. /C#/PHP (TDD, BDD, Spec. by Example, wzorce, narzędzia)

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

REFERAT PRACY DYPLOMOWEJ

Maciej Oleksy Zenon Matuszyk

Programowanie obiektowe

JUnit TESTY JEDNOSTKOWE. Waldemar Korłub. Platformy Technologiczne KASK ETI Politechnika Gdańska

Testowanie według modelu (MBT) Stowarzyszenie Inżynierii Wymagań wymagania.org.pl

Wstęp do testowania : Szymon Ramczykowski

Laboratorium z przedmiotu: Inżynieria Oprogramowania INP002017_ Laboratorium 11 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Automatyczne testowanie aplikacji Android

Acceptance Test Driven Development wspierane przez narzędzie ROBOT Framework. Edyta Tomalik Grzegorz Ziemiecki

METODY PROGRAMOWANIA

Zwinna współpraca programistów i testerów z wykorzystaniem BDD i. by Example (JBehave/Spock/SpecFlow)

Weryfikacja i walidacja. Metody testowania systemów informatycznych

Załącznik nr 19 do Umowy nr... z dnia... Plan Testów Systemu. Projekt ZEFIR 2

Testowanie oprogramowania

TESTOWANIE OPROGRAMOWANIA

Automatyzacja Testowania w WEB 2.0

PRZEWODNIK PO PRZEDMIOCIE

TESTOWANIE APLIKACJI KORPORACYJNYCH

Porównanie metod i technik testowania oprogramowania. Damian Ryś Maja Wojnarowska

Testowanie I. Celem zajęć jest zapoznanie studentów z podstawami testowania ze szczególnym uwzględnieniem testowania jednostkowego.

Zawód tester, czyli na czym polega testowanie. Katarzyna Łabinska Justyna Sacha - Gawlik

Testy poziom po poziomie

Multimedia JAVA. Historia

Automaty do zadań specjalnych. Olga Maciaszek-Sharma, Artur Kotow Wersja 1,

Usługa: Testowanie wydajności oprogramowania

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Testy automatyczne. Korzystające z junit

Programowanie zespołowe

Spring Framework - wprowadzenie i zagadnienia zaawansowane

1 Wprowadzenie do J2EE

Inżynieria Programowania - Testowanie oprogramowania cz.2

szkolenia pod drzewem Wybrane Techniki XP bnd 2008 Tomasz Włodarek. Materiał udostępniany na podstawie licencji Creative Commons (by-nc-nd) 1.00.

Aplikacje RMI Lab4

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Testowanie aplikacji JAVA Laboratorium 8 (Tabele w scenariuszach JBehave. Projekt z podstaw BDD oraz atrap.)

Programowanie kontraktowe w Javie

Metodyka Sure Step. Agenda:

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

INŻYNIERIA OROGRAMOWANIA TESTOWANIE JEDNOSTKOWE 2015/2016

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Forum Client - Spring in Swing

Iteracyjno-rozwojowy proces tworzenia oprogramowania Wykład 3 część 1

Podstawy programowania III WYKŁAD 4

Projektowanie oprogramowania. Termin zajęć: poniedziałek, a podstawie materiału ze strony.

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

Programowanie poprzez testy z wykorzystaniem JUnit

Programowanie obiektowe

Spis treúci. 1. Wprowadzenie... 13

Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania

Dlaczego testowanie jest ważne?

Testowanie aplikacji. Kurs języka Ruby

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Usługa: Audyt kodu źródłowego

Wywoływanie metod zdalnych

Programowanie obiektowe

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Tom 6 Opis oprogramowania

Programowanie obiektowe

Programowanie obiektowe

Tester oprogramowania 2014/15 Tematy prac dyplomowych

Wykład 1 Inżynieria Oprogramowania

Jakość w procesie wytwarzania oprogramowania

Automatyzacja narzędziami open source nie musi być trudna

Platformy Technologiczne

Nazwa Projektu. Plan testów. Wersja N.NN

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Testowanie w procesie Scrum

Języki i metody programowania Java. Wykład 2 (część 2)

Testowanie aplikacji Java Servlets

Tworzenie przypadków testowych

Testowanie. Ryszard Beczek & Piotr Miłkowski 1 04/11/07

Szablon Planu Testów Akceptacyjnych

Plan Testów Systemu SOS

Programowanie w Ruby

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Laboratorium 8 Diagramy aktywności

Przegląd narzędzi do automatycznego testowania aplikacji internetowych. Jan Płoszczyca SKISR 2006

Wykład 7. Projektowanie kodu oprogramowania

Aplikacje RMI

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 7

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Budowa aplikacji ASP.NET z wykorzystaniem wzorca MVC

Zarządzanie testowaniem wspierane narzędziem HP Quality Center

AUREA BPM HP Software. TECNA Sp. z o.o. Strona 1 z 7

1 Atrybuty i metody klasowe

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Testowanie i walidacja oprogramowania

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Transkrypt:

Testowanie oprogramowania cz. 1 Marian Jureczko

Agenda Rodzaje testów Techniki projektowania testów FitNesse Selenium

Literatura K. Beck: Test-Driven Development by example. J. Bergin: XP Testing a GUI with FIT, Fitnesse, and Abbot. A. Hunt: Pragmatic unit testing in Java with JUnit. L. Koskela: Test Driven: Practical TDD and Acceptance TDD for Java Developers. R. Mugridge: Fit for developing software: framework for integrated tests. G. J. Myers: Art of software testing. A. Spillner, T. Linz, H. Schaefer: Software Testing Foundations

Miejsce testów w procesie wytwarzania oprogramowania Wymagania Testy akceptacyjne Projekt funkcjonalny systemu Testy systemowe Projekt techniczny systemu Testy integracyjne Specyfikacja komponentu Testy jednostkowe Programowanie

Testy jednostkowe http://pl.wikipedia.org Test jednostkowy (ang. unit test, test modułowy) to w programowaniu metoda testowania tworzonego oprogramowania poprzez wykonywanie testów weryfikujących poprawność działania pojedynczych elementów (jednostek) programu - np. metod lub obiektów w programowaniu obiektowym lub procedur w programowaniu proceduralnym. Testowany fragment programu poddawany jest testowi, który wykonuje go i porównuje wynik (np. zwrócone wartości, stan obiektu, wyrzucone wyjątki) z oczekiwanymi wynikami - tak pozytywnymi, jak i negatywnymi (niepowodzenie działania kodu w określonych sytuacjach również może podlegać testowaniu).

Testy integracyjne Testy integracyjne to testy sprawdzające, że przetestowane w ramach testów jednostkowych komponenty (klasy, metody) dobrze ze sobą współpracują. Celem tych testów jest zatem wykrycie nieprawidłowości w interakcjach pomiędzy komponentami: niekompatybilne interfejsy komponentów, komponent wysyła dane o niepoprawnej syntaktyce, komponenty na różny sposób interpretują dane, które między sobą przesyłają, niespełnione ograniczenia czasowe nałożone na komunikację pomiędzy komponentami.

Testy systemowe Testy systemowe są wykonywane po zakończeniu integracji. Podczas ich przeprowadzania testowany system powinien być uruchomiony w środowisku możliwie bliskim docelowemu. Ich celem jest skonfrontowanie działania systemu ze stawianymi przed nim wymaganiami funkcjonalnymi.

Testy akceptacyjne Testy akceptacyjne skoncentrowane są na punkcie widzenia klienta. Ich celem jest podjęcie decyzji, czy system (lub jego poszczególne funkcjonalności) nadają się do wdrożenia. W podejściu formalnym w ramach tych testów weryfikuje się, czy wypełniony został kontrakt. W testach akceptacyjnych konieczne jest zaangażowanie klienta zamawiającego system. W metodykach zwinnych testy akceptacyjne mogą zastępować specyfikację wymagań.

Testy akceptacyjne Testy akceptacyjne, to testy funkcjonalne których celem jest wykazanie, że wyspecyfikowane wymagania zostały poprawnie zaimplementowane. W metodykach lekkich (np. XP) często stanowią integralną część specyfikacji i są automatyzowane przy pomocy jednego z wielu dostępnych narzędzi (Fitnesse, Fit, Selenium, BadBoy, Proven, Abbot, jfcunit, AutoIt). Kiedy wszystkie testy akceptacyjne przypisane do historii użytkownika (przypadku użycia) zostaną poprawnie przeprowadzone historia jest uważana za poprawnie zaimplementowaną

Testy akceptacyjne a jednostkowe Filippo Ricca: Automatic Acceptance Testing with FIT/FitNesse Testy akceptacyjne Testy jednostkowe Przygotowywane przez klienta i analityka systemowego Kiedy żaden z testów nie zawodzi przestań programować system jest gotowy (XP) Celem jest wykazanie poprawności działania wyspecyfikowanej funkcjonalności Używane do weryfikowania kompletności implementacji; jako testy integracyjne i regresyjne; do wskazywania postępu w tworzeniu aplikacji; jako część kontraktu; jako dokumentacja wysokiego poziomu Pisane przed implementacją a wykonywane po niej. Wyzwalane przez wymaganie użytkownika (przypadek użycia, historia użytkownika...) Przygotowywane przez programistów Kiedy żaden z testów nie zawodzi napisz nowy test który zawiedzie (XP, TDD) Celem jest znajdowanie błędów Używane do znajdowania błędów w modułach (klasach, funkcjach, metodach, komponentach) kodu źródłówego; jako dokumentacja niskiego poziomu Pisane i wykonywane w trakcie implementacji Wyzwalane przez potrzebę dodania nowych metod, klas..

Rodzaje testów Testy funkcjonalne Testy niefunkcjonalne Testy obciążeniowe Testy wydajnościowe Testy odpornościowe Testy użyteczności i ergonomii Testy regresyjne

Agenda Rodzaje testów Techniki projektowania testów FitNesse Selenium

Techniki projektowania testów Testy białej skrzynki Testy czarnej skrzynki

Klasy ekwiwalencji Pracownicy otrzymują dodatek świąteczny równy 20% miesięcznego dochodu jeżeli pracują w firmie dłużej niż 3 lata. Pracownicy pracujący od ponad 5 lat otrzymują 30%, a ci którzy pracują więcej niż 8 lat otrzymują 50%. Klasa ekwiwalencji 0 <= x <= 3 3 < x <= 5 5 < x <= 8 8 < x Przykładowa wartość 2 4 7 11 Spillner, Linz Schaefer: Software Testing Foundations

Klasy ekwiwalencji dla wartości niepoprawnych Pracownicy otrzymują dodatek świąteczny równy 20% miesięcznego dochodu jeżeli pracują w firmie dłużej niż 3 lata. Pracownicy pracujący od ponad 5 lat otrzymują 30%, a ci którzy pracują więcej niż 8 lat otrzymują 50%. Klasa ekwiwalencji 0 > x X > 49 Przykładowa wartość -2 77 Spillner, Linz Schaefer: Software Testing Foundations

Wartości graniczne Pracownicy otrzymują dodatek świąteczny równy 20% miesięcznego dochodu jeżeli pracują w firmie dłużej niż 3 lata. Pracownicy pracujący od ponad 5 lat otrzymują 30%, a ci którzy pracują więcej niż 8 lat otrzymują 50%. Przypadki testowe: 0 lat 1 dzień 0 lat 3 lata 3 lata + 1 dzień 5 lat 5 lat + 1 dzień 8 lat 8 lat + 1 dzień 49 lat 49 lat + 1 dzień

Przejścia między stanami Stos uruchom Pusty skasuj pop [wys.=1] push pop [wys.>1] push [wys.<max-1] Niepusty pop push [wys.=max-1] push Pełny Spillner, Linz Schaefer: Software Testing Foundations

Przejścia między stanami drzewo osiągalności Start Pusty Niepusty Usunięty Pusty Niepusty Pełny Niepusty Pełny Niepusty Spillner, Linz Schaefer: Software Testing Foundations

Tabela decyzyjna Podejmowanie pieniędzy w bankomacie Warunki: karta jest ważna, wprowadzono poprawny PIN, maksymalna liczba prób wprowadzenia numeru PIN wynosi 3, są dostępne środki na koncie i w bankomacie. Potencjalne akcje systemu: odrzuć kartę, poproś o ponowne podanie numeru PIN, połknij kartę, poproś o podanie innej kwoty, wypłać pieniądze. Spillner, Linz Schaefer: Software Testing Foundations

Tabela decyzyjna karta jest ważna wprowadzono poprawny PIN 3 niepoprawne PINy dostępne środki odrzuć kartę poproś o ponowne podanie PINu połknij kartę poproś o podanie innej kwoty wypłać pieniądze N T T T T - N N T T - N T - - - - - N T T N N N N N T N N N N N T N N N N N T N N N N N T Spillner, Linz Schaefer: Software Testing Foundations

Testowanie z wykorzystaniem przypadków użycia Każdy przypadek użycia ma określony cel, a jego wykonanie powinno doprowadzić do określonego rezultatu. Następujące elementy powinny zostać uwzględnione podczas projektowania przypadków testowych: warunki uruchomienia, wszystkie możliwe przepływy sterowania, warunki zakończenia (stan systemu po zakończeniu przypadku użycia zarówno sukcesem jak i porażką)

Pokrycie kodu testami Pokrycie instrukcji kodu źródłowego Pokrycie przepływu sterowania Pokrycie przepływu danych Mutation score

Agenda Rodzaje testów Techniki projektowania testów FitNesse Selenium

Narzędzia powiązane z FitNesse

Testy akceptacyjne z Fit(Nesse) Wykonywalne testy zapisywane w tabelach (HTML, XML) Testy z tabel łączone z testowanym systemem przy pomocy pisanych przez programistów fixtures Rozszerzalna architektura jako fixture można zaimplementować integrację z innym frameworkim Wyniki testów w czytelnej, graficznej postaci

Testy akceptacyjne z Fit(Nesse) Tabela z testami Logika biznesowa w postaci prostej tabeli (HTML; w FitNesse również XML) Ułatwiają zrozumienie wymagań klienta Mogą być tworzone przy pomocy dowolnego edytora HTML (w FitNesse również przez Wiki)

Testy akceptacyjne z Fit(Nesse) Fixture public class Move extends ColumnFixture{ public String direction; private String msg; public boolean valid(){ } return dotest(); public String message(){ } return msg; Fixture to klasa pośrednicząca pomiędzy tabelą ze scenariuszem testowym a testowanym systemem Zazwyczaj przygotowywane są przez programistów private boolean dotest(){...} }

Testy akceptacyjne z Fit(Nesse) Wyniki wykonania testów Wyniki działania systemu są porównywane z wartościami zapisanymi w scenariuszu testowym. Rozbieżności są raportowanie Raport w postaci tabeli bazującej na scenariuszu testowym Przykładowa tabela z Rick Mugridge: Fit for developing software: framework for integrated tests.

Testy akceptacyjne z Fit(Nesse) Filippo Ricca: Automatic Acceptance Testing with FIT/FitNesse Wyniki testu o o' Programis ta Fixture Test Runner,o (i,o) i Testowany system Klient / Analityk Historia użytkownika Tabela z testami i dane wejściowe o oczekiwane dane wyjściowe o uzyskane dane wyjściowe

Predefiniowane typy klas Fixture ColumnFixture każdy wiersz to osobny przypadek testowy; część kolumn dostarcza danych wejściowych, pozostałe zawierają oczekiwane wyjście testowanego programu. RowFixture dedykowany do testowania zawartości kolekcji. ActionFixture zazwyczaj jedna tabela odpowiada jednemu przypadkowi testowemu; pozwala sprawdzić czy sekwencja akcji (proces biznesowy) wywołuje oczekiwany efekt. Summary Fixture, Html Fixture, Table Fixture, Command Line Fixture Przykładowe tabele z Rick Mugridge: Fit for developing software: framework for integrated tests.

Testowanie przez GUI - Swing Joseph Bergin: XP Testing a GUI with FIT, Fitnesse, and Abbot Enter, check i press to metody pochodzące z ActionFixture. Enter wywołuje Metody metody z tej jednym kolumny argumentem, muszą press zostać wywołuje zdefiniowane metodyprzez bezargumentowe, programistę a check w klasie metody zwracające CalculatorGuiFixture. wartość fit.actionfixture start calculator2003.calculatorguifixture enter delay 500 check value 0 press five press three press press plus five press equals check value 58 press press press minus two equals check value 56

Testowanie przez GUI - Swing Abbot Wykorzystuje mechanizm refleksji do uzyskiwania dostępu do klas interfejsu graficznego działającego programu. Aby wykorzystać możliwości Abbota w Fitnesse należy napisać specjalny Fixture, w naszym przypadku jest to CalculatorGuiFixture.java. Zamiast Abbota można użyć JfcUnit. FitNesse CalculatorGuiFixture.java dziedziczy po klasie Fixture, więc może zostać podłączony do tabeli ze scenariuszem testowym.

Testowanie przez GUI - Swing package calculator2003; import java.awt.*; import fit.fixture; import junit.extensions.abbot.*; import abbot.script.componentreference; import abbot.tester.componenttester; public class CalculatorGuiFixture extends Fixture{ //from FIT public Calculator calc = new Calculator(); // The GUI to be tested Button button5 = null; // References to objects in the GUI Button button2 = null; Button button3 = null; Button buttonequals = null; Button buttonplus = null; Button buttonminus = null; TextField display = null;

Testowanie przez GUI - Swing class GuiTest extends ComponentTestFixture{ // From Abbot's JUnit extensions public GuiTest(String name){ super(name); } public void setup() throws Exception{ testbasic = new ComponentTester(); ComponentReference ref = new ComponentReference("twoButton", Button.class, "twobutton", "2"); button2 = (Button)getFinder().findComponent(ref); ref = new ComponentReference("threeButton", Button.class, "threebutton", "3"); button3 = (Button)getFinder().findComponent(ref); ref = new ComponentReference("fiveButton", Button.class, "fivebutton", "5"); button5 = (Button)getFinder().findComponent(ref); ref = new ComponentReference("equalsButton", Button.class, "equalsbutton",

Testowanie przez GUI - Swing... private int delay = 0; public void delay(int d){ //Control the speed of the robot delay = d; } private void click(button button){ testbasic.actionclick(button); //robot clicks the button testbasic.actiondelay(delay); } public void five() throws Exception{ click(button5); } public void three() throws Exception{ click(button3); } public void two() throws Exception{ click(button2); } public void equals() throws Exception{ click(buttonequals); } public void plus() throws Exception{ click(buttonplus); }

Testowanie przez GUI - Swing fit.actionfixture start calculator2003.calculatorguirobotfixture enter delay 500 check value 0 press five press three press press plus five press equals check value 58 press press press minus two equals check value 56

Testowanie aplikacji internetowych Spring http://agileshrugged.com/blog/?p=33 Nie można nadpisać instancjonowania klas Fixture Ale można wewnątrz klasy Fixture załadować kontekst Springa public boolean isvalid() { } BeanFactory beanfactory = new ClassPathXmlApplicationContext("classpath:/spring/applicati oncontext.xml").getautowirecapablebeanfactory(); loginservice = (LoginService)beanFactory.getBean("loginService"); loginservice.validateuser(username, password);

Testowanie aplikacji internetowych przez interfejs użytkownika http://www.fitnesse.info/webtest WebTest Fixtures integracja Fitnesse z Selenium Fitnesse przejmuje kontrolę na przeglądarką internetową i wykonuje scenariusze testowe Szablon testu:

Agenda Rodzaje testów Techniki projektowania testów FitNesse Selenium

Selenium Selenium to narzędzie do automatyzacji testów akceptacyjnych dla aplikacji internetowych. Integruje się z przeglądarką internetową i umożliwia nagrywanie akcji wykonywanych przez użytkownika. Zapisane akcje można przekonwertować do wybranego języka programowania (np. Java, C#) i wykonywać dowolną ilość razy jako testy regresyjne.

Selenium

Selenium panel kontrolny

Selenium tworzenie testu Fragment nagranego scenariusza testowego

Selenium zestawy testów <html> <head> <title>test Suite Function Tests - Priority 1</title> </head> <body> <table> <tr><td><b>suite Of Tests</b></td></tr> <tr><td><a href="./login.html">login</a></td></tr> <tr><td><a href="./searchvalues.html">test Searching</a></td></tr> <tr><td><a href="./savevalues.html">test Save</a></td></tr> </table> </body> </html>

Selenium najważniejsze polecenia open click/clickandwait verifytitle/asserttitle verifytextpresent verifyelementpresent verifytext verifytable waitforpagetoload waitforelementpresent

Selenium wyniki testu

Happy testing...

Wersja elektroniczna wykładu, instrukcje laboratoryjne: http://staff.iiar.pwr.wroc.pl/marian.jureczko