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

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

Tesztelési szintek Tesztautomatizálás

Integrációs- és rendszertesztelés

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

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

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

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

A szoftver tesztelés alapjai

Miskolci Egyetem Általános Informatikai Tanszék

A tesztelés feladata. Verifikáció

UML (Unified Modelling Language)

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

Robusztusság tesztelés

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

Concurrency in Swing

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

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

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

OO rendszerek jellemzői

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

JNDI - alapok. Java Naming and Directory Interface

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

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)

Komponens alapú fejlesztés

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

Modell alapú tesztelés mobil környezetben

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

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

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

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

Szoftverminőségbiztosítás

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

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

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

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

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

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

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

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

JAVA webes alkalmazások

ROS Remote Operations Service

Szoftvertechnológia alapjai Java előadások

Segédanyag: Java alkalmazások gyakorlat

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

Segédanyag: Java alkalmazások gyakorlat

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

Digitális eszközök típusai

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

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

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

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

Adatbázisok webalkalmazásokban

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

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

Tranzakciókezelés PL/SQL-ben

Objektumorientált tesztelés

Excel vagy Given-When-Then? Vagy mindkettő?

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

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

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

A SZOFTVERTECHNOLÓGIA ALAPJAI

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

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

Utolsó módosítás:

Közösség, projektek, IDE

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

(Teszt)automatizálás. Bevezető

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

Utolsó módosítás:

ESZKÖZTÁMOGATÁS A TESZTELÉSBEN

Szoftvertechnológia alapjai Java előadások

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

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

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

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

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

OOP és UML Áttekintés

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

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 tesztelés szükségessége

Stateless Session Bean

ELTE, Informatikai Kar december 12.

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

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

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

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Informatikai rendszertervezés

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

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

Java IX. telkezelés a Java-ban

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

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

JUnit.

Programozási technológia 2.

Szabálykezelés a gyakorlatban

Java IX. telkezelés a Java-ban

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

Á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 futtató 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, VS,...) Á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 Teszt előkészítése @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, try/catch) 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

Unit teszt konvenciók Teszt osztály neve: [Unit_neve]Tests Teszt metódus neve: Method_StateUnderTest_ExpectedBehavior MethodName_DoesWhat_WhenTheseConditions [feature being tested] Teszt szerkezete: // Arrange // Act // Assert // Given // When // Then 8

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 9

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 10

Példa: Nehezen tesztelhető kód public class PriceService{ Nehezen helyettesíthető, ha pl. speciális teszt da szükséges private DataAccess da = new DataAccess(); public int getprice(string product) throws ProductNotFoundException { Integer p = this.da.getprodprice(product); if (p == null) throw new ProductNotFoundException(); } } return p; 11

Példa: SUT tesztelhetővé tétele public class PriceService{ private IDataAccess da; public PriceService(IDataAccess da){ this.da = da; } Implementáció átadása pl. a konstruktorban public int getprice(string product) throws ProductNotFoundException { Integer p = this.da.getprodprice(product); if (p == null) throw new ProductNotFoundException(); } } return p; 12

Példa: Unit tesztek a SUT-hoz Tesztben egy csonk public class PriceServiceTests{ használata @Before public void init(){ DataAccessStub das = new DataAccessStub(); das.add("a100", 50); ps = new PriceService(das); } @Test public void SuccessfulPriceQuery(){ int p = ps.getprice("a100"); assertequals(50, p); } } @Test(expected = ProductNotFoundException.class) public void NotExistingProduct(){ ps.getprice("notexists"); } 13

Stub, Mock, Dummy, Fake, objektumok Sokféle technika a helyettesítésre Eltérő elnevezések (ld. xunit Patterns könyv) Ö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 14

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 15

Példa: Mock használata (Mockito) public class PriceServiceTests{ Megfelelő típusú @Before public void init(){ test double kérése DataAccess mockda = mock(dataaccess.class); ps = new PriceService(mockDA); } @Test public void SuccessfulPriceQuery(){ // Setup when(mockda.getprodprice("a100")).thenreturn(50); // Excercice int p = ps.getprice("a100"); Működési szabályok megadása } } // Verify verify(mockda, times(1)).getprodprice("a100") Milyen működést kellett megfigyelnie 16

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. 17

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 18

Modul / Unit tesztelés Integrációs tesztelés Rendszer tesztelés Elfogadás tesztelés Tartalom Tesztek leírása: U2TP 20

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 21

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! 22

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 23

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 24

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 25

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 26

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 27

Modul / Unit tesztelés Integrációs tesztelés Rendszer tesztelés Elfogadás tesztelés Tartalom Tesztek leírása: U2TP 28

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 29

Rendszerteszt típusok Tester Performance testing Configuration testing Concurrency testing Stress testing Reliability 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 Megbízhatóság tesztje Hibahatások vizsgálata Failover testing Hibakezelés tesztje Hibadetektálás tesztje Redundancia vizsgálata 30

Modul / Unit tesztelés Integrációs tesztelés Rendszer tesztelés Elfogadás tesztelés Tartalom Tesztek leírása: U2TP 31

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ó 33

Összefoglalás: Különbség a szintek között How Google Tests Software könyv ajánlásai: Small Medium Large Javasolt futási idő < 100 ms < 1 sec minél gyorsabban Időkorlát (kill) 1 perc 5 perc 1 óra Erőforrás Small Medium Large Hálózat (socket) Mocked csak localhost Igen Adatbázis Mocked Igen Igen Fájl hozzáférés Mocked Igen Igen Rendszerhívás Nem Nem javasolt Igen Több szál Nem javasolt Igen Igen Sleep utasítás Nem Igen Igen Rendszer tulajdonságai Nem Igen Igen 34

Modul / Unit tesztelés Integrációs tesztelés Rendszer tesztelés Elfogadás tesztelés Tartalom Tesztek leírása: U2TP 35

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