Szoftvertesztelés gyakorló feladatok: Valós projektek alapján


Amikor a teoretikus tudás találkozik a valósággal – és a valóság rendszerint visszaüt

Ha azt gondolod, hogy a szoftvertesztelés csak arról szól, hogy „kattints ide, kattints oda”, majd írd le, hogy „működik” vagy „nem működik”, akkor valószínűleg még nem találkoztál igazán komplex projektekkel. A valódi tesztelés olyan, mint a detektívmunka – sokszor nem is tudod, mit keresel, amíg rá nem bukkansz.

Az alábbiakban olyan gyakorlati feladatokat mutatunk be, amelyek valós projektekben fordulhatnak elő. Ezek nem a szokásos „teszteld le a bejelentkezést” típusú feladatok, hanem olyanok, amelyeknél gondolkodni kell, stratégiát kell felépíteni, és gyakran kreatívnak kell lenni.

A cikkben szereplő feladatok és esetek NEM fikciók, és a valós projektekkel való hasonlóság NEM a véletlen műve. Az élőkre és holtakra, valamint a titoktartási szerződésekre való tekintettel azonban néhány adatot megváltoztattunk – de a lényeg és a kihívások teljesen valósak.

1. Hibaüzenetek vadászata: Amikor a kód zárt könyv

Helyzet: Egy komplex pénzügyi alkalmazásnál a fejlesztők azt állítják, hogy minden hibakezelés implementálva van. A problémád csak annyi, hogy nincs hozzáférésed a forráskódhoz – csak a UI-t használhatod. A feladatod megtalálni azokat a hibaüzeneteket, amelyek valószínűleg léteznek a kódban, de a normál használat során nem jelennek meg.

Miért trükkös: Mint amikor egy épületben keresel titkos szobákat – tudod, hogy valószínűleg vannak, de nem látod, hogy hol. A hibaüzenetek gyakran „dead code” területeken vannak, amelyeket a normál tesztelés nem ér el.

Gondolkodtató tipp: Kezdd azzal, hogy térképezd fel az alkalmazás állapotait. Hol vannak azok a pontok, ahol a rendszer validációt hajt végre? Mi történik, ha ezeket a validációkat megkerülöd? Gondolj arra, hogy a frontend validáció és a backend validáció között gyakran van eltérés. A böngésző fejlesztői eszközei itt a legjobb barátaid.

2. Pairwise tesztelés: Amikor a kombinációk száma a csillagokéval versenyez

Helyzet: Egy e-commerce rendszer checkout folyamatánál 8 különböző paramétert kell tesztelned: fizetési mód (5 opció), szállítási mód (4 opció), kedvezménykód (van/nincs), új/visszatérő felhasználó, mobilapp/webes felület, különböző országok (10 fő célpiac), newsletter feliratkozás (igen/nem), ajándékcsomagolás (igen/nem).

Ha minden kombinációt tesztelnél, az 5×4×2×2×2×10×2×2 = 6400 teszteset lenne. Természetesen erre nincs időd, erőforrásod, és valószínűleg türelmed sem.

Miért intelligens megoldás?: A pairwise tesztelés azon a megfigyelésen alapul, hogy a legtöbb hiba két paraméter kölcsönhatásából adódik. Ez olyan, mint amikor egy új városban autózol – nem kell minden utcát végigjárnod ahhoz, hogy megértsd a közlekedési rendszert, elég, ha a főbb kereszteződéseket és azok kombinációit kipróbálod.

Gondolkodtató tipp: Használj pairwise tesztelés generáló eszközöket (pl. PICT, ACTS). De előtte gondold át: melyek azok a paraméterek, amelyek valószínűleg együtt okoznak problémát? A fizetési mód és az ország biztosan interakcióba lép, de a newsletter feliratkozás és az ajándékcsomagolás valószínűleg nem.

3. PICT mesterfokon: Amikor a pairwise találkozik a boundary értékekkel

Helyzet: Egy számlázórendszerben a következő paramétereket kell tesztelned:

  • Számlázási időszak (havi/negyedéves/éves)
  • Kedvezmény százalék (0-100%)
  • Tételek száma (1-1000)
  • Ügyfél típus (magánszemély/cég/nonprofit)
  • Pénznem (HUF/EUR/USD)

Itt azonban nem elég a pairwise tesztelés, mert vannak boundary értékek is: a kedvezmény 0%, 1%, 99%, 100% értékeknél lehet érdekes, a tételek számánál pedig 1, 2, 999, 1000 értékeknél.

Miért összetett?: Ez olyan, mint a modern fociban a les helyzetek stratégiai használata – nem elég az alapvető játékhelyzeteket ismerni, hanem pontosan a szélsőséges pillanatokban (játékos épp a les vonalon van, vagy 5 centivel előtte/mögötte) dől el a meccs sorsa, és ezekre a bonyolult kombinációkban is figyelni kell. A PICT eszköz képes kezelni a constraints-eket és a súlyozást is.

Gondolkodtató tipp: Definiáld külön a boundary értékeket tartalmazó almezőket. Például a kedvezmény esetén: {0, 1, 50, 99, 100}. Használd a PICT súlyozási funkcióját, hogy a kritikus kombináció gyakrabban szerepeljenek. És ne felejts el constraint-eket definiálni – például nonprofit szervezeteknek valószínűleg más kedvezményi szabályok vonatkoznak.

4. Időutazás az adatbázisban: Historikus adatok konzisztencia ellenőrzése

Helyzet:
Egy HR rendszerben az alkalmazottak fizetési adatait tárolja a rendszer. Minden változtatás historikus, tehát láthatod, hogy ki mikor mennyit keresett. A probléma: gyanús, hogy vannak időbeli inkonzisztenciák. Például valaki 2023. március 15-én 500.000 Ft-ot keresett, április 1-jén 450.000 Ft-ot, de március 20-án valahogy 480.000 Ft szerepel – ami időben később lett rögzítve.

Miért nehéz?: Ez olyan, mint egy időutazós film logikai hibáinak keresése. Az adatbázis queries-eket írni kell, amelyek képesek az átfedéseket és időbeli anomáliákat detektálni.

Gondolkodtató tipp: Használj ablakozó függvényeket (window functions) SQL-ben. A LAG() és LEAD() függvények segítségével összehasonlíthatod az egymást követő rekordokat. Keress olyan eseteket, ahol a valid_from és valid_to dátumok átfednek, vagy ahol hiányoznak időszakok. Egy jó pattern:

sql:

SELECT employee_id, 
       salary,
       valid_from,
       valid_to,
       LAG(valid_to) OVER (PARTITION BY employee_id ORDER BY valid_from) as prev_valid_to
FROM salary_history
WHERE valid_from <= LAG(valid_to) OVER (PARTITION BY employee_id ORDER BY valid_from)


5. API tesztelés: Amikor a dokumentáció hazudik

Helyzet: Egy mikroszolgáltatás-alapú rendszerben az egyik API endpoint dokumentációja szerint a válasz mindig JSON formátumban érkezik, és minden kötelező mező garantáltan benne van. A gyakorlatban azonban gyanítod, hogy vannak edge case-ek, amikor ez nem igaz.

Miért realisztikus?: Az API dokumentáció olyan, mint a GPS – általában jó, de néha olyan utakra küld, ami nem is létezik. A valós rendszerekben az API-k gyakran különböző állapotokban különbözően viselkednek.

Gondolkodtató tipp: Próbálj meg olyan kéréseket küldeni, amelyeket a dokumentáció nem említ. Mi történik, ha:

  • A request body-ban extra mezőket küldesz?
  • Hiányzó kötelező mezőket hagysz ki?
  • Rossz típusú adatokat küldesz (string helyett number)?
  • Nagyon hosszú stringeket küldesz?
  • Különleges karaktereket (emoji, unicode) használsz?

Használj fuzzing technikákat és automatizált API tesztelő eszközöket. A fuzzing lényege, hogy életszerű, de véletlen adatokat (fake) generálsz és küldöd az API-nak, hátha valami váratlan válasszal vagy hibával reagál. Postman-ben ilyenek a dinamikus változók.

6. Teljesítmény tesztelés: A lassú halál szimulálása

Helyzet:
Egy közösségi média alkalmazásnál a fejlesztők állítják, hogy a rendszer 10.000 egyidejű felhasználót képes kiszolgálni. Neked kell ezt ellenőrizni, de nem érdekel a brute force „bombázás” – értelmes terhelési forgatókönyveket kell készítened.

Miért kifinomult?: A teljesítmény tesztelés olyan, mint egy zenekar próbája – nem elég, ha minden hangszer hangos, harmóniában is kell játszaniuk. A valós felhasználók nem egyszerre nyomják meg ugyanazt a gombot.

Gondolkodtató tipp: Modellezd a valós felhasználói viselkedést. Egy tipikus session: bejelentkezés, böngészés, poszt írása, kommentelés, kijelentkezés. Használj különböző „persona” mintákat: van aki sokat olvas, van aki sokat ír, van aki csak görget. A terhelést fokozatosan növeld, és figyeld, hogy hol vannak a töréspontok.

Egy másik fontos megközelítés a hosszútávú terhelés tesztelés (soak testing): itt nem a maximális kapacitást keresed, hanem egy közepesen magas terheléssel órákig vagy napokig futtatod a rendszert. Gyakran itt bukkannak fel a memóriaszivárgások, a lassan telítődő cache-ek, vagy azok a finom hibák, amelyek csak egy idő múlva válnak kritikussá.

Összegzés: A tesztelés művészete

Ezek a feladatok mind arról szólnak, hogy a tesztelés több mint mechanikus folyamat – kreatív problémamegoldás. Minden projektben vannak rejtett csapdák, dokumentálatlan viselkedések, és váratlan események.

A jó tesztelő olyan, mint egy jó nyomozó: felteszi a megfelelő kérdéseket, követi a nyomokat, és nem adja fel, amikor az első próbálkozás nem vezetett eredményre. És igen, néha a Watson-nak kell lenned, aki a nyilvánvaló dolgokat is ellenőrzi – mert a nyilvánvaló dolgok is potenciális hibaforrások.

A legfontosabb tanács: mindig gondolj arra, hogy a fejlesztők emberek, és az emberek hibáznak. A te feladatod megtalálni ezeket a hibákat, mielőtt a felhasználók találják meg őket. És hidd el, ők biztosan meg fogják találni – általában a legrosszabb pillanatban.

Megosztás

Kérsz értesítést a legújabb cikkekről?

Kapcsolódó cikkek

20 év szoftvertesztelés után ezt látjuk minden sikeres szoftverprojektben

Húsz év és több száz projekt után az ember már nem az egyedi eseteket jegyzi meg, hanem az ismétlődő mintákat. A legérdekesebb felismerés az, hogy a sikeres szoftverprojektek mennyire hasonlítanak egymásra. Más az iparág, más a technológia, más a csapat, mégis ugyanazok az elvek térnek vissza bennük, újra és újra. A kudarcok ezzel szemben mind

T&M vagy fix projekt? Melyik tesztelési modell mikor működik jobban?

Amikor egy cég külső tesztelési partnert von be, az egyik legkorábbi kérdés nem szakmai, hanem pénzügyi: milyen konstrukcióban dolgozzunk együtt? A válasz sokszor a beszerzési reflexből születik: „adjatok egy fix árat, hogy tudjam, mennyibe kerül”. Érthető igény, de nem mindig a legjobb döntés. A fix ár és a másik klasszikus modell, a T&M (Time and

Scroll to Top

Elérhető tesztelőink

Nézze meg szakértőink profiljait, tapasztalatát és kompetenciáit, és találja meg a projektjéhez illő szakembert.

Töltse le tesztelőink szakmai profilját

Adja meg elérhetőségét egyszer és férjen hozzá valamennyi elérhető profilhoz.