Câștiguri:
- Abilitatea de a produce teste unitare, de integrare și de caz marginal cu afirmații semnificative cu AI
- Abilitatea de a extrage sistematic acoperirea testelor, valorile limită și scenariile negative cu suport AI
- Capacitatea de a verifica dacă testele produse de AI verifică de fapt comportamentul și nu repetă doar codul existent
Testarea este mecanismul care demonstrează că software-ul se comportă de fapt conform promisiunii. O suită de testare bună vă spune în câteva secunde dacă o schimbare rupe ceva și îi oferă inginerului libertatea de a acționa cu încredere. AI accelerează partea cea mai obositoare și cea mai omisă a scrierii testului: generând o multitudine de scenarii, puncte de întrerupere și cazuri negative. Dar există o capcană ascunsă aici: AI poate scrie teste care verifică comportamentul curent (poate defectuos) al codului, nu presupusul său comportament; sau poate produce teste goale care trec întotdeauna, fără a verifica nimic. Valoarea unui test nu este dacă trece, ci dacă verifică ceea ce este corect și devine roșu când este greșit.
În această unitate, veți învăța cum să produceți teste unitare, de integrare și de caz marginal cu afirmații semnificative; cum să extrageți sistematic acoperirea testelor, punctele de întrerupere și scenariile negative; și vom vedea cum puteți verifica dacă testele pe care le produce AI validează de fapt comportamentul.
Concepte: Testarea unitară: Testează o singură funcție/clasă în mod izolat. Testarea integrării: testează că mai multe părți funcționează împreună corect. Assert: O declarație care verifică dacă un rezultat este egal cu ceea ce era așteptat; Acesta este miezul testului. Acoperire: Cât de mult din cod este rulat prin teste; Acoperirea ridicată nu garantează calitatea.
Producerea de teste semnificative
Un test bun face trei lucruri clar: stabilește o stare, efectuează o acțiune, afirmă rezultatul. Când imprimați teste către AI, specificați ce comportament doriți să verificați și ce scenarii ar trebui să acopere; În rest, produce teste superficiale care trec mereu.
- Definiți comportamentul de testat. „Ce contează drept corect?” Răspundeți clar la întrebare.
- Solicitați tipuri de scenarii. Condiție normală, limită, negativă, de eroare.
- Importați o afirmație semnificativă. Nu doar „a aruncat o eroare”, ci „a returnat valoarea corectă”.
- Verificați acuratețea testului. Testul devine roșu când spargi codul în mod conștient?
Prompt cuprinzător de generare a testelor: „Scrieți teste unitare pentru următoarea funcție „aplicarediscount(suma, cupon)”. Aveți CEL MĂȚIN un scenariu în următoarele categorii: (1) cupon normal valabil, (2) puncte de întrerupere (sumă 0, reducere de 100%), (3) negativ (cupon nevalid, sumă negativă), (4) caz de eroare (cupon nul, valoare negativă). testele lizibile Cod: [cod]"
Prompt de extragere a valorii limită: „Efectuați o analiză a valorii limită pentru intrările acestei funcții. Pentru fiecare parametru, extrageți valorile „doar la graniță”, „chiar sub graniță”, „chiar deasupra graniței” sub formă de tabel. Apoi enumerați scenariile de testare care acoperă aceste limite. Nu scrieți încă cod, doar analiza și lista de scenarii.
Atenție: Acoperirea mare a testului (de exemplu, 90%) nu dovedește că codul este corect. Acoperirea măsoară câte rânduri au fost executate; nu că acele linii produc rezultatul corect. Un test fără afirmații semnificative crește acoperirea, dar nu garantează nimic. Conținutul afirmației determină calitatea, nu numărul de aserțiuni.
Testarea testului în sine: logica mutației
Cea mai practică modalitate de a înțelege dacă testul generat de AI funcționează cu adevărat este să spargeți în mod deliberat codul (logica de testare a mutațiilor). Inversați o condiție, faceți semnul + -; Dacă niciun test nu devine roșu, testele dvs. nu mențin de fapt acel comportament.
Prompt de căutare a vulnerabilităților de testare: „Spuneți-mi ce erori potențiale din acest cod POT NU prinde următoarele teste. Sugerați 5 mici mutații care ar putea fi făcute codului (de ex. >= în loc de >, - în loc de +) și indicați pentru fiecare dacă testele existente îl vor detecta. Pentru cei care nu sunt prinși, sugerați testarea care ar trebui adăugată. Cod: [cod] Teste:
Solicitare slabă / Solicitare puternică
SLAB: „Scrieți un test pentru această funcție”. (Rezultat: de obicei un scenariu fericit, afirmație slabă; greșeli greșite.) STRONG: „Scrieți un test pentru această funcție „passwordStrong”. Regulă: cel puțin 8 caractere, 1 literă mare, 1 cifră necesară. Acoperiți următoarele scenarii ca teste SEPARATE: exact 8 caractere (limită), 7 caractere (sub limită, litere, fără spații, numai litere mari, fără spații prea lung (1000 de caractere) Afirmați în mod explicit valoarea așteptată adevărat/fals în fiecare test și numiți testul în funcție de ceea ce verifică."
Un prompt puternic oferă reguli și scenarii de limite complete. Perechile de limite precum „exact 8/7 caractere” sunt cele mai frecvente locuri pentru a face greșeli (confundarea > cu >=). Promptul slab ocolește aceste limite și duce eroarea la producție.
Tipuri de teste și unde se utilizează
Tipul testului
Ce confirma?
Contribuția AI
Atenție
unitate
Funcție/clasă unică
Generează mai multe scenarii rapid
Este necesară o afirmație semnificativă
integrare
Piesele lucrează împreună
Schiță de scenarii și date simulate
Adevărat comportament care provoacă dependență
termina/accepta
Întregul flux de utilizatori
Lista de pași și așteptări
predispus la fragilitate
regresie
Eroare veche nu se întoarce
Testare specifică defecțiunii
Ar trebui adăugat la fiecare remediere
Mini Carcase
Cazul 1 — Testul care trece întotdeauna. AI scrie 12 teste la o funcție și toate trec. Inginerul devine suspicios și distorsionează în mod deliberat valoarea returnată a funcției; Doar 3 dintre teste devin roșii. Celelalte 9 teste nu conțin afirmații semnificative. Testarea este întărită de vânătoarea de mutații; protecție reală se câștigă în 9 scenarii.
Cazul 2 — Eroare de limită. O funcție de verificare a vârstei ar trebui să spună „18 și peste este valid”, dar >18 este scris, ceea ce înseamnă că vârsta de 18 este respinsă. Eroarea apare imediat la testare, deoarece AI generează scenariul „exact 18” prin analiza punctelor de întrerupere. Un singur test limită previne orice reclamație reală a utilizatorilor.
Cazul 3 — Fixarea comportamentului curentului. Când AI i se spune să „scrie un test pe baza acestui cod”, acesta produce un test care acceptă ca „corectă” o eroare de rotunjire care există deja în cod. Când inginerul imprimă testul conform cerinței (valoarea corectă așteptată) și nu codul, testul devine roșu și apare eroarea reală. Testele ar trebui să fie derivate din așteptări, nu din cod.
Greșeli comune
- Afirmație inutilă. „Nu a aruncat o eroare” nu este suficient; Valoarea corectă trebuie verificată.
- Confundarea domeniului de aplicare cu calitatea. Acoperirea ridicată nu este o garanție a rezultatelor exacte.
- Imprimarea testului prin cod. Fixează eroarea curentă la „adevărat”; Testele ar trebui să decurgă din așteptări.
- Sărirea valorilor limită. Confuzia > cu >= este cea mai frecventă greșeală; perechile de limite trebuie testate.
- Nu auditează testul în sine. Un test care nu devine roșu atunci când încalci codul nu oferă protecție.
Pe scurt
O suită bună de testare este cheia pentru a face schimbări cu încredere. AI generează rapid o multitudine de scenarii, limite și situații negative; Dar dacă derivă teste mai degrabă din cod decât din cerințe, poate remedia erorile existente sau poate scrie teste fără sens care trec întotdeauna. Afirmați valoarea concretă așteptată în fiecare test, includeți perechile legate și verificați dacă testele dvs. protejează de fapt prin spargerea deliberată a codului. Conținutul afirmației, nu numărul de domenii, determină calitatea.
Sarcina de aplicare
Selectați o funcție și puneți-o să genereze teste în patru categorii (normal, limită, negativ, eroare) cu un prompt cuprinzător de generare a testelor; Afirmați valoarea concretă așteptată în fiecare test. Apoi rulați promptul de căutare a vulnerabilităților de testare, sugerați 5 mici mutații în cod și rulați testele pentru a verifica pe care le prind. Adăugați un nou test pentru cel puțin o mutație care nu a fost prinsă și arătați că acum este în roșu.
lista de verificare
- [ ] Am imprimat testele pe baza comportamentului așteptat/corect, nu a codului.
- [ ] Am acoperit scenarii normale, limită, negative și de eroare.
- [ ] Am afirmat valoarea concretă așteptată în fiecare test.
- [ ] Am testat perechi de chenar (chiar deasupra-dedesubt / chiar deasupra-dedesubt).
- [ ] Prin încălcarea deliberată a codului, am confirmat că testele au devenit roșii.
- [ ] Am adăugat un nou test pentru mutațiile nedetectate.