< Programozás

Tesztelés

Szerző: Sallai András

Copyright © 2014, Sallai András

Szerkesztve: 2014, 2015, 2017

Licenc: CC Attribution-Share Alike 4.0 International

Web: https://szit.hu

Bevezetés

A szoftverek minőségének biztosítása érdekében azokat tesztelni szoktuk. Tesztelünk mielőtt átadjuk az ügyfelünknek használatra. Ezzel megpróbáljuk a szoftver hibáit megszüntetni. Teljesen lehetetlen, de mindent meg kell tennünk, hogy minél kevesebb hiba maradjon benne.

A tesztelés során átnézzük a forráskódot, vagy elindítjuk a programot és használjuk, vagy automatizált teszteket futtatnunk.

A keresett hibák halmazát nevezzük hibamodellnek.

Teszteset

A tesztelés során megadott megfelelő bemenő és kimenő adatok, amelyek valószínűleg még felfedetlen hibákat mutatnak meg, jó tesztesetnek nevezzük.

Teszteset példa:

A feladat egy háromszög területének kiszámítása. A képlet a következő:

Δ terület = (alap * magasság)/2

Lehetséges bemenőadatok:

alap: 30

magasság: 35

Ekkor a kimenő adat:

(30*35)/2 = 525

Alapelvek

A tesztelés felderíti a hibákat, de az sosem derül ki, hogy nincs több hiba.

Általában csak a magas kockázatú részeket teszteljük.

A tesztjeinket folyamatosan fejleszteni kell.

A magas kockázatú részeket teszteljük.

A megfelelő teszteset kiválasztása: a bemenő és kimenő adatokat együtt adjuk meg.

Ha egy teszteset nem ismételhető, akkor az kerülendő.

Érvényes és érvénytelen adatokra is tesztelünk.

Megfelelő tesztelőt kell választani:

Ez általában a program írójától különböző ember.

Tesztelési technikák

A tesztelési technikákról

Alapvetően kétféle tesztelési technikát különböztetünk meg:

statikus

dinamikus

A tesztelés lehet statikus és dinamikus. Statikus tesztelésről beszélünk, amikor nem fordítjuk, nem futtatjuk a programot, csak a forráskódot vizsgáljuk. Dinamikus tesztelés esetén a forráskódot és futó programot is vizsgáljuk.

Statikus tesztelés

A statikus tesztelésről

A statikus tesztelés lehet szimplán a kód ellenőrzése. Készíthetünk kereszthivatkozási táblázatokat, vagy tartalmilag ellenőrizzük forráskódot.

A forráskódban ellentmondásokat kereshetünk. Például felhasználatlan objektumokat vagy felhasználatlan változóértékeket kereshetünk.

A kódellenőrzés alkalmával összehasonlítjuk a megvalósítandó algoritmust a megírt kóddal. Leghatékonyabb módszer, ha egy avatatlan személynek elmagyarázzuk a kódunk működését sorról sorra.

Kódellenőrzés

Kereszthivatkozás tábla

Tartalmi ellenőrzés

Ellentmondáskeresés

Felhasználatlan változóérték:

i := 1
ciklus i:= 1-től 5-ig
...
ciklus vége

Ha a ciklus előkészíti az i változó értékét, akkor felesleges volt 1 érték beállítása.

Érték nélküli változó:

ha f akkor i := 1
különben j := 1
k := i

Nem változó értékadás:

i := 1 * i - 0

Azonos igaz/hamis logikai formulák:

i<1 és i>= 100, i < i + 1

Az i nem lehet egyszerre 1-nél kisebb és 100-nál nagyobb.

Konstans értékű kifejezés:

x := a^2 - b^2 - (a + b) * (a - b)

Eredménye mindig 0.

Másik konstans értékű kifejezés:

y := cos(x) / sin(x) * tan(x)

Az eredménye mindig 1.

Végtelen ciklus:

ciklus i := 1-től -- n-ig
i := 1
ciklus vége

Érték nélküli függvény, operátor:

függvény absz(x): egész
ha x < 0 akkor absz := -x
függvény vége

Mellékhatással járó függvény:

a1 := f(x) + f(x)
a2 := 2 * f(x)

Előfordulhat, hogy a két kifejezés értéke különböző.

Dinamikus tesztelés

A dinamikus tesztelés során fordítunk és tesztelünk, és a fordítótól eltérő eszközöket is használhatunk.

A dinamikus tesztelés felosztása

A dinamikus tesztelés esetén futtatunk. Futtatjuk a programot, megpróbáljuk végrehajtani. Ha a forráskód rendelkezésre áll, akkor fehér-dobozos tesztről beszélünk, ha nem fekete-dobozos tesztről.

fehér-dobozos

fekete-dobozos

Fehér-dobozos tesztelés

A fehér-dobozos tesztet vagy angolosan white-box a forráskód alapján készítjük. Hozzáférünk a struktúrákhoz, a megvalósításhoz. Jellemzően a fejlesztők végzik.

A tesztelésnek a következő céljai lehetnek:

funkció

képesség (feature)

minőség

tranzakció

strukturális elem

A következő struktúrákat teszteljük:

kódsorok

szelekciók

iterációk

metódusok

osztályok

funkciók

modulok

Felmerül a lefedettség kérdése. Ez alatt értjük, hogy a a struktúrák hány százalékát tudjuk tesztelni a meglévő tesztekkel.

Fekete-dobozos tesztelés

A fekete dobozos teszt esetén, ahol nem férünk hozzá a forráskódhoz, a specifikáció alapján tesztelünk. Az ilyen teszteket jellemzően nem a fejlesztő csapat végzi.

A fekete dobozos módszerek:

ekvivalenciaosztályok keresése

határeset-elemzés

Ekvivalencia osztályok keresése

Keressük a jó teszteseteket, ahol olyan bemenőadatokat keresünk, amelyek minél több feltételnek felelnek meg. Keresnünk kell valamilyen szempontot, amelyek alapján csoportosíthatjuk a bemenő adatokat. Az így kialakított csoportokat nevezzük osztálynak.

Olyan tesztesetet keresünk, amely jellemző az adott csoportra. Egy csoportból bármely elemet kiválasztva, ha hibát kapunk, a csoport egy másik elemét kiválasztva valószínűleg hibát kell kapnunk.

Ha a csoport egy elemére megfelelő eredményt kapunk, akkor a valószínűleg a többire is ezt kell kapjuk.

Ha bemenő adatok egy értéktartományt alkotnak, kétféle ekvivalencia osztályunk lehet:

érvényes – azok az adatok, amelyek megengedettek

érvénytelen – azok az adatok, amelyek a tartomány alatt és felett állnak

Ha például a lehetséges értékek 0 és 10 között vannak, beleértve a 0 és 10-es számot is, akkor a ezt így írhatjuk fel:

Érvényes ekvivalencia osztály:

0<= n <= 10

Érvénytelen ekvivalencia osztály:

n<0 és n>10

Lehetséges, hogy akkor beszélhetünk érvényes ekvivalencia osztályról, ha bemenő adatok száma megadott számú. Például 6 adat érvénytelen. Ha 6-nál több adat, vagy kevesebb, alkotja az érvénytelen ekvivalenciaosztályt.

Lehetséges, érvényes bemenő adatokra valamilyen jellemző. Például 2 hatványai. Ekkor érvényes ekvivalencia osztály:

2, 4, 8, 16, 32, 64, stb.

Érvénytelen:

a több szám

Határeset-elemzés

Az ekvivalencia osztály határon lévő elemeit vizsgáljuk. Ez tekinthető az ekvivalencia osztály kiegészítésének.

Ha az érvényes tartomány, nem szigorúan véve 0 és 10 közé esik, akkor a vizsgálandó érvényes adatok:

0, 10

Érvénytelen vizsgálandó adatok:

-1 és 11

Adott darabszám esetén, ha pontosan 6 adat a bemenet, akkor érvényes adatként vizsgálunk 6 darab adatot, érvénytelenként 5 és 7 darab adatot.

Összefoglalva

Tesztelési tevékenység

A tesztelési folyamatot a tervezéstől a végeredményig a következőkben foglalhatjuk össze:

tesztterv készítés

végrehajtás

kilépési feltételek vizsgálata

eredmények értékelése

jelentést készítünk

Kilépési feltételek: Megnevezzük azokat a feltételeket, amikor befejezhetjük a tesztelést.

Verifikáció és validáció

Verifikáció	Validáció
Jól terveztem meg? A tervezésre és a kivitelezésre vonatkozik.	Ami elkészült az jó? Az ügyfélnek megfelel a termék?

Tesztek osztályozása

Funkcionális tesztelés - bizonyos funkciók működnek-e

Példák.: keresés, süti tárolásra kerül (böngészőben)

UI teszt

Példák: olvasható fontok, megfelelő színek, igazítások, kép láthatósága

Biztonsági teszt

Példák: inaktivitás után automatikus kilépés működik?

Adatbázisteszt

Példák:

hibák a lekérdezések során

válaszidő?

minden adat megjelenik a UI-on?

Cross Browser kompatibilitás

Safari, Firefox, Edge, Google Chrome, Vivaldi, Opera, stb.

Teljesítményteszt

Az alkalmazás válaszideje

Eszközök: JMeter, Loadrunner stb.

Használhatósági teszt

menük, képek, űrlapok szövegdobozok, linkek

Közösségi tesztelés (crowd vagy crowdsourced testing)

Valós felhasználók tesztelik az alkalmazást

A tesztelés szintjei

egységtesztelés

integrációs tesztelés

rendszer tesztelés

elfogadási teszt

Függelék

Feketedobozos teszt egyik formájára példa

A program

Adott egy egyszerű program, amelyben szavakat tárolunk egy listában. A listához felvehetők újabb elemek, a meglévő szerkeszthetők, törölhetők.

Legfelül látjuk a szavak listáját, alul egy szerkesztőmező. A szerkesztőmező alapértelmezésként üres. Ha szerkesztőmezőbe egy újabb szót írok, a „Hozzáadás” gombra kattintva az új elem a listába kerül.

A „Szerkesztésre” gombra kattintva a program a listában kijelölt elemet a szerkesztőmezőbe másolja.

Illegális karakter

A szerkesztőmezőben illegális karakter a magyar ábécétől eltérő karakter. Ha beírok például egy „+” karaktert, a program a következő módon reagál…

Üres elem felvitele

A szerkesztő mező üres, és kattintok a „Hozzáadás” gombra, hibás ha listában egy üres elem jelenik meg. A programban a hiba javítva van, ilyenkor egy üzenet ablakot is feldob, amelyben tájékoztat, hogy üres adatot próbáltunk meg bevinni.

Ekvivalencia partíconálás

Equivalence partitioning, amelyet Equivalence Class Partitioning néven is említünk vagy csak röviden ECP.

Egy szoftvertesztelési technika, ahol a bemenő adatokat ekvivalencia osztályokba soroljuk, vagyis csoportosítjuk.

Az egy ekvivalencia osztályba sorolt hibák előfordulása, ugyanazt a hibást eredményt adják.

Két típusú ekvivalencia osztályt kell keresnünk. Az egyik amikor érvényesek a bemeneti adatok, a másik amikor érvénytelenek.

Teljesítményteszt

A tesztek szintekre osztása

komponensteszt

integrációs teszt

rendszerteszt

átvételi teszt

Futási idő tesztelése

:: Szerző: @ScottStafford :: Forrás: http://stackoverflow.com/questions/673523/how-to-measure-execution-time-of-command-in-windows-command-line (2015) :: Kicsit átírta: Sallai András :: Használat: c:\>timecmd [parancs] @echo off @setlocal set start=%time% :: runs your command cmd /c %* set end=%time% set options="tokens=1-4 delims=:." for /f %options% %%a in ("%start%") do set start_h=%%a&set /a start_m=100%%b %% 100&set /a start_s=100%%c %% 100&set /a start_ms=100%%d %% 100 for /f %options% %%a in ("%end%") do set end_h=%%a&set /a end_m=100%%b %% 100&set /a end_s=100%%c %% 100&set /a end_ms=100%%d %% 100 set /a hours=%end_h%-%start_h% set /a mins=%end_m%-%start_m% set /a secs=%end_s%-%start_s% set /a ms=%end_ms%-%start_ms% if %hours% lss 0 set /a hours = 24%hours% if %mins% lss 0 set /a hours = %hours% - 1 & set /a mins = 60%mins% if %secs% lss 0 set /a mins = %mins% - 1 & set /a secs = 60%secs% if %ms% lss 0 set /a secs = %secs% - 1 & set /a ms = 100%ms% if 1%ms% lss 100 set ms=0%ms% :: mission accomplished set /a totalsecs = %hours%*3600 + %mins%*60 + %secs% echo Felhasznalt: %hours%:%mins%:%secs%.%ms% (%totalsecs%.%ms%s total)

Egyéb program:

ptime

Kézi tesztelés

Teszteléshez_sablon

https://szit.hu/download/oktatas/teszt_sablon.xlsx

Linkek és források

Linkek

http://sourceforge.net/projects/lxr/

http://www.tesztelesagyakorlatban.hu/ (2018)

http://www.tesztelesagyakorlatban.hu/keres_cikk.php?mit=40

http://www.tesztelesagyakorlatban.hu/keres_cikk.php?mit=6

http://grinder.sourceforge.net/

http://www.opensourcetesting.org/

http://www.pc-tools.net/win32/ptime/ (Futási idő mérése ptime paranccsal)

Forrás

http://progalap.elte.hu/downloads/seged/eTananyag/ (2014)

http://www.tankonyvtar.hu/hu/tartalom/tamop425/0046_szoftverteszteles/ (2014)

https://tananyagbank.nive.hu/ (Lénárt György Programozás - Szoftverek tesztelése, dokumentálása) (2014)

Snyk

https://en.wikipedia.org/wiki/Snyk

https://www.npmjs.com/package/snyk

https://snyk.io/