Voitot:
- Kyky tuottaa yksikkö-, integraatio- ja reunatapaustestejä mielekkäällä väitteellä tekoälyn avulla
- Kyky systemaattisesti poimia testien kattavuus, raja-arvot ja negatiiviset skenaariot AI-tuella
- Kyky varmistaa, että tekoälyn tuottamat testit todella varmistavat käyttäytymisen eivätkä vain toista olemassa olevaa koodia
Testaus on mekanismi, joka osoittaa, että ohjelmisto todella käyttäytyy luvatulla tavalla. Hyvä testisarja kertoo sekunneissa, rikkooko muutos jotain ja antaa insinöörille vapauden toimia luottavaisin mielin. Tekoäly nopeuttaa kokeen kirjoittamisen tylsimmän ja ohitetuimman osan: luo lukuisia skenaarioita, keskeytyskohtia ja negatiivisia tapauksia. Mutta tässä on luja ansa: tekoäly voi kirjoittaa testejä, jotka varmistavat koodin nykyisen (ehkä viallisen) toiminnan, ei sen oletetun toiminnan; tai se voi tuottaa tyhjiä testejä, jotka läpäisevät aina, eivät itse asiassa tarkista mitään. Testin arvo ei ole siinä, läpäiseekö se, vaan siinä, tarkistaako se oikean asian ja muuttuu punaiseksi, kun se on väärä.
Tässä osiossa opit tuottamaan yksikkö-, integraatio- ja reunatapaustestejä merkityksellisillä väitteillä; kuinka järjestelmällisesti poimia testikattavuus, keskeytyskohdat ja haittaskenaariot; ja katsotaan, kuinka voit tarkistaa, että tekoälyn tuottamat testit todella vahvistavat käyttäytymisen.
Käsitteet: Yksikkötestaus: Testaa yksittäistä toimintoa/luokkaa erikseen. Integrointitestaus: Testaa, että useat osat toimivat oikein yhdessä. Assert: Lausunto, joka tarkistaa, että tulos on yhtä suuri kuin odotettiin; Tämä on testin ydin. Kattavuus: kuinka suuri osa koodista suoritetaan testeillä; Korkea peittokyky ei takaa laatua.
Merkittävien testien tuottaminen
Hyvä testi tekee kolme asiaa selkeästi: se asettaa tilan, se suorittaa toiminnon, se vahvistaa tuloksen. Kun tulostat testejä tekoälylle, määritä, minkä toiminnan haluat varmistaa ja mitä skenaarioita sen tulee kattaa. Muuten se tuottaa pinnallisia testejä, jotka läpäisevät aina.
- Määrittele testattava käyttäytyminen. "Mikä lasketaan oikeaksi?" Vastaa kysymykseen selkeästi.
- Kysy skenaariotyyppejä. Normaali, raja, negatiivinen, virhetila.
- Tuo mielekäs väite. Se ei vain "heittänyt virhettä", se "palautti oikean arvon".
- Tarkista testin tarkkuus. Muuttuuko testi punaiseksi, kun rikot koodin tietoisesti?
Kattava testin luomiskehote: "Kirjoita yksikkötestejä seuraavalle 'applydiscount(summa, kuponki)' -toiminnolle. Käytä VÄHINTÄÄN yksi skenaario seuraavissa luokissa: (1) normaali voimassa oleva kuponki, (2) keskeytyspisteet (0 summa, 100 %:n alennus), (3) negatiivinen (virheellinen kuponki, negatiivinen summa), (4) kutakin odotettua virhearvoa NC (ei tyhjennä). vain "toimii").
Raja-arvon poimintakehote: "Suorita raja-arvoanalyysi tämän funktion syötteille. Poimi jokaiselle parametrille arvot "juuri rajalla", "rajan alapuolella", "juuri rajan yläpuolella" taulukoksi. Listaa sitten testiskenaariot, jotka kattavat nämä rajat. Älä vielä kirjoita koodia, vain analyysi ja [signaarioluettelo]."
Varoitus: Korkea testikattavuus (esim. 90 %) ei todista, että koodi on oikea. Kattavuus mittaa kuinka monta riviä suoritettiin; ei sillä, että nuo viivat tuottaisivat oikean tuloksen. Testi ilman merkityksellistä väitettä lisää kattavuutta, mutta ei takaa mitään. Väitteen sisältö määrää laadun, ei väitteiden lukumäärä.
Itse testin testaus: Mutaatiologiikka
Käytännöllisin tapa ymmärtää, toimiiko tekoälyn luoma testi todella, on murtaa koodi tarkoituksella (mutaatiotestauslogiikka). Käännä ehto, tee +-merkki -; Jos mikään testi ei muutu punaiseksi, testisi eivät itse asiassa ylläpidä tätä käyttäytymistä.
Testaa haavoittuvuuden etsintäkehote: "Kerro minulle, mitä tämän koodin mahdollisia virheitä seuraavat testit EIVÄT saa havaita. Ehdota 5 pientä mutaatiota, jotka voitaisiin tehdä koodiin (esim. >= >, - + sijaan) ja ilmoita kullekin, saisivatko olemassa olevat testit sen kiinni. Jos ei havaita, ehdota testaamista, joka pitäisi lisätä. Koodi: [koodi] Testit: [testi]"
Heikko kehote / Vahva kehote
HEIKKO: "Kirjoita testi tälle funktiolle." (Tulos: yleensä yksi onnellinen skenaario, heikko väite; virheet jää väliin.) VAHVA: "Kirjoita testi tähän 'salasanaStrong'-funktioon. Sääntö: vähintään 8 merkkiä, 1 iso kirjain, 1 numero vaaditaan. Kattaa seuraavat skenaariot ERILLISIÄ testeinä: täsmälleen 8 merkkiä (raja), 7 merkkiä (ei ylempiä kirjaimia, ei merkkijonoa, alle, välilyönnit, liian pitkät (1000 merkkiä) Vahvista eksplisiittisesti odotettu tosi/epätosi-arvo jokaisessa testissä ja nimeä testi sen mukaan, mitä se tarkistaa."
Tehokas kehote antaa säännöt ja täydelliset rajaskenaariot. Rajaparit, kuten "täsmälleen 8/7 merkkiä", ovat yleisimpiä paikkoja tehdä virheitä (sekoittaa > ja >=). Heikko kehote ohittaa nämä rajat ja siirtää virheen tuotantoon.
Testityypit ja käyttöpaikka
Testityyppi
Mitä se vahvistaa?
AI panos
Huomio
yksikkö
Yksi toiminto/luokka
Luo useita skenaarioita nopeasti
Merkittävä väite vaaditaan
integraatio
Osat toimivat yhdessä
Skenaario ja valetietoluonnos
Todellista riippuvuutta aiheuttavaa käytöstä
lopettaa/hyväksyä
Koko käyttäjävirta
Vaiheluettelo ja odotukset
altis haurastumiselle
regressio
Vanha virhe ei palaa
Vikakohtainen testaus
Pitäisi lisätä jokaiseen korjaukseen
Mini Kotelot
Tapaus 1 – testi, joka läpäisee aina. Tekoäly kirjoittaa funktioon 12 testiä ja ne kaikki läpäisevät. Suunnittelija tulee epäluuloiseksi ja vääristää tarkoituksella funktion palautusarvoa; Vain 3 testistä muuttuu punaiseksi. Muut 9 testiä eivät sisällä merkityksellisiä väitteitä. Testausta vahvistaa mutaatiometsästys; todellinen suoja saadaan 9 skenaariossa.
Tapaus 2 – Rajavirhe. Ikävarmistustoiminnon pitäisi sanoa "18 ja sitä vanhemmat ovat voimassa", mutta kirjoitetaan >18, mikä tarkoittaa, että ikä 18 hylätään. Virhe näkyy heti testauksessa, koska tekoäly luo "täsmälleen 18" skenaarion keskeytyspisteanalyysin avulla. Yksi rajatesti estää todelliset käyttäjien valitukset.
Tapaus 3 — Korjataan nykyinen käyttäytyminen. Kun tekoälyä käsketään "kirjoittamaan testi tämän koodin perusteella", se tuottaa testin, joka hyväksyy "oikeaksi" koodissa jo olevan pyöristysvirheen. Kun insinööri tulostaa testin vaatimuksen mukaisesti (odotettu oikea arvo) eikä koodia, testi muuttuu punaiseksi ja todellinen virhe tapahtuu. Testien tulee perustua odotuksiin, ei koodiin.
Yleisiä virheitä
- Turha väite. "Ei tehnyt virhettä" ei riitä; Oikea arvo on tarkistettava.
- Laajuus ja laatu sekaisin. Korkea peittokyky ei takaa tarkkoja tuloksia.
- Testin tulostaminen koodilla. Korjaa nykyisen virheen "tosi"; Testien tulee perustua odotuksiin.
- Raja-arvojen ohittaminen. Sekava > ja >= on yleisin virhe; rajaparit on testattava.
- Itse testiä ei tarkastaa. Testi, joka ei muutu punaiseksi, kun rikot koodin, ei tarjoa suojaa.
Yhteenvetona
Hyvä testauspaketti on avain muutosten tekemiseen luottavaisin mielin. Tekoäly luo nopeasti lukuisia skenaarioita, rajoja ja negatiivisia tilanteita; Mutta jos se johtaa testit koodista vaatimuksien sijaan, se voi korjata olemassa olevat virheet tai kirjoittaa merkityksettömiä testejä, jotka aina läpäisevät. Vahvista konkreettinen odotusarvo jokaisessa testissä, sisällytä sidotut parit ja varmista, että testit todella suojaavat rikkomalla koodia tarkoituksella. Väitteen sisältö, ei laajuuksien lukumäärä, määrää laadun.
Sovellustehtävä
Valitse funktio ja pyydä sitä luomaan testit neljään kategoriaan (normaali, raja, negatiivinen, virhe) kattavalla testin luontikehotteella; Vahvista konkreettinen odotusarvo jokaisessa testissä. Suorita sitten haavoittuvuuden etsintäkehote, ehdota viittä pientä mutaatiota koodissa ja suorita testit tarkistaaksesi, mitkä ne havaitsevat. Lisää uusi testi ainakin yhdelle mutaatiolle, jota ei saatu kiinni, ja osoita, että se on nyt miinuksella.
tarkistuslista
- [ ] Tulostin testit odotetun/oikean toiminnan, en koodin perusteella.
- [ ] Käsittelin normaali-, raja-, negatiivi- ja virheskenaarioita.
- [ ] Väitin jokaisessa testissä konkreettisen odotusarvon.
- [ ] Testasin reunuspareja (juuri ylä-ala / juuri ylä-ala).
- [ ] Rikkomalla koodin tarkoituksella varmistin, että testit muuttuivat punaisiksi.
- [ ] Lisäsin uuden testin havaitsemattomille mutaatioille.