Szoftvertechnolo gia gyakorlat



Hasonló dokumentumok
Entity Framework alapú adatbáziselérés

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

Java és web programozás

OOP: Java 8.Gy: Gyakorlás

é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

BME MOGI Gépészeti informatika 4.

3. Osztályok II. Programozás II

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

Entity Framework alapú adatbáziselérés

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

INFORMATIKAI ALAPISMERETEK

4. Gy: JAVA osztályok

GenerikusOsztály<objektumtípus> objektum = new GenerikusOsztály<objektumtípus>();

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

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

BME MOGI Gépészeti informatika 5.

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

.Net adatstruktúrák. Készítette: Major Péter

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

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

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

Eseménykezelés - Lottó játék

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

BME MOGI Gépészeti informatika 8.

BME MOGI Gépészeti informatika 13.

7. K: JAVA alapok Konzultáció

OOP: Java 4.Gy: Java osztályok

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

INFORMATIKAI ALAPISMERETEK

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

Osztályok. 4. gyakorlat

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

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

Kalapácsvetés 2016 szöveges

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

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

Java és web programozás

OOP: Java 1.Gy: Java alapok

Vizuális programozás Komplex számok

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

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

Abstract osztályok és interface-ek. 7-dik gyakorlat

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

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

Access adatbázis elérése OLE DB-n keresztül

OOP: Java 6.Gy: Java osztályok. Definíció, static, túlterhelés

C++ programozási nyelv Konstruktorok-destruktorok

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.

BME MOGI Gépészeti informatika 7.

Informatika terméktervezőknek

OOP: Java 5.Gy: Osztály, referencia, konstruktor

Java és web programozás

ZH mintapélda. Feladat. Felület

Szoftvertervezés és -fejlesztés I.

Objektumorientált programozás C# nyelven

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Java Programozás 11. Ea: MVC modell

C# feladatok gyűjteménye

INFORMATIKA javítókulcs 2016

Vizuális programozás gyakorlat

Programozási nyelvek II. JAVA

Eseményvezérelt és objektumorientált programozás

Vizuális programozás gyakorlat

OOP: Java 7.Gy: Öröklődés, referenciák

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

Osztálytervezés és implementációs ajánlások

A C# PROGRAMOZÁSI NYELV

Osztálytervezés és implementációs ajánlások

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

Entity Framework alapú adatbáziselérés 2

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

Programozási nyelvek Java

Programozási technológia

Fordított és szkript nyelvek összehasonlító elemzése. Sergyán Szabolcs

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

JAVA PROGRAMOZÁS 3.ELŐADÁS

Java és web programozás

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

Ugráló gomb oktatási segédlet Ugráló gomb

Hozzunk létre két rekordot a táblában, majd véglegesítsünk (commit):

A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

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

Programozási nyelvek Java

Webszolgáltatás és XML alapú adatbázis. 1. Az adatbázis megtervezése

Objektum Orientált Programozás V.

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

OOP #14 (referencia-elv)

C#, OOP. Osztályok tervezése C#-ban

Programozási alapismeretek 4.

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?

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

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

Mentsd el code file-t kektura.cs néven, illetve kiterjesztéssel! Másold be a kektura.csv állományt a Projects munkamappa megfelelő almappájába!

Programozási nyelvek Java

Programozás I. Matematikai lehetőségek Műveletek tömbökkel Egyszerű programozási tételek & gyakorlás V 1.0 OE-NIK,

Java gyakorlat feladatai e s megolda sai ( )

Átírás:

Szoftvertechnolo gia gyakorlat Dr. Johanyák Zsolt Csaba http://johanyak.hu 1. Dependency Injection (függőség befecskendezés) tervezési minta A tervezési minta alapgondolata az, hogy egy konkrét feladatot megoldó komponens/osztály (Szolgáltató) és az azt használó osztály (Ügyfél) között laza kapcsolatot valósítsunk meg annak érdekében, hogy megkönnyítsük a későbbi esetleges változtatásokat (pl. a feladatot megvalósító komponens/osztály lecserélése) és kódkarbantartást. Az Ügyfél csak a Szolgáltató által nyújtott (ISzolgáltató) interfészt ismeri, a Szolgáltató osztály neve nem szerepel az Ügyfél kódjában. Három lehetséges megoldással találkoztunk előadáson, ezek az alábbiak konstruktor befecskendezés, tulajdonság befecskendezés, metódus befecskendezés. 1.1. Konstruktor befecskendezés A konstruktor befecskendezés azt jelenti, hogy az Ügyfél objektum létrehozásakor, a konstruktornak bemenő paraméterként átadjuk a szolgáltatást ténylegesen megvalósító objektum referenciáját. Példaként készítsünk egy konzol alkalmazást, amiben valós számok listáját kell növekvő és csökkenő sorba rendezni Első lépésként hozzunk létre egy osztálykönyvtár projektet Rendezo néven, és a megoldás neve legyen DIPelda. A projektben az egyes rendezési módszereket külön-külön osztályként fogjuk implementálni. Elsőként definiáljuk az a szolgáltatás által nyújtott interfészt. Az interfész egy metódust határoz meg, ami átvesz egy listára irányuló referenciát és egy logikai adatot. Ha ez utóbbinak értéke true, akkor növekvő, különben csökkenő sorba kell rendezni a számokat. A rendezés eredményeképpen egy új listát kell előállítani. Készítsük el a Buborék osztályt, ami megvalósítja az IRendez interfészt. 1

public class Buborék:IRendez public List<double> Rendez(List<double> Eredeti, bool Növekvő) var új = new List<double>(Eredeti); for (var i = 0; i < új.count; i++) for (var j = 1; j < új.count; j++) if ((Növekvő && (új[j - 1] > új[j])) (!Növekvő && (új[j] > új[j - 1]))) var m = új[j - 1]; új[j - 1] = új[j]; új[j] = m; return új; Készítsünk egy konzolalkalmazás projektet a megoldáson belül Pelda néven. Jelöljük ki indító projektként. Helyezzünk el egy hivatkozást a References részben a Rendezo projektre. Hozzunk létre egy Ügyfél nevű osztályt. Az osztály konstruktora átvesz egy referenciát egy IRendez intefészt megvalósító objektumra, és egy adattagban tárolja azt. Itt valósítjuk meg a függőség befecskendezést. A Feltölt metódus létrehoz egy lista objektumot, és véletlenszerűen előállított valós számokat helyez el benne. A számok darabszámát paraméterként kapja meg. A Kiír metódus egy lista elemeit jeleníti meg a konzolon. A Munka metódus gondoskodik egy 10 elemű lista előállításáról, növekvő és csökkenő sorrendű új listák előállításáról és ezek megjelenítéséről a konzolon. public class Ügyfél 2

IRendez Rendező; List<double> Adatok; public Ügyfél(IRendez R) Rendező = R; void Feltölt(int db) Adatok=new List<double>(); var r = new Random(); for(var i=0;i<db;i++) Adatok.Add(r.NextDouble()); public void Kiír(List<Double> Számok ) foreach (var sz in Számok) Console.Write("0,5:F3, ",sz); Console.WriteLine(); public void Munka() Feltölt(10); Console.WriteLine("Az eredeti számsor:"); Kiír(Adatok); var Növekvő = Rendező.Rendez(Adatok, true); Console.WriteLine("Növekvő sorba rendezve:"); Kiír(Növekvő); var Csökkenő = Rendező.Rendez(Adatok, false); Console.WriteLine("Csökkenő sorba rendezve:"); Kiír(Csökkenő); Az alkalmazást indító Program osztály a következő. Létrehozunk egy Ügyfél objektumot és a konstruktornak átadjuk paraméterként a rendezési feladatot megvalósító Buborék típusú objektum referenciáját. class Program static void Main(string[] args) var u = new Ügyfél(new Buborék()); u.munka(); Console.ReadLine(); 1.2. Önálló feladat Válasszon ki egy másik rendezési módszert, implementálja azt egy IRendez interfészt megvalósító osztály formájában, majd próbálja ki a használatát a Main metódus módosításával. A feladatot megvalósító teljes projektet töltse fel a CooSpace-re 3

2. Kód lefedettség vizsgálata dotcover segítségével A dotcover segítségével alapvetően két forgatókönyv szerint végezhetünk kód lefedettség vizsgálatot. Ezek a következők: Visual Studio-ba betöltött projektre/alkalmazásra megvizsgáljuk, hogy a használat során mely forráskód utasítások/metódusok hajtódnak végre. Visual Studio-ba betöltött tesztprojektre megvizsgáljuk, hogy a benne szereplő egységtesztek milyen mértékben fedik le a vizsgált projektet (mely forráskód utasítások/metódusok hajtódnak végre. 2.1. Betöltött (StartUp) projekt vizsgálata A módszer bemutatása során az előzőekben létrehozott Pelda projektet fogjuk használni. A Visual Studio DOTCOVER menüjében válasszuk ki a Cover Startup Project menüpontot. Ennek hatására a VS lefuttatja a programot. Lépjünk ki a programból (Enter). Megjelenik a Coverage Result Browser ablak. Nyissuk ki a bal oldalon a két projekt elemeit, és láthatjuk, hogy 100%-os a lefedettség. Az Ügyfél osztály kódjában tegyük megjegyzésbe azokat a sorokat, amelyek meghívják a Kiír metódust. public void Munka() Feltölt(10); Console.WriteLine("Az eredeti számsor:"); //Kiír(Adatok); var Növekvő = Rendező.Rendez(Adatok, true); Console.WriteLine("Növekvő sorba rendezve:"); //Kiír(Növekvő); var Csökkenő = Rendező.Rendez(Adatok, false); Console.WriteLine("Csökkenő sorba rendezve:"); //Kiír(Csökkenő); 4

Próbáljuk ki újból a lefedettség vizsgálatot. A lefedettség vizsgálat kimutatta, hogy a Kiír metódus nem lesz meghívva az alkalmazás végrehajtása során. Ha duplán kattintunk a Kiír metóduson, az meg fog jelenni a kódszerkesztőben. Láthatjuk, hogy míg pl. a Munka metódus minden utasítása zöld háttérrel jelenik meg, addig a Kiír metódus blokkja rózsaszín hátterű. A színes kiemelés utasításszinten jelzi a lefedett és nem lefedett kódrészleteket. 2.2. DotCover használata tesztprojektekben Töltsük be a 8. gyakorlaton létrehozott Egységteszt projektet a Visual Studioba. A projekt elérhető a t:\info\johanyák Csaba\Szoftvertechnologia\EgysegTeszt\ útvonalon. Nyissuk meg a KomplexTeszt.cs állományt. Rendeljük a dotcover-hez a teljes KomplexTeszt osztályt 5

Elindul az egységtesztek végrehajtása. A végrehajtást követően a Unit Test Sessions ablak tartalma az alábbi lesz. Ebből láthatjuk, hogy az op_equality egységteszt csak 71%-os lefedettséget biztosít a vizsgált egyenlőség operátor esetén. Valamint a nem-egyenlőség operátor lefedettsége 0%. Nézzük meg az érintett forráskód részletet. 6

Rózsaszín háttérrel jelennek meg azok az utasítások, amelyeket nem fed(nek) le azt adott operátorhoz/metódushoz írt egységteszt(ek). 7