Programozási nyelvek II. JAVA

Hasonló dokumentumok
Programozási nyelvek II. JAVA

Programozási nyelvek II. JAVA

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

Szoftvertechnolo gia gyakorlat

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

Java Programozás 1. Gy: Java alapok. Ismétlés ++

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

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

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

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

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

Programozási nyelvek II.: JAVA

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.

3. Osztályok II. Programozás II

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

Programozási nyelvek Java

Szkriptnyelvek. 1. UNIX shell

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

Programozási nyelvek II.: JAVA

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

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

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

Smalltalk 3. Osztályok létrehozása. Készítette: Szabó Éva

Java gyakorlat feladatai e s megolda sai ( )

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

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

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

é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

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

C# Nyelvi Elemei. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Nyelvi Elemei / 18

Segédanyag: Java alkalmazások gyakorlat

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

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Webprogramozás szakkör

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

Programozás II. ATM példa Dr. Iványi Péter

Java II. I A Java programozási nyelv alapelemei

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

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

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

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

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

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

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

Objektumorientált programozás C# nyelven

JAVA PROGRAMOZÁS 2.ELŐADÁS

ISA szimulátor objektum-orientált modell (C++)

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

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

OOP: Java 4.Gy: Java osztályok

BME MOGI Gépészeti informatika 8.

Programozási nyelvek Java

Osztályok. 4. gyakorlat

Java Programozás 11. Ea: MVC modell

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

Informatika terméktervezőknek

Programozási nyelvek II.: JAVA

Objektumleírók Konstantinusz Kft 2010

Java és web programozás

1. Jelölje meg az összes igaz állítást a következők közül!

AWK programozás, minták, vezérlési szerkezetek

S z á m í t ó g é p e s a l a p i s m e r e t e k

OOP #14 (referencia-elv)

Objektum elvu alkalmaza sok fejleszte se

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

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

Készítette: Nagy Tibor István

A C# programozási nyelv alapjai

Programozási nyelvek Java

Generikus Típusok, Kollekciók

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Programozási nyelvek Java

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

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

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

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

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)

AWK programozás, minták, vezérlési szerkezetek

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

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

Öröklés és Polimorfizmus

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Programozás I ZH, Név:... A. csoport EHA: pont Gyakorlatvezető:...

OOP: Java 8.Gy: Gyakorlás

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

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

1. Alapok. Programozás II

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

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Operációs Rendszerek II. labor. 2. alkalom

V & V Feladatok. V & V Feladatok

Java programozási nyelv 6. rész Java a gyakorlatban

5. Gyakorlat. struct diak {

Entity Framework alapú adatbáziselérés

Programozás II gyakorlat. 6. Polimorfizmus

Bevezetés a programozásba I.

Szoftvertechnológia alapjai Java előadások

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Átírás:

Programozási nyelvek II. JAVA 10. gyakorlat 2017. november 20-24.

Szoftver minőségbiztosítás (ismétlé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 (kézi, automatikus) Formális verifikáció: A helyesség (automatikus) levezetése a (formális) specifikációból. Szimbolikus végrehajtás és model-ellenőrzés is ide sorolható. Program szintézis: Helyes program levezetése a specifikációból És még mások...

Milyen a jó teszt? (ismétlés) FIRST Fast (gyors) Isolated (egymástól és külvilágtól elkülönölt, egy sikertelen tesztnek pontosan egy oka lehet) Repeatable (megismételhető, nincsenek mellékhatások és nem-determinisztikus futás) Self-verifying (önellenőrző, minden teszt elbukhat, minden bukásnak pontosan egy oka lehet) Timely (megfelelő időben rendelkezésre álló)

Mekkora egységet tesztelünk? (ismétlés) 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)

Feketedoboz-tesztelés (ismétlés) A funkcionalitást teszteljük, az implementáció ismerete nélkül Kimerítő tesztelés: összes lehetséges input összehasonlítása a megfelelő outputokkal Időigény: Legyenek p 1, p 2,..., p n paraméterek típusai rendre P 1, P 2,..., P n. Ekkor a kimerítő tesztelés időigénye: T = P 1 P 2... P n, tehát min i P i n T max i P i n. (Polinomiális a típus értékhalmazának méretében, exponenciális a paraméterek számában.) Heurisztikák: ekvivalenciaosztályok, határértékek

Fehérdoboz-tesztelés Az implementációt teszteljük a kód ismeretében. Teljes lefedettség: Az összes végrehajtási utat teszteljük Időigény: Beágyazott elágazások Legrosszabb esetben h magas teljes bináris fával modellezhetőek. Nem-levél csúcsok (elágazási pontok) száma: O(2 h ). Levelek (végrehajtási utak) száma: O(2 h ). Ciklusok esetében általában eldönthetetlen probléma. Precízebben ld. még: ciklomatikus komplexitás Heurisztika: Részletes lefedettség

Teszt-lefedettségi mutatók 1 Metódusok lefedettsége (tesztelve van-e elég metódus) Utasítások lefedettsége (tesztelve van-e elég utasítás) Elágazások lefedettsége (tesztelve van-e elég döntési pont mindkét ága?) Feltételek lefedettsége (tesztelve van-e elég feltétel a logikai kifejezésekben?) Ciklusok lefedettsége (tesztelve van-e elég ciklus 0, 1, k fordulóra?) 1 Glenford J. Myers (2004). The Art of Software Testing, 2nd edition. Wiley. ISBN 0-471-46912-2.

A tesztek szerkezete (ismétlés) 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);

Feladat (A market.fruit osztály) Töltsd le a Fruit.java fájlt! Az osztály egy eladható gyümölcsöt reprezentál. Teszteld fehérdoboz-teszteléssel a Fruit osztályt! Törekedj a következő metrikák maximalizálására: Metódusok lefedettsége Elágazások lefedettsége (döntési pontok mindkét ága) Feltételek lefedettsége (részfeltételek a logikai kifejezésekben) Ciklusok lefedettsége (ciklusok, 0, 1, 2 fordulóra)

Feladat (A market.fruit osztály) Az osztálynak két rejtett adattagja van: egy szöveges típusú name, amely a gyümölcs nevét tárolja és egy egész szám típusú price, ami a gyümölcs árát tárolja. Az osztálynak legyen egy rejtett konstruktora, amely paraméterben megkapja a nevet és az árat, és beállítja a megfelelő adattagokat.

Feladat (A market.fruit osztály) Legyen egy statikus make metódus, amely szintén egy nevet és egy árat kap. A metódusnak ellenőriznie kell a paramétereket, és amennyiben azok megfelelőek, akkor hozza létre, és adja vissza a paramétereknek megfelelő Fruit objektumot. Ha a paraméterek nem jók, akkor a metódus null-t adjon vissza. A nevet tartalmazó paraméter akkor megfelelő, ha csak betűt tartalmaz és legalább 2 karakter hosszú. Az árat tartalmazó paraméter pedig akkor helyes, ha pozitív, de legfeljebb 5000, továbbá és 0-ra vagy 5-re végződik.

Feladat (A market.fruit osztály) A make metódust terheljük túl egy másik metódussal, mely szövegek egy listáját várja paraméterül, és Fruit objektumok listájával tér vissza. Az érvényes szövegobjektumok mindegyike 2 db, vesszővel elválasztott mezőt tartalmaz: a gyümölcs nevét, és az árát. Például: korte, 130 Ha a metódus ilyen sort olvas be a listából, a make metódus másik túlterhelt példánya segítségével létrehozza a gyümölcs objektumokat, majd egy listában visszaadja azokat. Amennyiben a sor érvénytelen, az utóbbi metódus null referenciát ad vissza.

A Fruit.make(List<String> lines) metódus kódja...... public static List<Fruit> make(list<string> lines) { ArrayList<Fruit> fruits = new ArrayList<>(); for (String line : lines) { String[] parts = line.split(","); if (parts.length == 2) { Fruit f = make(parts[0], parts[1]); if (f!= null) { fruits.add(f); } } } return fruits; }

A Fruit.make(List<String> lines) metódus vezérlésfolyam-gráfja List<Fruit> make(list<string> lines) ArrayList<Fruit> fruits = new ArrayList<>(); lines.hasnext() true String line = lines.next(); String[] parts = line.split(","); parts.length == 2 true Fruit f = make(parts[0], parts[1]); false f!= null false true fruits.add(f); false return fruits;

Feladat (Az auction.book osztály) Töltsd le a Book.java fájlt! Az osztály egy árverési tételt (könyv) reprezentál. Teszteld fehérdoboz-teszteléssel a Book osztályt! Törekedj a következő metrikák maximalizálására: Metódusok lefedettsége Elágazások lefedettsége (döntési pontok mindkét ága) Feltételek lefedettsége (részfeltételek a logikai kifejezésekben) Ciklusok lefedettsége (ciklusok, 0, 1, 2 fordulóra)

Feladat (Az auction.book osztály) Az osztály rendelkezik egy beágyazott felsoroló osztállyal (auction.book.genre), mely a lehetséges műfajokat tartalmazza, (azonos írásmóddal): FANTASY, SATIRE, SCIFI, PHILOSOPHY, EDUCATIONAL. Az osztálynak öt rejtett adattagja van: egy szöveg típusú író, egy szöveg típusú cím, egy egész típusú leütési ár(angolul hammer price), egy szintén egész típusó azonosító, illetve egy Genre típusú, a műfajt tároló példányváltozó.

Feladat (Az auction.book osztály) Az osztálynak legyen egy rejtett konstruktora, amely paraméterként megkapja az alkotó nevét, a könyv címét, a kikiáltási árat, valamint a műfajt (Genre típusú), és beállítja a megfelelő adattagokat (a leütési ár legyen a kikiáltási ár). Az azonosító legyen mindig a legutolsóként használt azonosítónál egyel nagyob egész, 0-tól indulva.

Feladat (Az auction.book osztály) Definiáljunk egy osztályszintű make nevű metódust is. A make metódus szintén az alkotó nevét, a könyv címét és a kikiáltási árát kapja meg paraméterként, valamint szöveges paraméterként a műfaj nevét. A metódus először ellenőrzi, hogy a paraméterek megfelelőek. Amennyiben igen, akkor létrehozza és visszaadja a paramétereknek megfelelő Book típusú objektumot. Ha a paraméterek nem megfelelőek, akkor a metódus null-t adjon vissza. Az író neve és a könyv címe akkor megfelelő, ha nem egy null referencia, legalább 2 hosszú, betűkből, számokból és szóközökből áll. A kikiáltási ár akkor megfelelő, ha pozitív szám. A műfaj akkor megfelelő, ha konvertálható egy megfelelő enum értékké.

Feladat (Az auction.book osztály) A make metódust terheljük túl egy másik metódussal, mely szövegek egy listáját várja paraméterül, és Book objektumok listájával tér vissza. Az érvényes szövegobjektumok mindegyike 4 db, pontosvesszővel elválasztott mezőt tartalmaz: az alkotó nevét, a könyv címét, a kikiáltási árat, valamint a műfajt. Például: Giles Andreae;GIRAFFES CAN T DANCE;PHILOSOPHY;50000 Ha a metódus ilyen sort olvas be a listából, a make metódus másik túlterhelt példánya segítségével létrehozza a könyv objektumokat, majd egy listában visszaadja azokat. Amennyiben a sor érvénytelen, az utóbbi metódus null referenciát ad vissza.

A Book.make(List<String> lines) metódus kódja... public static List<Book> make(list<string> lines) { ArrayList<Book> books = new ArrayList<>(); for (String line : lines) { String[] parts = line.split(";"); if (parts.length == 4) { Book b = make(parts[0], parts[1], parts[2], parts [3]); if (b!= null) { books.add(b); } } } return books; }...

A Book.make(List<String> lines) metódus vezérlésfolyam-gráfja List<Book> make(list<string> lines) ArrayList<Book> books = new ArrayList<>(); lines.hasnext() true String line = lines.next(); String[] parts = line.split(";"); parts.length == 4 true Book b = make(parts[0], parts[1], parts[2], parts[3]); false b!= null false true books.add(b); false return books;

Feladat (A GTNGame osztály) Töltsd le a GTNGame osztályt, mely a jól ismert ("Guess the number") számkitalálos játékot valósítja meg. A főprogram parancssori argumentumként egy pozitív maxnum számot vár a felhasználótól, ami a megoldás felső korlátját jelenti majd. Amennyiben a felhasználó megfelelő számú argumentumot ad meg, vagy nem egy pozitív számot ad, a program írjon ki üzenetet.

Feladat (A GTNGame osztály) Ezután a program "gondoljon" egy számra 1 és maxnum között (használható a java.util.random osztály nextint metódusa). Ezt követően ciklusban kérjen be számokat a felhasználótól. Amennyiben a felhasználó eltalálja melyik számra gondolt a program, a program lépjen ki a ciklusból és írjon ki gratuláló üzenetet. Amennyiben a felhasználó nem egy pozitív számot ad, írjon ki üzenetet, majd kérjen be újra számot. Amennyiben a felhasználó valid számot ad meg, de nem azt, amelyikre gondolt a program, írja ki, hogy kisebb vagy nagyobb volt a tipp a megoldásnál.

Feladat (Az GTNGame osztály) Töltsd le a megoldást tartalmazó GTNGame.java fájlt! Rajzold meg az osztály vezérlésfolyam-gráfját. Teszteld fehérdoboz-teszteléssel a GTNGame osztályt! Törekedj a következő metrikák maximalizálására: Metódusok lefedettsége Elágazások lefedettsége (döntési pontok mindkét ága) Feltételek lefedettsége (részfeltételek a logikai kifejezésekben) Ciklusok lefedettsége (ciklusok, 0, 1, 2 fordulóra)