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ó

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

Szoftvertechnológia 9. fejezet. Implementáció és verziókövetés. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

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

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

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

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

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

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

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

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

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

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.

Programozási technológia 2.

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

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

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.

Angolul: Extreme Programming, röviden: XP Agilis módszertan. Más módszertanok bevált technikáinak extrém módú (nagyon jó) használata

Teljesítmény Mérés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Teljesítmény Mérés / 20

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

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

Szoftvertechnolo gia gyakorlat

é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

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

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

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

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

Térinformatikai és távérzékelési alkalmazások fejlesztése. A szoftverfejlesztés technikai támogatása

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)

Objektumelvű programozás

Szoftverminőségbiztosítás

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

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

Programozási nyelvek Java

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

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

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága

Osztályok. 4. gyakorlat

Intervenciós röntgen berendezés teljesítményszabályozójának automatizált tesztelése

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

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

Objektumorientált programozás C# nyelven

Programozási nyelvek Java

Bevezetés, a C++ osztályok. Pere László

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

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

TESZTELÉS A SZOFTVER ÉLETCIKLUSÁN ÁT SZOFTVERFEJLESZTÉSI MODELLEK

Programozási nyelvek Java

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

Bevezetés. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Szendrei Rudolf. Bevezetés. Szoftvertechnológia

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

Informatikai Kar. 3. fejezet. alapismeretek. Giachetta Roberto

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

Objektumorientált programozás C# nyelven

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

Programozási nyelvek Java

Szoftvergyártás: gyártásvezérlés kód-figyeléssel

Miskolci Egyetem Általános Informatikai Tanszék

A tesztelés feladata. Verifikáció

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

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

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

Programozási nyelvek II. JAVA

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

Mobil Informatikai Rendszerek

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. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

A DevOps-kultúra eszközei

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

Szoftver újrafelhasználás

Programozás C++ -ban 2007/7

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

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

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

Java programozási nyelv 5. rész Osztályok III.

Programozási nyelvek II. JAVA

Regionális forduló november 19.

Regionális forduló november 19.

Java és web programozás

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

Komponens alapú fejlesztés

Széchenyi István Egyetem

Programozási technológia

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

GENERIKUS PROGRAMOZÁS Osztálysablonok, Általános felépítésű függvények, Függvénynevek túlterhelése és. Függvénysablonok

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

Pénzügyi algoritmusok

Alprogramok, paraméterátadás

Közösség, projektek, IDE

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?

Challenge Accepted:C++ Standard Template Library

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

Objektum Vezérelt Szoftverek Analízise

Bánsághi Anna 2015 Bánsághi Anna 1 of 31

Tervminták a valósidejű gyakorlatban

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

3. Osztályok II. Programozás II

Miskolci Egyetem Alkalmazott Informatikai Intézeti Tanszék A minőségbiztosítás informatikája. Készítette: Urbán Norbert

Pénzügyi algoritmusok

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Térinformatikai és távérzékelési alkalmazások fejlesztése 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Verifikáció és validáció A szoftver verifikációja és validációja, vagy minőségbiztosítása (quality control) azon folyamatok összessége, amelyek során ellenőrizzük, hogy a szoftver teljesíti-e az elvárt követelményeket, és megfelel a felhasználói elvárásoknak a verifikáció (verification) ellenőrzi, hogy a szoftvert a megadott funkcionális és nem funkcionális követelményeknek megfelelően valósították meg történhet formális, vagy szintaktikus módszerekkel a validáció (validation) ellenőrzi, hogy a szoftver megfelele a felhasználók elvárásainak, azaz jól specifikáltuk-e eredetileg a követelményeket alapvető módszere a elés ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 2 Verifikáció és validáció Az ellenőrzés végezhető statikusan, a modellek és a programkód áttekintésével elvégezhető a teljes program elkészülte nélkül is elkerüli, hogy hibák elfedjék egymást tágabb körben is felfedhet hibákat, pl. szabványoknak történő megfelelés dinamikusan, a program futtatásával felfedheti a statikus ellenőrzés során észre nem vett hibákat, illetve a programegységek együttműködéséből származó hibákat lehetőséget ad a teljesítmény mérésére A elés során különböző eseteket (test case) különböztetünk meg, amelyek az egyes funkciókat, illetve elvárásokat tudják ellenőrizni megadjuk, adott bemenő adatokra mi a várt eredmény (expected result), amelyet a lefutása után összehasonlítunk a kapott eredménnyel (actual result) a eseteket összekapcsolhatjuk a követelményekkel, azaz megadhatjuk melyik eset milyen követelményt ellenőriz (traceability matrix) a esetek gyűjteményekbe helyezzük (test suit) A esetek eredményeiből készül a jelentés (test report) ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 3 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 4 A elési folyamat A elés lépései esetek megtervezése adatok előállítása esetek végrehajtása eredmények összehasonlítása elési terv adatok eredmények jelentés A elés nem a teljes program elkészülte után, egyben történik, hanem általában 3 szakaszból áll: 1. fejlesztői (development testing): a szoftver fejlesztői ellenőrzik a program működését jellemzően fehér doboz (white box) ek, azaz a fejlesztő ismeri, és követi a programkódot 2. kiadás (release testing): egy külön csapat ellenőrzi a szoftver használatát 3. felhasználói (acceptance testing): a felhasználók elik a programot a felhasználás környezetében jellemzően fekete doboz (black box) ek ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 5 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 6 1

A elés lépései A elés lépései A fejlesztési nek további négy szakasza van: egység (unit test): a programegységeket (osztályok, metódusok) külön-külön, egymástól függetlenül eljük felhasználói felhasználói integrációs (integration test): a programegységek együttműködésének je, a rendszer egy komponensének vizsgálata rendszer (system test): az egész rendszer együttes je, a rendszert alkotó komponensek közötti kommunikáció vizsgálata integrációs kiadás rendszer integrációs fejlesztői A elés egy része automatizálható, bizonyos részét azonban mindenképpen manuálisan kell végrehajtanunk egység egység egység ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 7 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 8 Nyomkövetés A elést elősegíti a nyomkövetés (debugging), amely 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, Térinformatikai és távérzékelési alkalmazások fejlesztése 9 Az egységek automatizálását, és az eredmények kiértékelését hatékonyabbá tehetjük elési keretrendszerek (unit testing frameworks) használatával általában a tényleges főprogramoktól függetlenül építhetünk eseteket, amelyeket futtathatunk, és megkapjuk a futás pontos eredményét a estekben egy, vagy több ellenőrzés (assert) kap helyet, amelyek jelezhetnek hibákat amennyiben egy hibajelzést sem kaptunk egy esetből, akkor az eset sikeres (pass), egyébként sikertelen (fail) ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 10 A.NET keretrendszerben az egységeket külön projekt keretében valósítjuk meg a elést végző osztályt a TestClass attribútummal, a eseteket a TestMethod attribútummal jelöljük a ek az Assert osztály segítségével végeznek ellenőrzéseket (AreEqual, IsNotNull, IsFalse, IsInstanceOfType, ), és különböző eredményei lehetnek (Fail, Inconclusive) lehetőségünk van a eket inicializálni (TestInitialize, TestCleanup) a környezetének (TestContext) paraméterei külön kezelhetőek ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 11 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 12 2

[TestClass] // osztály public class RationalTest [TestMethod] // művelet a konstruktorra public void RationalConstructorTest() Rational actual = new Rational(10, 5); Rational target = new Rational(2, 1); // az egyszerűsítést eljük Assert.AreEqual(actual, target); // ha a kettő egyezik, akkor eredményes a // eset függőségekkel Amennyiben függőséggel rendelkező programegységet elünk, a függőséget helyettesítjük annak szimulációjával, amit mock objektumnak nevezünk megvalósítja a függőség interfészét, egyszerű, hibamentes funkcionalitással használatukkal a valóban a megadott programegység funkcionalitását ellenőrzi, nem befolyásolja a függőségben felmerülő esetleges hiba Mock objektumokat manuálisan is létrehozhatunk, vagy használhatunk erre alkalmas programcsomagot pl..net keretrendszerben NSubstitute, Moq ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 13 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 14 függőségekkel Pl. : class DependencyMock : IDependency // mock objektum // egy egyszerű viselkedést adunk meg public Double Compute() return 1; public Boolean Check(Double value) return value >= 1 && value <= 10; Dependant d = new Dependant(new DependencyMock()); // a mock objektumot fecskendezzük be a függő // osztálynak ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 15 függőségekkel Moq segítségével könnyen tudunk interfészekből mock objektumokat előállítani a Mock generikus osztály segítségével példányosíthatjuk a szimulációt, amely az Object tulajdonsággal érhető el, és alapértelmezett viselkedést produkál, pl.: Mock<IDependancy> mock = new Mock<IDependancy>(); // a függőség mock objektuma Dependant d = new Dependant(mock.Object); // azonnal felhasználható a Setup művelettel beállíthatjuk bármely tagjának viselkedését (Returns(), Throws(), Callback()), a paraméterek szabályozhatóak (It) ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 16 függőségekkel pl. : mock.setup(obj => obj.compute()).returns(1); // megadjuk a viselkedést, mindig 1-t ad // vissza mock.setup(obj => obj.check(it.isinrange<double>(0, 10, Range.Inclusive))).Returns(true); mock.setup(obj => obj.check(it.isany<double>()).returns(false); // több eset a paraméter függvényében lehetőségünk van a hívások nyomkövetésére (Verify()) ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 17 Integrációs ek Integrációs ek (I&T) során a függőségeket már nem szimuláljuk, hanem közvetlenül használjuk, így elhető az egyes komponensek együttműködése automatizálható az egységelés eszközeivel, csupán a függőségeket is fel kell használnunk lehetőség van a felhasználói interakció szimulálására is (pl. Coded UI Test, SpecsFor.Mvc) megközelítésben lehet: alulról felfelé (bottom-up), az alsó rétegekből építi fel az alkalmazást, így nincs szükség függőség szimulációra felülről lefelé (top-down): a felső rétegekből indul, és lépésekben csökkenti a szimulációt ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 18 3

Viselkedés alapú elés Viselkedés alapú fejlesztés (BDD) esetén a szoftvernek adott viselkedési mintáknak kell megfelelniük, amelynek elemei a történet (story), amely megadja a viselkedés célját (in order to), a felhasználói szerepet (as a) és tevékenységet (I want to) a történeten belüli forgatókönyvek (scenario), ahol adott kiindulási állapotból (given) egy tevékenység végrehajtása (when) hatására szeretnénk eljutni egy állapotba (then) A történetek megfeleltethetőek környezetnek, forgatókönyvek pedig eseteknek, így jól illeszthetőek a ek eredményei a követelményekhez Viselkedés alapú elés Story: Tic-Tac-Toe game In order to play the game As a player I want to make steps on the game table Scenario 1: First step Given a newly created game table And me being the first player When I step on the first field Then an X should appear on first field ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 19 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 20 Viselkedés alapú elés [TestClass] public class TicTacToeTest [TestMethod] public void FirstStepTest() // given GameTable table = new GameTable(); // when table.step(0, 0); // then Assert.AreEqual("X", table.getfield(0, 0)); Statikus kódelemezés A statikus kódelemzés (static code analysis) lehetővé teszi, hogy a forráskódot még a fordítás előtt előfeldolgozzuk, és a lehetséges hibákat és problémákat előre feltérképezzük a fejlesztőkörnyezet beépített kódelemzővel rendelkezhet, amely megadott szabályhalmaz alapján a lehetséges hibaeseteket felfedi a statikus kód elemzés egy része kimondottan a kódolási konvenciók (pl. elnevezések, tagolás, dokumentáltság) ellenőrzését biztosítja a kódra számíthatók metrikák (code metric), amelyek megadják karbantarthatóságának, összetettségének mértékét (pl. cyclomatic complexity, class coupling) ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 21 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 22 A kódolási stílus (coding style) egy szabályhalmaz, amely a forráskód megjelenésére ad iránymutatást a kódolási stílus követése javítja a kód értelmezhetőségét, a későbbi karbantartást (a program életciklusának 80%-t is kiteheti) a kódolási stílus lehet nyelvi szinten, vállalati szinten, vagy szoftverszinten rögzített így a fejlesztők közötti kommunikáció zökkenőmentes pl. CamelCase, magyar jelölés, K&R, 1TBS a jó programozási stílus általában szubjektív, nem túl szigorú, de alapvető elemeket definiál class Point // camel case (upper, Pascal case) private: int xcoordinate; // camel case (lower) int ycoordinate; double DistanceTo(Point p) const // camel case (upper) return // K&R ; ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 23 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 24 4

class Point private: int x_coordinate; // snake case int y_coordinate; double Distance_To(Point p) // Oxford case return // 1TBS ; Általános érvényű javaslatok: kódrészletek megfelelő elválasztása (szóköz, sortörés, behúzás, függőleges igazítás) beszédes és konzisztens elnevezések használata (kevesebb kommentezést igényelnek) beégetett tartalmi elemek (számok, szövegek) megnehezítik a karbantartást (hard coding), ezért célszerű a kerülése, kiemelése fejlécbe, vagy konfigurációs fájlba (soft coding) A kódolási konvenció rákényszeríthető a programozóra kódolási stílus ellenőrző eszköz segítségével pl. C++Test, StyleCop ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 25 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 26 A kódot a stílusnak megfelelő kommenttel kell ellátni alapvető fontosságú a felület kommentezése (osztályok, függvények, paraméterek) a megvalósítás kommentezése összetett funkcionalitás esetén hasznos, de megfelelő kódolási stílus esetén nem szükséges tartalmazhat speciális jelöléseket (pl. TODO, FIXME) a túl kevés, vagy túl sok komment is ártalmas lehet A kommentek felhasználhatóak dokumentáció előállítására is (pl. Doxygen), amennyiben azokat megfelelő séma szerint hozzuk létre // a type representing a 2D point class Point // computes the Euclidean distance to another // point double DistanceTo(Point p) const return sqrt(pow() + pow()); ; ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 27 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 28 // Name: Point // // Purpose: This type represents a point in a 2D // coordinate system. // Remarks: Is based on double coordinates. // // License: LGPL v2. // // Author: Roberto Giachetta // Date: 27/11/2014 // Contact: groberto@inf.elte.hu class Point // Name: distance // Purpose: This method computes the Euclidean // distance to another Point instance. // Remarks: This a query method. // Parameters: p : another point // Return value: The distance to the other. double distance(point p) const // uses sqrt and pow functions from math.h // formula: return sqrt(pow() + pow()); ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 29 ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 30 5

Általában nyílt és zárt programkódokra más szabályok vonatkoznak nyílt forráskód esetén törekedni kell, hogy a kód minél gyorsabban értelmezhető legyen bárki számára követni kell a programozási nyelv tördelési és elnevezési konvencióit a kód megfelelő mennyiségű megjegyzéssel kell ellátni zárt forráskód esetén a cél a fejlesztőcsapat minél nagyobb rálátása a kódra törekedni kell, hogy minél nagyobb kódmennyiség legyen egyszerre áttekinthető (kevesebb helyköz és komment) ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 31 Kód-újratervezés A kód-újratervezés (refactoring) célja, hogy a kód szerkezete úgy módosuljon, hogy külső viselkedését ezzel nem befolyásoljuk pl. átnevezések, ismétlődő kódok kiemelése, típuscsere, interfész kiemelése, tervezési minta bevezetése ezzel a kód nem funkcionális követelményeit javíthatjuk általában két a karbantarthatóság, illetve a bővíthetőség növelése a cél manuálisan is elvégezhető, de ez hibákhoz vezethet, így erre a célra kód-újratervező (refactoring) eszközöket alkalmazzunk ELTE IK, Térinformatikai és távérzékelési alkalmazások fejlesztése 32 6