Jedinica 7 / 11

Otklanjanje pogrešaka i analiza padova s umjetnom inteligencijom

Dobici:

  • Sposobnost brzog sužavanja mogućih temeljnih uzroka davanjem zapisa o rušenju (tragova snopa) umjetnoj inteligenciji s relevantnim kodom i kontekstom scenarija
  • Sposobnost trajnog rješavanja temeljnog uzroka umjesto potvrđivanja dijagnoze umjetne inteligencije kao hipoteze u kodu te testiranja i utišavanja simptoma
  • Zaštita privatnosti tijekom otklanjanja pogrešaka maskiranjem osobnih podataka u zapisima o rušenju i zapisima

Svaka aplikacija daje pogreške; Ono što razlikuje dobrog programera je koliko brzo pronalazi i ispravlja greške. Mobile debugging — pronalaženje i popravljanje izvora problema — posebno je teško jer se pogreška javlja na korisnikovom uređaju, u okruženju koje ne možete vidjeti. Većinu vremena sve što imate je zapisnik o padu (zapis o padu/trag snopa — tehnička analiza gdje je aplikacija išla kada se srušila). AI je iznimno moćan u čitanju tih zagonetnih zapisa, popisu mogućih uzroka i predlaganju rješenja. U ovoj jedinici naučit ćemo kako koristiti AI kao "detektiva grešaka", ali ćemo vam prepustiti odgovornost provjere konačne dijagnoze i popravka.

Čitanje dnevnika sudara: Gdje umjetna inteligencija najsjajnije sija

Dnevnik pada je dugačak i zastrašujući tekst; neiskusan programer neće znati gdje tražiti. AI analizira ovaj tekst u sekundi: na kojem se retku srušio, koja je iznimka bačena, koji je mogući razlog. Uobičajene mobilne pogreške su očite i AI ih brzo prepoznaje: NullPointerException (pokušava pristupa null vrijednosti), IndexOutOfBoundsException (pristup nepostojećem elementu popisa) na Androidu, EXC_BAD_ACCESS (pristup oslobođenoj memoriji) na iOS-u, neočekivano pronađena nula (forsiranje nule nije obavezno).

Najčešće vrste rušenja mobilnih uređaja i njihovi tipični uzroci su sljedeći:

Greška (iznimka)

Platforma

tipičan uzrok

NullPointerException

Android

Pristup nultoj vrijednosti

IndexOutOfBoundsException

Android

Pristup nepostojećem elementu popisa

neočekivano pronađena nula

iOS

Prisilno odmotavanje nulte opcije (!)

EXC_LOŠ_PRISTUP

iOS

Pristup oslobođenoj memoriji

ANR/zamrzavanje

Android

Duga/teška obrada na glavnoj niti

Tijek uklanjanja pogrešaka korak po korak:

  1. Sakupite zapis. Sastavite zapisnik o padu, poruku o pogrešci i korake za njegovu reprodukciju ako je moguće.
  2. Dajte AI kontekst. Recite mi ne samo pogrešku, već i relevantni dio koda i što se srušio.
  3. Pitajte za moguće uzroke. "Recite mi 3 najvjerojatnija uzroka i kako provjeriti svaki."
  4. Potvrdi. Potvrdite predloženi razlog u kodu i testiranju; Nemojte to popravljati nagađanjem.
  5. Popravite to i ponovno testirajte. Provjerite je li pogreška stvarno nestala i ne generiraju li se nove pogreške.
Savjet: kada dajete zapisnik o padu AI-ju, uključite i relevantni isječak koda. Samo s praćenjem stoga AI daje opće predviđanje; Kada vidite šifru, vjerojatnost pronalaska točne linije i pravog uzroka znatno se povećava. Kontekst određuje kvalitetu dijagnoze.

Zamka osobnih podataka

Zapisi o padu i zapisnici često sadrže korisničke podatke: e-poštu, korisnički ID, lokaciju, čak i sadržaj obrasca. Lijepljenje ovog zapisa u AI u takvom stanju predstavlja curenje osobnih podataka trećoj strani i predstavlja kršenje KVKK / GDPR. Očistite (maskirajte) osobna područja prije slanja snimke. Također, pazite da ne upisujete osobne podatke u zapisnike svoje aplikacije od početka; Dobar zapisnik opisuje problem, ali ne otkriva identitet.

Oprez: popravak koji predlaže AI može "utišati bug", ali ne mora riješiti glavni uzrok. Na primjer, omatanje NullPointerException provjerom null zaustavit će rušenje, ali ako ne shvatite zašto je vrijednost null, stvarna logička pogreška će se nastaviti. Liječite bolest, a ne simptom.

Analiza temeljnog uzroka

Cilj profesionalnog otklanjanja pogrešaka nije ušutkati pogrešku, već pronaći temeljni uzrok. Pitao sam AI "zašto bi ovo moglo biti nulto, gdje se moglo izgubiti u protoku podataka?" pitajući, "kako da ovo utišam?" Mnogo je vrijednije od traženja. Nakon što se pronađe glavni uzrok, deseci varijacija iste pogreške rješavaju se odjednom. AI je dobra u ovom lančanom zaključivanju: prati podatke od ulaza do izlaza i traži od nje da razmisli gdje se kvare.

tri mini kućišta

Slučaj 1 — 2 sata rada u 10 minuta. Programer je proveo 2 sata tražeći bug koji se srušio samo na određenom Samsung modelu. Dao zapisnik o padu (čišćenje osobnih područja) AI-u; YZ je rekao da pogreška ukazuje na prekoračenje memorije koje se događa s različitom rezolucijom kamere tog uređaja. S tragom, razlog je pronađen za 10 minuta. AI je ubrzao pretragu, ljudi su potvrdili rješenje.

Slučaj 2 — Utišani bug se vratio. Jedan je tim utišao ponavljajući pad pomoću prijedloga umjetne inteligencije da ga pokuša uhvatiti. Rušenje je prestalo, ali su se korisnici počeli žaliti da se "podaci ne spremaju"; jer je pravi problem (veza baze podataka) još uvijek bio tu, samo je postao nevidljiv. Nakon što je pronađen temeljni uzrok, riješeni su i pad i gubitak podataka. Pouka: utišavanje nije rješenje.

Slučaj 3 — Podaci su procurili u zapisnik. Revizijom je utvrđeno da su puna imena i telefonski brojevi korisnika upisani u zapise o rušenju aplikacije. Programeri su rutinski lijepili ove zapisnike u AI i ispravljali greške; Dakle, osobni podaci izlaze mjesecima. Dnevnici su maskirani i proces je ispravljen. Lekcija: povjerljivost se primjenjuje čak i kod otklanjanja pogrešaka.

Slab upit / Jak upit

Loš upit: "Zašto se pojavljuje ova pogreška? [stack trace]"

Snažan upit: "Ovo se rušenje događa u mojoj Android aplikaciji. Kontekst: - Dok to radi: korisnik dodaje u košaricu iz pojedinosti o proizvodu - Samo na nekim uređajima, modeli s malo RAM-a - Povezani kod: [ViewModel i dio spremišta] - Dnevnik rušenja (osobni podaci izbrisani): [stack trace] Navedite 3 najvjerojatnija temeljna uzroka. Za svaki: 1) Kako mogu potvrditi, 2) Trajni popravak (ne prešućivanje). Iznesite svoju pretpostavku tamo gdje niste sigurni."

Predlošci koji se mogu kopirati

Predložak analize rušenja: "Analizirajte sljedeće rušenje. Kontekst: [što radite, koji uređaj/verzija]. Relevantni kod: [kôd]. Dnevnik rušenja (obrisani osobni podaci): [trag]. Navedite 3 najvjerojatnija temeljna uzroka i potvrdu + trajno rješenje za svaki. Također označite zaobilazna rješenja koja utišavaju simptom."

Predložak glavnog uzroka: "Ova vrijednost dolazi [null/false] neočekivano. Pratite tok podataka od ulaza do ove točke: gdje bi se mogli izgubiti ili pokvariti? Recite mi gdje trebam provjeriti u svakoj fazi. [kod]"

Predložak za čitanje dnevnika: "Protumačite ovaj izlaz dnevnika: koji su se događaji redom dogodili, gdje je abnormalnost, koji je bio posljednji zdravi korak prije pogreške? [zapisnik — osobni podaci izbrisani]"

Predložak reprodukcije: "Koje korake, stanja uređaja i podatke trebam pokušati pouzdano reproducirati ovu pogrešku? Navedite uvjete koji bi mogli pokrenuti pogrešku prema redoslijedu vjerojatnosti. [opis]"

Uobičajene greške

  • Davanje traga stoga bez konteksta. Bez relevantnog koda i scenarija, AI daje opća predviđanja.
  • Lijepljenje osobnih podataka u AI zajedno s zapisima. Kršenje povjerljivosti; prvo maska.
  • Utišajte simptom. Skrivanje rušenja pomoću try-catch ostavlja korijenski problem i stvara nove probleme.
  • Primjena prvog prijedloga bez provjere. Dijagnoza AI je hipoteza; Potvrdite u kodu.
  • Pokušavam to reproducirati u emulatoru. Neke se pogreške pojavljuju samo na stvarnom uređaju/stanju.
  • Bez ponovnog testiranja nakon ispravka. Popravak je možda pokvario nešto drugo; Provjerite regresiju.

Ukratko

Jedno od područja u kojima AI briljira je čitanje zapisa o padu i razvrstavanje mogućih uzroka; Kvaliteta dijagnoze znatno se poboljšava kada se da kontekst. Ali konačna dijagnoza i ispravak pripadaju čovjeku: prijedlog umjetne inteligencije je hipoteza, provjerena kodom i testiranjem. Cilj nije ušutkati simptom, već riješiti temeljni uzrok; Prešućena pogreška obično se vraća u drugom obliku. Dnevnici padova mogu sadržavati osobne podatke; Maskirajte ga prije nego što ga date AI-u i nemojte pisati osobne podatke u svoje zapise od početka.

Zadatak aplikacije

Uzmite zapisnik o padu koji imate (ili uzorak koji generirate iz umjetne inteligencije), maskirajte sve osobne/distinktivne podatke u njemu i dajte ga umjetnoj inteligenciji pomoću "Predloška analize pada". Razlikujte koji su od popisa temeljnih uzroka AI stvarni popravci, a koji samo ušutkavanje. Primijenite trajni popravak koji ste odabrali i provjerite da je pogreška nestala i da nema novih problema.

popis za provjeru

  • [ ] Dao sam zapisnik o padu s relevantnim kodom i kontekstom scenarija
  • [ ] Maskirao sam osobne/prepoznatljive podatke u zapisima
  • [ ] Tražio sam od umjetne inteligencije glavni uzrok i trajno rješenje, a ne utišavanje
  • [ ] Provjerio sam dijagnozu u kodu i testiranju, nisam je primijenio slijepo
  • [ ] Nakon popravka, testirao sam da je pogreška nestala i da nema regresije
  • [ ] Provjerio sam da moja aplikacija ne upisuje osobne podatke u svoje zapisnike