Let's Do It Romania - 24 Septembrie 2011



   

Debugging

   

Poate singurul lucru sigur în sistemele software este că există erori. Diferenţele constau doar în cantitate.


Mircea Sârbu


Într-un interviu acordat unei reviste de specialitate în 1997 -- cu puţin înainte de a se retrage din activitate -- profesorul Niklaus Wirth (inventatorul Pascal-ului, printre altele) relatează o întâmplare petrecută la un înalt seminar academic prin anii 70. Se vorbea la aceea vreme despre o veritabilă "criză a software-ului", datorată creşterii complexităţii aplicaţiilor şi inevitabila înmulţire a erorilor. În acest context, profesorul C. A. R. Hoare (laureat al premiului Turing) a expus o serie de principii de verificare formală a corectitudinii programelor, ca o alternativă la testare. În discuţiile aprinse care au urmat, Jim Morris (decan la Carnegie Mellon) s-a ridicat şi a spus: "Dar Tony, ce-ai zice dacă ţi-am mărturisi sincer că ne place la nebunie să depanăm programe? Vrei să ne abandonăm această pasiune?"

Într-adevăr, ne place debugging-ul. De fapt, bucuria pe care ţi-o procură un program cuminte, pe care l-ai migălit cu grijă şi îşi face treaba cum trebuie, este o bucurie liniştită. Lipsită de entuziasm de moment. În schimb, fericirea care te cuprinde când după ore sau chiar zile de căutări găseşti scama care-ţi dădea programul peste cap este adesea echivalentă cu o veritabilă descoperire iar bucuria e intensă. Din foarte multe erori pe care le faci ai ce învăţa şi poate că programatorii cei mai buni sunt cei care au scos cele mai multe bug-uri. Odată ce ai învăţat -- de exemplu -- că identificatorii fără semnificaţie sunt un pericol mortal, vei începe să scrii un cod mult mai lizibil, iar erorile -- inevitabile -- vor fi mai rare... şi mai interesante.

Adevărul este că îmi amintesc mult mai multe erori spectaculoase pe care le-am depistat (pentru că, desigur, tot eu le-am comis) decât de trucuri sau rezolvări interesante. Însă vremurile s-au schimbat şi depanarea începe să-şi piardă din farmec. Pe vremuri, lucrai de obicei pe un singur calculator, cu un singur sistem de operare, foloseai un singur limbaj şi, într-un fel, te mişcai într-o lume închisă, în care aveai certitudinea că eroarea îţi aparţine şi, mai devreme sau mai târziu, o vei găsi. Într-un astfel de mediu aveai şansa să foloseşti diverse instrumente ajutătoare... Nu spun că astăzi nu se mai poate, însă sunt din ce în ce mai rare programele închise, compacte, care-şi cuprind complet funcţionalitatea. Eşti în reţea, foloseşti un sistem de baze de date de pe un calculator care nici nu ştii dacă-i în camera de alături sau peste ocean, combini proceduri stocate cu middleware şi servere de aplicaţii care rulează pe sisteme de operare diferite, iar în partea dinspre utilizator foloseşti alte instrumente, poate HTML cu JavaScript şi Ajax... Când ceva nu merge bine -- şi cu siguranţă ceva, undeva se va poticni -- lucrurile devin mult mai complicate şi fără îndoială mai enervante. Nu mai ai instrumente care să te ajute să afli dacă eroarea este pe un computer sau pe altul, în backend, în middleware sau în frontend şi, mai ales, dacă ai comis-o cu propria mână sau e un bug "de firmă". E firavă consolarea că şi alţii greşesc, chiar şi la case mult mai mari.

Cu ani în urmă, când un program C de vreo câteva mii de linii de cod o lua brusc de la început în împrejurări care păreau aleatorii, m-am amuzat copios. Nici măcar nu se oprea, ca să văd un mesaj de eroare. Nu puteam nici să pun puncte de întrerupere sau să afişez mesaje de parcurs pentru că manevram interfaţa. Până la urmă am recurs la sunete şi bucle de întârziere ca măcar să "aud" ce se întâmplă. Era un apel cu număr greşit de argumente care, din întâmplare, arunca în stivă adresa de start... Acum e ora două din noapte şi o funcţie care trebuie să indirecteze un apel către baza de date printr-o altă funcţie din serverul de aplicaţie se comportă ciudat. În zeci de locuri am procedat la fel şi a funcţionat fără greş (vorba vine...). În plus, nici măcar nu se comportă la fel în configuraţii similare. Sunt implicate cinci limbaje de programare şi trei sisteme de operare, plus browsere diferite. Jur că am fost ordonat, că n-am făcut trucuri şi că am pus comentarii... Până la urmă voi descoperi, dar nu voi avea nici o bucurie. S-au dus acele vremuri.


 

(Publicat în PC Magazine - mai 2006)

 

Copyright © 2006 Agora Media

Creative Commons License
This work is licensed under a Creative Commons License.