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

Hasonló dokumentumok
Modell megvalósítása. Gregorics Tibor: Eseményvezérelt alkalmazások fejlesztése I.

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

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

3. Beadandó feladat dokumentáció

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

Eseményvezérelt alkalmazások fejlesztése I 12. előadás. Összetett szoftver architektúrák. Giachetta Roberto

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Általános szoftver architektúrák. Giachetta Roberto

Általános szoftver architektúrák

Programozási technológia 2.

Térinformatikai és távérzékelési alkalmazások fejlesztése. Szoftverek minőségbiztosítása

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

ELTE, Informatikai Kar december 12.

Eseményvezérelt alkalmazások fejlesztése I 5. előadás. Grafikus felületű alkalmazások architektúrája

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.

Eseményvezérelt alkalmazások fejlesztése II 4. előadás. Windows Forms alkalmazások architektúrája és tesztelése. Giachetta Roberto

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

Eseményvezérelt alkalmazások fejlesztése I 5. előadás. Grafikus felületű alkalmazások architektúrája. Grafikus felületű alkalmazások architektúrája

Eseményvezérelt alkalmazások fejlesztése II 4. előadás. Windows Forms alkalmazások architektúrája és tesztelése

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

Térinformatikai és távérzékelési alkalmazások fejlesztése. Szoftverek minőségbiztosítása. Szoftverek minőségbiztosítása Verifikáció és validáció

és az instanceof operátor

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

2. Beadandó feladat dokumentáció

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

Objektumelvű alkalmazások fejlesztése 6. gyakorlat. Öröklődés, polimorfizmus. Öröklődés Kódismétlődés objektum-orientált szerkezetben

Objektumelvű programozás

2. Beadandó feladat dokumentáció

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

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

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Programozási nyelvek II. JAVA

Collections. Összetett adatstruktúrák

Bevezetés a Programozásba II 11. előadás. Adatszerkezetek megvalósítása. Adatszerkezetek megvalósítása Adatszerkezetek

OO rendszerek jellemzői

Bevezetés a Programozásba II 5. előadás. Objektumorientált programozás és tervezés

JUnit.

Bevezetés a Programozásba II 8. előadás. Polimorfizmus Giachetta Roberto

1. Beadandó feladat dokumentáció

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Cserép Máté

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

3D-s számítógépes geometria és alakzatrekonstrukció

Generikus osztályok, gyűjtemények és algoritmusok

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

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

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Szoftvertechnolo gia gyakorlat

Programozási nyelvek Java

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása. Biztonságos adattípusok megvalósítása

Programozási technológia

Objektumorientált paradigma és programfejlesztés Bevezető

A feladatok megoldásához felhasználandó annotációk leírásait az alábbi URL-en találja meg:

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)

3D-s számítógépes geometria és alakzatrekonstrukció

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

Concurrency in Swing

Java programozási nyelv 4. rész Osztályok II.

Szoftvertesztelés Alapok

Bevezetés a Programozásba II 1. előadás. Szoftverfejlesztés, programozási paradigmák

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?

Programozás C++ -ban 2007/7

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Automatikus tesztgenerálás modell ellenőrző segítségével

Programozási nyelvek Java

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Java VI. Miskolci Egyetem Általános Informatikai Tanszék. Utolsó módosítás: Ficsor Lajos. Java VI.: Öröklődés JAVA6 / 1

OOP #14 (referencia-elv)

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Objektumorientált programozás C# nyelven

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Programozási nyelvek Java

Webes alkalmazások fejlesztése 10. előadás. Szolgáltatás alapú rendszerek megvalósítása (ASP.NET WebAPI) Cserép Máté

Integrációs mellékhatások és gyógymódok a felhőben. Géczy Viktor Üzletfejlesztési igazgató

A Feldspar fordító, illetve Feldspar programok tesztelése

Osztályok. 4. gyakorlat

C++ programozási nyelv Konstruktorok-destruktorok

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

Swing GUI készítése NetBeans IDE segítségével

OAF Gregorics Tibor: Minta dokumentáció a 4. házi feladathoz 1. Feladat. Megoldás

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Elemi Alkalmazások Fejlesztése II.

3. Beadandó feladat dokumentáció

Programtervezés. Dr. Iványi Péter

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

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Java Programozás 11. Ea: MVC modell

Elemi alkalmazások fejlesztése III.

C++ programozási nyelv Struktúrák a C++ nyelvben

Osztály és objektum fogalma

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

Elemi alkalmazások fejlesztése III.

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Pénzügyi algoritmusok

A szoftver tesztelés alapjai

Programozási nyelvek II. JAVA

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 11. előadás Szoftverek tesztelése 2014 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Tesztelés A tesztelés annak ellenőrzése, hogy a program teljesíti-e az előírt minőségi mutatókat futási idejű hibák, működési rendellenességek keresése, kompatibilitások ellenőrzése a tesztelésnek négy szakasza van: egységteszt: a programegységeket külön-külön teszteljük (ami könnyen végezhető az implementáció közben is) integrációs teszt: a programegységek felületének, kommunikációjának ellenőrzése rendszerteszt: az egész rendszer együttes tesztje rendszerintegrációs teszt: a rendszer tesztelése a kihelyezett környezetben ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:2

Tesztelés a tesztelés módja szerint lehet: fekete doboz tesztelés: a tesztelendő programrész ismeretlen, csak a hiba voltát fedezzük fel fehér doboz tesztelés: a programrész teljes mértékben ismert, tehát így a hiba helyét is megtalálhatjuk szürke doboz tesztelés: a belső adatok, illetve egyes algoritmusok elérhetőek, így a hiba helye behatárolható a tesztelés módszere lehet: statikus: kód kiértékelés és ellenőrzés (eszköze a statikus kódelemzés) dinamikus: a program futtatása adott tesztesetekkel (eszköze a nyomkövetés és az egységteszt) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:3

Nyomkövetés Nyomkövetés (debugging) során a programot futás közben elemezzük, követjük a változók állapotait, a hívás helyét, felfedjük a lehetséges hibaforrásokat A jellemző nyomkövetési lehetőségek: megállási pontok (breakpoint) elhelyezése változókövetés (watch), amely automatikus a lokális változókra, szabható rá feltétel hívási lánc (call stack) kezelése, a felsőbb szintek változóinak nyilvántartásával A fejlesztőkörnyezetbe épített eszközök mellett külső programokat is használhatunk (pl. gdb) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:4

Egységtesztek Az egységteszt (unit test) egy olyan automatikusan futtatható ellenőrzés, amely lehetőséget osztályok és objektumok viselkedésének ellenőrzésére (a tényleges viselkedés megegyezik-e az elvárttal) lehetőséget adnak tesztesetek gyors, sorozatos futtatására automatikusan végrehajthatóak, paraméterezhetőek (amennyiben a környezet támogatja) egységteszteket elsősorban a logikát megvalósító rétegekre (modell, adatkezelésre) írunk alapvető eszköze a tesztvezérelt fejlesztésnek (Test Driven Development, TDD) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:5

Egységtesztek Az egységtesztek az ellenőrzéseket adott tesztkörnyezetben (test context) végzik, amelyeket egy osztállyal reprezentálunk általában egy tesztelendő osztályhoz egy tesztkörnyezet tartozik, annak interfészét (publikus metódusait) ellenőrzi a tesztkörnyezet több tesztesetet (test case) ad meg, általában egy teszteset egy működés ellenőrzésére koncentrál a tesztestekben egy, vagy több ellenőrzés kap helyet, amelyek jelezhetnek hibákat amennyiben egy hibajelzést sem kaptunk egy tesztesetből, akkor az eset sikeres (pass), egyébként sikertelen (fail) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:6

Egységtesztek TestContext Object Tester loop testcase() call() verify() alt [test succeeded] [test failed] pass() fail() ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:7

Tesztelés Qt keretrendszerben A Qt keretrendszer tartalmaz egy beágyazott tesztelő modul (QTestLib), amely lehetőségeket ad egységtesztek és teljesítménytesztek könnyű megfogalmazására, és végrehajtására a tesztekhez szükséges funkciókat a QtTest fájlban találjuk a tesztkörnyezetet QObject leszármazott osztályokban valósítjuk meg (amelyeket ellátunk Q_OBJECT makróval) a tesztesetek eseménykezelők lesznek, amelyekben ellenőrzéseket végzünk a projektben megjelöljük a modul használatát (QT += testlib) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:8

Tesztelés Qt keretrendszerben Az ellenőrzéseket makrók segítségével valósítjuk meg, pl.: logikai kifejezés ellenőrzése: QVERIFY(<kifejezés>) összehasonlítás: QCOMPARE(<aktuális érték>, <várt érték>) hiba: QFAIL(<üzenet>) figyelmeztetés: QWARN(<üzenet>) A teszt futtatását a QTEST_MAIN(<osztálynév>) (vagy QTEST_MAIN(<osztálynév>)) makróval végezhetjük, amely automatikusan legenerál egy főprogramot, és végrehajtja a teszteseteket, így a tesztek egyszerű konzolos alkalmazásként futtathatóak ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:9

Tesztelés Qt keretrendszerben Pl.: class MyClass { // tesztelendő osztály private: int _value; public: // a publikus műveleteket teszteljük MyClass (int v) { _value = v; } void add(int v) { _value += v; } int getvalue() const { return _value; } } ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:10

Tesztelés Qt keretrendszerben class MyClassTest : QObject { // tesztkörnyezet Q_OBJECT private slots: // tesztesetek, mint eseménykezelők void testgetvalue() { MyClass mc(10); // végrehajtunk egy ellenőrzést: QVERIFY(mc.getValue() == 10); // másként: // QCOMPARE(mc.getValue(), 10); } ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:11

Tesztelés Qt keretrendszerben void testadd() { MyClass mc(10); mc.add(5); QCOMPARE(mc.getValue(), 15); } } mc.add(15); QCOMPARE(mc.getValue(), 30); // tetszőleges sok ellenőrzést // végezhetünk ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:12

Tesztelés Qt keretrendszerben A Qt Creator biztosít egy teszt projekt típust (Qt Unit Test) létrehozza a megadott tesztkörnyezetet, valamint a főprogram generátort (egy forrásfájlban) A tesztünk futtatása részletes eredményt ad, tesztesetenként láthatjuk az eredményt, az esetleges hibajelenséget, valamint a hiba helyét, pl.: PASS : MyClassTest::testGetValue() PASS : MyClassTest::testAddValue() FAIL! : MyClassTest:: () Compared values are not the same Loc : [../MyTest/myclasstest.cpp(106)]! Totals: 2 passed, 1 failed, 0 skipped ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:13

Tesztelés Qt keretrendszerben Lehetőségünk van a tesztkörnyezet konfigurálására a tesztkörnyezetben mezőként bármilyen adatot eltárolhatunk, ezeket speciális eseménykezelőkkel állíthatjuk az első teszteset előbb lefut a tesztkörnyezet inicializálás (inittestcase) az utolsó teszteset után lefut a tesztkörnyezet megsemmisítés (cleanuptestcase) minden teszt előtt lefut a teszteset inicializálás (init) minden teszt után lefut a teszteset megsemmisítés (cleanup) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:14

Tesztelés Qt keretrendszerben Pl.: class MyClassTest : QObject { Q_OBJECT private: // a tesztkörnyezet értékei MyClass* _mc; private slots: void inittestcase() { // inicializálás _mc = new MyClass(10); } void cleanuptestcase() { // megsemmisítés delete _mc; } // _mc az összes tesztesetben elérhető lesz ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:15

Példa Feladat: Teszteljük le a Tic-Tac-Toe játék kétrétegű megvalósításának modelljét. létrehozunk egy tesztprojektet, amelybe bemásoljuk a TicTacToeModel osztályt létrehozunk egy tesztkörnyezetet (TicTacToeModelTest), amelyben teszteljük új játék kezdését (testnewgame), lépések végrehajtását (teststepgame) a tesztkörnyezet tárolja a modell egy példányát, amelyet inicializál (inittestcase), majd megsemmisít (cleanuptestcase) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:16

Példa Tervezés (architektúra): class TicTacToeTest - _stepnumber :int - _currentplayer :Player - _gametable :Player** TicTacToeModel + TicTacToeModel() + ~TicTacToeModel() + newgame() :void + stepgame(int, int) :void + getfield(int, int) :Player {query} + stepnumber() :int {query} - checkgame() :void QObject «signal» + fieldchanged(int, int, TicTacToeModel::Player) :void + gameover() :void + gamewon(tictactoemodel::player) :void -_model QObject TicTacToeModelTest - _model :TicTacToeModel* «slot» - inittestcase() :void - cleanuptestcase() :void - testnewgame() :void - teststepgame() :void - teststepgameerrors() :void ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:17

Példa Megvalósítás (tictactoemodeltest.cpp): void TicTacToeModelTest::testNewGame() { _model->newgame(); // ellenőrizzük, hogy kezdetben minden mező // üres és 0 a lépésszám QCOMPARE(_model->stepNumber(), 0); } for (int i = 0; i < 3; i++) for (int j = 0; j < 3; j++) QCOMPARE(_model->getField(i, j), TicTacToeModel::NoPlayer); ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 11:18