Enota 7 / 11

Odpravljanje napak in analiza zrušitev z umetno inteligenco

Dobički:

  • Sposobnost hitrega zoževanja možnih temeljnih vzrokov s posredovanjem zapisov o zrušitvah (sledi sklada) umetni inteligenci z ustrezno kodo in kontekstom scenarija
  • Sposobnost trajne razrešitve temeljnega vzroka namesto potrditve diagnoze AI kot hipoteze v kodi ter testiranja in utišanja simptoma
  • Zaščita zasebnosti med odpravljanjem napak z maskiranjem osebnih podatkov v zapisih o zrušitvah in dnevnikih

Vsaka aplikacija daje napake; Kar odlikuje dobrega razvijalca, je, kako hitro najde in odpravi napake. Mobilno odpravljanje napak – iskanje in odpravljanje vira težave – je še posebej težavno, ker se napaka pojavi v uporabnikovi napravi v okolju, ki ga ne vidite. Večino časa imate le dnevnik zrušitev (dnevnik zrušitev/sled sklada – tehnična razčlenitev, kam je šla aplikacija, ko se je zrušila). AI je izjemno močan pri branju teh skrivnostnih zapisov, naštevanju možnih vzrokov in predlaganju rešitev. V tej enoti se bomo naučili uporabljati AI kot "detektiva hroščev", vendar vam bomo prepustili odgovornost za preverjanje končne diagnoze in popravka.

Branje dnevnika nesreče: Kjer AI najbolj zasije

Dnevnik zrušitev je dolgo in zastrašujoče besedilo; neizkušen razvijalec ne bo vedel, kje iskati. AI razčleni to besedilo v nekaj sekundah: v kateri vrstici se je zrušilo, katera izjema je bila vržena, kaj je možen razlog. Pogoste mobilne napake so očitne in umetna inteligenca jih hitro prepozna: NullPointerException (poskus dostopa do ničelne vrednosti), IndexOutOfBoundsException (dostop do neobstoječega elementa seznama) v Androidu, EXC_BAD_ACCESS (dostop do sproščenega pomnilnika) v iOS-u, nepričakovano najdena ničelna vrednost (vsiljenje ničelne neobvezno).

Najpogostejše vrste mobilnih zrušitev in njihovi tipični vzroki so naslednji:

Napaka (izjema)

Platforma

tipični vzrok

NullPointerException

Android

Dostop do ničelne vrednosti

IndexOutOfBoundsException

Android

Dostop do neobstoječega elementa seznama

nepričakovano najdeno nič

iOS

Prisilno odvijanje neobveznega ničelnega (!)

EXC_BAD_ACCESS

iOS

Dostop do sproščenega pomnilnika

ANR/zamrznitev

Android

Dolga/težka obdelava na glavni niti

Potek odpravljanja napak po korakih:

  1. Zberi zapis. Sestavite dnevnik zrušitev, sporočilo o napaki in korake za njegovo reprodukcijo, če je to mogoče.
  2. Podajte kontekst AI. Povejte mi ne samo napako, ampak ustrezen del kode in kaj se je zrušilo.
  3. Vprašajte za možne vzroke. "Povejte mi 3 najverjetnejše vzroke in kako preveriti vsakega."
  4. Preveri. Potrdite predlagani razlog v kodi in testiranju; Ne popravljajte z ugibanjem.
  5. Popravi in ​​ponovno preizkusi. Preverite, ali je napaka dejansko izginila in ali se ne ustvarjajo nove napake.
Namig: ko posredujete dnevnik zrušitev AI, vključite tudi ustrezen delček kode. AI naredi splošno napoved samo s sledenjem sklada; Ko vidite kodo, se verjetnost, da boste našli točno vrstico in pravi vzrok, močno poveča. Kontekst določa kakovost diagnoze.

Past osebnih podatkov

Dnevniki zrušitev in dnevniki pogosto vsebujejo uporabniške podatke: e-pošto, ID uporabnika, lokacijo, celo vsebino obrazca. Če prilepite ta zapis v AI tako, kot je, osebni podatki odtekajo tretji osebi in je kršitev KVKK / GDPR. Pred oddajo posnetka počistite (maskirajte) osebne prostore. Pazite tudi, da osebnih podatkov ne zapisujete v dnevnike aplikacije že od začetka; Dober dnevnik opisuje težavo, vendar ne razkriva identitete.

Pozor: popravek, ki ga predlaga umetna inteligenca, lahko »utiša hrošč«, vendar morda ne odpravi temeljnega vzroka. Če na primer ovijete NullPointerException z ničelnim preverjanjem, boste zaustavili zrušitev, a če ne ugotovite, zakaj je vrednost ničelna, se bo dejanska logična napaka nadaljevala. Zdravite bolezen, ne simptomov.

Analiza temeljnega vzroka

Cilj strokovnega odpravljanja napak ni zamolčati napako, ampak najti temeljni vzrok. Vprašal sem AI ​​"zakaj je to lahko nič, kje se je morda izgubilo v toku podatkov?" sprašuje, "kako naj to utišam?" Je veliko bolj dragoceno kot prositi. Ko se odkrije glavni vzrok, se naenkrat odpravi na desetine različic iste napake. Umetna inteligenca je dobra pri tem verižnem sklepanju: sledite podatkom od vhoda do izhoda in jo prosite, naj razmisli, kje se pokvarijo.

trije mini kovčki

Primer 1 — 2 uri dela v 10 minutah. Razvijalec je porabil 2 uri za iskanje hrošča, ki se je zrušil samo na določenem modelu Samsung. Predal dnevnik zrušitve (čiščenje osebnih območij) AI; YZ je dejal, da napaka kaže na prepolnitev pomnilnika, ki se pojavi pri drugačni ločljivosti kamere te naprave. Z namigom je bil razlog najden v 10 minutah. AI je pospešil iskanje, človek je preveril rešitev.

2. primer – utišani hrošč se je vrnil. Ena ekipa je utišala ponavljajoče se zrušitve tako, da je s predlogom umetne inteligence poskusila ujeti. Zrušitev se je ustavila, vendar so se uporabniki začeli pritoževati, da se "podatki ne shranjujejo"; ker je bila prava težava (povezava z bazo podatkov) še vedno tam, le postala je nevidna. Ko je bil odkrit glavni vzrok, sta bila odpravljena zrušitev in izguba podatkov. Nauk: utišanje ni rešitev.

3. primer – podatki so ušli v dnevnik. Revizija je pokazala, da so bila polna imena in telefonske številke uporabnikov zapisana v dnevnike zrušitev aplikacije. Razvijalci so te dnevnike rutinsko prilepili v AI in popravili napake; Osebni podatki torej izhajajo več mesecev. Dnevniki so bili maskirani in postopek je bil popravljen. Nauk: zaupnost velja tudi pri odpravljanju napak.

Šibek poziv/močan poziv

Slab poziv: "Zakaj pride do te napake? [sled sklada]"

Močan poziv: »Ta zrušitev se dogaja v moji aplikaciji za Android. Kontekst: – Med tem: uporabnik dodaja v košarico iz podrobnosti o izdelku – Samo v nekaterih napravah, modeli z malo pomnilnika RAM – Sorodna koda: [ViewModel in del repozitorija] – Dnevnik zrušitve (osebni podatki izbrisani): [sled sklada] Navedite 3 najverjetnejše glavne vzroke. Za vsakega: 1) Kako preverim, 2) Trajna rešitev (ne utišanje). Povejte svojo domnevo, kjer niste prepričani."

Kopirane predloge

Predloga za analizo zrušitve: "Analizirajte naslednjo zrušitev. Kontekst: [kaj počnete, katera naprava/različica]. Ustrezna koda: [koda]. Dnevnik zrušitev (osebni podatki izbrisani): [sled]. Navedite 3 najverjetnejše glavne vzroke in preverjanje + trajno rešitev za vsakega. Označite tudi rešitve, ki utišajo simptom."

Predloga glavnega vzroka: "Ta vrednost pride [null/false] nepričakovano. Sledite toku podatkov od vnosa do te točke: kje bi se lahko izgubili ali poškodovali? Povejte mi, kje naj preverim na vsaki stopnji. [koda]"

Predloga za branje dnevnika: "Razlagajte ta izpis dnevnika: kateri dogodki so se zgodili po vrstnem redu, kje je nenormalnost, kateri je bil zadnji zdrav korak pred napako? [dnevnik — osebni podatki izbrisani]"

Predloga za reprodukcijo: "Katere korake, stanja naprave in podatke naj poskusim za zanesljivo reprodukcijo te napake? Navedite pogoje, ki bi lahko sprožili napako, po vrstnem redu verjetnosti. [opis]"

Pogoste napake

  • Zagotavljanje sledenja sklada brez konteksta. Brez ustrezne kode in scenarija AI daje splošne napovedi.
  • Lepljenje osebnih podatkov v AI skupaj z dnevniki. Kršitev zaupnosti; najprej maska.
  • Utišajte simptom. Skrivanje zrušitve s poskusnim ulovom pusti koreninski problem in ustvari nove težave.
  • Uporaba prvega predloga brez preverjanja. Diagnoza AI je hipoteza; Potrdite v kodi.
  • Poskušam ga reproducirati v emulatorju. Nekatere napake se pojavijo le na dejanski napravi/stanju.
  • Brez ponovnega testiranja po popravku. Popravek je morda pokvaril kaj drugega; Preverite regresijo.

Če povzamem

Eno od področij, kjer je umetna inteligenca odlična, je branje dnevnikov zrušitev in razvrščanje možnih vzrokov; Kakovost diagnoze se močno izboljša, če je podan kontekst. Toda končna diagnoza in popravek pripadata človeku: predlog AI je hipoteza, preverjena s kodo in testiranjem. Cilj ni utišati simptom, ampak odpraviti temeljni vzrok; Utišana napaka se običajno vrne v drugi obliki. Dnevniki zrušitev lahko vsebujejo osebne podatke; Zakrijte ga, preden ga daste AI in ne zapisujte osebnih podatkov v svoje dnevnike od začetka.

Aplikacijska naloga

Vzemite dnevnik zrušitev, ki ga imate (ali vzorec, ki ga ustvarite iz umetne inteligence), maskirajte vse osebne/razločevalne podatke v njem in jih dajte umetni inteligenci s "predlogo za analizo zrušitev". Ločite, kateri od seznamov temeljnih vzrokov AI so dejanski popravki in kateri le utišanje. Uporabite trajni popravek, ki ste ga izbrali, in preverite, ali je napaka izginila in se ne pojavljajo nove težave.

kontrolni seznam

  • [ ] Podal sem dnevnik zrušitev z ustrezno kodo in kontekstom scenarija
  • [ ] V dnevnikih sem prikril osebne/razločevalne podatke
  • [ ] Umetno inteligenco sem prosil za glavni vzrok in trajno rešitev, ne za utišanje
  • [ ] Diagnozo sem preveril v kodi in testiranju, nisem je uporabil na slepo
  • [ ] Po popravku sem preizkusil, da je napaka izginila in ni prišlo do regresije
  • [ ] Preveril sem, da moja aplikacija v svoje dnevnike ne piše osebnih podatkov