Egység 9 / 11

Regressziós tesztelés, tesztkarbantartás és a törékeny tesztek elleni küzdelem

Nyereség:

  • Értse a regressziós tesztelés célját, és tudjon teszteket kiválasztani és regressziós eseteket előállítani a mesterséges intelligencia változásainak megfelelően
  • Képes a törékeny tesztek kiváltó okainak diagnosztizálására (időzítés, rendelésfüggőség, megosztott állapot, külső függőség) és tartós megoldások alkalmazására a tünet elnyomása nélkül
  • Képes fenntartani a teljes csomag kiadás előtti futtatásának fegyelmét, miközben a regressziós csomagot gyors, független és megbízható a duplikált tesztelés kiküszöbölésével

A szoftver folyamatosan változik; Minden új funkció, minden javítás tönkretehet valamit, ami korábban működött. Egy korábban működő funkció későbbi megzavarását regressziónak nevezzük. A regressziós tesztelés minden változtatással újrateszteli a meglévő funkciókat, hogy észlelje ezeket a romlásokat. Idővel ezek a tesztcsomagok egyre nagyobbak lesznek – tesztek ezrei –, és két nagy probléma merül fel: a programcsomag lelassul, és a nem megfelelő tesztek – a megbízhatatlan tesztek, amelyek néha átmennek, néha meg is buknak ugyanabban a kódban – lerombolják a csapat teszteredményekbe vetett bizalmát. A mesterséges intelligencia (AI) hatékony segítség abban, hogy a regressziós programcsomag jól karbantartott, gyors és megbízható legyen. De a központi figyelmeztetés továbbra is fennáll: bár az AI felajánlhatja, hogy "átmenjen" egy törékeny teszten, gyakran olyan javítást hoz létre, amely egy valódi hibát elfed. Az Ön feladata az instabilitás kiváltó okának megtalálása, nem pedig a tünet elnyomása.

A törékeny tesztek kiváltó okai

A törékeny tesztelés a legálomosabb tesztelési probléma: megbízhatatlan, hogy sikeres vagy kudarc, ami a csapatot abba a szokásba kényszeríti, hogy "biztos elakadt újra, futtasd újra" - és ez a szokás egy napon figyelmen kívül hagy egy valódi hibát, mint "pelyhes". A fő kiváltó okok:

  • Időmérés/verseny állapota: A teszt ellenőrzi az eredményt anélkül, hogy megvárná a művelet befejezését. A leggyakoribb ok.
  • Rendelési függőség: A tesztek az egymás által hagyott adatoktól függenek; Megszakad, ha megváltozik a sorrend.
  • Megosztott eset: Több teszt ugyanazt a tesztadatot/felhasználót használja, ütközik.
  • Külső függőség: Valódi hálózat, harmadik féltől származó szolgáltatás, rendszeridő, véletlenszerű érték.
  • Környezeti különbség: Helyire vált, CI-ben marad (folyamatos integrációs környezet).
Vigyázat: Ha „néhányszor újrapróbálkozik” egy törékeny teszten, gyakran valódi párhuzamossági hibát takar el. Az újrapróbálkozás diagnosztikai eszköz, nem kezelés. Először keresse meg a kiváltó okot; Az újrapróbálkozást csak utolsó lehetőségként használja dokumentált, valóban külső instabilitás esetén.

Tesztkarbantartás: a csomag egészségének megőrzése

A regressziós csomag olyan, mint egy kert; Ha nem vigyázunk rá, a gaz átveszi az uralmat. Az AI három karbantartási feladatban segít:

1. Ismétlődő/felesleges próbatisztítás. Idővel nagyszámú eset halmozódik fel ugyanazt a dolgot tesztelve. Az AI a hasonló tesztek csoportosítását és egyesítését javasolja.

2. Törékeny teszt diagnózis. Megadja az AI-nak a tesztkódot és az instabilitási mintát; lehetséges kiváltó okokat és végleges megoldást javasol.

3. Teszt kiválasztása/prioritizálása. Drága a teljes csomag futtatása minden változtatásnál. A teszt hatáselemzésével (csak a releváns tesztek kiválasztása a megváltozott kód alapján) az AI azt javasolja, hogy mely teszteket futtassák le először. A teljes megjelenés előtti csomag azonban kötelező.

Karantén: törékeny tesztelési jog kezelése

Úgy találta, hogy egy teszt törékeny, de nincs ideje azonnal orvosolni a kiváltó okot. Mit tegyek? Két rossz mód van: a teszt teljes törlése (ez a viselkedés már egyáltalán nem őrződik meg), vagy elnémítani egy újrapróbálkozással (elfedve a valódi hibát). A helyes módszer a karanténba helyezés (a törékeny teszt ideiglenes elválasztása a fő csomagtól, és külön listában nyomon követhető). A karanténba helyezett tesztelés nem akadályozza meg a verziók összevonását, de látható adósság marad, és rendszeresen foglalkoznak vele. A kritikus pont a következő: a karantén egy váróterem, nem egy szemetes. Ha a karanténlista növekszik, ez azt jelzi, hogy a csapat teszt állapota romlik. A mesterséges intelligencia időszakonként felülvizsgálhatja a karanténlistát, és csoportosíthatja a kiváltó okok mintái szerint; Kollektív megoldásokat tesz lehetővé azáltal, hogy feltárja a közös okokat, például "mind a 6 teszt ugyanahhoz a megosztott tesztfelhasználóhoz kapcsolódik".

Tipp: Adjon hozzá egy „tulajdonost” és egy „utolsó ellenőrzés dátumát” minden karanténrekordhoz. Az elhagyott karantén állandó szemétlerakóvá válik; A rideg tesztek örökké ott élnek, mert senkit nem érdekel.

Regressziós stratégia táblázat

Állapot

Stratégia

Az AI szerepe

kisebb korrekció

Érintett terület + füstvizsgálat

Válassza ki a megfelelő teszteket

új funkció

Kapcsolódó modul + integráció

Javasoljon egy új regressziós esetet

nagy refaktor

Teljes regressziós csomag

Lefedettségi rés elemzése

előzetes kiadás

Teljes csomag + felfedezés

Prioritás és időtartam becslése

Sürgős élő javítás

Fókuszált + kritikus út

Minimális biztonságos tesztkészlet

Gyenge felszólítás / Erős felszólítás

Gyenge: "Ez a teszt néha meghiúsul, javítsd ki."
Erős: "Ez a teszt 10-ből 3-ban sikertelen, a kód változatlan. Diagnosztizálja az instabilitás kiváltó okát: lehet időzítés/faj, sorrendfüggőség, megosztott állapot, külső függőség vagy környezeti különbség. Mutassa meg, hogy a teszt melyik sora mutat az egyes lehetséges okokra. Javasoljon állandó megoldást; NE javasoljon tünetelnyomó megoldást, például [written 'add. Hiba nyom: [napló]."

Erőteljes felszólítás; a diagnózist a kiváltó okra irányítja, és kifejezetten tiltja a tünetek elnyomását.

Négy másolható sablon

1) Törékeny teszt diagnózis:

Ez a tesztkód néha átmegy, néha pedig változtatás nélkül meghiúsul. Sorolja fel a kiváltó okokat (faj, rendfüggőség, megosztott állapot, külső függőség, óra/véletlenszerűség, környezeti különbség), és mutassa be a bizonyítékok sorát a tesztben mindegyik esetében. Állandó megoldást javasolni; jelölje meg az elnyomó megoldást, például az újrapróbálást utolsó lehetőségként és indoklással. Teszt: [kód] / Instabilitási minta: [hányszor hány futással]

2) Regressziós eset javaslata:

A következő módosítás történt: [módosítás/PR összegzés]. Sorolja fel azokat a JELENLEGI viselkedéseket, amelyeket ez a változtatás megszakít, és javasoljon mindegyikhez egy regressziós tesztet. Különösen emelje ki a mellékhatások és a megosztott függőségek területeit.

3) Ismétlődő teszttakarítás:

Tekintse meg az alábbi tesztcsomagot. Csoportosítsa az ismétlődő vagy átfedő eseteket, amelyek ugyanazt a viselkedést tesztelik; Javasolja, hogy melyiket tartsam meg, és melyiket vegyem össze minden csoportban. Figyelmeztetés, ha fennáll a fedezet elvesztésének veszélye. Tesztek: [lista/kód]

4) Teszthatás kiválasztása:

A következő fájlok/funkciók módosultak: [lista]. A meglévő tesztcsomagból válassza ki és indokolja meg azokat a teszteket, amelyeket először le kell futtatnom (azokat, amelyek közvetlenül/közvetve kapcsolódnak a megváltozott kódhoz). Megjegyzés: emlékeztessen arra, hogy továbbra is a teljes kiadás előtti csomagot fogom futtatni.

három mini tok

1. eset – Valódi hiba, amelyet az Újrapróbálkozás leplezett el. Az egyik csapat 3 újrapróbálkozást adott egy alkalmi fennmaradó kifizetési teszthez; A teszt most mindig „megfelelt”. A "törékeny tesztdiagnosztika" alkalmazása során kiderült, hogy az instabilitás valódi versenyhelyzetből fakad: nagy terhelésnél a fizetési visszaigazolást néha kétszer is feldolgozták. A Retry hónapokig elfedett egy hibát, amely élőben tényleges pénzveszteséget eredményezhetett volna. A kiváltó ok javítva, újrapróbálkozás eltávolítva.

2. eset – A csomag összezsugorodott, a sebesség megnőtt. Egy 1400 tesztből álló regressziós csomag 55 percig tartott. A „kettős teszttisztítással” 380 teszt bizonyult ismétlődőnek vagy lefedettnek; összeolvadt. A csomag 900 tesztre csökkent, az idő 34 percre csökkent, a lefedettség nem csökkent mérhetően. A gyorsabb visszajelzések arra ösztönözték a csapatot, hogy gyakrabban teszteljenek.

3. eset – Megrendelésfüggőség. A teszt helyileg mindig sikeres volt, de véletlenszerűen megbukna a CI-ben. Az AI diagnosztika kimutatta, hogy a teszt egy másik teszt által létrehozott felhasználótól függött, CI-ben azért tönkrement, mert a tesztek párhuzamosan/más sorrendben futottak. Minden tesztet saját adatainak megállapítására végeztek; A határozatlanságnak vége.

Gyakori hibák

  • A törékeny teszt elnémítása újrapróbálkozással. Újbóli próbálkozás a kiváltó ok keresése nélkül; elfedve az igazi hibát.
  • „Újra elakadt” kultúra. A piros eredmények rutinszerű figyelmen kívül hagyása; Egy nap, kihagyva az igazi hibát.
  • Egyáltalán nem vágja meg a csomagot. Lehetővé teszi, hogy a párhuzamos tesztek felhalmozódjanak és lelassítsák a csomagot.
  • A tesztek közötti függőség. A tesztek általános állapoton/szekvencián alapulnak; bizonytalanság forrása.
  • Csak a megváltoztatott alkatrész tesztelése és a teljes csomag kihagyása. Kiadás előtti parancsikon; A rejtett mellékhatások megszöknek.
  • A külső függőségre támaszkodva. Tesztek a tényleges hálózat/óra/véletlen érték alapján; természetesen instabil.

Összefoglalva

A regressziós tesztelés érzékeli a korábban működő funkciókat megszakító változásokat; De ahogy a csomagok növekszenek, a lassúság és a rideg tesztelés aláássa a bizalmat. A törékeny tesztelés kiváltó okai általában az időzítés, a rendelésfüggőség, a megosztott állapot és a külső függőségek. A mesterséges intelligencia hatékony segítség a diagnózisban, a tisztításban és a teszt kiválasztásában; De a határozatlanság újrapróbálkozással való elfojtása valódi hibákat takar el. Keresse meg a kiváltó okot, tegye függetlenné és determinisztikussá a teszteket, rendszeresen vágja le a csomagot, futtassa a teljes csomagot kiadás előtt.

Pályázati feladat

Válasszon egy tesztet a saját projektjéből, amelyről tudja, hogy törékeny (vagy instabilnak tűnik). Vonja ki a kiváltó okokra jelölteket, és ellenőrizze a tesztben szereplő bizonyítékokat a „törékeny tesztdiagnózis” sablon segítségével. Azonosítsa a kiváltó okot, és újbóli próbálkozás nélkül alkalmazzon végleges megoldást. Ezután válasszon ki 10 tesztet a csomagból, és keresse meg azokat, amelyek kombinálhatók a „duplikált teszttakarítással”. Jelentse, hány tesztinstabilitást oldott meg a kiváltó okuk miatt, és hány szükségtelen esetet távolított el a csomagból.

ellenőrző lista

  • [ ] Megállapítottam a törékeny teszt kiváltó okát; Nem nyomtam el a tünetet.
  • [ ] Az Újrapróbálást indokolt utolsó lehetőségnek tartottam, nem gyógyításnak.
  • [ ] A teszteket függetlennek és determinisztikusnak (külső függőségektől elkülönítve) tettem.
  • [ ] Kivágtam a duplikált/felesleges teszteket a regressziós csomagból.
  • [ ] A változás alapján a tesztelést választottam, de a teljes csomag kiadás előtti verzióját futtattam.
  • [ ] Minden pirosat komolyan vettem, az "újra ragadt, passz" kultúra ellen.