Tesztelés a fejlesztés különböző fázisaiban

Hasonló dokumentumok
Tesztelés a fejlesztés különböző fázisaiban

Integrációs- és rendszertesztelés

Tesztelési szintek Tesztautomatizálás

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

A legalacsonyabb szintű tesztelés. A programot felépítő egységek tesztelése Unit: egy rendszer legkisebb önálló egységként tesztlehető része.

Szoftverminőségbiztosítás

Miskolci Egyetem Általános Informatikai Tanszék

A tesztelés feladata. Verifikáció

Unit Teszt. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Unit Teszt / 22

A szoftver tesztelés alapjai

Unit tesztelés. Honfi Dávid, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

UML (Unified Modelling Language)

Robusztusság tesztelés

OO rendszerek jellemzői

public class HelloWorld extends TestCase { public void testmultiplication() { // Testing if 3*2=6: assertequals ("Multiplication", 6, 3*2);

Miskolci Egyetem Alkalmazott Informatikai Intézeti Tanszék A minőségbiztosítás informatikája. Készítette: Urbán Norbert

Modell alapú tesztelés mobil környezetben

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Modellalkotás UML-ben

Használati alapú és modell alapú tesztelés kombinálása szolgáltatásorientált architektúrák teszteléséhez az ipari gyakorlatban

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Modell alapú tesztelés: célok és lehetőségek

Megoldások a mintavizsga kérdések a VIMIAC04 tárgy ellenőrzési technikák részéhez kapcsolódóan (2017. május)

Verifikáció és validáció Általános bevezető

Szoftverminőségbiztosítás

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Unit tesztelés. Honfi Dávid, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

JNDI - alapok. Java Naming and Directory Interface

Szálkezelés. Melyik az a hívás, amelynek megtörténtekor már biztosak lehetünk a deadlock kialakulásában?

Concurrency in Swing

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Orvostechnikai eszközök gyártmányfejlesztése Aktív orvosi eszközök fejlesztése PEMS V&V. Nagy Katinka

Modern unit és integrációs tesztelés

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Teszt terv Új funkció implementációja meglévı alkalmazásba

ORVOSTECHNIKAI ESZKÖZÖK GYÁRTMÁNYFEJLESZTÉSE AKTÍV ORVOSI ESZKÖZÖK FEJLESZTÉSE - PEMS V&V

ROS Remote Operations Service

JAVA webes alkalmazások

Programozási technológia II 7. előadás. Verifikáció és validáció Giachetta Roberto

Név: Neptun kód: Pontszám:

A fejlesztési szabványok szerepe a szoftverellenőrzésben

Komponens alapú fejlesztés

Statikus technikák: A szoftver átvizsgálása. Statikus technikák: A szoftver átvizsgálása

Integráci. ciós s tesztek. ciós s tesztek (folyt.) Integration Level Testing (ILT) Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Laborgyakorlat 3 A modul ellenőrzése szimulációval. Dr. Oniga István

Szűgyi Zalán. Unit tesztek Java és C++ környezetben

Teszttervezés. Majzik István, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

A SZOFTVERTECHNOLÓGIA ALAPJAI

Szoftvertechnológia alapjai Java előadások

Élő webes alkalmazások rendszerfelügyelete cím- és tartalomteszteléssel

Objektumorientált tesztelés

Adatbázisok webalkalmazásokban

Sikeres végrehajtás(pass): ez azt jelenti, hogy a teszt rendben lefutott, és az ellenőrzési feltételek mind teljesültek.

A tesztelés szükségessége

Szoftver-technológia II. Tervezési minták. Irodalom. Szoftver-technológia II.

1. Melyik szabvány foglalkozik dokumentumok tulajdonságainak megfogalmazásával? a. RDFS b. FOAF c. Dublin Core d. DBPedia

(Teszt)automatizálás. Bevezető

Modellezési Kockázat. Kereskedelmi Banki Kockázatmodellezés. Molnár Márton Modellezési Vezető (Kockázatkezelés)

MODELL ALAPÚ MEGKÖZELÍTÉS TESZT ÚJRAFELHASZNÁLÁSHOZ INTELLIGENS OTTHON ESETÉN

ESZKÖZTÁMOGATÁS A TESZTELÉSBEN

Digitális eszközök típusai

Követelmény alapú minőségbiztosítás az államigazgatásban

R3-COP. Resilient Reasoning Robotic Co-operating Systems. Autonóm rendszerek tesztelése egy EU-s projektben

Teszttervezés. Majzik István, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

LabView Academy. 4. óra párhuzamos programozás

Szoftver-mérés. Szoftver metrikák. Szoftver mérés

Élettartam teszteknél alkalmazott programstruktúra egy váltóvezérlő példáján keresztül

Digitális Technika. Dr. Oniga István Debreceni Egyetem, Informatikai Kar

eseményvezérelt megoldások Vizuális programozás 5. előadás

Csatlakozás a BME eduroam hálózatához Setting up the BUTE eduroam network

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Felhasználó által definiált adattípus

Szoftvertechnológia 10. előadás. Verifikáció és validáció. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Mintapélda: Rendszertesztelés a SAFEDMI projektben

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

OOP és UML Áttekintés

Angolul: Extreme Programming, röviden: XP Agilis módszertan. Más módszertanok bevált technikáinak extrém módú (nagyon jó) használata

Modellező eszközök, kódgenerálás

A dokumentáció felépítése

MELLÉKLET / ANNEX. EU MEGFELELŐSÉGI NYILATKOZAT-hoz for EU DECLARATION OF CONFORMITY

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

MIÉRT KELL TESZTELNI?

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

Informatikai rendszertervezés

Közösség, projektek, IDE

Viczián István IP Systems JUM XIX szeptember 18.

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Szabálykezelés a gyakorlatban

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

SZET GYAK1: Követelmények ellenőrzése

Segédanyag: Java alkalmazások gyakorlat

Tranzakciókezelés PL/SQL-ben

WebService tesztelés. SOAPui Pro, GreenPepper és Confluence használatával. Verhás & Verhás Szoftver Manufaktúra KNOW-HOW

Segédanyag: Java alkalmazások gyakorlat

Collections. Összetett adatstruktúrák

Programozási technológia 2.

Java és web programozás

Osztályok. 4. gyakorlat

Átírás:

Szoftverellenőrzési technikák Tesztelés a fejlesztés különböző fázisaiban Majzik István, Micskei Zoltán http://www.inf.mit.bme.hu/ 1 Modul / unit tesztelés Integrációs tesztelés Rendszer tesztelés Elfogadás tesztelés Tartalom Tesztek leírása: U2TP 2

Modul / Unit: Modul / unit tesztelés Logikailag egy egységként kezelhető elem Jól meghatározott interfésszel rendelkezik OO fejlesztés: Osztály (csomag, komponens is lehet) Modul hívási hierarchia (ideális eset): A A A3 A31 A311 A312 A1 A2 A3 A31 A32 A33 A311 A312 A313 3 Miért van szükség modultesztelésre? Cél: Hibák gyors kijavítása a fejlesztés után (legalacsonyabb szinten) Integrációs fázis hatékonyabb, ha a modulok teszteltek A modul fejlesztője által leggyorsabb a javítás Modulok külön-külön tesztelhetők Komplexitás kézbentartható Hibák helye egyszerűbben felderíthető, javítás olcsóbb Párhuzamosítható folyamat Unit teszt jellegzetességek A kód egy-egy speciális funkcióját ellenőrzi Szerződés ellenőrzése a modul működéséről Példaként szolgálhat az egység használatához (Nem feltétlenül automatikus) 4

Unit teszt keretrendszerek Unit tesztek: Gyakran kell futtatni Fejlesztés közben, kód változásakor (pl. refactoring) Környezet változása esetén Épp ezért gyorsnak kell lennie Jó eszköztámogatás Keretrendszerek (JUnit, xunit, TestNG, ) Támogatás az IDE-kben (Eclipse, Netbeans,...) Általában egyszerű funkcionalitású eszközök Tesztek és ellenőrzések megadása Tesztek futtatása Eredmény megjelenítése (red-green) 5 Egy egyszerű JUnit teszt public class ListTests{ List list; // SUT Test előkészítés (fixtures) @Before public void setup(){ list = new List(); SUT meghívása @Test public void add_emptylist_success(){ list.add(1); assertequals(1, list.getsize()); Ellenőrzés 6

Jó unit teszt jellegzetessége Egyszerű, megbízható Nincs benne bonyolult logika (pl. ciklusok) Egy teszt egy dolgot vizsgál Ez is jó minőségű kód Duplikáció elkerülése Jól áttekinthető, módosítható Tesztek függetlenek egymástól Ellenőrzések nincsenek túlspecifikálva 7 Modulok izolációs tesztelése Modulok egyenként, elszigetelten teszteltek Teszt végrehajtó és teszt csonkok szükségesek A Teszt végrehajtó A1 A2 A3 Tesztelendő modul A31 A32 A33 A311 A312 A313 Teszt csonk Teszt csonk Teszt csonk 8

Probléma: Függőségek kezelése Mi tekinthető függőségnek? Bármi, amivel a SUT együttműködik, de nem hozzá tartozik (nem közvetlenül befolyásolja) Példák: Másik modul Fájlrendszer hívás Dátum lekérdezése 9 Példa: Nehezen tesztelhető kód Nehezen helyettesíthető, ha pl. speciális teszt da szükséges public class PriceService{ private DataAccess da = new DataAccess(); public int getprice(string product) throws ProductNotFoundException { int p = this.da.getprodprice(product); if (p == null) throw ProductNotFoundException; return p; 10

Példa: SUT tesztelhetővé tétele public class PriceService{ private IDataAccess da; public PriceService(IDataAccess da){ this.da = da; public int getprice(string product) throws ProductNotFoundException { int p = this.da.getprodprice(product); if (p == null) throw ProductNotFoundException; Implementáció átadása pl. a konstruktorban return p; 11 Példa: Unit tesztek a SUT-hoz Tesztben egy csonk public class PriceServiceTests{ használata @Before init(){ DataAccessStub das = new DataAccessStub(); das.add( A100, 50); PriceService ps = new PriceService(das); @Test public void testsuccessfulpricequery(){ int p = ps.getprice( A100 ); assertequals(50, p); @Test(expected = ProductNotFoundException.class) public void testnotexistingproduct(){ ps.getprice( notexists ); 12

Stub, Mock, Dummy, Fake, objektumok Sokféle technika a helyettesítésre Eltérő elnevezések (ld. xunit Patterns) Összefoglaló név: Test double Helyettesítő elem teszteléshez Stub (csonk) SUT állapotának ellenőrzésére Rögzített válaszok adott hívásokra Mock SUT interakcióinak ellenőrzésére Elvárt és ellenőrzött viselkedés Dummy Nem használt ( kitöltő ) objektum Fake Működő, de nem az éles objektum 13 Isolation frameworks Csonkok és mockok kézi elkészítése nehézkes Sok manuális munka Karbantartása időigényes lehet Keretrendszerek: Osztály/interfész leírás alapján Dinamikus csonkok vagy mockok készítése Példák: JMock, Mockito, Rhino Mocks, Typemock 14

Példa: Mock használata (Mockito) public class PriceServiceTests{ Megfelelő típusú @Before init(){ test double kérése DataAccess mockda = mock(dataaccess.class); PriceService ps = new PriceService(mockDA); @Test public void testsuccessfulpricequery(){ when(mockda.getprodprice( A100 )).thenreturn(50); int p = ps.getprice( A100 ); Működési szabályok megadása verify(mockda, times(1)).getprodprice( A100 ); Milyen működést kellett megfigyelnie 15 Megéri ilyen unit teszteket készíteni? Egy példa pilot projekt számai: Forrás: Roy Osherove, The Art of Unit Testing, 2009. 16

Olvasnivalók Martin Fowler: Mocks Aren't Stubs, 2007, URL: http://martinfowler.com/articles/mocksarentstubs.html Roy Osherove: The Art of Unit Testing: With Examples in.net. Manning Publications; 1st edition (June 3, 2009), URL: http://artofunittesting.com/ - Brett L. Schuchert: Mockito.LoginServiceExample - URL: http://schuchert.wikispaces.com/mockito.loginserviceexample 17 Modul / Unit tesztelés Integrációs tesztelés Rendszer tesztelés Elfogadás tesztelés Tartalom Tesztek leírása: U2TP 19

Integrációs tesztelés Modulok együttműködésének ellenőrzése Kapcsolódási interfészek tesztelése A rendszer annak ellenére hibás lehet, hogy minden modul egyenként hibátlan! Módszerek: Funkcionális tesztelés: Forgatókönyvek tesztje Ez sokszor a specifikáció része (scenario) (Strukturális tesztelés csak modulszinten!) Megközelítés: Big bang : minden modult egyszerre integrálni Inkrementális: egyenként összerakni a modulokat 20 Big bang integrációs tesztelés Tesztelés a külső interfészeken keresztül Külső teszt végrehajtó Rendszer funkcionális specifikáció alapján történik Modul módosítás: Újratesztelés Kis rendszerek esetén alkalmazható A Tester1 B Tester2 C D Hibakeresés bonyolult! 21

Alulról felfelé történő integrációs tesztelés Tesztelendő modul a már tesztelteket használja Teszt végrehajtó szükséges Integrációval párhuzamosan megtehető Modul módosítás: felette lévők tesztjére hatással van A Teszt végrehajtó A1 A2 A3 Tesztelendő modul A31 A32 A33 A311 A312 A313 Tesztelt modul Tesztelt modul Tesztelt modul 22 Felülről lefelé történő integrációs tesztelés Modulok a hívó modulokból kerülnek tesztelésre Csonkok helyettesítése tesztelendő modulokkal Erősen követelmény-orientált ( fentről tesztelünk) Modul módosítás: alatta lévők tesztelését módosítja A Tesztelt modul: teszt végrehajtó A1 A2 A3 Tesztelendő modul A31 A32 A33 A311 A312 A313 Teszt csonk Teszt csonk Teszt csonk 23

Felülről lefelé Felülről lefelé vs. alulról felfelé + Követelmény-orientált, ellenőrzéshez jól illeszkedő + Hamar összeállhat egy demonstrálható szkeleton - Csonkok készítése általában nehezebb - Teszt bemenetek távol lehetnek az épp integrálandó modultól Alulról felfelé + Integráció orientált, konstruktívabb + Könnyebb megfigyelni és irányítani a teszteket - A rendszer maga csak a legvégén áll össze 24 Futtató rendszer integrációja Motiváció: Nehéz csonkokat írni a futtató rendszerhez Pl. OS, J2EE konténer, Stratégia: 1. Alkalmazás modulok integrációja felülről lefelé, a futtató rendszer szintjéig 2. Futtató rendszer alulról felfelé történő tesztelése Funkciók izolációs tesztje (ha szükséges) Big bang tesztelés az alkalmazás hierarchia legalsó rétegével 3. Alkalmazás és futtatórendszer integrációja, a felülről lefelé történő tesztelés befejezése 25

Eszközök az integrációs teszteléshez Wrapper (csomagoló) kódrészletek before wrapper: A hívás végrehajtása előtt Paraméterek vizsgálata Hívási szekvencia ellenőrzése after wrapper: A hívás végrehajtása után Visszaadott érték ellenőrzése vagy módosítása replace wrapper: A hívott helyettesítése Teszt csonk megvalósítás A W A3 B A 26 Modul / Unit tesztelés Integrációs tesztelés Rendszer tesztelés Elfogadás tesztelés Tartalom Tesztek leírása: U2TP 27

Rendszertesztelés Tesztelés a rendszerszintű specifikáció alapján Jellemzők: Hardver-szoftver integráció után végezhető Funkcionális tesztek + nem-funkcionális jellemzők tesztje is! Kiemelhető: Adat integritás vizsgálata Felhasználói profil figyelembe vétele (terhelés) Rendszer alkalmazhatósági korlátok megállapítása (erőforrás-használat, telítődés) Hibahatások vizsgálata 28 Rendszerteszt típusok Tester Performance testing Configuration testing Concurrency testing Stress testing Teljesítmény teszt Valós terhelés Válaszidők figyelése Konfiguráció teszt Hardver és szoftver beállítások Konkurens viselkedés tesztje Felhasználók számának növelése Holtpont, kiéheztetés ellenőrzése Terhelés (löket) teszt Telítődés vizsgálata Reliability testing Megbízhatóság tesztje Hibahatások vizsgálata Failover testing Hibakezelés tesztje Hibadetektálás tesztje Redundancia vizsgálata 29

Modul / Unit tesztelés Integrációs tesztelés Rendszer tesztelés Elfogadás tesztelés Tartalom Tesztek leírása: U2TP 30 Elfogadás tesztelése (validációs tesztelés) Cél: Valóságos környezet hatásának tesztelése Felhasználói elvárások figyelembe vétele: Nem specifikált felhasználói elvárások is megjelennek Váratlan eseményekre való reagálás: Kis valószínűségű eseménykombinációk is megjelennek Időzítési szempontok Időzítések megfigyelése az adott környezetben Korlátok ellenőrzése: Valósidejű monitorozás Környezeti szimuláció Adott szituációk valóságban nem tesztelhetők (pl. védelmi rendszerek) Szimulátorokat is validálni kell

Összefoglalás: Tesztelési feladatok 1. Modul/unit tesztelés Izolációs tesztelés 2. Integrációs tesztelés Big bang tesztelés Top-down (felülről-lefelé) tesztelés Bottom-up (alulról-felfelé) tesztelés Futtató környezet integrációja 3. Rendszertesztelés Teljes rendszer együttes tesztelése 4. Validációs tesztelés Felhasználói elvárások tesztelése Környezeti szimuláció 32 Modul / Unit tesztelés Integrációs tesztelés Rendszer tesztelés Elfogadás tesztelés Tartalom Tesztek leírása: U2TP 33

U2TP: UML 2 Testing Profile (OMG, 2004) Able to capture all needed information for functional black-box testing (specification of test artifacts) Mapping rules to TTCN-3, JUnit Language (notation) and not a method (how to test) Packages (concept groups): Test Architecture Elements and relationship involved in test Importing the UML design model of the SUT Test Data Structures and values to be processed in a test Test Behavior Observations and activities during testing Time Concepts Timer (start, stop, read, timeout), TimeZone (synchronized) U2TP Test Architecture package Identification of main components: SUT: System Under Test Characterized by interfaces to control and observation System, subsystem, component, class, object Test Component: part of the test system (e.g., simulator) Realizes the behavior of a test case (Test Stimulus, Test Observation, Validation Action, Log Action) Test Context: collaboration of test architecture elements Initial test configuration (test components) Test control (decision on execution, e.g., if a test fails) Scheduler: controls the execution of test components Creation and destruction of test components Arbiter: calculation of final test results E.g., threshold on the basis of test component verdicts

U2TP Test Architecture example U2TP Test Data package Identification of types and values for test (sent and received data) Wildcards (* or?) Test Parameter Stimulus and observation Argument Concrete physical value Data Partition: Equivalence class for a given type Class of physical values, e.g., valid names Data Selector: Retrieving data out of a data pool Operating on contained values or value sets Templates

U2TP Test Data example U2TP Test Behavior package Specification of default/expected behavior Identification of behavioral elements: Test Stimulus: test data sent to SUT Test Observation: reactions from the SUT Verdict: pass, fail, error, inconclusive values Actions: Validation Action (inform Arbiter), Log Action Test Case: Specifies one case to test the SUT Test Objective: named element Test Trace: result of test execution Messages exchanged Verdict

U2TP Test Behavior example Mintapélda: BlueTooth roaming Tesztelendő rendszer: Teszt cél: Slave Roaming Layer funkciói Link minőségének figyelése Kapcsolat létesítése másik masterrel

Komponensek szerepei Test package Overview Test context Teszt konfiguráció és teszt vezérlés Test configuration Test control

Test scenario Test case implementation (see Blue- ToothSuite) References Timers Defaults Néhány hivatkozott részlet Sequence diagrams Default behaviours specified to catch the observations that lead to verdicts Here: Processing timer events