Programozási nyelvek II. JAVA

Hasonló dokumentumok
Programozási nyelvek II. JAVA

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

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

Specifikáció alapú teszttervezési módszerek

Specifikáció alapú teszttervezési módszerek

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

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.

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

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

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

Programozási nyelvek Java

Feladat. Bemenő adatok. Bemenő adatfájlok elvárt formája. Berezvai Dániel 1. beadandó/4. feladat április 13. Például (bemenet/pelda.

Szoftvertesztelés Alapok

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

Szoftverminőségbiztosítás

Szoftverminőségbiztosítás

Programozási nyelvek Java

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK STRUKTÚRA ALAPÚ, VAGY FEHÉRDOBOZ TECHNIKÁK TAPASZTALAT ALAPÚ TECHNIKÁK

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

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

Programozási nyelvek Java

MŰSZAKI TESZTTERVEZÉSI TECHNIKÁK A TESZT FEJLESZTÉSI FOLYAMATA A TESZTTERVEZÉSI TECHNIKÁK KATEGÓRIÁI

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

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

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

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

Java II. I A Java programozási nyelv alapelemei

Programozás Minta programterv a 1. házi feladathoz 1.

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

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

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

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

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

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

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

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

OOP: Java 8.Gy: Abstract osztályok, interfészek

Programozás I. 1. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Szoftvertechnológia alapjai Java előadások

ELTE, Informatikai Kar december 12.

A JUnit alapú egységteszteléshez felhasználandó annotációk leírásait az alábbi URL-en találja meg:

Pénzügyi algoritmusok

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

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

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

BME Irányítástechnika és Informatika Tanszék A programozás alapjai

Mintavételes szabályozás mikrovezérlő segítségével

Java gyakorlat feladatai e s megolda sai ( )

Objektumorientált programozás C# nyelven

Kinek szól a könyv? A könyv témája A könyv felépítése Mire van szükség a könyv használatához? A könyvben használt jelölések. 1. Mi a programozás?

Programozási alapismeretek 1. előadás

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

Mobil Informatikai Rendszerek

Programozási nyelvek II. JAVA

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

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

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

Mesterséges Intelligencia I. kötelező program

Szoftverfejlesztés teszteléssel

Programozási nyelvek Java

Hatékony iteratív fejlesztési módszertan a gyakorlatban a RUP fejlesztési módszertanra építve

Programozási technológia 2.

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

Programozás II. 2. Dr. Iványi Péter

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

A TESZTELÉS ALAPJAI MIÉRT SZÜKSÉGES A TESZTELÉS? MI A TESZTELÉS? ÁLTALÁNOS TESZTELÉSI ALAPELVEK

ELTE SAP Excellence Center Oktatóanyag 1

Cekla. Készítette Doxygen Tue Sep :13:44

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

A C# programozási nyelv alapjai

Programozási nyelvek JAVA EA+GY 1. gyakolat

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

PROGRAMOZÁS tantárgy. Gregorics Tibor egyetemi docens ELTE Informatikai Kar

Programozási nyelvek II.: JAVA, 4. gyakorlat

Szoftverminőségbiztosítás

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

JNDI - alapok. Java Naming and Directory Interface

Szoftverminőségbiztosítás

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

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

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

Funkcionális Nyelvek 2 (MSc)

BME MOGI Gépészeti informatika 8.

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

Algoritmizálás, adatmodellezés tanítása 6. előadás

Ismerkedés a Python programnyelvvel. és annak micropython változatával

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 fejlesztéshez használható eszközök

BASH SCRIPT SHELL JEGYZETEK

JUnit.

Változók. Mennyiség, érték (v. objektum) szimbolikus jelölése, jelentése Tulajdonságai (attribútumai):

Programozás Minta programterv a 2. házi feladathoz 1.

Szoftvertechnolo gia gyakorlat

és az instanceof operátor

Mesterséges Intelligencia II. kötelező feladat (3. forduló) - Ajánló rendszer 2.

Osztályok. 4. gyakorlat

Átírás:

Programozási nyelvek II. JAVA 9. gyakorlat 2017. november 13-17.

Tartalom 1 Bevezetés 2 A JUnit 4 egységteszt-keretrendszer használata 3 Tesztesetek tervezése 4 Feladatok

Szoftver minőségbiztosítás Adott: Specifikáció (követelmények halmaza) Cél: A követelményeket teljesítő ("helyes") program Megközelítések: Tesztelés: Futtatás során ellenőrizzük a követelmények teljesülését Formális verifikáció: A helyesség (automatikus) levezetése a (formális) specifikációból Program szintézis: Helyes program levezetése a specifikációból És még mások...

Tesztelés Mit tesztelünk? feketedoboz (blackbox): A funkcionalitást teszteljük, az implementáció ismerete nélkül fehérdoboz (whitebox): Az implementációt teszteljük a kód ismeretében.

Tesztelés Mekkora egységet tesztelünk? Egységteszt Legkisebb önállóan működő alapegységeit (osztály, metódus) Integrációs teszt Összetartozó egységek együttműködését (csomag). Rendszer teszt Rendszer, alkalmazás egészét fejlesztői oldalról. Nem-funkcionális követelmények, használati esetek. Átvételi teszt Üzembehelyezett rendszer, alkalmazás egészét felhasználói oldalról.

Egységteszt A rendszer legkisebb önállóan működő egységeit teszteli (osztály, metódus). Célok: Követelmények teljesülésének ellenőrzése kimeneten Funkcionalitás (vagy annak hiányának) dokumentálása Kód változtatásakor hibák detektálása (ld. Test driven development, Continous integration) Elvárások: 1:n kapcsolat: Egy teszt pontosan 1 egységet tesztel, de 1 egységre több teszt is juthat. Az egységek egymástól, környezettől, felhasználótól függetlenek (nincs mellékhatás) Minőségmutató: lefedettség (tesztelt publikus metódusok száma)

JUnit 4 Egységteszt-keretrendszer JAVA-hoz. Letöltés és tutorial Két kódkönyvtár (.jar) junit-4.12.jar hamcrest-core-1.3.jar Az útvonalnak fordításkor és futtatáskor szerepelnie kell a classpath-ban (-cp kapcsoló). Útvonal elválasztók Linux: kettőspont (:) Windows: pontosvessző (;)

Példafuttatás Hozzuk létre a SimpleTest.java tesztfájlt a két.jar fájl mellett. Könyvtárszerkezet: SimpleTest.java hamcrest-core-1.3.jar junit-4.12.jar Fordítás és futtatás (Linux): $ javac -cp.:junit-4.12.jar:hamcrest-core-1.3.jar SimpleTest.java $ java -cp.:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.junitcore SimpleTest

SimpleTest.java import org.junit.test; import static org.junit.assert.asserttrue; import static org.junit.assert.fail; // statikus import: metodus explicit osztalyhivatkozas nelkul hasznalhato public class SimpleTest { @Test public void testsuccess() { asserttrue(1 == 1); } } @Test public void testfail() { asserttrue(0 == 1); }

További eszközök: @Test public void manualsuccess() { return; } @Test public void manualfail() { fail("always fails"); asserttrue(1 == 1); } @Test(timeout=2000) public void abortwheninfiniteloop(){ while(true){} }

További eszközök: @Test public void testunexpectedexception() { throw new RuntimeException("Varatlan hiba tortent"); } @Test(expected = RuntimeException.class) public void testexpectedexception() { throw new RuntimeException("Varakozasnak megfelelo hiba tortent"); } @Test public void testexpectedexception2() { try{ int x = 3/0; fail("nem tortent kivitel"); } catch(arithmeticexception e){} }

A tesztek szerkezete Előkészítés-Kivitelés-Ellenőrzés (Arrange-Act-Assert, AAA) @Test public void teststringisreversed() { // arrange // String input="hello world"; } // act // String result = MyLib.reverse(input); // assert // assertequals("dlrow olleh", result);

Módszertan Jelölés p tesztelő, f program implementáció, X inputtér, T X a tesztesetek halmaza. x X : p(f, x) {0, 1}. Definíció Az f program átment a teszteken, ha t T : p(f, T ) = 1. Feladat (Tesztek tervezése) Keressük p tesztelőt, amivel: f program átmegy a teszteken f program teljesíti a követelményeket.

Módszertan Néhány módszer fekete-doboz teszteléshez Decision table testing All-pairs testing Equivalence partitioning Boundary value analysis Cause effect graph Error guessing State transition testing Use case testing User story testing Domain analysis Syntax testing Combining technique

Ekvivalencia particionálás public static int add(int a, int b){...} Kimerítő tesztelés: minden lehetséges paraméterezésre teszteljük az outputot. Az int típusú egésszámokat a memóriában 32 hosszú bitsorozatok reprezentálják = Az int értékhalmazának mérete: int = 2 32. Az inputtér mérete 2 paraméter esetén: int int = int int = int 2 Az inputtér mérete 2 paraméter esetén n paraméter (pl. lista, tömb) esetén: int n A paraméterek számának és típusának függvényében ez nagyon nagy szám is lehet = A kimerítő tesztelés nem hatékony.

Ekvivalencia particionálás Eml.: A paraméterek számának és típusának függvényében int n nagyon nagy szám is lehet = A kimerítő tesztelés nem hatékony. Ötlet (Ekvivalencia particionálás): Az inputteret osszuk fel ekvivalencia-osztályokra. Két elem kerüljön egy osztályba, ha a program a két értéken várhatóan nagyon hasonló módon (vagy ugyanolyan természetű hibával) fut le. Innentől elegendő csak az osztályok reprezentánsait tesztelnünk. Ideális esetben a partíciók uniója kiadja az inputteret.

Ekvivalencia particionálás Például int: Pozitív számok, negatív számok, 0. String: Csak számokat tartalmazó, csak betűket tartalmazó, kisbetűs, nagybetűs, stb. Fontos: A partíciók megfelelő kialakítását a szakterület és a feladat határozza meg, nincs általános módszer.

Határeset elemzés A partíciók határán levő értékek gyakran különlegesek, ezekre érdemes külön is megvizsgálni a program működését. Például int: Integer.MAX_VALUE,1,0,-1, Integer.MIN_VALUE. String: Üres, (csak) szóközöket tartalmazó, null-referencia, stb.

Tippek 1 Ismerd meg a feladat szakterületét 2 Vedd számba milyen input/output értékek tartozhatnak az egységhez. 3 Particionáld az inputteret, vizsgáld az egyes partíciók határelemeit is. 4 Particionáld az outputteret (beleértve a hibákat is), vizsgáld meg, hogy a program kimenetén megjelenhetnek-e a partíciók egyes elemei. Ebben segítség a végrehajtási utak megbecslése. 5 Kereshetsz általános (pl. algebrai) tulajdonságokat is a követelményben leírt egységre, melyeknek a teljesülését ellenőrizni lehet (sanity check). 6 Írd meg a JUnit teszteket

Feladatok szerkezete 1 Adott egy követelményleírás és egy letölthető kódkönyvtár, melynek ismerjük a publikus metódusait (az interfészt). 2 Tervezd meg a teszteket, amelyekkel jellemezhető a program működése, hatásköre! 3 Implementáld a teszteket JUnit segítségével!

Feladat (Greeter) Követelmények A program egy nevet (String) vár paraméterként, és egy üdvözlő szöveget ad vissza úgy, hogy a paraméter elé konkatenálja a "Hello, " karakterláncot. Amennyiben a paraméter üres vagy null, a metódus IllegalArgumentException kivételt dob.

Feladat (Greeter) Interfész public class Greeter{ public static String greet(string name){...} } Kódkönyvtár Letölthető erről a linkről.

Megoldás (Greeter) Tesztelési terv Inputtér: sztringek Outputtér: sztringek, kivétel Particionálás: alfanumerikus, speciális karaktereket tartalmazó (ezen belül szóköz, sorvége, escape),... Sztring határesetek: üres, szóközzel kezdődő/végződő, csak szóközökből álló, nagyon hosszú string,...

Megoldás (Greeter) Greeter.class GreeterTest.java hamcrest-core-1.3.jar junit-4.12.jar $ javac -cp.:junit-4.12.jar:hamcrest-core-1.3.jar GreeterTest.java $ java -cp.:junit-5.12.jar:hamcrest-core-1.3.jar org.junit.runner.junitcore GreeterTest

Feladat (Triangle) Követelmények Adott egy háromszög három oldala. Az oldalak alapján sorold a háromszöget az alábbi osztályok közül a megfelelőbe. Egyenlő oldalú (EQUILATERAL), egyenlő szárú (ISOSCELES), egyéb (SCALENE). Ha több is megfelelő, az itt megadott sorrend szerint a legkorábbi osztályba sorold. Ha az oldalak nem háromszöget írnak le, a program dobjon IllegalArgumentException kivételt.

Feladat (Triangle) Interfész public enum TriangleType{ EQUILATERAL, ISOSCELES, SCALENE } public class Triangle{ public Triangle(int a, int b, int c){...} public TriangleType classify(){...} } Kódkönyvtár TriangleType.java és Triangle.class letölthető a megfelelő linkekről.

Megoldás (Triangle ) Tesztelési terv Inputtér: egésszám hármasok Outputtér: EQUILATERAL, ISOSCELES, SCALENE Sanity check Háromszög vagy nem háromszög (háromszög-egyenlőtlenség) Paraméterek sorrendje int-hármasok particionálása, határesetei, elfajzott esetek (0 oldalhosszú háromszög, (0,0,0) egyenlőoldalú-e, stb...)

Feladat (Adder) Követelmények A program két számot vár paraméterként és visszaadja azok összegét. Fiktív körülmények miatt a paraméterek és a visszatérési érték típusa is karakterlánc (String). Az átadni kívánt számokat tehát előbb ilyen módon el kell kódolni, majd az eredményt megfelelően dekódolni kell. Ha a karakterlánc nem értelmezhető számként, a program dobjon IllegalArgumentException kivételt.

Feladat (Adder) Interfész public class Adder { public String add(string a, String b){...} } Kódkönyvtár Letölthető erről a linkről.