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

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

Programozási technológia 2.

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

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

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

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

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

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

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ó

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.

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)

ELTE, Informatikai Kar december 12.

Szoftvertesztelés - Bevezető

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

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

Miskolci Egyetem Általános Informatikai Tanszék

A tesztelés feladata. Verifikáció

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

A szoftver tesztelés alapjai

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

Szoftverminőségbiztosítás

Modell megvalósítása. Gregorics Tibor: Eseményvezérelt alkalmazások fejlesztése I.

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

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

JSF alkalmazások teljesítményhangolása JMeter és dynatrace segítségével

ORVOSTECHNIKAI ESZKÖZÖK GYÁRTMÁNYFEJLESZTÉSE AKTÍV ORVOSI ESZKÖZÖK FEJLESZTÉSE - PEMS V&V

ESZKÖZTÁMOGATÁS A TESZTELÉSBEN

Szoftverminőségbiztosítás

Orvostechnikai eszközök gyártmányfejlesztése Aktív orvosi eszközök fejlesztése PEMS V&V. Nagy Katinka

Tesztelési szintek Tesztautomatizálás

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

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

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

Programozási nyelvek II. JAVA

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

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

Szoftvertesztelés Alapok

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

(Teszt)automatizálás. Bevezető

Statikus technikák: A szoftver átvizsgálása. Statikus technikák: A szoftver átvizsgálása

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Tesztelés az XP-ben Tesztelés az XP-ben. A tesztelés kulcsjellemzői:

Integrációs mellékhatások és gyógymódok a felhőben. Géczy Viktor Üzletfejlesztési igazgató

Szoftvertechnológia 12. előadás. Szoftverfejlesztési módszerek és modellek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Szoftverminőségbiztosítás

Digitális eszközök típusai

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

Információtartalom vázlata

Szoftverminőségbiztosítás

Szoftverfejlesztés teszteléssel

MIÉRT KELL TESZTELNI?

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

A fejlesztési szabványok szerepe a szoftverellenőrzésben

Szoftverminőségbiztosítás

A Feldspar fordító, illetve Feldspar programok tesztelése

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

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

30 MB INFORMATIKAI PROJEKTELLENŐR

TESZTMENEDZSMENT TESZTELŐ SZERVEZET TESZTTERVEZÉS ÉS BECSLÉS

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

Integráci. ciós s tesztek. ciós s tesztek (folyt.) Integration Level Testing (ILT) Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Intelligens eszközök fejlesztése az ipari automatizálásban

S01-8 Komponens alapú szoftverfejlesztés 2

Informatikai projektellenőr szerepe/feladatai Informatika / Az informatika térhódítása Függőség az információtól / informatikától Információs

Test Management Strategy Document. Deák Kristóf Lauly Viktória Kunigunda Csiki Norbert Szabó Zoltán

Nagy bonyolultságú rendszerek fejlesztőeszközei

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

Mesterséges intelligencia alapú regressziós tesztelés

Unit tesztelés. Honfi Dávid, Micskei Zoltán. Integrációs és ellenőrzési technikák (VIMIA04) Méréstechnika és Információs Rendszerek Tanszék

Rubin SPIRIT TEST. Rubin firmware-ek és hardverek tesztelése esettanulmány V1.0. Készítette: Hajnali Krisztián Jóváhagyta: Varga József

Test plan Okoshaz projekt

Előadók: Angyal Gergely (Raiffeisen), tesztelési csoportvezető Kováts Márton (KFKI), szenior rendszermérnök

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

Kivételkezelés. Tesztelés, hibakeresés, kivételkezelés. Programozás II. előadás. Szénási Sándor

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

Szoftver karbantartási lépések ellenőrzése

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

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

A DevOps-kultúra eszközei

Autóipari beágyazott rendszerek. Kockázatelemzés

Programrendszerek tanúsítása szoftverminőség mérése

SZOFTVER TESZT AUTOMATIZÁLÁS Eszter Vezdén Budapest, 08 November 2018

8.3. AZ ASIC TESZTELÉSE

A TESZTELÉS ALAPJAI A TESZTELÉS ALAPVETŐ FOLYAMATA A TESZTELÉS PSZICHOLÓGIÁJA A TESZTELÉS ETIKAI KÓDEXE

FORRÁSKÓD KÖVETŐ RENDSZEREK. Rajacsics Tamás BME AAIT

S01-9 Szoftverfejlesztés minőségi aspektusai

A programkód átvizsgálásának hatékonyságát két ok magyarázza:

Informatikai rendszertervezés

Az alkalmazás minőségbiztosítás folyamata Fókuszban a teszt-automatizálás

A modellellenőrzés érdekes alkalmazása: Tesztgenerálás modellellenőrzővel

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

Kompetens szoftvertesztelés a gyakorlatban II. zárthelyi dolgozat

Szoftver karbantartás

1. Melyik szabvány foglalkozik dokumentumok tulajdonságainak megfogalmazásával? a. RDFS b. FOAF c. Dublin Core d. DBPedia

Bevezetés az informatikába

Programozási nyelvek II. JAVA

ESZKÖZTÁMOGATÁS A TESZTELÉSBEN

Autonóm járművek városi közlekedésének kihívásai

V. Félév Információs rendszerek tervezése Komplex információs rendszerek tervezése dr. Illyés László - adjunktus

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Programozási technológia II 7. előadás Verifikáció és validáció 2016 Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto

Minőségbiztosítás 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 tesztelés ELTE IK, Programozási technológia II 7:2

Módszerei 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 ELTE IK, Programozási technológia II 7:3

Tesztelés A tesztelés célja a szoftverhibák felfedezése és szoftverrel szemben támasztott minőségi elvárások ellenőrzése futási idejű hibákat (failure), működési rendellenességeket (malfunction) keresésünk, kompatibilitást ellenőrzünk általában a program (egy részének) futtatásával, szimulált adatok alapján történik nem garantálja, hogy a program hibamentes, és minden körülmény között helyáll, de felfedheti a hibákat adott körülmények között A teszteléshez tesztelési tervet (test plan) készítünk, amely ismerteti a tesztelés felelőseit, folyamatát, technikáit és céljait ELTE IK, Programozási technológia II 7:4

Tesztesetek A tesztelés során különböző teszteseteket (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 teszt lefutása után összehasonlítunk a kapott eredménnyel (actual result) a teszteseteket összekapcsolhatjuk a követelményekkel, azaz megadhatjuk melyik teszteset milyen követelményt ellenőriz (traceability matrix) a tesztesetek gyűjteményekbe helyezzük (test suit) A tesztesetek eredményeiből készül a tesztjelentés (test report) ELTE IK, Programozási technológia II 7:5

A tesztelési folyamat tesztesetek megtervezése tesztelési terv tesztadatok előállítása tesztadatok tesztesetek végrehajtása teszteredmények eredmények összehasonlítása tesztjelentés ELTE IK, Programozási technológia II 7:6

A tesztelés lépései A tesztelés nem a teljes program elkészülte után, egyben történik, hanem általában 3 szakaszból áll: 1. fejlesztői teszt (development testing): a szoftver fejlesztői ellenőrzik a program működését jellemzően fehér doboz (white box) tesztek, azaz a fejlesztő ismeri, és követi a programkódot 2. kiadásteszt (release testing): egy külön tesztcsapat ellenőrzi a szoftver használatát 3. felhasználói teszt (acceptance testing): a felhasználók tesztelik a programot a felhasználás környezetében jellemzően fekete doboz (black box) tesztek ELTE IK, Programozási technológia II 7:7

A tesztelés lépései A fejlesztési tesztnek további négy szakasza van: egységteszt (unit test): a programegységeket (osztályok, metódusok) külön-külön, egymástól függetlenül teszteljük integrációs teszt (integration test): a programegységek együttműködésének tesztje, a rendszer egy komponensének vizsgálata rendszerteszt (system test): az egész rendszer együttes tesztje, a rendszert alkotó komponensek közötti kommunikáció vizsgálata A tesztelés egy része automatizálható, bizonyos részét azonban mindenképpen manuálisan kell végrehajtanunk ELTE IK, Programozási technológia II 7:8

A tesztelés lépései felhasználói teszt felhasználói teszt kiadásteszt rendszerteszt integrációs teszt integrációs teszt fejlesztői teszt egységteszt egységteszt egységteszt ELTE IK, Programozási technológia II 7:9

Nyomkövetés A tesztelé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, Programozási technológia II 7:10

Egységtesztek Az egységteszt során törekednünk kell arra, hogy a programegység összes funkcióját ellenőrizzük, egy osztály esetén ellenőrizzük valamennyi (publikus) metódust állítsuk be, és ellenőrizzük az összes mezőt az összes lehetséges állapotba helyezzük az osztályt, vagyis szimuláljuk az összes eseményt, amely az osztályt érheti A teszteseket célszerű leszorítani a programegység által megengedett bementre, így ellenőrizve a várt viselkedését nem megengedett bemenetre, így ellenőrizve a hibakezelést ELTE IK, Programozási technológia II 7:11

Egységtesztek A bemenő adatokat részhalmazokra bonthatjuk a különböző hibalehetőségek függvényében, és minden részhalmazból egy bemenetet ellenőrizhetünk Pl. egy téglalap méretei egész számok, amelyek lehetnek negatívak, amely nem megengedett tartomány nulla, amely megengedhető (üres téglalap) pozitívak, amely megengedett, ugyanakkor speciális esetet jelenthetnek a nagy számok Az egységtesztet az ismétlések és a számos kombináció miatt célszerű automatizálni (pl. a teszt implementációjával) ELTE IK, Programozási technológia II 7:12

Tesztelési keretrendszerek Az egységtesztek automatizálását, és az eredmények kiértékelését hatékonyabbá tehetjük tesztelési keretrendszerek (unit testing frameworks) használatával általában a tényleges főprogramoktól függetlenül építhetünk teszteseteket, amelyeket futtathatunk, és megkapjuk a futás pontos eredményét a tesztestekben egy, vagy több ellenőrzés (assert) kap helyet, amelyek jelezhetnek hibákat amennyiben egy hibajelzést sem kaptunk egy tesztesetből, akkor az eset sikeres (pass), egyébként sikertelen (fail) pl. JUnit, JWalk, CppTest, QTestLib ELTE IK, Programozási technológia II 7:13

Tesztelési keretrendszerek TestSuit Object Tester loop testcase() execute() assert() alt [test succeeded] [test failed] pass() fail() ELTE IK, Programozási technológia II 7:14

Kód lefedettség A tesztgyűjtemények által letesztelt programkód mértékét nevezzük kód lefedettségnek (code coverage) megadja, hogy a tényleges programkód mely részei kerültek végrehajtásra a teszt során számos szempont szerint mérhető, pl. alprogram (function): mely alprogramok lettek végrehajtva utasítás (statement): mely utasítások lettek végrehajtva elágazás (branch): az elágazások mely ágai futottak le feltételek (condition): a logikai kifejezések mely részei lettek kiértékelve (mindkét esetre) ELTE IK, Programozási technológia II 7:15

További tesztek Az integrációs és rendszertesztek során elsősorban azt vizsgáljuk, hogy a rendszer megfelel-e a követelménybeli elvárásoknak funkcionális és nem funkcionális alapon (pl. teljesítmény, biztonság) is ellenőrizhetjük a rendszert ezeket a teszteseteket már a specifikáció során megadhatjuk a tesztelés első lépése a füst teszt (smoke test), amely során a legalapvetőbb funkciók működését ellenőrzik A kiadásteszt és a felhasználói teszt során a szoftvernek már általában a célkörnyezetben, tényleges adatokkal kell dolgoznia a teszt magába foglalja a kihelyezést (pl. telepítés) is ELTE IK, Programozási technológia II 7:16

Programváltozatok Az implementáció és tesztelés során a szoftver különböző változatait tartjuk nyilván: pre-alfa: funkcionálisan nem teljes, de rendszertesztre alkalmas alfa: funkcionálisan teljes, de a minőségi mutatókat nem teljesíti béta: funkcionálisan teljes, és a minőségi mutatók javarészt megfelelnek a követelményeknek a további tesztelés során nagyrészt a rendellenességek kiküszöbölése folyik, a tesztelés lehet publikus esetlegesen kiegészítő funkciók kerülhetnek implementálásra ELTE IK, Programozási technológia II 7:17

Programváltozatok kiadásra jelölt (release candidate, RC), vagy gamma: funkcionálisan teljes, minőségi mutatóknak megfelelő kódteljes (nem kerül hozzá újabb programkód, legfeljebb hibajavítás) csak dinamikus tesztelés folyik, és csak kritikus hiba esetén nem kerül gyártásra végleges (final, release to manufacturing, RTM): a kiadott, legyártott változat nyílt forráskód esetén általában már korábban publikussá válik a (félkész) szoftver a kiadást követően a program további változásokon eshet át (javítások, programfunkció bővítés) ELTE IK, Programozási technológia II 7:18

Teljesítménytesztek A teljesítménytesztek (performance test) során a rendszer teljesítményét mérjük ezáltal a rendszer megbízhatóságát és teljesítőképességének (válaszidők, átviteli sebességek, erőforrások felhasználása) ellenőrizzük különböző mértékű feladatvégzés esetén végezhetünk teszteket a várható feladatmennyiség függvényében (load test), vagy azon túl ellenőrizhetjük a rendszer tűrőképességét (stress test) a teljesítményt sokszor a hardver erőforrások függvényében végezzük, amellyel megállapítható a rendszer skálázhatósága (capacity test) ELTE IK, Programozási technológia II 7:19

Tesztvezérelt fejlesztés A tesztvezérelt fejlesztés (test-driven development, TDD) egy olyan fejlesztési módszertan, amely a teszteknek ad elsőbbséget a fejlesztés során a fejlesztés lépései: 1. tesztesetek elkészítése, amely ellenőrzi az elkészítendő kód működését 2. az implementáció megvalósítása, amely eleget tesz a teszteset ellenőrzéseinek 3. az implementáció finomítása a minőségi elvárásoknak (tervezési és fejlesztési elvek) megfelelően előnye, hogy magas fokú a kód lefedettsége, mivel a teszteknek minden funkcióra ki kell térniük ELTE IK, Programozási technológia II 7:20

Tesztvezérelt fejlesztés tesztesetek létrehozása programegység véglegesítése programegység implementálása [finomítás szükséges] [a minőség megfelelő] [sikertelen] programegység tesztelése kódminőség ellenőrzése [sikeres] ELTE IK, Programozási technológia II 7:21

Követelmények Tervezés Implementáció Tesztelés Üzemeltetés Verifikáció és validáció A hibajavítás költségei Hiba felfedezésének helye A hibajavítás költsége a hiba felfedezésének helye (ideje) függvényében Hiba helye Követelmények 1x 3x 5-10x 10x 10-100x Tervezés 1x 10x 15x 25-100x Implementáció 1x 10x 10-25x ELTE IK, Programozási technológia II 7:22