Web programozás és haladó fejlesztési technikák

Slides:



Advertisements
Hasonló előadás
Sor láncolt ábrázolással
Advertisements

Osztály leszármaztatás
Analitikus függvények
Analitikus, statisztikai és szélsőérték fv-k Hári Veronika
Hatékonyságvizsgálat, dokumentálás
Rendszerfejlesztés gyakorlat - © Fülöp Lajos
Programozás III KOLLEKCIÓK 2..
A webes tesztelés jövője
Grafika. 2 Mértékek és koordináta rendszer Használjuk a RGB és QBColor függvényeket a színekhez Grafika létrehozása Load/change picture futási időben.
Junit testing.
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Bevezetés a Java programozásba
Fájlkezelés, IO Kivételkezelés Belső osztályok
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Követelmények Bevezetés a Javába Első java program írása Dokumentációk
Tömbök ismétlés Osztályok Java-ban Garbage collection
A verem működése fpga-n
Java programozási nyelv 3. rész – Osztályok I.
C# tagfüggvények.
C# tagfüggvények.
SPRING FRAMEWORK bemutatása
OE-NIK HP Haladó Programozás WCF kivételkezelés. OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
ADATBÁZISOK
Ficsor Lajos Template-ek CPP8/ 1 Template-ek. Ficsor Lajos Template-ek CPP8/ 2 A template fogalma Kiindulási probléma: tetszőleges típusokon kellene ugyanolyan.
Ficsor Lajos Miskolci Egyetem Általános Informatikai Tanszék
V 1.0 OE-NIK HP 1 Programozási Paradigmák és Technikák Eseménykezelés Névtelen metódusok (anonymous methods)
Rendelkezésre álló erőforrások pontos ismerete Kiosztott feladatok közel „valósidejű” követése Átláthatóság Tervezési folyamatok támogatása.
1 Add az APK-t! Add az APK-t! Automatizált apptesztelés 2013/10/13.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
A D programozási nyelv Angeli Dávid. Nagy vonalakban  C++  
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
3. előadás.  Apache szerver tudnivalók  Az index.php .htaccess – web-szerverünk beállításai  Konfigurációs állományok  Adatbázis kapcsolódás beállítása.
Visual Basic 2008 Express Edition
Android alkalmazások tesztelése
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
Programozás III UNIT TEST. És tényleg: Honnan lehet tudni, hogy működik-e vagy sem?
Java web programozás 11..
Slides for Quantum Computing and Communications – An Engineering Approach Chapter 7 Searching in an Unsorted Database Sándor Imre Ferenc Balázs.
Webprogramozó tanfolyam
Power Lutár Patrícia Pellek Krisztián.  -ltLess than  -leLess than or equal to  -gtGreater than  -geGreater than or equal to  -eqEqual to  -neNot.
Programozás III KIVÉTEL.
Illés Zoltán ELTE Informatikai Kar
Java web programozás 7-8..
Programozás III KIVÉTEL. KIVÉTELKEZELÉS Hibátlan program nincs!!! eddig hiba esetén leállt a program. Példa ilyen hibákra: ─ ArrayBoundsOfException (tömb.
Mobil alkalmazások fejlesztése Vonalkód leolvasó Symbian alapú mobiltelefonra Készítette: Tóth Balázs Viktor.
DLL használata és készítése Feladat
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Alkalmazásfejlesztés gyakorlat
03. GYAKORLAT Szervó motor.
Dependency Injection Moq Feladat
Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Web programozás és haladó fejlesztési technikák – C#
Dependency Injection Tesztduplikátumok, Mock-ok, Fake-ek Feladat
Web programozás és haladó fejlesztési technikák
Thread és Task.
Web programozás és haladó fejlesztési technikák – C#
Dependency Injection Tesztduplikátumok, Mock-ok, Fake-ek Feladat
Függvénysablonok használata
Unit tesztelés Swift-ben
Előadás másolata:

Web programozás és haladó fejlesztési technikák NUnit Feladat 1

Egyszerű tesztelt projekt Éles projekt(ek) + tesztprojekt(ek) (Class Library) Tesztprojekt referenciái: Tesztelt projekt Tesztkeretrendszer A tesztprojektben a tesztelt projekt publikus részei tesztelhetők Internal részek: [InternalsVisibleTo(„ConsoleApplication1Tests”)] Class Library

NUnit Gyakori felépítés („AAA”) Given…When…Then() Arrange: előkészítés, objektumok létrehozása, beállítása stb. Act: tesztelendő egyetlen lépés végrehajtása Assert: az eredmény, vagy ami a tesztelt tevékenység hatására történt, az az elvárásnak megfelelő-e? Given…When…Then()

NUnit Rengeteg lehetőség // Elvárások : Assert.That(result, Is.EqualTo("MyResult")); Assert.That(result, Is.Null); Assert.That(result, Is.LessThan(2)); Assert.That(result, Is.SameAs(otherReferenceToTheSameObject)); Assert.That(result, Is.Not.Null); // tagadás // Exception-ellenőrzések: Assert.That(() => t.MyTestedMethod(), Throws.TypeOf<NullReferenceException>()); Assert.That(() => t.MyTestedMethod(), Throws.Nothing); // régi szintaktika: (ugyanaz, mint az Is.EqualTo) Assert.AreEqual(result, 42); Assert.That után a második paraméterben mondatszerűen olvasható/írható („fluent”) szintaktika. Volt egy régi szintaktika is, régi NUnit még csak ezt tudta (utolsó sor). Assert.AreEqual, Assert.AreSame, Assert.IsNull, Assert.IsNotNull ... stb.

NUnit Akárhány input paraméter lehet a tesztmetódusban – ugyanennyit kell megadni a TestCase attribútumban Attribútum csak konstans értékeket kaphat -> TestCaseSource! Hasonló lehetőségek: [Sequential] – az input paraméterek megadott értékek közül sorra kapnak értékeket [Combinatorial] – az input paraméterek számára megadott értékek összes lehetséges kombinációjával meghívódik a teszt [Pairwise] – az előzőhöz képest optimalizált (kevesebb tesztesetet csinál)

NUnit TestCaseSource Dinamikusan készített v. nem konstans értékekkel dolgozó tesztesetekhez – akár saját osztályok átadása értékekként Sokféle formában használható: object[] helyett TestCaseData utód, property helyett metódus, osztály... public static IEnumerable<TestCaseData> MyTestCases { get List<TestCaseData> testCases = new List<TestCaseData>(); for (int i = 0; i < 10; i++) testCases.Add(new TestCaseData(new object[] { i, i * 2 })); } return testCases; [TestCaseSource("MyTestCases")] public void Class1_DoSomethingWithInput_ResultIsAsExpected(int input, int expected) // ... mint előbb

NUnit [Setup] [TearDown] [TestFixtureSetUp] / [OneTimeSetUp] Az így jelölt metódus minden egyes teszt vagy teszteset előtt le fog futni [TearDown] Az így jelölt metódus minden egyes teszt vagy teszteset futása után lefut [TestFixtureSetUp] / [OneTimeSetUp] Az így jelölt metódus az adott [TestFixture] tesztjeinek futtatása előtt fut, egyszer Pl. az összes teszt által használt objektumok hozhatók létre így – de vigyázzunk, a tesztek ideális esetben nem befolyásolhatják egymást! [TestFixtureTearDown] / [OneTimeTearDown] Az így jelölt metódus az adott [TestFixture] tesztjeinek futtatása után fut, egyszer [SetUpFixture] Osztályra rakható, namespace szintű setup/teardown OneTime... : NUnit 3.0-tól kezdve ez a neve

Jól tesztelni nehéz Legyenek a tesztek gyorsak Lassú tesztek folyamatos futtatása nem lehetséges => hibák késői kiderülését okozhatja Legyenek lehetőleg egymástól függetlenek Sorrend, időzítés stb. nem hathat ki az eredményre Ránézésre olvasható nevekkel A jól elkészített tesztlista dokumentálja a kód képességeit (requirement-listának fogható fel) Nem kell és nem is szabad minden inputlehetőséget lefedni Sokszor példákkal tesztelnek Corner case-ek megtalálása fontosabb Egyszerre egyetlen művelet, és egy osztály tesztelése Mindig függetlenül az éles adattól, ami változhat – tehát nem olvasunk éles adatbázist, éles settingsfájlt, stb. Osztályok függőségeit is helyettesítjük: Dependency Injection + tesztduplikátumok (test doubles) Ránézésre olvasható nevekkel: + ránézésre olvasható teszt is legyen Az egymástól való függetlenítés miatt akár kódduplikáció is simán megengedett

Módszertanok Először kód, utána tesztek Nehéz, nem hatékony! Test First: a fejlesztő a teszteket készíti el először, utána a kódot Előre leírja a kívánt követelményeket – eközben valószínűleg többet is tisztázni kell! Vagy biztosítja egy létező kód jelenlegi működésének megtartását átírás előtt TDD (Test-Driven Development): Sokszor pair programming-ben csinálják A kód ~100%-ban tesztelhetőre „íródik” meg Fejlesztési idő kb. duplázódik Nem mindent érdemes így tesztelni (elsősorban „algoritmikusabb” feladatokhoz ideális) BDD, ATDD...

Feladat Egy bolt egy 5 részes könyvsorozat könyveinek egyszerre megvásárlása esetén a következő kedvezményt adja: 2 könyv esetén: 5% minden könyv árából 3 könyv esetén: 10% minden könyv árából 4 könyv esetén: 20% minden könyv árából 5 könyv esetén: 25% minden könyv árából Minden könyv alapára 8 EUR A kedvezmény csak különböző könyvek esetén érvényesül: 1, 2, 3, 1 => (1, 2, 3) 10% kedvezmény, (1) 0% kedvezmény Bizonyos „vásárlói kosarak” többféleképpen is csoportosíthatók! 1, 1, 2, 2, 3, 3, 4, 5 => (1, 2, 3, 4, 5) (1, 2, 3) vagy (1, 2, 3, 4) (1, 2, 3, 5) ? Írjunk kódot, ami bármilyen „vásárlói kosárnak” kiszámítja az árát Csoportosítás a legegyszerűbb módon (mindig a legnagyobb csoportot alkotjuk), még ha ez nem is a lehető legolcsóbb árat adja

Feladat OE-NIK HP Recently used list Kezdetben üres Az elemek a hozzáadás fordított sorrendjében szerepelnek: a legutóbb hozzáadott elem az első, a legrégebben hozzáadott elem az utolsó. Az elemek indexeléssel elérhetők, az első elem indexe 0. A lista elemei egyediek, egy elem az újrahozzáadásakor a 0. helyre kerül. Null hozzáadása nem megengedett. A listának van kapacitása, a kapacitás elérésekor a legrégebben hozzáadott elemet eldobja. Develop a recently-used-list class to hold strings uniquely in Last-In-First-Out order. o) A recently-used-list is initially empty. o) The most recently added item is first, the least recently added item is last. o) Items can be looked up by index, which counts from zero. o) Items in the list are unique, so duplicate insertions are moved rather than added. Optional extras o) Null insertions (empty strings) are not allowed. o) A bounded capacity can be specified, so there is an upper limit to the number of items contained, with the least recently added items dropped on overflow.