Grafikus C# – Windows Forms tanfolyam › 13.8 lecke Windows Forms · 13.8 lecke · tesztelés „Nálam működik” – a legismertebb programozói mondat, és a legnagyobb félreértés. A program akkor jó, ha mások gépén, mások kezében, mindenféle bevitellel is jól működik. A tesztelés célja nem az, hogy bebizonyítsd: nincs hiba (ez nem lehetséges), hanem hogy módszeresen keresd a hibákat, mielőtt a felhasználó találja meg. Ebben a leckében megtanulod a tesztelés fajtáit, azt, hogyan írsz tesztesetet (azonosító, előfeltétel, lépések, elvárt eredmény), hogyan választasz jó teszteseteket (ekvivalencia-osztályok, határérték-elemzés), hogyan írsz hibajelentést, mi a regressziós és a felderítő tesztelés, és mire kell figyelned egy Windows Forms alkalmazásnál.Manuális tesztelés és tesztesetek

A lecke végére
- megkülönbözteted a tesztelés fajtáit (egység, integráció, rendszer, regressziós, felderítő, elfogadási), és tudod, mikor jó a kézi tesztelés;
- teljes értékű tesztesetet írsz (azonosító, előfeltétel, lépések, elvárt eredmény);
- ekvivalencia-osztályokkal és határérték-elemzéssel választasz teszteseteket;
- jó hibajelentést írsz (reprodukálható, egyértelmű, besorolt);
- regressziós tesztet és felderítő tesztelést végzel;
- Windows Forms-specifikus ellenőrzőlistával dolgozol (tabulátor, átméretezés, billentyűk, többszöri nyitás).
Mielőtt elkezded
Ehhez a leckéhez a 13.5 lecke (határérték-elemzés), a 13.7 lecke (napló) és a 12.7 lecke (logika külön osztályban, tesztelhetőség) szükséges.
A tesztelés fajtái és célja
| Fajta | Mit vizsgál? | Ki és hogyan? |
|---|---|---|
| Egységteszt | Egy metódus vagy osztály működése (12.7 lecke). | A programozó, automatikusan (kód). |
| Integrációs teszt | A részek együttműködése (szolgáltatás + tároló). | Programozó, automatikusan vagy kézzel. |
| Rendszerteszt (kézi) | A teljes program a felhasználó szemével: felület, folyamatok. | Tesztelő (te vagy más), kézzel, tesztesetek szerint. |
| Regressziós teszt | A javítás vagy bővítés után a régi funkciók még működnek-e. | Ismételt tesztek (kézi vagy automatikus). |
| Felderítő (exploratory) | Szabad, kreatív „kutatás”: a tesztelő kipróbál, és közben tanul. | Tesztelő, időkerettel és céllal. |
| Elfogadási teszt | Megfelel-e a megrendelő elvárásának? | Megrendelő/felhasználó. |
| Használhatósági teszt | Érthető, kényelmes-e a felület? | Valódi felhasználók megfigyelése. |
Jósolj!
A kollégád bevezet egy új funkciót, és kijavít egy hibát. Egy hét múlva a mentés (amit nem is érintett) nem működik. Milyen tesztelés kapta volna el ezt?
Jóslat ellenőrzése
A regressziós tesztelés: minden módosítás után a korábban működő funkciókat újra ellenőrzöd (kézi tesztlistával vagy automatikus tesztekkel). A módosítások gyakran véletlenül elrontanak más részeket.
A teszteset felépítése
Azonosító: TC-REG-007
Cím: Az életkor alsó határának ellenőrzése (10)
Előfeltétel: A regisztrációs űrlap meg van nyitva, minden más mező érvényesen kitöltve
Tesztadat: Életkor = 10
Lépések: 1. Írd be az Életkor mezőbe: 10
2. Kattints a Mentés gombra
Elvárt eredmény: A mentés sikeres; nincs hibajel az Életkor mező mellett;
az állapotsor: "Mentve."
Tényleges: (a végrehajtás után kitöltendő)
Státusz: Nem futtatva / Sikeres / Hibás / Blokkolt
Megjegyzés: Kapcsolódó hiba: BUG-012 (ha hibás)Jósolj!
Egy teszteset így szól: „Lépés: kattints a Mentésre. Elvárt: működik.” Mi a baj vele?
Jóslat ellenőrzése
Nincs előfeltétel (mi legyen kitöltve?), nincs tesztadat, és az elvárt eredmény nem ellenőrizhető („működik”: mit jelent?). Két tesztelő két különböző dolgot csinálna, és mindkettő „sikeresnek” látná. A jó elvárt eredmény: az állapotsor „Mentve.”, a lista egy új sorral bővült.
Jó tesztesetek kiválasztása: technikák
| Technika | Lényege | Példa: életkor 10–120 |
|---|---|---|
| Ekvivalencia-osztályok | A bemeneteket csoportokra osztod, amelyeken belül a program ugyanúgy viselkedik; csoportonként 1 teszt elég. | Érvényes (10–120): pl. 35. Túl kicsi (<10): pl. 5. Túl nagy (>120): pl. 200. Nem szám: "abc". Üres. |
| Határérték-elemzés | A hibák a határokon élnek: a határ és a két oldala. | 9, 10, 11 és 119, 120, 121. |
| Döntési tábla | Több feltétel kombinációi és az eredményük táblázatban. | Kedvezmény: törzsvásárló × 10 000 Ft felett × kupon: 8 kombináció. |
| Állapotátmenet | A program állapotai és a köztük lévő átmenetek (melyik gomb mikor aktív). | Kölcsönzés: elérhető → kikölcsönzött → késik → visszahozott. |
| Hibatippelés / tapasztalat | A tipikus hibák ismerete alapján. | Üres, szóköz, nagyon hosszú, különleges karakter, dupla kattintás, 0, negatív. |
Bemenet Osztály Elvárt eredmény
--------- -------------------- ----------------------------------------
35 érvényes (tipikus) elfogadva
10 alsó határ elfogadva
120 felső határ elfogadva
9 alsó határ − 1 hiba: "10 és 120 között lehet"
121 felső határ + 1 hiba: "10 és 120 között lehet"
-5 negatív hiba
"" üres hiba: "kötelező"
" " csak szóköz hiba: "kötelező"
"abc" nem szám hiba: "egész szám kell"
"12,5" tizedes hiba: "egész szám kell"
"99999999999" túlcsordulás hiba (nem összeomlás!)
" 15 " szóközök a szám körül elfogadva (Trim) vagy hiba: a szabály döntse el< vagy <=), ezért a határokat külön kipróbáljuk.Jósolj!
Egy mező 1 és 100 közötti pontszámot fogad el. Hány tesztet írnál az ekvivalencia-osztályokkal és a határértékekkel együtt, legalább?
Jóslat ellenőrzése
Kb. 10–12: érvényes tipikus (50), a határok és szomszédaik (0, 1, 2 és 99, 100, 101), üres, nem szám ("abc"), tizedes (1,5), negatív (−1). A 100 lehetséges érték helyett 10–12 jól választott teszt a hibák nagy részét megtalálja.
A hibajelentés
Rossz hibajelentés
Cím: Nem működik
Leírás: A mentés hibás. Javítsd!Nem tudni, mi hibás, hogyan hozható elő, mit kellene látni. A fejlesztő nem tudja reprodukálni, és vissza kell kérdeznie.
Jó hibajelentés
BUG-012: A 10 éves korú felhasználó regisztrációja hibával elutasul
Környezet: v1.4.2, Windows 11 (hu-HU), 1920x1080, 125% DPI
Lépések: 1. Töltsd ki az űrlapot érvényes adatokkal
2. Életkor: 10
3. Kattints a Mentés gombra
Elvárt: Sikeres mentés (a határ 10 érvényes)
Tényleges: "Az életkor 10 és 120 között lehet" hibajel
Reprodukál: Mindig (5/5)
Súlyosság: Közepes (a funkció használható, de egy érvényes eset hibás)
Mellékletek: kep-12.png, naplo-20260115.log (09:14:52)Jósolj!
A hibajelentés csak annyit mond: „néha lefagy”. Mi a fejlesztő első lépése?
Jóslat ellenőrzése
Visszakérdezni (mikor, mit csinált, melyik gép), vagy a naplót (13.7 lecke) keresni: időt veszít. A jó hibajelentés eleve tartalmazza a lépéseket, a környezetet és a naplót, hogy a fejlesztő azonnal reprodukálhasson. A „néha” sosem elég: legalább az előzmények kellenek.
Windows Forms ellenőrzőlista, regresszió, felderítés
Windows Forms ellenőrzőlista
- Tabulátor-sorrend: a Tab a logikus sorrendben lép (
TabIndex), és minden használható vezérlőt eléri? - Billentyűk: Enter (
AcceptButton), Esc (CancelButton), gyorsbillentyűk (Alt+betű) működnek? - Átméretezés: az ablak kicsinyítve/nagyítva is használható (
Anchor,Dock)? Minimális méret? - DPI és téma: 125%, 150% nagyításnál sem vágódik le a szöveg? Sötét mód / nagy kontraszt?
- Többszöri nyitás: a Form kétszer, harmadszor is megnyitva ugyanúgy működik (nem marad régi állapot)?
- Dupla kattintás: a gomb kétszeri megnyomása nem okoz dupla műveletet?
- Bezárás: bezárás munka közben, mentetlen változással: rákérdez?
- Fókusz: hiba után a fókusz a hibás mezőre kerül? Megnyitáskor az első mezőn áll?
- Hosszú adat: hosszú szöveg, sok sor, nagy lista: nem akad, nem vágódik le?
- Ékezetek és kultúra: ő, ű, ß, emoji; tizedesvessző (13.5 lecke).
Regressziós és felderítő tesztelés
Smoke teszt (5 perc): a program elindul-e, a fő funkciók (megnyit, ment, bezár) élnek-e. Ha ez elbukik, nincs értelme a részletes tesztnek.
Regressziós készlet: a fontos és a korábban hibás funkciók tesztesetei; minden kiadás előtt végigfuttatod. Minden javított hibához tegyél új tesztesetet: soha ne térjen vissza ugyanaz a hiba.
Felderítő munkamenet: cél (charter: „fedezd fel a keresést ékezetes szövegekkel”), időkeret (30–60 perc), jegyzetelés (mit próbáltam, mit találtam, mi gyanús). Nem összevissza kattintás: tervszerű kutatás, amelyből később tesztesetek lesznek.
Jósolj!
Egy beviteli ablak 100%-os DPI-nél tökéletes. Egy másik gépen 150%-os nagyításnál a Mentés gomb szövege félig levágva látszik. Melyik teszt-ellenőrzés tárta volna fel?
Jóslat ellenőrzése
A DPI-ellenőrzés a Windows Forms-listán: a programot 125% és 150% nagyítású beállításon is meg kell nézni (és AutoScaleMode, AutoSize megfelelő használata kell). Ezt a hibát csak másik környezetben, kézi teszteléssel találod meg.
Mit tegyél ide: a kitöltött tesztterv táblázat egy részlete, és egy hibajelentés a képernyőképpel.Javasolt fájlnév: winforms-13-8-tesztterv.webp · Alt szöveg: A tesztterv és hibajelentés részlete
Hibakeresés: te vagy a hibadetektív
Mi a baj, és hogyan javítod?
Gondold végig az okot, és csak utána nyisd le a megoldást.
1. A tesztelő „sikeresnek” találja a hibás programot
Az elvárt eredményt a program kimenetéből másolták a tesztesetbe. Az elvárt eredménynek a követelményből kell jönnie, még a futtatás előtt, független forrásból (kézi számítás, specifikáció). Különben a hibát „igazolod”.Ok és javítás
2. A fejlesztő nem tudja reprodukálni a hibát
„Nálam működik” a válasz a hibajelentésre. A jelentés hiányos: nincs környezet (Windows, kultúra, DPI), nincs tesztadat, nincs pontos lépéssor. Egészítsd ki, és csatold a naplót (13.7 lecke).Ok és javítás
3. Csak a szokásos útvonalat tesztelték
A program a bemutatón működik, a felhasználó mégis összeomlasztja. Csak érvényes, tipikus bemenet volt a tesztben. Add hozzá az érvénytelen osztályokat, a határokat, az üreset és a szokatlant (hibatippelés), és kérj meg valakit, aki nem ismeri a programot.Ok és javítás
4. A javítás elrontott valami mást
A tegnapi hibajavítás után ma egy másik funkció nem működik. Nincs regressziós teszt. Minden javítás után futtasd a regressziós készletet (smoke teszt + a fontos funkciók), és a javított hibához adj új tesztesetet.Ok és javítás
5. Egy teszt mindent ellenőriz
Egy tesztesetben 15 lépés és 8 elvárás van; elbukik, de nem tudni, miért. Bontsd kisebb tesztekre: egy teszt egy cél, így a bukásnál azonnal látszik a hiba oka.Ok és javítás
6. A tesztadat elfogyott
Másodszorra a teszt már nem ugyanazt az eredményt adja, mert a program megváltoztatta az adatokat. Nincs ismert kiinduló állapot (előfeltétel). Minden teszt előtt állítsd vissza a tesztadatot (másolat a kiinduló fájlról, tiszta adatbázis).Ok és javítás
Mini projekt: tesztterv és hibajelentések egy hibás programhoz
Kapsz egy kis programot szándékosan elrejtett hibákkal. Feladatod: módszeresen tesztelni, tesztesetekkel dokumentálni, és hibajelentéseket írni:
- Építsd meg a tesztalanyt: Windows Forms projekt (
Pontszamito):txtNev,nudPont(NumericUpDown, 0–100),btnSzamol(Jegy kiszámítása),btnTorol,lblJegy,lstEredmenyek(a korábbi számítások listája); a kódot (lent) másold be. - Követelmény: jegy a pontból: 0–39 → 1; 40–54 → 2; 55–69 → 3; 70–84 → 4; 85–100 → 5. A név kötelező (2–30 karakter). A Jegy kiszámítása hozzáad egy sort az eredménylistához (Anna: 78 pont → 4). Enter = számítás. A Törlés üríti a listát és a mezőket.
- Tesztterv: táblázatban (Excel vagy Google Táblázat), legalább 20 tesztesetet írj: azonosító, cím, előfeltétel, tesztadat, lépések, elvárt eredmény, tényleges eredmény, státusz. Használj ekvivalencia-osztályokat és határérték-elemzést (minden jegyhatárra: 39/40, 54/55, 69/70, 84/85, és a 0, 100).
- Név-tesztek: üres, szóköz, 1 karakter, 2 (határ), 30 (határ), 31, ékezetes, emoji, nagyon hosszú.
- Felület-tesztek (Forms-ellenőrzőlista): Tab-sorrend, Enter, dupla kattintás a gombon, átméretezés, 125%/150% DPI, többszöri számítás, törlés után újraszámítás.
- Végrehajtás: futtasd a teszteseteket; töltsd ki a tényleges és a státusz oszlopot.
- Hibajelentések: legalább 5 hibát írj le a mintaformátum szerint (cím, környezet, lépések, elvárt, tényleges, reprodukálhatóság, súlyosság, melléklet).
- Felderítő munkamenet: 20 perc szabad kutatás egy charterrel („fedezd fel a nevek kezelését szokatlan karakterekkel”); jegyzet: mit próbáltál, mit találtál.
- Regressziós készlet: a hibák javítása után válassz ki 8 tesztesetet (a javított hibákat és a fő funkciókat), futtasd újra, és igazold, hogy a javítás nem rontott el mást.
A tesztalany hibás kódja és a rejtett hibák (próbáld ki előbb önállóan!)
private int Jegy(int pont)
{
if (pont >= 85) { return 5; }
else if (pont >= 70) { return 4; }
else if (pont > 55) { return 3; } // a 55 pontot kihagyja
else if (pont >= 40) { return 2; }
else { return 1; }
}
private void btnSzamol_Click(object sender, EventArgs e)
{
string nev = txtNev.Text; // nincs Trim, nincs ellenőrzés
int pont = (int)nudPont.Value;
int jegy = Jegy(pont);
lblJegy.Text = "Jegy: " + jegy;
lstEredmenyek.Items.Add(nev + ": " + pont + " pont → " + jegy); // dupla kattintásra kétszer is hozzáadja
}
private void btnTorol_Click(object sender, EventArgs e)
{
lstEredmenyek.Items.Clear();
txtNev.Clear();
// a lblJegy marad (régi jegy látszik), a nudPont nem áll vissza
}A rejtett hibák (ellenőrzéshez, csak a tesztelés után nézd meg): (1) a 55 pont jegye 2 helyett 3 kell legyen (határérték: > 55); (2) üres vagy csak szóközt tartalmazó név elfogadva; (3) nincs hosszkorlát és Trim a névnél; (4) a gomb dupla kattintására kétszer kerül a listába ugyanaz a sor (ha az elvárás: egy); (5) Enter nem számít (nincs AcceptButton); (6) a Törlés után a lblJegy régi értéke látszik; (7) a nudPont a törlés után nem áll vissza; (8) a Tab-sorrend a Designer alapján véletlenszerű lehet. A „tényleges” oszlopot a saját futtatás alapján töltsd ki; előbb a tesztek, aztán ez a lista.
Egy kitöltött minta tesztterv és hibajelentés
ID Cím Előfeltétel Tesztadat Elvárt Tényleges Státusz
TC-01 Tipikus érvényes bemenet Üres lista Anna, 78 Jegy: 4; lista: "Anna: 78 → 4" (kitöltendő)
TC-02 Határ: 55 pont → 3 Üres lista Béla, 55 Jegy: 3 Jegy: 2 HIBÁS (BUG-01)
TC-03 Határ: 54 pont → 2 Üres lista Béla, 54 Jegy: 2 Jegy: 2 Sikeres
TC-04 Határ: 39 pont → 1 Üres lista Cili, 39 Jegy: 1 (kitöltendő)
TC-05 Üres név Üres lista "", 50 Hibaüzenet, nincs új sor Felvéve HIBÁS (BUG-02)
TC-06 Csak szóközök a névben Üres lista " ", 50 Hibaüzenet, nincs új sor Felvéve HIBÁS (BUG-02)
TC-07 Enter a számításhoz Név és pont Enter billentyű Számítás lefut Nem történik semmi HIBÁS (BUG-05)
TC-08 Törlés után tiszta felület Van 1 sor Törlés gomb Lista és Jegy-címke üres Jegy látszik HIBÁS (BUG-06)
BUG-01: A 55 pont jegye 2 (3 kell legyen) | Lépések: Név: Béla, Pont: 55, Jegy kiszámítása | Elvárt: Jegy: 3 | Tényleges: Jegy: 2 | Reprodukál: mindig (3/3) | Súlyosság: Súlyos (hibás eredmény) | Mellékelve: kep-bug01.pngMit tegyél ide: a kitöltött tesztterv és a hibajelentések listája.Javasolt fájlnév: winforms-13-8-kesz.webp · Alt szöveg: A kész tesztterv és hibajelentések
Három önálló gyakorlófeladat
Egyszerre csak egyet csinálj: tervezd meg, írd meg, futtasd, ellenőrizd, és csak utána nyisd ki a megoldást.
1. Tesztesetek a jelszóhoz
Egy jelszómező szabálya: 8–20 karakter, legalább egy számjegy. Írj 10 tesztesetet. Határok: 7, 8, 20, 21 karakter (számjeggyel); érvénytelen: nincs számjegy, csak számjegy, üres, szóközök, nagyon hosszú; különleges karakterek (ékezet, emoji); a megerősítés eltérő.Egy lehetséges megoldás
2. Döntési tábla
Egy webshop szabálya: ingyenes szállítás, ha a vásárlás > 15 000 Ft vagy a vásárló törzsvásárló. Készíts döntési táblát. Két feltétel, négy kombináció (összeg > 15 000: igen/nem × törzsvásárló: igen/nem); eredmény: ingyenes, ingyenes, ingyenes, fizetős (csak mindkettő „nem” esetén fizetős). Plusz határérték: 15 000 és 15 001 Ft.Egy lehetséges megoldás
3. Régi program tesztelése
Válassz egy korábbi projektedet, és végezz 20 perces felderítő tesztelést egy charterrel. Charter: „fedezd fel, mi történik hibás fájlokkal”. Jegyzet: mit próbáltál (üres fájl, sérült fájl, nagy fájl, olvasásvédett fájl), mit találtál (összeomlás, érthetetlen üzenet), mi lett belőle (hibajelentés vagy új teszteset).Egy lehetséges megoldás
Gyakorlótár: 6 további feladat
Három szinten gyakorolhatsz: alap, közepes és kihívás. Csak a próbálkozás után nyisd le a megoldást.
Alap szint
1. Mi a teszteset része?
Sorold fel a teszteset elemeit. Azonosító, cím, előfeltétel, tesztadat, lépések, elvárt eredmény, tényleges eredmény, státusz.Megoldás megnyitása
2. Regresszió
Mi a regressziós teszt? A módosítás után a régi funkciók újraellenőrzése, hogy a változtatás nem rontott el semmit.Megoldás megnyitása
Közepes szint
3. Ekvivalencia
Egy mező 18–65 éves korig fogad el értéket. Add meg az ekvivalencia-osztályokat és a határértékeket. Osztályok: <18, 18–65, >65, nem szám, üres. Határok: 17, 18, 19 és 64, 65, 66.Megoldás megnyitása
4. Súlyosság
Sorold be: (a) adatvesztés mentéskor; (b) elírt felirat; (c) a Mégse gomb nem reagál, de az Esc igen. (a) kritikus; (b) kicsi (kozmetikai); (c) közepes (kerülőúttal használható).Megoldás megnyitása
Kihívás szint
5. Mi automatizálható?
Melyik teszt automatizálható jól: (a) a jegyhatár-számítás; (b) a felület átméretezése; (c) az érthető hibaüzenet? (a) igen (egységteszt); (b) nehezen (kézi); (c) kézi (használhatóság, ítélet kell).Megoldás megnyitása
6. Vak folt
Miért jó, ha más teszteli a programodat? A szerző tudja, hogyan kell használni, ezért a szokásos útvonalat járja; más „rosszul” használja, és olyan hibákat talál, amelyeket a szerző nem.Megoldás megnyitása
Gyors önellenőrzés
Válaszolj fejben, és csak utána nyisd le a választ. Hibákat találni (nem bizonyítani, hogy nincs hiba). Bemenetek csoportja, amelyen belül a program ugyanúgy viselkedik: elég egy teszt csoportonként. A hibák többsége a határokon van ( Reprodukálható: cím, környezet, lépések, elvárt és tényleges eredmény, súlyosság, melléklet. Gyors ellenőrzés, hogy a program elindul és a fő funkciók élnek. Szabad, de céllal és időkerettel végzett kutatás, jegyzetelve. A követelményből, a futtatás előtt, független forrásból (nem a program kimenetéből).1. Mi a tesztelés célja?
2. Mi az ekvivalencia-osztály?
3. Miért a határok?
< vs <=).4. Mi a jó hibajelentés?
5. Mi a smoke teszt?
6. Mi a felderítő tesztelés?
7. Honnan jön az elvárt eredmény?
Mit tudsz már?
- Ismered a tesztelés fajtáit, és tudod, mikor jó a kézi tesztelés.
- Tesztesetet írsz, és ekvivalencia-osztályokkal, határértékekkel választasz adatot.
- Reprodukálható hibajelentést írsz.
- Regressziós és felderítő tesztelést végzel, és a Windows Forms ellenőrzőlistát használod.
Következő lecke: Erőforrás-kezelés és teljesítmény
A program erőforrás-használata: memória, Dispose, a felület gyorsasága, mérés és optimalizálás.



