Jedinica 1 / 11

Uvod u umjetnu inteligenciju u testiranju softvera i osiguravanju kvalitete: uloge, granice, rizik od krivotvorina i provjera valjanosti

Dobici:

  • Biti u stanju razlikovati gdje umjetna inteligencija štedi stvarno vrijeme u QA procesu i gdje su kvalitetne odluke poput 'spremno za objavljivanje' prepuštene ljudima, ovisno o nivou rizika zadatka
  • Sposobnost prepoznavanja rizika od lažnih prolaza i implementacije discipline verifikacije koja testira svaki AI test namjernim razbijanjem koda
  • Sposobnost zaštite podataka testiranja, ličnih podataka i ključeva, te sticanje navike izvođenja sigurnosnih testiranja samo u okviru ovlaštenja iu obrambene svrhe.

Razmislite o noći oslobađanja. Provedene su stotine testova, svi su dobili zeleno svjetlo, tim je odahnuo i softver je pokrenut. Sledećeg jutra, korisnik je prijavio da se ekran za plaćanje srušio. Testovi su bili zeleni, ali nije vidio grešku. Ovo je najpodmuklija noćna mora profesije osiguranja kvaliteta (QA), odnosno discipline koja sistematski osigurava da softver bude željenog kvaliteta: test koji svijetli zeleno, ali zapravo ništa ne potvrđuje. Kada veštačka inteligencija (AI — softver koji izdvaja obrasce iz istorijskih podataka i generiše tekst i kod) uđe u ovu profesiju, dolazi do ogromnog ubrzanja i povećanja upravo ove noćne more. Prvobitno obećanje ovog modula je jasno: AI je pomoćnik za testiranje, generator nacrta i množitelj ideja; Vi ste tester koji potpisuje odluku "da li je ovaj softver spreman za izdavanje".

U ovoj prvoj cjelini fokusirat ćemo se na disciplinu, a ne na alat. Naučit ćete gdje AI štedi realno vrijeme u QA procesu, gdje je opasno, zašto je varljivi zeleni takozvani "lažni prolaz" najveći rizik, kako provjeriti svaki izlaz i koje podatke možete dati kojem alatu. Bez postavljanja ovog temelja, sljedeće jedinice će ostati u zraku.

Gdje AI dobro dolazi u procesu testiranja?

Podijelimo poslove testiranja u dva velika klastera. Prva grupa: poslovi koji se ponavljaju, produktivni, nacrti. Izrada testnog slučaja iz zahteva, navođenje tačaka prekida, pisanje kostura koda automatizacije za ekran, prevođenje složenog slučaja greške u uredan izveštaj o grešci, sažimanje stotina redova log fajlova, izdvajanje šeme iz API odgovora. U ovim zadacima, AI skraćuje minute na sekunde i ne umara se.

Drugi klaster: odluke čiji su ishod kvalitet, povjerenje i odgovornost. Odluke kao što su “može li ova verzija biti objavljena”, “da li je ova greška kritična ili se može odgoditi”, “da li je pokrivenost ovim testom dovoljna”, “da li ovaj scenario obuhvata stvarni rizik korisnika” itd. zahtijevaju kontekst, znanje o proizvodu i odgovornost. Ovdje AI generira opcije, nacrte - ali vi odlučujete "prošao/neospio" i "idi/ne idi".

Hajde da razjasnimo razliku u jednoj rečenici: AI je jak u "koje situacije se mogu testirati i kako napisati kod koji ga testira"; Odluka je na vama kada je u pitanju pitanje "Da li ovaj softver zaista radi i ko garantuje za njega?"

Savjet: Prije nego što predate posao AI, pitajte: "Šta se događa ako je ovaj izlaz pogrešan, a ja ne primijetim?" Ako je odgovor "Izgubit ću nekoliko minuta", lako delegirajte. Ako je odgovor "neispravan softver postaje aktivan", pustite AI da izradi nacrt, a vi donosite odluku i verifikaciju.

Lažna prolaznost: rizik broj jedan od AI u QA

Kada test zasvijetli zeleno, to može značiti dvije stvari: ili softver zapravo radi ispravno, ili ne vidi grešku jer je test pogrešno napisan. Drugi se zove lažni prolaz - test kaže "prošao", ali zapravo ništa ne potvrđuje. Ovaj rizik se značajno povećava u testovima proizvedenim s AI, jer je AI vrlo uspješna u pisanju tečnih, uglađenih, ali praznih testova.

Tri najčešća oblika pseudo-prolaska su: (1) Testiranje bez tvrdnje — kod se pokreće, ne sadrži tvrdnje, uvijek prolazi. (2) Test samoprovere — očekivana vrednost testa se izračunava na osnovu izlaznog koda koji se testira; To jest, šta god da kod proizvede, test prihvata kao "tačan". (3) Test koji potvrđuje pogrešnu stvar - tvrdnja postoji, ali provjerava nešto trivijalno (npr. "odgovor nije ništavan"), a ne stvarno poslovno pravilo.

Oprez: Zeleni test panel nije dokaz kvaliteta; U najboljem slučaju piše "kontrole koje smo napisali trenutno nisu pokvarene". Nemojte se tješiti kada vidite „prolaz“ na testu koji AI proizvodi – pravo je pitanje: hoće li ovaj test postati crveni ako namjerno razbijem kod? Ako se ne okreće, taj test je ukras.

Zlatno pravilo koje se ponavlja kroz ovaj modul: testirajte svaki AI test namjernim razbijanjem koda. Ako je test i dalje zelen, taj test ne radi. (Ovu ideju ćemo produbiti kao testiranje mutacija u jedinici 10.)

Disciplina verifikacije: tri koraka

AI govori sa samopouzdanjem; To ne znači da je istina. Razvijte refleks u tri koraka koji ćete primijeniti na svaki ishod:

  1. Povežite to sa zahtjevom. Svaki testni slučaj i tvrdnja da AI proizvodi moraju biti zasnovani na stvarnom zahtjevu ili kriterijima prihvatljivosti (uslovi koje posao mora ispuniti da bi se smatrao "gotovim"). “Koje pravilo potvrđuje ovaj scenario?” pitaj.
  2. Vidi crveno. Pokrenite generirani test jednom, razbijajući kod. Ako ne postane crveno, test je nevažeći. Ovo je korak o kojem se ne može pregovarati u AI testiranju.
  3. Prođite kroz kontekstni filter. Da li se rezultat podudara sa onim što znate da je ponašanje proizvoda, arhitektura, stvarni tok korisnika? Vaše znanje o domeni je konačni filter.

Privatnost i sigurnost podataka: šta gdje ide?

Podaci s kojima radite u testnom okruženju su često osjetljivi: evidencija stvarnih kupaca, kopije proizvodnih baza podataka, API ključevi, interne sistemske adrese, funkcije koje tek treba da budu objavljene. Napravite jednostavnu klasifikaciju: otvoreni podaci (dokumentovani, javno dostupni) mogu ući u svako vozilo. Interni podaci (fragmenti izvornog koda, interna dokumentacija) samo za alate koje je odobrila agencija. Povjerljivi podaci (podaci o stvarnim klijentima, informacije o identitetu, detalji o ranjivosti, ključevi) ulaze samo u ugovorene alate institucije, čiji podaci ne idu na obuku modela, po mogućnosti maskirani.

Postoji dodatno ograničenje u kontekstu sigurnosnog testiranja: sve što se nauči u ovom modulu služi u odbrambene svrhe — da autoritativno testirate sigurnost vašeg vlastitog proizvoda. Korištenje AI za infiltriranje u tuđi sistem bez dozvole, oružje za stvarne ranjivosti ili testiranje sistema za koji nemate ovlaštenja istovremeno je neetično i kriminalno. Nikakvo uvredljivo testiranje se neće raditi bez autorizacije (obuhvata i dozvole).

Savjet: Koristite sintetičke (vještački proizvedene) testne podatke umjesto stvarnih podataka o kupcima. Traženje od AI-a da „generira realistične, ali potpuno izmišljene testne podatke“ istovremeno čuva privatnost i diverzificira rubne slučajeve.

tri mini kofera

Slučaj 1 — Ušteda vremena na pravom mjestu. Tester Ekomerce tima proveo je 6 sati ručno kreirajući scenarij testiranja iz dokumenta sa zahtjevima od 30 stranica za svako izdanje. Dao je dokument (dio koji nije sadržavao poslovne tajne) YZ i zatražio strukturirani nacrt scenarija; Vrijeme je smanjeno na 90 minuta. On je ušteđeno vrijeme posvetio samoj provjeri i dodavanju rubnih slučajeva poslovnih pravila koje je AI propustio. AI je oduzeo rad koji se ponavlja, prepuštajući prosuđivanje čovjeku.

Slučaj 2 — Lažni prolaz uhvaćen. Programer je imao AI da napiše 12 jediničnih testova za računsku funkciju; svi su bili zeleni. Tester je implementirao korak "vidi crveno": namjerno promijenio znak sabiranja unutar funkcije u množenje. Samo 3 od 12 testova su pokazala crveno. Ostalih 9 testova nije dalo pravu potvrdu; Samo je pisalo "nije izbacilo grešku". Izbrisano je 9 dekorativnih testova, a umjesto njih napisano je 5 pravih.

Slučaj 3 — Povratak nakon povrede privatnosti. Pripravnik je zalijepio dnevnik grešaka koji sadrži e-poštu stvarnih kupaca i posljednje četiri cifre kartice iz proizvodne baze podataka u javni alat i rekao "objasni ovu grešku". Intervenisao je vođa QA: ovo su bili lični podaci van kontrole i kršenje KVKK (Zakon o zaštiti ličnih podataka). Isti posao je obavljen u vozilu koje je odobrila institucija, maskirajući lične prostore i ostavljajući samo trag naslaga.

Četiri šablona za kopiranje

1) Procjena podobnosti za posao:

Vaša uloga: viši QA lider. Opisaću vam posao testiranja. Recite mi (1) da li je ovaj posao rad na izradi/analizi koji se može bezbedno delegirati AI ili kvalitetna odluka koju čovek mora da donese, (2) potencijalni trošak netačnog rezultata, (3) provera koju treba da uradim pre delegiranja. Posao: [ovde unesite posao]

2) Pseudo-pass kontrola:

U nastavku pogledajte test. Recite mi: - Kakvo ponašanje potvrđuje ovaj test? (jedna rečenica)- Kako mogu razbiti kod koji se testira tako da test postane CRVENI?- Postoji li slabost koja bi mogla uzrokovati da ovaj test uvijek prođe (nedostaje tvrdnja, samopotvrđivanje, trivijalna provjera)? Test: [zalijepi test ovdje]

3) Testirajte kontrolu maskiranja podataka:

Dnevnik/podaci koje ću vam dati mogu sadržavati lična ili povjerljiva polja (e-mail, ime, kartica, ključ, interna adresa). Prvo, navedite polja koja treba maskirati; Zamaskirat ću ga i poslati ponovo. Nemojte to analizirati onako kako jeste.

4) Generisanje podataka sintetičkog testa:

Generirajte 20 redova potpuno izmišljenih, realističnih testnih podataka za [sljedeću strukturu polja]. Nemojte koristiti stvarne podatke o osobi/organizaciji. Uključite i rubne slučajeve: prazan prostor, predugačak tekst, granične vrijednosti, nevažeći format.

Slaba prompt / Jaka prompt

Slabo: "Napišite testove na ovom kodu."
Snažno: "Izračunajte ovo Napišite jedinične testove za funkciju popusta. Kriterijumi prihvatanja funkcije: 10% popusta preko 1000 TL, 20% popusta preko 5000 TL; negativan iznos bi trebao izazvati grešku. Navedite u redu komentara koje pravilo potvrđujete za svaki test. Testirajte granične vrijednosti (999, 1000, 500, 1000, 1000). tvrdnje koje će postati crvene ako razbijem kod ili ne napišem trivijalno assert."

Snažan prompt; Obezbeđuje kriterijume prihvatljivosti, granične vrednosti, očekivanja validacije i eksplicitne instrukcije protiv lažiranja. Slabi prompt poziva AI da napiše dekorativni test.

Uobičajene greške

  • Trusting green. Misljenje da je polaganje testa dokaz. Pravo pitanje je: da li postaje crveno kada razbijete kod?
  • Zahtjev za testiranje bez navođenja razloga. AI proizvodi generičke, često beskorisne testove bez znanja šta treba provjeriti.
  • Preskakanje verifikacije. Rekavši "AI je to napisao, vjerovatno je istina". Odgovornost je na osobi koja koristi izlaz.
  • Lijepljenje stvarnih/osjetljivih podataka u alat. Rad sa proizvodnim podacima, ključevima ili ličnim podacima.
  • Neovlašteno testiranje sigurnosti. Pokušaj uvredljivog testiranja bez obima i dozvole.
  • Korištenje AI za delegiranje donošenja odluka. Postavljajući pitanje "Može li ova verzija biti objavljena?" AI i stavljanje odgovora u potpis.

Ukratko

AI je moćan asistent u QA procesu koji ubrzava rad koji se ponavlja i koji je produktivan; Ali odgovornost za kvalitetnu odluku leži na čovjeku. Rizik broj jedan od AI u ovoj profesiji je pseudo-prolaz: zeleni testovi koji izgledaju uredno, ali ništa ne potvrđuju. Testirajte svaki AI test namjernim razbijanjem koda; Ako ne pocrveni, taj test je ukras. Povežite ga sa zahtjevom, vidite crveno, prođite kroz kontekstni filter. Maskirajte povjerljive podatke, vršite sigurnosno testiranje samo u ovlaštene i obrambene svrhe.

Zadatak aplikacije

Uzmite 5 AI generiranih (ili AI generiranih) jediničnih testova iz vlastitog projekta. Za svaki: (1) napišite u jednoj rečenici koje ponašanje provjerava, (2) namjerno razbijte i pokrenite kod koji se testira i zabilježite koliko ih je postalo crveno, (3) označite one koji ne postaju crveni kao "testove dekoracije" i prepišite ih sa pravom tvrdnjom. Stavite rezultat u tabelu: naziv testa / pravilo koje je potvrđeno / da li je pokvareno kada je prekinuto / radnja.

kontrolna lista

  • [ ] Prije predaje rada postavio sam pitanje "šta ću izgubiti ako krene po zlu?"
  • [ ] Testirao sam svaki AI test razbijanjem koda; Zamijenio sam onaj koji nije pocrvenio pravim testom.
  • [ ] Povezao sam testne slučajeve sa stvarnim kriterijima zahtjeva/prihvatanja.
  • [ ] Ja sam maskirao osjetljive/stvarne podatke bez da ih dam alatu; Koristio sam sintetičke podatke ako je moguće.
  • [ ] Razmišljao sam o testiranju sigurnosti samo u okviru ovlaštenja iu odbrambene svrhe.
  • [ ] Odluku o tome "da li će verzija biti objavljena" prepustio sam sebi, a ne AI.