Otklanjanje grešaka

S Vikipedije, slobodne enciklopedije

Debagovanje je proces pronalaženja i rešavanja bagova ili nedostataka koji sprečavaju tačnu operaciju računarskog softvera ili sistema. Debagovanje ima tendenciju da bude teže kada su različiti podsistemi čvrsto povezani, pošto promene u jednom mogu da prouzrokuju nastanak bagova u drugom. 

Brojne knjige su napisane o debagovanju (videti ispod: Dodatna literatura), pošto uključuje broje aspekte, uključujući interaktivno debagovanje, kontrolu protoka, integraciono testiranje, log fajlove, monitoring (aplikacija, sistem), deponija memorije, profilisanje, statističko upravljanje procesom, i specijalna taktiva dizajna da unapredi detekciju dok pojednostavlja promene.

Poreklo[uredi | uredi izvor]

Evidencija stavke kompjutera iz Mark II, sa moljcem zalepljenim na stranu.

Termin "bag" i "debagovanje" su popularno pripisani admiralu Grejs Hoper 1940-te.[1] Dok je ona radila na računaru Mark II na univerzitetu Harvard, njeni saradnici su otkrili moljca zaglavljenog u releju i na taj način je ometao rad, nakon čega je ona pomenula da ona "debaguje" sistem. Međutim termin "bag" u značenju tehničke greške datira još iz 1878. i potiče od Tomasa Edisona (pogledati softverski bag za celu diskusiju), i "debagovanje" deluju da su korišćeni kao termin u vazduhoplovstvu pre ulazka u svet računara. Moljac se uklapao u već postojeću terminologiju, tako da je sačuvan. Pismo Roberta Openhajmera (direktora projekta Menhetn iz Drugog svetskog rata u Los Alamosu sa ciljem izrade atomske bombe) je koristio termin u pismu za Ernesta Lorenca sa Univerziteta Kalifornije (Berkli), datirano na 27. oktobar 1944,[2] u bezi sa zapošljavanjem dodatnog tehničkog osoblja

Unos sa Oksfordskog engleskog rečnika za "debag" navodi termin "debagovanje" upotrebljen kod testiranja motora aviona 1945 u Dnevniku Društva Kraljevskog vazduhoplovstva. Članak u "Vazdušna sila" (Jun 1945 pp. 50) se takođe odnosi na debagovanje, ovog puta na kamere vazduhoplovstva. Hoperov bag je nađen 9. septembra 1947. Termin nije prihvaćen od programera sve do ranijih 1950-tih. Gilijev članak[3] 1951 je najranija detaljna diskusija programerskih grešaka, ali ne koriste termin "bug" ili "debagovanje". U ACM-ovoj digitalnoj biblioteci, termin "debagovanje" je prvi put korišćeno u tri papira iz 1952 ACM svetsih sastanka.[4][5][6] Dvoje od troje koristi termin u znacima navoda. 1963 "debagovanje" je postalo dovoljno često da termin bude spomenut u prolazu bez objašnjenja na prvoj stranici CTSS priručnika.[7]

Kidvelov članak Praćenje Neuhvativog Računarskog Baga razmatra etimologiju "baga" i "debagovanja" u velikim detaljima.

Obim[uredi | uredi izvor]

Pošto su softver i elektronski sistemi postali uglavnom kompleksniji, različite tehnike debagovanja su se raširile sa više metoda da se detektuju anomalije, proces uticaja i raspored softverskih unapređenja ili punih updejta sistema. Reči "anomalija" i "nesrazmera" se mogu koristiti, kao neutralni termini, da se izbegnu reči "greška" i "defekt"ili "bag" gde može biti implikacija da su svi nazovi greške, defekti i bagovi moraju biti popravljeni (pod svaku cenu). Umesto, proces uticaja može se napraviti da odlučuje da li promene koje bi uklonile anomaliju(ili nesrazmeru) bi bile korisne za sistem, ili možda raspored novih izdanja može doneti promene bezpotrebno. Nisu svi problemi kritični po život ili kritični za misiju u sistemu. Takođe, važno je izbeći situaciju gde promena može biti više uznemirujuća za korisnige, dugoročna, nego živeti sa poznatim problemom (gde bi "lek bio gori nego zaraza"). Zasnivanje odluka prihvatljivosti neki anomalija može izbeći kulturni "nula-defekt" mandat, gde ljudi mogu biti u iskušenju da poriču postojanje problema tako da bi se rezultati pokazali kao nule defekti. Razmatrajući kolateralne probleme, kao što su cena-protiv-benefita proces uticaja, onda šire tehnike debagovanja će odužiti pronalazak frekvencija anomalija (koliko će se često isti "bagovi" startovati) da bi se pomoglo u proceni njihovog uticaja nad celokupnim sistemom. 

Alati[uredi | uredi izvor]

Debagovanje na konzolama video igara se obično radi sa specijalnim hardverom kao što je Eksboks debag srestvo namenjen samo za programere.

Obim debagovanja, u složenosti, od popravljanja jednostavnih grešaka do izvršavanja dugih i zamornih zadataka zbirke podataka, analize i zakazanih ažuriranja. Veština debagovanja programera može biti bitan faktor u mogućnosti da se debaguje problem, ali težina debagovanja softvera najviše varira zbog složenosti sistema, i takođe zavisi, u određenoj meri, od programskog jezika koji se koristi i dostupnih alata, kao što su debageri. Debageri su softverski alati koji omogućuju programeru da prati izvršavanje programa, da ga zaustavi, restartuje, postavi mesta prekida, i da izmeni vrednosti u memoriji. Termin debager se može takođe odnositi na osobu koja radi debagovanje.

Uglavnom, programski jezici visokog nivoa, kao što je Java, čine debagovanje lakšim, zato što imaju osobine kao što su kontrola izvršavanja koji čine prave izvore neredovnog ponašanja lake za primetiti. U programskim jezicima kao što su S ili asembler, bagovi mogu pruzrokovati tihe probleme kao što je korupcija memorije, i može biti često teško uvideti gde se prvobitno problem dogodio. U tim slučajevima, alati debagera memorije mogu biti potrebni. 

U određenim situacijama, osnovna svrha softverski alata je jezička specifikacija u prirodi i može biti korisna. Ovo uzima oblik statičnog koda analize alata. Ovi alati traže veoma specifičnu grupu problema, česte i neke retke, unutar izvornog koda. Svi ovi problemi detektovani pomoću ovih alata bi često bili pokupljeni preko kompajlera ili interpretatora, ioako oni ne proveravaju sintaksu, ali su više za proveravanje semantike. Neki alati trvde da su u mogućnosti da detektuju 300+ jedinstvenih problema. I komercijalni i besplatni alati se nalaze i viže jezika. Ovi alati mogu biti mnogo korisni kada se proverava velika izvorna stabla, gde nije praktično da se prolazi kroz kod. Tipični primer detektovanog problema bi bila deferenca promenljive koja se javlja pre nego što je promenljivoj dodeljena vrednost. Još jedan primer bi bio da se izvede čvrsto otkucavanje provere kada jezik ne zahteva tako. Dakle, oni su bolji u otkrivanju grešaka, nego stvarnih grešaka. Kao rezultat, ovi alati imaju reputaciju lažnih uzbuna. Stari Ujuniks lint program je raniji primer  .

Za debagovanje elektronskog hardvera (npr., računarski hardver), kao i niskog-nivoa softvera (npr., BIOS-a, drajvera) i firmvera, intstrument kao što su osciloskopi, logički analizatori ili kružni emulatori (ICE) se često koriste, samo ili u kombinaciji. ICE može da uradi mnogo tipični deberskih stavki softvera na niskom nivou softvera i firvera.

Tipičan proces debagovanja[uredi | uredi izvor]

Obično prvi korak u debagovanju je pokušaj da se reprodukuje problem. Ovo može biti netrivijalni zadatak, na primer kao što je sa paralelnom obradom ili nekim neobičnim softverskim bagovima. Takođe, specifično korisničko okruženje i korišćenje istorije može otežati reprodukovanje problema. 

Nakon što je bag reprodukovan, možda je potrebno da ulaz programa bude porednostavljen kako bi bilo lakše debagovanje. Na primer, bag u kompajleru može dovesti do rušenja kada se analizira neki veći izvorni fajl. Međutim, posle pojednostavljenja test slučaja, samo nekoliko linija originalnog izvora fajla može biti dovoljan da reprodukuje isto rušenje. Ovakvo pojednostavljenje može biti napravljeno ručno, koristeći se zavadi pa vladaj pristupom. Programer će pokušati da ukloni neke delove originalnog test slučaja i proveriće da li problem idalje postoji. Kada je problem debagovanja u grafičkom korisničkom intervejsu, programer može pokušati da prekine neke interakcije sa korisnikom od originalnog opisa problema i  da proveri da li su preostale akcije dovoljne da se pojavi bag.

Nakon što je test dovoljno pojednostavljen, programer može koristiti debager alatku da prouči stanje programa (vrednosti varijabli, plus poziv gomile) i da prati poreklo problema. Alternativno, praćenje se može koristiti. U jednostavnim slučajevima, praćenje je samo nekoliko ištampanih iskaza, koji izbacuju vrednosti varijabli u određenom trenutku izvršenja programa.

Tehnike[uredi | uredi izvor]

  • Štampanje debagovanja (ili praćenje) je čin gledanja (uživo ili snimljeno) tragova izkaza, ili štampanje iskaza, koji pokazuju protok izvršenja procesa. Ovo se ponekad naziva i printif debagovanje, zbog korišćenja funkcije printif u S. Ova vrsta debagovanja je uključena na zahtev TRON-a u originalnoj verziji početničko-orijentovano Bejsik programiranje. Tron je stajao za, "trag na". Tron je izazivao linije projeva svake Bejsik komadne linije da štampa kako je program radio.
  • Daljinsko debagovanje je proces debagovanja programa koji radi na više različitih sistema od debagera. Da bi se počelo daljinsko debagovanje, debager se konektuje sa udaljenim sistemom preko mreže. Debager može da kontroliše izvršenje programa preko udaljenog sistema i da vraća informaciju njegovog stanja.
  • Debagovanje posle smrti je debagovanje programa nakon što se on srušio. Srodne tehnike obično uključuju više tehnika praćenja (na primer,[8]) i/ili analizu stanja memorije(ili stanja jezgra) srušenog procesa. Stanje procesa se može pribaviti automatski preko sistema (na primer, kada se proces zaustavi zbog nekontrolisanog izuzetka) ili preko programerovih ubačenih instrukcija, ili ručno preko korisnika.
  • "Vučja ograda" algoritam: Edvard Gaus je opisao jednostavan ali veoma korisan i sada poznat algoritam u artiklu iz 1982 o komunikacijama ACM: "Postoji jedan vuk u Aljasci; kako da ga nađete? Prvo napravite ogradu na sredini države, čekajte vuka da zalaje, odlučite se na kojoj strani ograde se nalazi. Ponavljajte proces samo na toj strani, sve dok ne dođete do te tačke da vidite vuka. "[9] Ovo je ubačen primer u Git verziji kontrolnog sistema kao komanda git bisect, koja koristi algoritam iznad da odluči urezivanje je dovelo do baga.
  • Delta debagovanje – tehnika automatizacije testa slučaja jednostavnosti.[10]:p.123
  • Stiskanje Safa – tehnika izolovanja greške u okviru testa koristeći progresivne inline delove palog testa[11]

Debagovanje ugrađenih sistema[uredi | uredi izvor]

Suprotno od glavne svrhe računarskog softverskog dizajniranog okruženja, primarna karakteristima ugraženih okruženja je čist broj različitih platformi dostupnih razvojnicima (CPU arhitekturama, dobavljačima, operativnim sistemima i njihovim varijantama). Ugrađeni sistemu su, po definiciji, dizajni bez generalne svrhe: oni su tipično napravljeni za jedan zadatak (ili mali opseg zadataka) i platforma je izabrana specijalno da bi prilagodila tu aplikaciju. Ne samo da ova činjenica čini život težim programerima ugrađenih sistema, ona takođe čini debagovanje i testiranje ovih sistema težim takođe, pošto različite alatke za debagovanje su potrebne za različite platforme.

  • da se identifikuju i poprave bagovi u sistemu (npr. logički i sinhronizacioni problemi u kodu ili grečke dizajna u hardveru);
  • da se skupe informacije o operativnim stanjima sistema koji se možda koristio za analizu sistema: da se nađe način za poboljšanje performansa ili da se optimizuju ostale bitne karakteristike (npr. potrošnja energije, pouzdanost, odgovor u realnom vremenu itd. ).

Anti-debagovanje[uredi | uredi izvor]

Anti-debagovanje je"implementacija jedne ili više tehnika unutar računarskog koda koji sprečava pokušaje obrnutog inženjeringa ili debagovanje ciljanog progresa ".[12] Aktivno se koristi od strane poznatih izdavača u zaštiti od kopiranja, ali takođe se koristi i od strane malvera da zakomplikuje detekciju i eliminaciju.[13] Tehnike koje se koriste u anti-debagovanju uključuju:

  • API-zasnovan: proverava postojanje debagera koristeći informacije sistema
  • Izuzetak-zasnovan: proverava da li su izuzeci umešani
  • Proces i navoj blokovi: proveravaju da li su proces i navoj blokovi manipulisani
  • Modifikovan kod: proverava modifikacije koda napravljene od strane rukovanja softvera debagerovih kontrolnih tačaka
  • Hardver i registrovan- zasnovan: proverava hardverske kontrolne tačke i CPU registre
  • Tajmin i kašnjenje: proverava proteklo vreme prilikom izvršavanja instrukcija
  • Detektovanje i kažnjavanje debagera[13]

Raniji primer anti-debagovanja postojao je u ranijim verzijama Majkrosoft vorda koji, ako je debager detektovan, izbacuje poruku koja kaže:"Drvo zla nosi gorke plodove. Sada šlajfujem programski disk", posle čega to prouzrukuje flopi disk draj da emituje buku alarma što ima nameru da uplaši kosnika da ponovo proba to.[14][15]

Reference[uredi | uredi izvor]

  1. ^ Grace Hopper from FOLDOC
  2. ^ „Arhivirana kopija”. Arhivirano iz originala 15. 10. 2016. g. Pristupljeno 13. 11. 2015. 
  3. ^ S. Gill, The Diagnosis of Mistakes in Programmes on the EDSAC, Proceedings of the Royal Society of London.
  4. ^ Robert V. D. Campbell, Evolution of automatic computation, Proceedings of the 1952 ACM national meeting (Pittsburgh). str. 29-32, 1952.
  5. ^ Alex Orden, Solution of systems of linear inequalities on a digital computer, Proceedings of the 1952 ACM national meeting (Pittsburgh). str. 91-95, 1952.
  6. ^ Howard B. Demuth, John B. Jackson, Edmund Klein, N. Metropolis, Walter Orvedahl, James H. Richardson, MANIAC, Proceedings of the 1952 ACM national meeting (Toronto). str. 13-16
  7. ^ The Compatible Time-Sharing System, M.I.T. Press, 1963
  8. ^ Postmortem Debugging, Stephen Wormuller, Dr. Dobbs Journal, 2006
  9. ^ E. J. Gauss (1982).
  10. ^ Andreas Zeller: Why Programs Fail: A Guide to Systematic Debugging, Morgan Kaufmann, 2005.
  11. ^ „Kent Beck, Hit 'em High, Hit 'em Low: Regression Testing and the Saff Squeeze”. Arhivirano iz originala 19. 06. 2010. g. Pristupljeno 13. 11. 2015. 
  12. ^ Shields, Tyler (2008-12-02).
  13. ^ a b „Software Protection through Anti-Debugging Michael N Gagnon, Stephen Taylor, Anup Ghosh” (PDF). Arhivirano iz originala (PDF) 01. 10. 2011. g. Pristupljeno 13. 11. 2015. 
  14. ^ Ross J. Anderson (2001-03-23). Security EngineeringNeophodna slobodna registracija. str. 684. ISBN 0-471-38922-6. 
  15. ^ „Microsoft Word for DOS 1.15”. Arhivirano iz originala 2013-05-14. g. Pristupljeno 2013-06-22. 

Literatra[uredi | uredi izvor]

Spoljašnje veze[uredi | uredi izvor]