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.
- Határozza meg a tesztelni kívánt viselkedést. – Mi számít helyesnek? Válaszolj egyértelműen a kérdésre.
- Kérjen forgatókönyvtípusokat. Normál, határérték, negatív, hibaállapot.
- Értelmes állítás importálása. Nem csak "hibát dobott", hanem "visszaadta a helyes értéket".
- 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.