Yksikkö 5 / 12

Vianetsintä ja vianetsintä

Voitot:

  • Kyky kuvata tekoälyn bugi tehokkaasti virheilmoituksella, pinojäljillä ja pienimmällä toistoinstanssilla
  • Kyky suorittaa systemaattista virheenkorjausvirtausta tekoälyllä perimmäisen syyn löytämiseksi olettamalla ja rajaamalla sitä askel askeleelta
  • Kyky varmistaa, että tekoälyn ehdottama korjaus todella korjasi ongelman toistamalla ja regressiotestauksella

Vianetsintä on tehtävä selvittää, miksi ohjelma käyttäytyy eri tavalla kuin odotettiin, ja korjata se, ja se vie paljon useimpien suunnittelijoiden aikaa. Hyvä virheenkorjaus ei perustu arvauspeliin, vaan systemaattiseen kavennukseen: selvitä oire, oleta, testaa hypoteesi, päästä perimmäiseen syyyn. AI on erittäin voimakas kumppani tässä syklissä; Mutta vain jos annat hänelle oikeat tiedot. Sanomalla "koodi ei toimi, korjaa se" pakottaa tekoälyn arvaamaan ja tekemään yleisiä ehdotuksia. Anna sille koko virheilmoitus, pinojäljitys ja pienin jäljennösnäyte, niin yhdessä löydät perimmäisen syyn.

Tässä osiossa näemme, kuinka tehokkaasti kuvataan tekoälyn virhe, rajataan hypoteeseja askel askeleelta ja tarkistetaan regressiotestauksella, että ehdotettu korjaus todella ratkaisee ongelman. Muista: virheen "korjaaminen" ja "virheen oireiden tukahduttaminen" ovat kaksi eri asiaa; Perimmäistä syytä löytämättä tehty korjaus siirtää virheen toiseen paikkaan.

Käsitteet: Pinojäljitys: Vetokuva, joka näyttää, mitä toimintoja kutsuttiin missä järjestyksessä virheen aikaan. Minimaalinen repro: Yksinkertaisin, lyhin koodi/syöttö, joka laukaisee virheen. Perimmäinen syy: Ongelman todellinen lähde, ei oire. Regressiotestaus: Testaus, joka varmistaa, että sama virhe ei toistu.

Tekoälyvirheen kuvaus

Todennäköisyys, että tekoäly löytää perimmäisen syyn, on suoraan verrannollinen antamiesi tietojen laatuun. Hyvä virhekuvaus sisältää: mitä yritit tehdä, mitä odotit, mitä tapahtui, tarkka virheteksti ja pinojäljitys, mukana oleva koodi, ympäristö (kieli/versio/käyttöjärjestelmä) ja pienin virheen aiheuttanut näyte.

  1. Selvitä oire. Muodossa "Odotettu X, toteutunut Y".
  2. Liitä koko virheteksti ja pino jäljitys. Älä lyhennä sitä, sensuroi sitä, mutta älä riko rakennetta.
  3. Anna pienin kopio. Vähimmäissyöte ja virheen laukaiseva koodi.
  4. Määritä ympäristö. Kieliversio, kirjastoversio, ajonaikainen ympäristö.

Tehokas virheen kuvauskehote: "Teen virheenkorjauksen. Tiedot: - Mitä yritän tehdä: [X] - Odotettu toiminta: [Y] - Todellinen toiminta: [Z] - Täysi virheilmoitus ja pinon jäljitys: [liitä] - Ympäristö: [kieli/versio, kirjasto/versio]- Mukana oleva vähimmäiskoodi: [koodi] Todennäköisimmin pääkäyttäjän luettelo. ja kerro minulle, mikä sekki on tarkistettava kullekin."

Hypoteesin kaventava virtaus

Systemaattinen virheenkorjaus on taidetta eliminoida mahdollisuudet yksitellen. Käytä tekoälyä luomaan hypoteeseja ja suunnittelemaan koe jokaisen hypoteesin testaamiseksi; Suorita sitten koe ja palauta tulos. Tämä sykli on paljon nopeampi kuin tapa tehdä satunnaisia ​​muutoksia ja pysähtyä, jota kutsutaan "haulikkovirheenkorjaukseksi".

Binaarihaun (puolittamisen) apukehote: "Tätä virhettä ei ollut eilen, se on olemassa tänään. Haluan selvittää, mikä 20 viimeisestä muutoksesta toi virheen bisectillä. Anna minulle vaiheittainen suunnitelma: mihin kohtaan testata, mihin puoliskoon mennään tuloksen mukaan. Kerro myös tarkalleen, mitä jokaisessa vaiheessa tarkistetaan."

Lokin lisäysstrategiakehote: "En löydä virhettä, koska en näe tämän toiminnon väliarvoja. Kerro minulle, missä kohdissa minun on lisättävä lokirivit, jotka tulostavat mitkä muuttujat. Lisää jokaiselle lokille selitys "mitä opin tästä lokista". Määritä myös varoitukset, jotka estävät minua kirjaamasta luottamuksellisia tietoja."

Vihje: Jos et pysty ratkaisemaan virhettä, ongelma on useimmiten jossain, jossa oletat väärin. Kysy tekoälyltä "mikä oletukseni voisi olla väärä?" Kysyminen murtaa sokeutesi. Vaikeimmat virheet piiloutuvat siihen paikkaan, jossa sanot "Olen varma, että tämä toimii oikein".

Heikko kehote / Vahva kehote

HEIKKO:"Koodini antaa virheen, korjaa se: [200 riviä koodia]"(Tulos: tekoäly ei tiedä, mikä virhe on kyseessä, mitä on odotettavissa; se antaa yleisiä ehdotuksia arvauksen perusteella, useimmat niistä ovat hyödyttömiä.)STRONG:"Saan NullPointerExceptionin. Odotettu: käyttäjäluettelo pitäisi palauttaa. Todellinen: Räjähtää puhelun saamiseksi Stack. 17. Vähimmäistoisto: Se tapahtuu, kun käyttäjäluettelo on tyhjä, mutta ei, kun se on täynnä. Liittyvät 15 riviä: [koodi] Selitä syy ja miksi tyhjä lista laukeaa, ja ehdota sitten korjausta.

Tehokas kehote asettaa virheen kontekstiin: missä tapauksessa se tapahtuu (tyhjä lista), missä tapauksessa se ei tapahdu (täysi luettelo). Tämä yksittäinen vihje ("tapahtuu tyhjänä") viittaa melkein suoraan perimmäiseen syyyn. Koska nämä tiedot eivät ole saatavilla heikossa kehotteessa, tekoäly tekee sokean arvauksen.

Korjauksen vahvistaminen

Korjaus on todellinen korjaus vain, jos se tekee kolme asiaa:

ohjata

Kysymys

Kuinka varmistaa

Onko vika poissa?

Toimiiko sama merkintä nyt?

Suorita minimaalinen repro uudelleen

Ei uusia virheitä?

Onko jotain muuta rikki?

Suorita koko testisarja

Eikö se toistu?

Toistuuko sama virhe?

Lisää regressiotesti tälle skenaariolle

Korjaukset, jotka tehdään ilman perimmäistä syytä, tukahduttavat usein oireen. Esimerkiksi nollavirheen peittäminen sanalla "skip if null" tekee todellisen syyn "miksi data tulee tyhjäksi?" näkymätön, ja virhe toistuu muualla.

Mini Kotelot

Tapaus 1 – Oireiden vaimennusloukku. Joukkue hiljentää satunnaisen nollavirheen try-catchilla; Virhe häviää, mutta 2 viikon kuluttua tiedot näyttävät puuttuvan. Todellinen syy on, että palvelu palauttaa nollan aikakatkaisussa. Kun kysyt AI:ta "miksi se on tyhjä?", perimmäinen syy tulee esiin; Todellinen korjaus kestää 1 tunnin, mutta on pysyvä.

Tapaus 2 — Minimaalinen toistoteho. Kehittäjä ei voi korjata virhettä, joka sanoo "se kaatuu silloin tällöin". Se vähentää virheen pienimpään syötteeseen tekoälyn ehdotuksella: ongelma ilmenee vain turkkilaisia ​​merkkejä sisältävillä tiedostonimillä (koodausvirhe). Kun 300 epävarmuuden riviä vähennetään viiteen lopulliseen repron riviin, ratkaisu tulee ilmeiseksi.

Tapaus 3 – Anti-regressiotesti. AI korjaa päivämäärän laskentavirheen. Insinööri ei ole tyytyväinen tähän; lisää regressiotestin virheelliselle skenaariolle (kuukauden lopussa, 31. tammikuuta + 1 kuukausi). Kun toinen muutos koskettaa samaa aluetta 4 kuukauden kuluttua, testi muuttuu punaiseksi ja vika havaitaan ennen kuin se saapuu tuotantoon.

Yleisiä virheitä

  • Se tarkoittaa "se ei toimi, korjaa se". Ilman virhetekstiä, odotuksia ja reproa, tekoäly arvaa.
  • Ei anna pinosta jälkeä. Pinojälki osoittaa usein suoraan perimmäisen syyn.
  • Jatka satunnaisten muutosten tekemistä. Kokeet ilman hypoteesia tuhlaa aikaa.
  • Oireen tukahduttaminen ja perimmäisen syyn puuttuminen. Virhe syntyy uudelleen muualla.
  • Korjausta ei turvata regressiotestauksella. Sama virhe toistuu hiljaa tulevaisuudessa.

Yhteenvetona

Tehokas virheenkorjaus on systemaattista kaventamista, ei arvailua. Täydellisen virhetekstin, pinon jäljen, minimaalisen toiston ja ympäristötietojen antaminen tekoälylle lisää eksponentiaalisesti mahdollisuuksia löytää perimmäinen syy. Käytä tekoälyä luomaan hypoteeseja ja suunnittelemaan koe jokaisen hypoteesin testaamiseksi; Suoritat kokeilun. Pidä korjausta "tehty" vasta, kun huomaat, että bugi on poissa, uusia bugeja ei ole otettu käyttöön ja se on suojattu regressiotestauksella.

Sovellustehtävä

Harkitse todellista tai keinotekoista virhettä. Vähennä ensin virhe pienimpään toistoon (missä syötteessä se esiintyy, missä ei). Käytä tehokasta bugireseptikehotetta ja pyydä tekoälyltä kolme perussyyhypoteesia ja vahvistusvaihe kullekin. Selvitä perimmäinen syy testaamalla hypoteesit yksitellen, korjaamalla se, kirjoittamalla ja suorittamalla tämän skenaarion regressiotesti osoittaaksesi, että vika on poissa ja testi tarjoaa suojan.

tarkistuslista

  • [ ] Selvensin oiretta "odotettu vs toteutunut".
  • [ ] Annoin koko virhetekstin ja pinon jäljen tekoälylle.
  • [ ] Vähensin virheen pienimpään toistoon.
  • [ ] Testaamalla hypoteeseja yksitellen löysin perimmäisen syyn.
  • [ ] Oireen tukahduttamisen sijaan korjasin perimmäisen syyn.
  • [ ] Lisäsin ja suoritin regressiotestin samalle virheelle.