Összes írás

Minőség · Tesztelés

A unit tesztek kifizetik magukat — a UI-teszt pedig valódi eszközre való

A tesztelés rendszerint az első tétel, amit kihúznak egy mobilbüdzséből, mert az értéke láthatatlan — addig a napig, amíg nem az. Így gondolkodunk a tesztpiramisról a gyakorlatban: az üzleti logika unit tesztjeitől az Appiummal automatizált, device farmon futó UI-tesztekig.

Az érv, ami az ügyfeleket tényleg érdekli

A tesztelés őszinte érve nem az elvont „minőség” — hanem a későbbi sebesség. Egy teszt nélküli appot az első hónapban gyors módosítani, a tizenkettedikben félelmetes: minden változtatás láthatatlan törés kockázata, ezért minden kiadás elé teljes kézi végigkattintás kell, ezért a kiadások ritkulnak, híznak, és még kockázatosabbá válnak. A tesztek megfordítják ezt a görbét. Miattuk tud egy érett kódbázis továbbra is heti rendszerességgel, nyugodtan szállítani.

Ezt az Invoice Gurun kézzelfoghatóan láttuk: egy élő számlázóapp részleges újraírása csak akkor felelős vállalás, ha tesztek rögzítik azt a viselkedést, amelynek nem szabad megváltoznia — ügyfelek, tételek, áfa-helyes végösszegek. A tesztek ott nem többletköltséget jelentettek; ők voltak a biztosítókötél, amelytől a projekt egyáltalán lehetségessé vált.

Unit tesztek: olcsók, gyorsak, és oda céloznak, ahol számít

Nem kergetünk lefedettségi százalékokat. A unit teszteket oda irányítjuk, ahol egy néma hiba valódi pénzbe vagy bizalomba kerül: ár- és áfaszámítások, dátum- és pénznemkezelés, adattranszformációk, állapotátmenetek. Ráadásul itt a legolcsóbb a unit teszt — felület nélküli tiszta logika, amely minden változtatásnál ezredmásodpercek alatt lefut.

Részben ezért ugyanaz a beszélgetés az architektúra és a tesztelés: az a logika, amely providerekben, repository-kban és service-ekben él (nem widgetek belsejében), olyan logika, amelyet a teszt elér. A nehezen unit-tesztelhető kódbázis szinte mindig architektúra-problémát jelez, nem tesztelési problémát.

UI-tesztek device farmon: mert az emulátor hazudik

A unit szint felett a kérdés megváltozik: nem „helyes-e a logika?”, hanem „működik-e az app azon a telefonon, amit a felhasználó a kezében tart?” — és erre egyetlen emulátor sem válaszol őszintén. Az Android-fragmentáció valóság: a gyártók saját Android-felületeket szállítanak, az agresszív akkumulátor-menedzserek kilövik a háttérmunkát, a képernyőméretek és -sűrűségek vadul szórnak, az OS-verziók pedig évekig forgalomban maradnak. Az iOS kíméletesebb, de nem kivétel — notchok, dinamikus betűméret és OS-frissítések törnek el olyan elrendezéseket, amelyek a szimulátorban hibátlannak tűntek.

Ezért a end-to-end UI-tesztjeinket Appiummal automatizáljuk, és device farmon futtatjuk — valódi fizikai eszközökön, gyártók, képernyőméretek és OS-verziók mátrixán. Az Appium úgy vezérli az appot, ahogy a felhasználó: koppintás, húzás, szövegbevitel, majd állítások arról, ami ténylegesen a képernyőn van. A kritikus folyamatok — bejelentkezés, a fő értékút, fizetés — kiadás előtt az eszközmátrixon futnak végig, nem egy checklistás ember kezén, azon a telefonon, ami épp az asztalon volt.

Mit automatizálunk — és mit tudatosan nem

Az automatizálásnak karbantartási költsége van, ezért az e2e-készlet kicsi és nagy értékű marad: azok a folyamatok, ahol a regresszió incidens lenne, nem kellemetlenség. Alatta a widget-tesztek fedik az érdemi logikájú képernyőket, a piramis zömét pedig a unit tesztek viszik. A felfedező tesztelés — a furcsa, kreatív, emberi fajta — emberi marad; az automatizálás felszabadítja rá a tesztelőket, nem lecseréli őket.

Az ebből következő kiadási szabály egyszerű: a pipeline futtatja a tesztkészletet, a device farm a kritikus folyamatokat, és a piros eredmény blokkolja a kiadást. Határidőre sincs kivétel — a határidő pontosan az a pillanat, amikor ez a fegyelem megtérül.

Tanulságok

  • A teszt sebesség-funkció: tőle marad gyors és nyugodt a kiadás a tizenkettedik hónapban is — nem az első hónapban fizetett adó.
  • A unit teszteket a pénz-és-bizalom logikára célozd — árazás, áfa, dátumok, adattranszformációk —, ne lefedettségi százalékra.
  • A nehezen tesztelhető kód architektúra-szag; a tesztelhető logika a widgeteken kívül, providerekben és service-ekben él.
  • Az emulátor nem a valóság — a kritikus folyamatok UI-tesztjeit Appiummal, valódi eszközökön, a fragmentációs mátrixon futtasd.
  • Tartsd kicsin és könyörtelenen az e2e-készletet: azt automatizáld, ahol a regresszió incidens, és hagyd, hogy a piros blokkolja a kiadást.

Olyat építesz, ahol ez számít?

Minden projektünkön így dolgozunk — mobilon, weben és AI-ban. Ha olyan csapatot keresel, amely így gondolkodik a termékedről, beszéljünk.

Kérj ingyenes becslést