Tölvunarfræði/Að aflúsa

Úr Wikibókunum

Aflúsun er aðferðafræði til þess að finna og eyða villum eða göllum í hugbúnaði eða vélbúnaði. Markmiðið með aflúsun er að fá forrit eða vél til að virka eins og ætlast er til af þeim. Margar bækur hafa verið skrifaðar um aflúsun (sjá fyrir neðan: Meira lesefni). Til að aflúsa forrit eða vélbúnað er byrjað með vandamál, rót þess fundin, og vandamálið lagað. Notandi forrits sem ekki kann að laga vandmálið gæti lært nógu vel á forritið til þess að forðast vandamálið þar til varanleg lausn er fundin. Þegar talað er um að forrit hafi verið aflúsað þýðir það að vandamálið sé ekki lengur til staðar og hafi þar með verið lagað.

Aflúsun er nauðsynlegt ferli í næstum öllum hugbúaðar- og vélbúnaðargerð, jafnt fyrir hugbúnað/vélbúnað stórfyrirtækja og fyrir einstaklinga. Fyrir flókin kerfi er aflúsun framkvæmd með prufunum á litlum hlutum kerfisins í einu og svo aftur þegar þeir hlutar eru púslaðir saman í stærri einingar, enn aftur þegar kerfið er prufað sem hluti af stærri heild og aftur þegar kerfið er prufað af notendum. Þar sem flest forrit og margur forritaðar vélbúnaður inniheldur þúsundir lína af forritunarkóða, þykir mjög líklegt að villur slæðist með. Í þeim eiginleikum sem mest eru notaðir af forriti eða vélbúnaði er líklegast að villur komi fyrst upp, og séu með því aflúsaðar.

Aflúsunar verkfæri (e. debuggers) hjálpa til við að finna villur í forritunarkóða á mörgum stigum hönnunar. Sum forritunarmál innihalda tól sérstaklega til þess að yfirfara kóða í leit að villum á meðan hann er skrifaður.

Uppruni[breyta]

Uppruni orðsins aflúsun (e. debugging) er nokkuð umdeilt. Hugtakið "lús" og "aflúsun" eru orðuð við mann að nafni Grace Hopper í kringum 1940. Þegar hún vann að "Mark II tölvunnI" í Harvard háskóla, uppgvötuðu félagar hennar mölflugu fasta í rafliða. Þetta varð til þess að ekki var hægt að keyra tölvuna fyrr en hún hafði verið afslúsuð (e. debugged). Þarna var um raunverulega pöddu að ræða. HInsvegar er fyrst talað um "bug" í skilningi tölvuforrits allt aftur til ársins 1878. Viðtal við Grace Hopper útskýrir að hún fann ekki upp hugtakið aflúsun en atvikið með mölfluguna passaði þar vel við.

Færsla í Ensku orðabók Oxford fyrir aflúsun (debug) vitnar í hugtakið sem vísun í prufun á vél flugvélar árið 1945 í grein "Royal Aeronautical Society"; atvikið með mölflugu Grace Hopper gerðist 9. september 1947 og hugtakið var ekki notað af forriturum fyrr en snemma árs 1950.

Aflúsunar ferlið[breyta]

Venjulega er fyrsta skrefið í aflúsun að tilraun til að endurtaka vandamálið. Þetta getur oft reynst erfitt, t.d þegar margt í forritinu er í keyrslu á sama tíma eða vandamálið óvenjulegt. Einnig eru ákveðin noendaviðmót og notkunar saga sem geta gert forritara erfitt fyrir að endurframkvæma vandamálið. Þegar vandamálið hefur verið endurtekið getur verið nauðsynlegt að einfalda intak forritsins til að einfalda aflúsunina. Sem dæmi gæti verið hægt að endurtaka villuna með aðeins örfáum línum af forritunarkóða í stað þess að keyra stóra hluta forritsins sem gerir vandamálið mun stærra í sniðum en þörf er á. Svona einföldun er hægt að gera handvirkt með því að nota aðferð sem gengur út á það að taka brot af kóðanum í burtu þar til sem minnstur hluti hans stendur eftir enn með villunni. Forritarinn getur þannig reynt að endurtaka vandamálið með færri aðgerðum. Þegar kóðinn fyrir aflúsunina er nægilega einfaldaður getur forritarinn notað aflúsunar tól til þess að rannsaka stöðu forritsins (t.d stöðu breytna innan forritsins) og rakið uppruna vandamálsins. Einnig er hægt að rekja vandamálið. Í einföldum aðgerðum væri hægt að rekja vandmál með útprentun á skjá stöðu forritsins eftir ákveðna aðgerð og þannig komist að vandamáli.

Aðferðir[breyta]

  • Prenta (eða rekja) aflúsun er sú aðferð fer þannig fram að fylgst er með rakningu forritsins þegar aðgerðir þess eru framkvæmdar. Þannig er hægt að fylgjast með hvað gerist í kóða forritsins við hverja aðgerð og sjá stöðu þess. Þessi aðferð er stundum kölluð "printf" aflúsun, vegna skipannar með sama nafni í forritunarmálinu C.
  • Fjaraflúsun (e. remote debugging) er ferli sem felur í sér að aflúsa kerfi, annað en það sem aflúsarinn (forritarinn) er að nota. Til þess að fjaraflúsa tengist forritarinn yfir net á það kerfi sem á að aflúsa. Þegar forritarinn er tengdur getur hann framkvæmd þær aðgerðir sem til þarf til að aflúsa kerfið. Þessi aðgerð er svipuð þeirri hér að ofan að öðru leiti.
  • Krufning (e. post-mortem debugging) er ferlið þegar forrit hefur þegar forritið hefur brotlent (e. crashed). Tengdar aðferðir innihalda oft ýmiskonar rakningaraðferðir og/eða skoðun á minnis skrám úr forritinu. Minnisskrár úr forritinu væri hægt að fá sjálfkrafa ef forritið stöðvaðist af einhverri ófyrirhugaðri ástæðu.
  • Delta aflúsun - Tækni sem inniheldur sjálfkrafa einföldun forritunarkóða.

Meira lesefni[breyta]

  • David J. Agans: Debugging: The Nine Indispensable Rules for Finding Even the Most Elusive Software and Hardware Problems, AMACOM, 2002. ISBN 0-8144-7168-4
  • Bill Blunden: Software Exorcism: A Handbook for Debugging and Optimizing Legacy Code, APress, 2003. ISBN 1-59059-234-4
  • Ann R. Ford, Toby J. Teorey: Practical Debugging in C++, Prentice Hall, 2002. ISBN 0-13-065394-2
  • Thorsten Grötker, Ulrich Holtmann, Holger Keding, Markus Wloka, The Developer's Guide to Debugging, Springer, 2008. ISBN 1-4020-5539-0
  • Robert C. Metzger: Debugging by Thinking : A Multidisciplinary Approach, Digital Press, 2003. ISBN 1-55558-307-5
  • Glenford J Myers: *The Art of Software Testing, John Wiley & Sons inc, 2004. ISBN 0-471-04328-1
  • John Robbins: Debugging Applications, Microsoft Press, 2000. ISBN 0-7356-0886-5
  • Matthew A. Telles, Yuan Hsieh: The Science of Debugging, The Coriolis Group, 2001. ISBN 1-57610-917-8
  • Dmitry Vostokov: Memory Dump Analysis Anthology, Volume 1, OpenTask, 2008. ISBN 978-0-9558328-0-2
  • Andreas Zeller: Why Programs Fail: A Guide to Systematic Debugging, Morgan Kaufmann, 2005. ISBN 1-55860-866-4
  • Artzi, Shay; Adam Kiezun, Julian Dolby, Frank Tip, Danny Dig, Amit Paradkar, Michael D. Ernst (2008). Finding bugs in dynamic web applications. p. 261. doi:10.1145/1390630.1390662.