Egység 6 / 12

Tesztautomatizálás és minőségbiztosítás

Nyereség:

  • Képes egység-, integrációs és éles esetteszteket készíteni értelmes állításokkal az AI-val
  • Képes a tesztlefedettség, a határértékek és a negatív forgatókönyvek szisztematikus kinyerésére AI támogatással
  • Lehetőség annak ellenőrzésére, hogy az AI által készített tesztek valóban igazolják-e a viselkedést, és nem csak a meglévő kódot ismétlik meg

A tesztelés az a mechanizmus, amely bizonyítja, hogy a szoftver valóban az ígéretek szerint működik. Egy jó tesztcsomag másodpercek alatt megmondja, hogy egy változtatás eltör-e valamit, és szabadságot ad a mérnöknek, hogy magabiztosan cselekedjen. Az AI felgyorsítja a tesztírás legunalmasabb és leginkább kihagyott részét: forgatókönyvek, töréspontok és negatív esetek sokaságát generálja. De van itt egy alattomos csapda: az AI teszteket írhat, amelyek a kód jelenlegi (talán hibás) viselkedését ellenőrzik, nem pedig a feltételezett viselkedését; vagy üres teszteket produkál, amelyek mindig sikeresek, valójában nem ellenőriznek semmit. A teszt értéke nem abban rejlik, hogy megfelelt-e, hanem abban, hogy ellenőrzi-e a helyes dolgot, és ha rossz, akkor pirosra vált-e.

Ebben az egységben megtanulja, hogyan készítsen egység-, integrációs és éles esetteszteket értelmes állításokkal; hogyan lehet szisztematikusan kinyerni a tesztlefedettséget, a töréspontokat és a negatív forgatókönyveket; és meglátjuk, hogyan ellenőrizheti, hogy az AI által végzett tesztek valóban érvényesítik-e a viselkedést.

Fogalmak: Egységteszt: Egyetlen funkciót/osztályt külön-külön tesztel. Integrációs tesztelés: Azt teszteli, hogy több alkatrész megfelelően működik-e együtt. Assert: Olyan állítás, amely ellenőrzi, hogy az eredmény megegyezik-e a várttal; Ez a teszt lényege. Lefedettség: a kód mekkora részét futtatják tesztek; A magas lefedettség nem garantálja a minőséget.

Értelmes tesztek készítése

Egy jó teszt három dolgot tesz világosan: állapotot hoz létre, cselekvést hajt végre, megerősíti az eredményt. Amikor teszteket nyomtat az AI-ra, adja meg, hogy milyen viselkedést szeretne ellenőrizni, és milyen forgatókönyvekre kell kiterjednie; Ellenkező esetben felületes teszteket produkál, amelyek mindig sikeresek.

  1. Határozza meg a tesztelni kívánt viselkedést. – Mi számít helyesnek? Válaszolj egyértelműen a kérdésre.
  2. Kérjen forgatókönyvtípusokat. Normál, határérték, negatív, hibaállapot.
  3. Értelmes állítás importálása. Nem csak "hibát dobott", hanem "visszaadta a helyes értéket".
  4. Ellenőrizze a teszt pontosságát. Pirosra vált a teszt, ha tudatosan feltöri a kódot?

Átfogó tesztgenerálási prompt: "Írjon egységteszteket a következő 'kedvezmény alkalmazása(összeg, kupon)' függvényhez. LEGALÁBB egy forgatókönyve legyen a következő kategóriákban: (1) normál érvényes kupon, (2) töréspontok (0 összeg, 100%-os kedvezmény), (3) negatív (érvénytelen kupon, negatív összeg), (4) a várt hiba esetén az NC (nulllal). csak „működött”).

Határérték-kinyerési prompt: "Végezzen határérték-elemzést ennek a függvénynek a bemeneteihez. Minden paraméterhez vegye ki a "csak a határon", a "közvetlenül a határ alatt", a "közvetlenül a határ felett" értékeket táblázatként. Ezután sorolja fel azokat a tesztforgatókönyveket, amelyek lefedik ezeket a határokat. Ne írjon még kódot, csak az elemzés és a forgatókönyvek listája]."

Figyelem: A magas tesztlefedettség (pl. 90%) nem bizonyítja, hogy a kód helyes. A lefedettség azt méri, hogy hány sort hajtottak végre; nem mintha ezek a vonalak a megfelelő eredményt adnák. Az értelmes állítás nélküli teszt növeli a lefedettséget, de nem garantál semmit. Az állítás tartalma határozza meg a minőséget, nem az állítások száma.

Maga a teszt tesztelése: A mutáció logikája

A legpraktikusabb módja annak, hogy megértsük, hogy az AI által generált teszt valóban működik-e, ha szándékosan megtörjük a kódot (mutációtesztelési logika). Fordítson meg egy feltételt, tegyen + jelet -; Ha egyetlen teszt sem vált pirosra, akkor a tesztek valójában nem tartják fenn ezt a viselkedést.

Sebezhetőség-vadászat tesztelése: "Mondja meg, hogy ebben a kódban mely lehetséges hibákat NEM foghatják meg a következő tesztek. Javasoljon 5 kis mutációt, amelyet a kódban el lehet végezni (pl. >= > helyett, - + helyett), és jelezze mindegyiknél, hogy a meglévő tesztek elkapnák-e. Azok számára, akik nem kapták el, javasoljanak tesztelést, amelyet hozzá kell adni. Kód: [kód] Tesztek: [teszt]"

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

GYENGE: "Írjon tesztet ehhez a függvényhez." (Eredmény: általában egy boldog forgatókönyv, gyenge állítás; kihagyja a hibákat.) STRONG: "Írjon tesztet ehhez a 'passwordStrong' függvényhez. Szabály: legalább 8 karakter, 1 nagybetű, 1 számjegy szükséges. A következő forgatókönyveket fedje le KÜLÖN tesztként: pontosan 8 karakter (limit), 7 karakter (csak a korlátok alatt), nincs felső karakter, szóköz, túl hosszú (1000 karakter) Minden tesztben kifejezetten állítsa a várt igaz/hamis értéket, és nevezze el a tesztet aszerint, hogy mit ellenőriz."

Az erőteljes prompt szabályokat és teljes határ forgatókönyveket ad. Az olyan határpárok, mint a „pontosan 8/7 karakter”, a leggyakoribb hely, ahol hibáznak (összetéveszthető a > és a >= karakterekkel). A gyenge prompt megkerüli ezeket a határokat, és a hibát a termelésbe viszi.

Teszttípusok és felhasználási hely

Teszt típusa

Mit erősít meg?

AI hozzájárulás

Figyelem

egység

Egyetlen funkció/osztály

Gyorsan generál több forgatókönyvet

Értelmes állítás szükséges

integráció

Együtt működő alkatrészek

Forgatókönyv és áladat-vázlat

Valódi addiktív viselkedés

vége/elfogad

Teljes felhasználói folyamat

Lépéslista és elvárás

ridegségre hajlamos

regresszió

A régi hiba nem tér vissza

Hibaspecifikus tesztelés

Minden javításhoz hozzá kell adni

Mini tokok

1. eset – A teszt, amely mindig sikeres. Az AI 12 tesztet ír egy függvényhez, és mindegyik sikeres. A mérnök gyanússá válik, és szándékosan torzítja a függvény visszatérési értékét; A tesztek közül csak 3 válik pirosra. A többi 9 teszt nem tartalmaz értelmes állításokat. A tesztelést a mutációvadászat erősíti; valódi védelem 9 forgatókönyv esetén érhető el.

2. eset – Határhiba. Az életkor-ellenőrző függvénynek azt kell mondania, hogy „18 és idősebb érvényes”, de >18 van írva, ami azt jelenti, hogy a 18-as életkor elutasítva. A hiba azonnal megjelenik a tesztelés során, mert az AI a „pontosan 18” forgatókönyvet generálja a töréspont-elemzés révén. Egyetlen limit teszt megakadályozza a valódi felhasználói panaszokat.

3. eset – Az aktuális viselkedés javítása. Amikor a mesterséges intelligencia azt kéri, hogy "írjon tesztet ennek a kódnak a alapján", olyan tesztet készít, amely a kódban már meglévő kerekítési hibát "helyesnek" fogad el. Amikor a mérnök a tesztet a követelménynek (várt helyes érték) és nem a kódnak megfelelően nyomtatja ki, a teszt pirosra vált, és a valódi hiba következik be. A teszteket az elvárásokból kell levezetni, nem a kódból.

Gyakori hibák

  • Értelmetlen állítás. A „nem dobott hibát” nem elég; A helyes értéket ellenőrizni kell.
  • Összetéveszti a terjedelmet a minőséggel. A magas lefedettség nem garantálja a pontos eredményt.
  • A teszt kinyomtatása kóddal. Az aktuális hibát "igazra" javítja; A teszteknek az elvárásokból kell származniuk.
  • Határértékek átugrása. A > és a >= összetévesztése a leggyakoribb hiba; határpárokat kell tesztelni.
  • Nem magát a tesztet auditálja. Az a teszt, amely a kód feltörésekor nem válik pirosra, nem nyújt védelmet.

Összefoglalva

Egy jó tesztcsomag a kulcs a magabiztos változtatásokhoz. Az AI gyorsan generál forgatókönyvek, határok és negatív helyzetek sokaságát; De ha a teszteket kódból, nem pedig követelményekből származtatja, kijavíthatja a meglévő hibákat, vagy értelmetlen teszteket írhat, amelyek mindig sikeresek. Minden tesztben állítsa be a konkrét várható értéket, vegyen fel kötött párokat, és ellenőrizze, hogy a tesztek valóban védenek-e a kód szándékos megtörésével. Az állítás tartalma határozza meg a minőséget, nem a hatókörök száma.

Pályázati feladat

Válasszon ki egy függvényt, és készítsen teszteket négy kategóriában (normál, határérték, negatív, hiba) egy átfogó tesztgenerálási prompt segítségével; Minden vizsgálatnál érvényesítse a konkrét várható értéket. Ezután futtassa a sérülékenységvadászat tesztet, javasoljon 5 kis mutációt a kódban, és futtassa a teszteket, hogy ellenőrizze, melyiket fogják el. Adjon hozzá egy új tesztet legalább egy olyan mutációhoz, amelyet nem sikerült elkapni, és mutassa meg, hogy most mínuszban van.

ellenőrző lista

  • [ ] A teszteket az elvárt/helyes viselkedés, nem a kód alapján nyomtattam ki.
  • [ ] Kitértem a normál, limit, negatív és hiba forgatókönyvekre.
  • [ ] Minden vizsgálatnál a konkrét várható értéket állítottam.
  • [ ] Teszteltem a szegélypárokat (csak fent-alul / közvetlenül felette-lent).
  • [ ] A kód szándékos feltörésével megerősítettem, hogy a tesztek pirosra váltak.
  • [ ] Hozzáadtam egy új tesztet a nem észlelt mutációkhoz.