Nyereség:
- Képes felismerni az álbizalom három arcát (nem-asszertív, önérvényesítő, triviális állítás) és ellenszereket alkalmazni
- A mutációteszt és a mutációs pontszám pontosabb minőségi mérőszáma, mint a szerszámmal vagy kézzel végzett százalékos lefedettség
- Képes a mesterséges intelligencia vörös csapatként pozicionálni a tesztelés ellen, és a tesztelési kiskapukat keresni anélkül, hogy a dicséret csapdájába esne
Ennek a modulnak a lényege egy visszatérő figyelmeztetés: a zölden világító tesztpanel nem a minőség bizonyítéka. Ha a tesztek önbizalmat adnak, tudnod kell, hogy ez a bizalom valódi vagy hamis. A mesterséges intelligencia (AI) korában ez a kérdés kritikusabb, mint valaha, mert a mesterséges intelligencia ügyes a folyékony, sima megjelenésű, de üres tesztek előállításában. A hamis önbizalom – azt hinni, hogy a szoftver helyes, mert a tesztek zöldek, holott a tesztek valójában semmit sem igazolnak – a legveszélyesebb dolog, ami egy minőségbiztosítási csapattal történhet; mert nem azt takarja, hogy nincsenek hibák, hanem azt, hogy nem látod a hibákat. Ez az egység a teljes modul érvényesítési filozófiáját egyetlen tudományágban egyesíti: a tesztek tesztelését.
A tesztelés minőségének mérésének aranystandardja: mutációvizsgálat
A leghatékonyabb módja annak, hogy megértsük, hogy egy teszt valóban véd-e vagy sem, a mutációs tesztelés (mutációteszt – olyan technika, amely szándékosan kis torzításokat/mutációkat hoz létre a forráskódban, és méri, hogy a tesztek észlelik-e ezeket a torzulásokat). A logika egyszerű: ha szándékosan megtöri a kódot (a + jelet -, a >-t >=-ba, egy igazat hamissá), egy jó tesztcsomagnak meg kell találnia ezt a korrupciót, és pirosra kell váltania. Ha nem, akkor ez a zavar egy túlélt mutáns – tehát a tesztek valójában nem őrzik meg ezt a viselkedést.
Mutációs pontszám = elpusztult mutáció / teljes mutáció. Egy 90%-os vonallefedettségű csomag mutációs pontszáma 40% lehet; Ez azt jelzi, hogy a vonalak működnek, de a viselkedés nincs ellenőrizve. A mutációs pontszám sokkal őszintébb minőségmérő, mint a százalékos lefedettség.
Tipp: Vannak automatikus mutációs eszközök (PIT/Pitest Java-hoz, Stryker JavaScript/TypeScript-hez, Stryker.NET .NET-hez, mutmut Pythonhoz). Ezek automatikusan több száz mutációt generálnak és tesztelnek. Ha nem rendelkezik eszközzel, még a kézi "törd meg a kódot teszt" módszer is felbecsülhetetlen értékű a kritikus funkciókhoz.
Az álbizalom három arca és ellenszere
Pszeudo-bizalom forma
tünet
ellenszere
Teszt állítás nélkül
A kód működik, semmi sem érvényes
Valódi állítás minden tesztben; teszt mutációval
önmegerősítő teszt
Várható = a kód kimenete
Számítsa ki a várható értéket függetlenül
Triviális állítás
"nem null", "200 vissza"
Érvényesítse az üzleti szabályt/tényleges eredményt
Nagy hatókörű tévedés
90% vonalak, alacsony védelem
Nézd meg a mutációs pontszámot
Törékeny teszttűrés
"Megint elakadt, passz"
Kiváltó ok + determinisztikus tesztelés
Az AI használata „vörös csapatként”
A mesterséges intelligencia pszeudobizalmat generál, és hatékony szövetségese lehet annak levadászásában. Használja az AI-t vörös csapatként a saját tesztjei ellen: kérdezze meg, hogy „írjon olyan kódot, amely megfelel ezeken a teszteken, de hibás”, vagy „találjon olyan felforgató változatot, amely megtéveszti ezeket a teszteket”. Ha a mesterséges intelligencia kiskapukat talál a tesztjei során, ezek a kiskapuk valós kockázatot jelentenek.
Vigyázat: Ne kérdezze az AI-t: "Jó a teszt minősége?" és az "igen, nagyszerű" választ vedd biztosítéknak. Az AI általában kedves. Ehelyett hívja ki az AI-t egy konkrét feladatra: „hozzon létre egy hibát, amely megfelel ezeken a teszteken”. Ha képes előállítani, akkor a tesztjei vakok a hibára.
Egyenértékű mutációk és a pontszám határai
A mutációtesztelés erőteljes, de van egy trükkje: egyes mutációk egyáltalán nem változtatják meg a kód viselkedését. Ezeket ekvivalens mutációknak nevezzük (ekvivalens mutáns – sérült kód, olyan mutáció, amely pontosan ugyanazt az eredményt adja, mint az eredeti). Például egy soha nem használt változó kezdeti értékének megváltoztatása nincs hatással a kimenetre; Ezt semmilyen teszt nem tudja és nem is szabad megfognia. Ezért a 100%-os mutációs pontszám a gyakorlatban gyakran elérhetetlen, és nem is ez a cél. Az egyenértékű mutációk kézi kigyomlálása munkaigényes; Tehát a mutációs pontszámot ne abszolút vizsgapontszámként értelmezze, hanem a „tesztjeim valóban védenek-e?” őszinte mutatójaként.
A gyakorlati megközelítés a következő: ahelyett, hogy állandóan futtatná a mutációtesztet a teljes kódbázison, futtassa azt a legnagyobb kockázatot és legbonyolultabb üzleti szabályokat tartalmazó modulokon. Vizsgálja meg egyenként a túlélő mutációkat ezekben a modulokban; Ha ez valódi hiányosság, adjon hozzá egy tesztet; ha egyenértékű mutációról van szó, jelölje meg indoklással és adja át. A mesterséges intelligencia kezdeti szűrést végezhet annak felmérésére, hogy egy túlélő mutáció egyenértékű-e; de a végső döntést Ön hozza meg, aki tudja, mit csinál a kód.
Vigyázat: A mutációteszt számítási szempontból költséges (az összes releváns tesztet minden mutációra újra lefuttatják). Tehát egy általános és ésszerű stratégia a kritikus modulok heti vagy kiadás előtti mélyreható ellenőrzésének ütemezése, nem pedig minden egyesítés.
Gyenge felszólítás / Erős felszólítás
Gyenge: "Elégségesek a tesztjeim?"
Erős: "Cselekedjen vörös csapatként ehhez a funkcióhoz és tesztkészlethez. (1) Generáljon 8 olyan mutációt a kódban, amelyet meg lehet ölni (operátorhelyettesítés, határeltolódás, feltétel inverziója, visszatérési érték helyettesítése). (2) Minden mutációnál jelölje meg azt is, hogy a meglévő tesztek közül melyik fogja elkapni, és melyik NEM. (3) Minden túlélő mutációhoz írjon egy példát, amelyik képes megölni, ha képes (4) megölni a kódot. ezeket a teszteket, de megsérti a kód+tesztek szabályát: [beillesztés]"
Erőteljes felszólítás; A mesterséges intelligencia teszteket letörő vizsgáztatóként pozicionálja, nem dicsérőgépként.
Négy másolható sablon
1) Kézi mutációszabályozás:
Generáljon 8 szignifikáns mutációt (kisebb szándékos zavarokat) ehhez a kódhoz: aritmetikai operátorhelyettesítés, összehasonlítási határ (> vs >=), logikai inverzió, visszatérés/konstans helyettesítés, feltétel kihagyása. Minden egyes mutáció esetében jósolja meg, hogy a rendelkezésre álló tesztek közül melyik fogja elkapni vagy sem. Kód+tesztek: [beillesztés]
2) A túlélő mutáció elpusztítása:
A következő mutációs vizsgálati jelentés túlélő (nem elkapott) mutációkat tartalmaz: [lista/jelentés]. Mindegyikhez írjon egy minimális tesztet, amely megöli az adott mutációt (a kód piros lesz, ha így törik). Írja meg kommentben, hogy a teszt milyen viselkedést igazol.
3) Vörös csapat – vér a teszten:
Írhat-e olyan kódot, amely MINDEN alábbi teszten MENNYI, de megsérti a következő üzleti szabályt: [üzleti szabály]. Ha igen, ezekben a tesztekben melyik kiskapu teszi ezt lehetővé? Adja hozzá a tesztet, amely bezárja ezt a kiskaput. Tesztek: [beillesztés]
4) Tesztminőség-ellenőrzés:
Ellenőrizze ezt a tesztcsomagot a minőség szempontjából. Jelölje be minden tesztnél:- Van igaz állítás, vagy kellék?- Független a várható érték, kódból származik?- Ellenőrzi az üzleti szabályt vagy valami triviálist? Végül adja meg a becsült "igaz állítás pontszámot" és a 3 leggyengébb tesztet. Tesztek: [beillesztés]
három mini tok
1. eset – Lefedettség 92%, mutációs pontszám 38%. Az egyik csapat nagy lefedettségre támaszkodott. Amikor a mutációtesztet Strykerrel végezték, a pontszám 38% volt: a legtöbb előállított mutáció túlélte. Ez annak bizonyítéka volt, hogy a tesztek nem futtatták a vonalakat és nem ellenőrizték a viselkedést. A csapat három hetet fektetett a minőség tesztelésére; A mutációs pontszám 81%-ra nőtt, és két valódi számítási hibát észleltek ezek a megerősített tesztek a következő kiadásban.
2. eset – A mesterséges intelligencia becsapta a tesztet. Egy „vörös csapat” sablonnal egy szakértő olyan kódot kért az AI-tól, amely átment a meglévő teszteken, de megsértette a kedvezményszabályt. Az AI olyan kódot írt, amely mindig nulla engedményt adott vissza – és minden teszt zöld maradt, mivel egyetlen teszt sem igazolta a tényleges engedményértéket. Hiány látható, valódi állítások hozzáadva.
3. eset – A dicséretcsapda. Egy fiatal tesztelő megkérdezte az MI-t: "Jóak a tesztjeim?" és megkönnyebbülten hallotta a választ: "Nagyon átfogó." Vezető kollégája ugyanazokat a teszteket auditáltatta a "teszt minőségi audit" sablon használatával; Kiderült, hogy 20 tesztből 12 dekor volt (kiállítás vagy szemét nélkül). A helyes kérdés meghozta a megfelelő választ.
Gyakori hibák
- Félreérthető a minőség. A nagy sorlefedettségre támaszkodva, és egyáltalán nem figyelve a mutációs pontszámot.
- Bízva az AI dicséretében. Kérdezi: "Jóak a tesztjei?" és a pozitív választ biztosítéknak tekintve.
- A várható érték levezetése kódból. Önellenőrző tesztek, amelyek megerősítik a hibás kódot.
- Elégedjen meg triviális állításokkal. Ellenőrzések, amelyek nem érvényesítik a tényleges szabályt, például „not null”, „200 return”.
- A túlélő mutációk figyelmen kívül hagyása. Figyelmen kívül hagyva azt, amit a mutációs jelentés nem tartalmazott.
- Még csak nem is próbálja meg manuálisan mutálni a kritikus kódot. Ha az eszköz nem áll rendelkezésre, kihagyja a „kód megtörése és tesztelése” lépést.
Összefoglalva
Az álbizalom azt hiszi, hogy a szoftver helyes, mert a tesztek zöldek; míg a tesztek nem feltétlenül erősítenek meg semmit. Ennek mérésére az arany standard a mutációteszt: a kód szándékos feltörése és annak mérése, hogy a tesztek elkapják-e. A mutációs pontszám sokkal őszintébb minőségmérő, mint a százalékos lefedettség. A mesterséges intelligencia egyrészt álbizalmat hoz létre, másrészt erős vörös csapattá válik a felkutatásában – kérje meg, hogy „hozzon létre olyan hibát, amely megfelel ezeken a teszteken”. Tesztelje tesztjeit: igaz állítás, független várható érték, üzleti szabályok érvényesítése és elpusztított mutációk.
Pályázati feladat
Üzleti szabályt és tesztjeit tartalmazó függvény importálása saját projektjéből. Ha lehetséges, futtasson egy mutációs eszközt (Stryker/Pitest/mutmut), és mérje meg a mutációs pontszámot; Ha nincs eszköz, generáljon legalább 8 mutációt a "manuális mutációvezérlés" sablonnal, és próbálja meg kézzel. Minden túlélő mutációhoz írjon egy új tesztet a „kill surviving mutation” sablonnal. Végül a „vörös csapat” mintával nézze meg, hogy az AI képes-e olyan kódot előállítani, amely megtéveszti a teszteket. Jelentse a kezdő és záró mutációs pontszámot (vagy elkapott/teljes mutációs rátát).
ellenőrző lista
- [ ] A teszt minőségét mutációs pontszám alapján értékeltem, nem lefedettség alapján.
- [ ] Mutációtesztet futtattam (akár eszközzel, akár manuálisan) a kritikus kódhoz.
- [ ] Minden túlélő mutációhoz új teszteket írtam.
- [ ] Az AI-t használtam vörös csapatként, és kiskapukat kerestem a tesztjeim során.
- [ ] Nem vettem megnyugtatásnak az AI „jók a tesztjeid” dicséretét.
- [ ] Ellenőriztem, hogy minden teszt ellenőrzi a tényleges állítást, a független várható értéket és az üzleti szabályt.