Document, comentariu, eseu, bacalaureat, liceu si facultate
Top documenteAdmitereTesteUtileContact
      
    


 


Ultimele referate adaugate

Adauga referat - poti sa ne ajuti cu un referat?

Politica de confidentialitate



Ultimele referate descarcare de pe site
  CREDITUL IPOTECAR PENTRU INVESTITII IMOBILIARE (economie)
  Comertul cu amanuntul (economie)
  IDENTIFICAREA CRIMINALISTICA (drept)
  Mecanismul motor, Biela, organe mobile proiect (diverse)
  O scrisoare pierduta (romana)
  O scrisoare pierduta (romana)
  Ion DRUTA (romana)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  COMPORTAMENT PROSOCIAL-COMPORTAMENT ANTISOCIAL (psihologie)
  Starea civila (geografie)
 

Ultimele referate cautate in site
   domnisoara hus
   legume
    istoria unui galban
   metanol
   recapitulare
   profitul
   caract
   comentariu liric
   radiolocatia
   praslea cel voinic si merele da aur
 
despre:
 
Depanarea scripturilor PHP
Colt dreapta
Vizite: ? Nota: ? Ce reprezinta? Intrebari si raspunsuri
 

<titlu>Depanarea scripturilor PHP</titlu>

<titlu>Scopuri</titlu> d4y4yx
• invatati sa distingeti erorile si defectele
• invatati sa depanati erorile gramaticale
• invatati sa remediati erorile la rulare
• invatati sa stabiliti cu precizie defectele software

Multi sunt de parere ca dezvoltarea programelor de calculator reprezinta cel mai complex proces pe care l-a intreprins vreodata umanitatea, in consecinta, nu trebuie sa mire pe nimeni faptul ca imperfectiunile rasei umane joaca un anumit rol in dezvoltarea programelor. Programatorii trebuie sa faca fata unei diversitati de surse de eroare, de manifestari si tipuri de erori, aplicand o gama la fel de variata de instrumente si tehnici pentru a purta razboiul cu erorile. Acest modul descrie erorile frecvent intalnite de genul celor care apar in programele PHP, precum si tehnicile actuale pentru descoperirea, stabilirea cu precizie si eradicarea erorilor.

<titlu>Depanarea si erorile comune de programare</titlu>
Depanarea este procesul de eliminare a hibelor de program, care reprezinta greseli comise de programatori. Depanarea este diferita de testare, care consta in analizarea unui program pentru a-i determina caracteristicile, cu precadere numarul si gravitatea defectelor pe care le contine. Practica moderna a testarii programelor este o disciplina complexa, care depaseste cadrul acestei carti. Cititorul interesat in a afla mai multe despre testare este sfatuit sa consulte cartea lui Boris Beizer Black-Box Testing: Techniques for Functional Testing of Software and Systems* (Wiley, 1995) sau lucrarea lui Brian Marick Craft of Software Testing: Subsystems Testing Including Object-Based and Object-Oriented Testing"** (Prentice Hall, 1997).
Depanarea intra in scena atunci cand la testare apar simptome care indica existenta unui defect. In general, depanarea implica
• Reproducerea simptomelor asociate hibei
• Stabilirea cu precizie a locatiei hibei
• intelegerea codului care contine hiba




<nota>
*In traducere Testarea de tip „cutie neagra": tehnici pentru testarea functionala a programelor si a sistemelor-N.T.
**In traducere Arta testarii programelor: testarea subsistemelor, inclusiv testarea bazata pe obiecte si testarea orientata spre obiecte — N.T. </nota>

• Remedierea hibei
• Testarea remedierii hibei si asigurarea ca nu au aparut alte hibe, ca o consecinta a remediului
Sectiunea urmatoare, „Intelegerea hibelor", se concentreaza asupra distingerii a numeroase tipuri de erori frecvent intalnite si sugereaza metode de tratare a aces¬tora. O sectiune ulterioara a acestui modul, in speta „Arta si practica depanarii", descrie in detaliu procesul de depanare.
<remarca>
Din pacate, cuvantul hiba a ajuns sa faca referire la o notiune care poate fi descrisa intr-un mod mai adecvat prin expresia defect software. De exemplu, acelasi cuvant poate face referire la un caz minor de gripa*, care nu s-a produs din vina nimanui si nu pune problema unor consecinte. Similar, unii programatori denumesc defectele de program ca hibe, in incercarea de a le reduce la minimum si de a se eschiva de responsabilitatea comiterii sau remedierii acestora. Totusi, termenul a devenit atat de frecvent folosit, incat utilizarea altuia poate cauza confuzie. </remarca>

<titlu>Intelegerea hibelor</titlu>
Cand un programator comite o greseala, atunci executa una sau mai multe din urmatoarele actiuni:
• Omite liniile de program necesare
• Scrie linii de program inutile
• Scrie linii de program incorecte
Asa cum s-a aratat anterior, rezultatul este cunoscut sub numele de hiba software sau hiba de program.
Dovezile privind existenta unei hibe pot fi obtinute la rularea programului. Forma dominanta de testare a programelor, si anume testarea bazata pe executie, implica rularea unui program cu intentia specifica de a gasi dovada existentei unei hibe. La rularea unui program PHP, dovada existentei unei hibe ia, de regula, una din urmatoarele forme:
• Un mesaj PHP care indica o eroare de sintaxa
• Un mesaj PHP sau al bibliotecii PHP care indica o eroare la rulare
• Date de iesire ale programului incorecte sau care lipsesc
Totusi, unele categorii de hibe nu prezinta asemenea dovezi. De exemplu, un program cu hibe care contine linii de program inutile poate rula mai lent sau mai putin eficient decat un program corect. Totusi, programul eronat poate genera date

<nota>
*In jargonul calculatoarelor, bug inseamna, intr-adevar, hiba. in limba engleza vorbita, bug mai inseamna si microb, la aceasta dubla semnificatie se refera si autorul in cazul de fata. - N.T.
</nota>

de iesire, respectiv rezultate corecte. Se spune ca un asemenea program este corect din punct de vedere functional, deoarece executa functia corecta, desi o executa cu performante slabe. Aproape toate operatiile de depanare sunt orientate spre reme¬dierea programelor incorecte din punct de vedere functional, nu a programelor corecte sub acest aspect. Estimarea si imbunatatirea performantei programelor corecte din punct de vedere functional constituie domeniul disciplinei cunoscuta sub numele de evaluare a performantei programelor. Ca si testarea programelor, evaluarea performantei programelor este o disciplina specializata. Din pacate, disciplina de evaluare a performantei programelor este relativ putin dezvoltata, deci nu putem recomanda cititorului interesat sa consulte o literatura bine fundamentata referitoare la subiectul respectiv.

<titlu>Erori de sintaxa</titlu>
Cand interpretorul PHP incarca un program PHP, il analizeaza pentru a determina daca programul se conformeaza regulilor gramaticale (sintactice) ale limbajului PHP. De exemplu, interpretorul verifica ortografia cuvintelor cheie si utilizarea oportuna a caracterelor de delimitare, precum virgulele si caracterele punct si virgula. Daca programul nu se conformeaza gramaticii limbajului PHP, interpretorul afiseaza un mesaj de eroare sintactica. De exemplu, mesajul:

Parse error: parse error in test.php on line 3*

semnaleaza existenta unei erori de sintaxa.
Cunoscatorii altor limbaje de programare decat PHP nu vor asocia imediat termenul de hiba cu notiunea de eroare sintactica. Multe limbaje de programare impun programatorului sa pregateasca in mod special un program in vederea executiei, efectuand un proces cunoscut sub numele de compilare. Asemenea limbaje se numesc limbaje compilate; PHP si alte limbaje care nu necesita compilare se numesc limbaje de scripting.
Desi necesita un oarecare volum de efort suplimentar din partea programatorului, compilarea prezinta unele avantaje. In timpul compilarii, erorile de sintaxa sunt descoperite si corectate. O data un program pregatit pentru executie, erorile de sintaxa nu mai sunt posibile. Astfel, la rularea unui program scris intr-un limbaj compilat nu se poate genera o eroare de sintaxa.
Un program scris intr-un limbaj de scripting poate genera erori de sintaxa la rulare, in consecinta, in contextul respectiv, erorile de sintaxa pot fi considerate hibe, mai ales cand cei care se confrunta cu acestea sunt utilizatorii programului, nu programatorii.

<nota>
*In traducere: eroare de analiza: eroare de analiza in fisierul test.php in linia 3 — N.T. </nota>

Cand interpretorul PHP raporteaza o eroare, acesta indica un numar de linie. Este important sa intelegem ca numarul de linie semnalat nu precizeaza, in general, linia care contine eroarea; este vorba despre numarul liniei pe care interpretorul PHP o prelucra in momentul in care acesta a sesizat existenta erorii, in consecinta eroarea de sintaxa se poate afla pe linia indicata sau anterior acesteia.
Uneori, eroarea de sintaxa se poate gasi cu multe linii inaintea liniei indicate, exemplu, programatorii neglijeaza deseori sa includa caracterul ghilimele care inchide un sir de text. Intr-un asemenea caz, interpretorul PHP poate considera liniile, care urmeaza dupa amplasamentul scontat al caracterului ghilimele inexistent, ca facand de asemenea parte din sirul text. Cand interpretorul PHP recunoaste, in sfarsit ca in program exista o eroare, acesta poate indica spre o locatie amplasata la zeci sau chiar sute de linii departare de pozitia efectiva a erorii.
Pentru a evita erorile de sintaxa, este bine sa va corectati programul. Mai bine este sa cereti unei alte persoane sa va corecteze programul. Pentru a stabili cu precizie pozitia erorilor de sintaxa, folositi tehnica divide et impera, prezentata in sectiunea intitulata „Arta si practica depanarii".

<titlu>Mesaje de eroare la rulare</titlu>
O alta categorie de hibe PHP frecvent intalnite este indicata de una sau mai multe mesaje de eroare la rulare. De exemplu, incercarea de impartire la zero are rezultat un mesaj de eroare asemanator cu urmatorul:

Warning: Division by zero in test.php on line 2*

Acest mesaj este generat de interpretorul PHP, care este responsabil cu efectuarea calculelor. Similar, incercarea de a deschide un server de baze de date la o gazda nepotrivita poate duce la un mesaj de eroare asemanator cu urmatorul:

Warning: MySQL Connection Failed: Unknown MySQL Server Host ‘ dbhost ‘ (2) in test.php on line 3**

Acest mesaj este generat de biblioteca MySQL a limbajului PHP, care este responsabila cu interfata cu serverele de baze de date MySQL. Alte biblioteci PHP genereaza mesaje de eroare asociate operatiilor pe care le executa.
PHP genereaza patru nivele de mesaje de eroare, in ordinea crescatoare a gravitatii, acestea sunt urmatoarele:
• Anunturi, care sunt trimise browserului numai daca folositi functia error_reporting() pentru a specifica o sensibilitate la erori mai mare decat nivelul normal
• Erori de analizor, care indica o sintaxa incorecta a programului
<nota>
*In traducere Avertisment: impartire la zero in fisierul test.php, in linia 2 - N.T.
**In traducere Avertisment: Conexiune MySQL. ratata: Gazda necunoscuta a serverului MySQL 'dbhost' in fisierul test.php, pe linia 3 - N.T.
</nota>

• Avertismente, care provin deseori din erorile de domeniu
• Erorile fatale, care determina incheierea executiei scriptului
De regula, mesajele de eroare sunt concepute pentru a veni in sprijinul programatorilor. Pentru utilizatori, acestea sunt deranjante sau chiar mai rau. De exemplu, un mesaj de eroare accidental poate afecta intr-o asemenea masura continutul unui formular HTML generat de PHP, incat formularul devine inutilizabil. Deci, in conditii normale, un program corect din punct de vedere functional nu trebuie sa genereze mesaje de eroare.
Dar nu toate conditiile sunt normale. Nu este lipsit de sens ca un program sa genereze asemenea mesaje de eroare in conditii neobisnuite. In absenta mesajelor de eroare, reproducerea unei probleme sau determinarea cauzelor acesteia sunt operatii dificile sau imposibile. Astfel, o buna parte din proiectarea unei aplicatii consta in a determina circumstantele considerate „normale", astfel incat mesajele de eroare sa poata fi excluse sub aceste circumstante, dar permise in situatii speciale. Sfaturile rigide - de genul eliminarii permanente a mesajelor de eroare prin prefi¬xarea numelor functiilor cu simbolul „coada de maimuta" (@) - sunt simpliste si fara utilitate. Sectiunea urmatoare, intitulata „Gestiunea erorilor in PHP", prezinta numeroase tehnici pentru tratarea mesajelor de eroare PHP.
Majoritatea mesajelor de eroare la rulare sunt rezultate ale erorilor de domeniu, in speta tentativelor de a aplica un operator sau o functie unei valori necorespunzatoare. Impartirea la zero este o eroare de domeniu frecvent intalnita. Puteti evita frecvent mesajele de eroare la rulare prin simpla verificare a tipului si a valorii operanzilor si a argumentelor inainte de a le folosi.
Cu toate acestea, dusa la extrem, o asemenea strategie are ca rezultat pro¬grame de mari dimensiuni, ineficiente. O abordare mai rationala implica analiza riscurilor. Trebuie sa verificati tipul si valoarea operanzilor si a argumentelor care pot fi frecvent incorecte sau care pot duce la probleme grave. Ca regula empirica, este important sa se verifice valorile introduse de utilizatori. In functie de aplicatie, este importanta si verificarea valorilor provenite din fisiere, baze de date sau surse externe.

PHP si alte limbaje de scripting prezinta probleme speciale, datorita tipurilor dinamice. Multe limbaje de programare impun specificarea tipului variabilei anterior utilizarii acesteia, iar apoi asociaza in mod permanent tipul respectiv cu variabila. Aceste limbaje se numesc limbaje cu tipuri bine definite (in original strongly typed languages). Deoarece tipurile variabilelor sunt cunoscute si fixate la compilare, unele categorii de erori de domeniu pot fi semnalate de compilatorul unui limbaj cu tipuri bine definite si implicit evitate la rulare. Limbaje precum PHP, dar si numeroase alte limbaje de scripting, se numesc limbaje cu tipuri slab definite (in original weakly typed languages). Definirea slaba a tipurilor permite incepatorilor sa scrie programe care

functioneaza corect in majoritatea cazurilor. Cu toate acestea, definirea slaba a tipurilor intarzie pana la momentul rularii recunoasterea unor erori de domeniu, ceea ce ingreuneaza scrierea de programe cu inalta fiabilitate.

<titlu>Date de iesire inexistente sau incorecte</titlu>
Un alt tip frecvent intalnit de hiba de program este semnalat atunci cand un program produce date de iesire incorecte sau nu produce datele de iesire asteptate. Asemenea hibe se numesc hibe logice, deoarece rezulta, in general, dintr-o logica de program incorecta.
Logica de program implica trei elemente:
• Secventa. Este ordinea in care este executat programul
• Selectie. Reprezinta instructiunile care sunt executate si cele omise datorita instructiunilor conditionale, cum este instructiunea if
• Iteratie. Numarul de executii ale instructiunilor sub controlul buclelor, cum sunt buclele for
Evitarea in totalitate a erorilor din logica de program nu este omeneste posibila Corectarea programului poate duce la descoperirea multor asemenea erori si este procedeu recomandabil. Disciplina ingineriei software, care este destinata a-i ajuta pe dezvoltatorii de programe sa creeze produse de inalta calitate, a definit o tehnica numita inspectii software, care este o forma extrem de eficienta de corectare a programelor. Pentru a invata mai multe despre acest procedeu, consultati cartea lui Tom, Gilb Software Inspection (Addison-Wesley, 1993).

<Sfatul specialistului>
Intrebare: Am folosit limbaje de programare, precum Microsoft Visual Basic, care includ un program de depanare. PHP contine un asemenea program?
Raspuns: PHP include un program de depanare in retea. Totusi, pro¬gramul de depanare nu a fost inca portat la PHP 4. Pentru a depana un pro¬gram PHP, puteti folosi procedeele descrise in sectiunea intitulata „Arta si practica depanarii".
</Sfatul specialistului>

<Test „la minut">
• Cand PHP semnaleaza o eroare de sintaxa, unde se afla eroarea efectiva in raport cu numarul de linie indicat?
• Cum se numeste o eroare relativa la valoarea sau tipul unui operand sau al unui argument?

• Care este metoda de definire a tipurilor frecvent folosita de limbajele de scripting, precum PHP? </Test „la minut">

<titlu>Gestiunea mesajelor de eroare in PHP</titlu>
Unele limbaje folosite pentru dezvoltarea in Web; cum ar fi ColdFusion, Java si Python - furnizeaza mecanisme de tratare a exceptiilor. Mecanismele de tratare a exceptiilor va permit sa scrieti programe care primesc automat controlul la aparitia unei erori. Programele dumneavoastra de tratare a erorilor pot, de exemplu, sa raporteze eroarea si sa incheie executia programului sau pot incerca sa ocoleasca eroarea si sa-si continue executia.
In prezent, PHP nu dispune de mecanisme pentru tratarea exceptiilor, desi aceasta este o caracteristica pe care multi programatori se asteapta sa o vada adau¬gata, intr-un tarziu, in limbajul respectiv. Pana atunci, aveti la dispozitie trei tehnici de baza pentru tratarea mesajelor de eroare PHP:
• Evitarea conditiilor de eroare care ar genera, in caz contrar, mesaje de eroare
• Suprimarea mesajelor de eroare
• Consemnarea in jurnal a mesajelor de eroare
Cele trei procedee vor fi descrise in sub-sectiunile urmatoare.

<titlu>Evitarea mesajelor de eroare<titlu>
Asa cum s-a explicat in sectiunea anterioara, multe mesaje de eroare PHP reprezinta rezultatul unor erori de domeniu. Puteti evita asemenea mesaje de eroare prin scrierea de programe care verifica valoarea si tipul operanzilor si al argumentelor inainte de utilizarea acestora. Totusi, cand detecteaza o valoare sau un tip inadecvat, programul dumneavoastra trebuie sa rezolve situatia intr-un fel sau altul.
Un procedeu comun consta in stabilirea unei functii speciale pentru manipularea erorilor. Cand programul detecteaza o eroare, invoca functia de tratare a erorilor. La randul sau, functia de tratare a erorilor poate executa oricare din urmatoarele operatii:
• Poate afisa un mesaj de eroare prietenos cu utilizatorul
• Poate consemna eroarea intr-un fisier sau intr-o baza de date
• Poate incerca sa ocoleasca eroarea
<nota>
Raspunsuri la test:
• Pe linia respectiva sau anterior acesteia
• Eroare de domeniu
• Definire slaba</nota>

Centralizarea metodelor de tratare a erorilor intr-o asemenea functie prezinta numeroase avantaje. De exemplu:
• Faciliteaza implementarea a numeroase moduri de raportare a erorilor
• Simplifica adaptarea mesajelor de eroare pentru mai multe limbi sau localizari

Existenta mai multor moduri de raportare a erorilor va permite sa configurati un program care sa produca mesaje de eroare in faza de dezvoltare a programului, dar care sa le suprime in timpul operarii programului. Astfel, programatorii pot bene¬ficia de informatiile incluse in mesajele de eroare, dar utilizatorii pot evita aceste mesaje, care ii pot deruta sau stanjeni.
Similar, adaptarea unui program de asa natura incat sa furnizeze mesaje orientate spre utilizator in mai multe limbi este mai simpla daca o singura functie, respectiv grup de functii corelate, trateaza toate conditiile de eroare. Mesajele orientate spre utilizator pot fi afisate intr-o locatie bine determinata pe ecran, astfel incat sa nu afecteze functionarea unei aplicatii. De asemenea, aceste mesaje pot include informatii codificate, care ii ajuta pe programatori sa identifice si sa depaneze erorile. Astfel, aceste mesaje pot furniza informatii echivalente celor continute in mesajele de eroare PHP, fara a deruta sau devia atentia utilizatorului.

<titlu>Suprimarea mesajelor de eroare</titlu>
Deseori, suprimarea mesajelor de eroare constituie cea mai simpla modalitate care se poate aplica. Dar, asa cum s-a explicat, aceasta metoda refuza programatorilor accesul la informatii care ar putea ajuta la „deconspirarea" existentei unei hibe sau la depanarea unei hibe cunoscute.
Mai mult, erorile PHP fatale determina incheierea executiei scriptului, chiar daca mesajele de eroare sunt suprimate. Deci, in general este necesar sa se testeze exis¬tenta conditiilor de aparitie a erorilor, chiar si atunci cand mesajele de eroare sunt suprimate. Deseori, este doar putin mai dificil sa se trateze conditia de aparitie a erorii folosind o functie de tratare a erorilor, asa cum s-a aratat in sectiunea ante¬rioara, sau prin consemnarea in jurnal a mesajelor de eroare, asa cum se va vedea in sectiunea urmatoare.
Puteti suprima mesajele de eroare intr-unul din doua moduri. Pentru a suprima mesajele de eroare in general, invocati functia error_reporting(), care preia un argument ce specifica nivelul dorit de raportare a erorilor. Fiecare nivel de eroare are o valoare integrala asociata:

<tabel>

*Nivel
*Valoare asociata

*Erori fatale
*E_ERROR

*Avertismente
*E_WARNING

*Erori de analizor
*E_PARSE

*Anunturi
*E_NOTICE
</tabel>

Argumentul transferat functiei error_reporting() este suma valorilor asociate nivelurilor care urmeaza a fi raportate. De exemplu, o valoare a argumentului egala cu E_ERROR+E_WARNING va determina PHP sa raporteze numai erorile fatale si avertis¬mentele. O valoare a argumentului egala cu zero va determina PHP sa nu raporteze nici o eroare.
Alternativ, puteti suprima mesajele de eroare asociate apelului la o anumita functie. Pentru aceasta, prefixati numele functiei cu simbolul „coada de maimuta"(@). De exemplu, urmatorul apel de functie nu va produce mesaje de eroare:

$db = @mysql_connect(„localhost”);

Atunci cand mesajele de eroare sunt suprimate folosind oricare dintre tehnicile prezentate, puteti dori sa obtineti acces la mesajul de eroare care ar fi fost afisat in caz de neutilizare a procedeelor. Textul mesajului este inclus in variabila speciala php_errormsg(). Puteti folosi valoarea acestei variabile pentru a genera sau pentru a consemna in jurnal propriile dumneavoastra mesaje de eroare.

<titlu>Consemnarea mesajelor de eroare</titlu>
Administratorul de sistem PHP poate configura PHP astfel incat sa accepte consemnarea automata a mesajelor de eroare intr-un fisier jurnal desemnat. Acesta este un obicei recomandat, deoarece evita imixtiunea mesajelor de eroare in datele de iesire destinate utilizatorilor, dar in acelasi timp captureaza mesajele de eroare, pentru a fi analizate de programatori.
Pentru a configura PHP astfel incat sa accepte consemnarea automata a mesajelor de eroare, administratorul de sistem trebuie sa activeze urmatoarele optiuni de configurare PHP in fisierul php.ini:

log_errors = On error_log = fisier

unde fisier precizeaza calea spre fisierul jurnal care urmeaza a fi utilizat. In locul unui fisier, poate fi specificata in schimb valoarea speciala syslog; aceasta valoare determina consemnarea mesajelor PHP folosind jurnalul de sistem standard. Modi¬ficarile aduse acestei optiuni intra in vigoare la urmatoarea pornire a serverului Web.

In afara de consemnarea automata a mesajelor de eroare, PHP poate consemna manual mesajele de eroare specificate de functia error_log(). PHP4 accepta trei forme ale acestei functii:
• Mesajele de eroare sunt consemnate conform celor specificate de articolul de configurare error_log
• Mesajele de eroare sunt consemnate prin expedierea unor mesaje de e-mail
• Mesajele de eroare sunt consemnate prin scrierea intr-un fisier specificat

Pentru a scrie un mesaj de eroare in jurnalul sistem PHP, invocati functia:

error_log(mesaj, 0)

unde mesaj specifica mesajul care va fi consemnat. De exemplu, instructiunea:

error_log(„Toate bune cu PHP.”, 0)

scrie mesajul „Toate bune cu PHP." la destinatia specificata de articolul de configurare PHP error_log.
Pentru a expedia un mesaj de eroare prin intermediul postei electronice, invoc functia:

error_log(mesaj, 1, destinatie)

unde mesaj specifica mesajul care va fi consemnat, iar destinatie indica adresa de destinatie a mesajului de e-mail. De exemplu, instructiunea urmatoare trimite un mesaj de eroare prin intermediul postei electronice:

error_log(„PHP functioneaza.”, 1, „bill@osborne.com”);

Daca trebuie sa specificari alte antete de mesaj, puteti folosi o forma conexa a functiei:

error_log(mesaj, 1, destinatie, extra)

unde mesaj specifica mesajul care va fi consemnat, destinatie indica adresa de destinatie a mesajului de e-mail, iar extra specifica antetele de mesaj suplimentare. Pentru a scrie un mesaj de eroare intr-un fisier jurnal, invocati functia:

error_log(mesaj, 3, destinatie)

unde mesaj specifica mesajul care va fi consemnat, iar destinatie indica adresa de destinatie a mesajului de e-mail. De exemplu, instructiunea urmatoare trimite un mesaj de eroare intr-un fisier jurnal specific aplicatiei:

error_log(„A-Okay.”, 3, „/var/log/aplmea.log”);

Asa cum se poate observa, contul sub care ruleaza PHP trebuie sa aiba acces de scriere in fisierul jurnal specificat.

<Sfatul specialistului>
Intrebare: Si daca doresc sa consemnez date, in locul mesajelor de eroare? Are PHP aceasta posibilitate?
Raspuns: Puteti folosi optiunea functiei error_log() care permite consemnarea intr-un anumit fisier pentru a scrie date arbitrare, nu doar mesaje de eroare. Pur si simplu reprezentati datele pe care doriti sa le consemnati sub forma unui sir si trans¬ferti sirul functiei error_log(), alaturi de codul de destinatie (3) si de calea spre fisier jurnal. Puteti folosi aceasta tehnica pentru a consemna accesele la parti ale sitului dumneavoastra Web, pentru a crea jurnale de tranzactie, pentru a consemna conec¬tarile si deconectarile utilizatorilor de la retea si pentru aproape absolut orice altceva. </Sfatul specialistului>

<Test „la minut">
• Cum se numeste nivelul de mesaje de eroare PHP de maxima gravitate?
• Daca suprimati mesajele de eroare, este totusi posibil ca o eroare sa determine incheierea executiei scriptului?
• Care este functia PHP folosita pentru scrierea mesajelor de eroare adaptate?
</Test „la minut">

<titlu>Arta si practica depanarii</titlu>
Aceasta sectiune prezinta unele dintre principiile si tehnicile aplicabile in depanarea programelor. Asa cum o arata si titlul sectiunii, depanarea este mai mult o arta decat o stiinta, in consecinta, depanarea este un proces bazat pe oportunitate: nu conteaza care este cea mai buna metoda de depanare a unui program, ci numai ca metoda respectiva sa dea rezultatul scontat. Existenta unor abordari si a unor perspective suplimentare poate contribui la imbunatatirea eficientei procesului de depanare.
Sectiunea de fata este organizata in jurul procesului de depanare specificat anterior, care include urmatoarele operatii:
• Reproducerea simptomului
• Stabilirea cu precizie a hibei
• intelegerea hibei
• Remedierea hibei
• Testarea programului
Retineti ca operatiile sunt distincte de etapele prezentate. Operatiile pot fi executate intr-o alta ordine, omise sau se pot chiar suprapune. Totusi, in general, operatiile specificate se executa succesiv, iar expunerea sugereaza unele motive pentru care omiterea unei operatii sau executarea acesteia in afara secventei pot afecta eficacitatea procesului de depanare.

<titlu>Reproducerea simptomului</titlu>
Prima activitate din cadrul procesului de depanare este reproducerea, in circumstante controlate, a simptomului sau simptomelor care indica existenta hibei. Deseori, presupusele erori se dovedesc a fi o lipsa de intelegere a modului de comportare a unui program sau mai degraba o eroare a utilizatorului, nu a programatorului.
<nota>
Raspunsuri la test:
• Eroare fatala
• Da
• error_log()

Deci, este important sa incercati a reproduce simptomele pentru a verifica probabilitatea de existenta a unei hibe.
Un al doilea motiv pentru reproducerea simptomului este acela ca, in caz contrar, nu se poate demonstra ca hiba a fost remediata. Daca un simptom apare rar si numai in conditii care nu sunt foarte bine intelese, s-ar putea sa nu fie clar daca hiba a disparut sau doar se ascunde.
Multi programatori dau fuga la urmatoarea operatie, in speta stabilirea cu precizie a hibei. Totusi, procesul de reproducere a simptomului poate furniza indicii utile pentru stabilirea exacta a naturii hibei. De exemplu, este important sa cunoastem conditiile in care apare simptomul, precum si circumstantele in care acesta nu apare.
La reproducerea simptomului, este util sa dispunem de un raport complet si exact al circumstantelor in care a fost observat simptomul, in caz contrar, incercarea de a reproduce simptomul poate esua.

<titlu>Stabilirea cu precizie a hibei</titlu>
O data devenita posibila reproducerea in conditii de siguranta a simptomului care indica existenta unei hibe, se poate incepe operatia de stabilire cu precizie a hibei. In acest sens, doua procedee sunt deosebit de utile: divide et impera* si urmarirea programului.

<titlu>Descoperirea defectelor cu ajutorul tehnicii divide et impera</titlu>
Tehnica divide et impera se bazeaza pe posibilitatea ca hiba sa fie localizata intr-o anumita sectiune a programului, ceea ce constituie o caracteristica specifica multor hibe, poate majoritatii hibelor care se gasesc in programele PHP. Procedeul divide impera implica eliminarea liniilor de program selectate si rularea programului. Daca simptomul persista, s-a demonstrat ca hiba se afla in cealalta portiune a programului.
Procedeul divide et impera poate fi extrem de eficient. Daca o jumatate a programului este eliminata la fiecare iteratie a acestei metode, o hiba care afecteaza o singura linie dintr-un program cu 1000 de linii poate fi localizata prin numai zece iteratii. Totusi, acest procedeu este rareori folosit pana la identificarea unei singure linii de program, in schimb, este frecvent utilizat pentru a detecta o functie cu defect. Daca functiile unui program au o lungime medie de 25 de linii, un program cu 1000 de linii consta din 40 de asemenea functii. Astfel, pentru identificarea functiei afectate vor fi necesare numai cinci sau sase iteratii ale metodei divide et impera.
In mod caracteristic, liniile eliminate in cursul aplicarii procedeului nu sunt eliminate din fisierul program; in schimb, sunt transformate in comentarii. Cu alte cuvinte, sunt plasate marcaje de comentariu astfel incat interpretorul PHP sa considere liniile eliminate ca fiind comentarii, nu linii de program executabile.

<nota>
*Dicton latin: dezbina si stapaneste - N.T.</nota>

O complicatie la aplicarea procedeului divide et impera consta in faptul ca exista corelatii intre componentele a numeroase programe, astfel ca eliminarea unui program va cauza esuarea unei parti corespondente a programului. In acest caz, se poate folosi o varianta speciala a procedeului divide et impera, cunoscuta sub numele de racorduri si drivere (in original stubs and drivers). Procedeul racorduri si drivere foloseste racordurile pentru a aplica tehnica divide et impera unui program, iar driverele pentru a executa celelalte componente ale programului.
Racord este termenul folosit pentru a desemna o functie intentionat incompleta. A racorda o functie inseamna a inlocui functia cu un program care afiseaza un mesaj sau care returneaza o valoare fixa, fara a executa o operatie efectiva. De exemplu, iata un racord simplu ce poate inlocui o functie care calculeaza radacina cubica a argumentului sau:

function radacina_cubica(x)
A echo “<BR>radacina_cubica() apelata cu argumentul $x”; return 1;
S

Remarcati ca functia racord returneaza intotdeauna valoarea 1. In general, nu acesta este rezultatul matematic corect; totusi, este putin probabil ca valoarea 1 sa determine esecul functiilor care invoca functia radacina_cubica().
Prin driver se intelege o functie care apeleaza o alta functie, transferand argumente speciale destinate a scoate la iveala hibele ascunse in cadrul acesteia din urma. De exemplu, iata o functie driver care se poate folosi pentru testarea unei functii numite patru() care calculeaza radacini de ordinul al patrulea:

function driver($x)
A echo „<BR>Apeleaza functia patru() cu argumentul $x:”;
$y = patru($x); echo „<BR>Functia patru() a returnat rezultatul $y.”;
$z = $y * $y * $y * $y; if ($x == $z) echo „<BR>Rezultatul este corect.”; else echo „<BR>Rezultatul nu este corect.”;
S

<titlu>Urmarirea evolutiei unei variabile</titlu>
Deseori, verificarea modului de functionare a unui program este mai simpla daca sunt disponibile rezultate intermediare. De exemplu, un program care determina daca un numar dat este prim poate fi depanat mai usor daca se poate vedea care au fost factorii testati.

Unele limbaje de programare includ utilitare de depanare care permit specificarea unei optiuni ce determina afisarea linie cu linie a executiei programului. PHP nu furnizeaza o asemenea caracteristica. Totusi, puteti folosi instructiuni echo pentru a

afisa mesaje care prezinta evolutia unui proces de prelucrare a datelor si valorile variabilelor importante.
Practica insertiei unor asemenea instructiuni intr-un program se numeste instrumentarea programului. Unii programatori isi instrumenteaza programele in faza de dezvoltare si nu elimina elementele de instrumentare nici macar cand programele intra in faza de productie. De obicei, se folosesc instructiuni if care suprima date de iesire instrumentate daca o variabila globala - denumita deseori $debug (depa¬nare) sau ceva asemanator - nu are o anumita valoare.
Acest obicei este deosebit de util in lucrul cu programe care s-au dovedit a fi generatoare de probleme. Cand este necesara depanarea programului, nu trebuie sa-l instrumentati, deoarece procedeul a fost deja aplicat.

<titlu>Intelegerea hibei</titlu>
Operatia urmatoare, adica intelegerea hibei, este cel mai frecvent neglijata de catre programatori. Deseori, programatorii incep sa efectueze revizuiri prin incercari, in speranta ca vor descoperi o corectie care va remedia problema. O asemenea abordare aleatoare, de tip „invatare din greseli", a procesului de depanare se dovedeste rareori oportuna, deoarece programatorii care procedeaza astfel deseori introduc hibe noi in timp ce incearca sa le remedieze pe cele vechi.
Este esential sa intelegeti natura hibei inainte de a incerca sa o remediati. Daca programul este prea complicat pentru a fi inteles, acesta este un indiciu ca procedeul divide et impera a fost abandonat prematur. Daca este necesar, izolati instruc¬tiunea individuala „responsabila" cu hiba inainte de a incerca sa o remediati. Majoritatea programatorilor - chiar si incepatorii - sunt capabili de a intelege complet o instructiune separata de restul programului.

<titlu>Remedierea hibei</titlu>
In general, remedierea hibei este cea mai simpla operatie din cadrul procesului de depanare. Totusi, poate constitui si o oportunitate ratata. Deseori, o hiba poate fi remediata in mai multe moduri. Nu alegeti pur si simplu prima solutie la care v-ati gandit, ci incercati sa determinati si care sunt celelalte remedii posibile. Apoi, dintre acestea, alegeti solutia cea mai buna, nu neaparat pe prima.

<titlu>Testarea programului</titlu>
Operatia finala din cadrul procesului de depanare este cea mai importanta. Multi programatori - mai ales incepatorii - isi revizuiesc programele fara a verifica daca varianta revizuita rezolva efectiv problema. Verificarea disparitiei simptomului este o componenta necesara a procesului de depanare. Totusi, aceasta operatie nu este suficienta.

Deseori, in procesul de depanare, sunt introduse hibe noi. Este impor¬tant sa verificati doua aspecte ale programului revizuit:
• Daca operatiile anterior imposibile sunt acum posibile
• Daca operatiile posibile anterior sunt si acum posibile
Satisfacerea ambelor criterii este dificila. O metoda consta in dezvoltarea unor cazuri de test prin regresie pentru fiecare program. In acest context, un test prin regresie este un test sau o serie de teste rulate la fiecare modificare a unui program. Initial, este posibil ca setul de cazuri de teste prin regresie sa nu fie foarte cuprin¬zator. Dar, daca se acumuleaza cazuri de test care trateaza fiecare eroare care apare, setul de cazuri de teste prin regresie se va dovedi, in cele din urma, util pentru evitarea hibelor care, in cazul neutilizarii acestui procedeu, ar fi fost introduse in programul difuzat pentru public. Disciplina de testare a programelor furnizeaza principii utile pentru alegerea cazurilor de teste prin regresie; cititorul interesat va consulta referintele specificate anterior.

<Sfatul specialistului>
Intrebare: N-am timp sa devin expert in testare. Nu avet i cateva sfaturi rapide privind modul de alegere a cazurilor de test?
Raspuns: O tehnica de testare utila se numeste partitionare prin echivalenta. Acest procedeu porneste de la observatia ca multe cazuri de test sunt cruciale in sensul ca, daca functioneaza, atunci vor functiona garantat si numeroase alte cazuri de test conexe. Prin testarea unui numar maxim permis in practica din aceste cazuri de test cruciale, testarea programelor devine mai eficienta decat atunci cand cazurile de test sunt selectate in mod arbitrar.
O euristica utila pentru partitionarea prin echivalenta consta in testarea unor valori mici, medii si mari pentru fiecare camp prelucrat de un program. Pentru numere, testati valori pozitive, negative, respectiv egale cu zero. Pentru campurile care apar in formularele HTML, testati valorile critice, precum valorile asociate casetelor de validare, butoanelor radio si controalelor de selectare.
Daca testati pur si simplu aceste valori pentru fiecare camp de introducere a datelor, testarea programului efectuata de dumneavoastra va fi, probabil, mai eficienta decat aceea executata de un programator mediu. </Sfatul specialistului>

<Test „la minut">
• Care este prima operatie care trebuie executata in cadrul procesului de depanare?
• Care este operatia din cadrul procesului de depanare cel mai frecvent omisa de programatorii incepatori?

• Care este cea mai simpla operatie din cadrul procesului de depanare? </Test „la minut">

<titlu>Proiect 17-1: Mesaje de eroare PHP</titlu>
In cadrul acestui proiect, veti vedea „la prima mana" cum se comporta mesajele de eroare PHP. Veti folosi functia error_reporting() pentru a specifica nivelul de raportare a erorilor si pentru a genera erorile pe care le raporteaza sau le ignora, in functie de nivelul curent de raportare a erorilor.

<titlu>Scopurile proiectului</titlu>
• Prezentarea modului de utilizare a functiei error_reporting()
• Prezentarea influentei exercitate de nivelul de raportare a erorilor asupra modalitatii de raportare a mesajelor de eroare

<titlu>Pas cu pas</titlu>
1. Creati urmatorul script HTML, plasati-l intr-un fisier numit p17-1.php si incarcati-l in serverul dumneavoastra PHP:

<HTML>
<HEAD>
<TITLTE>Proiect 17-1</TITLE>
</HEAD>
<BODY>
<?php echo „<BR>Utilizeaza raportarea standard a erorilor:”;

$x = $y;
$x = $ x / 0;

echo „<BR>Activeaza raportarea tuturor erorilor:”; error_reporting(15);

$x = $y;
$x = $ x / 0;

echo „<BR>Dezactiveaza raportarea erorilor:”; error_reporting(0);

$x = $y;
$x = $ x / 0;

echo „<BR><BR>Genereaza o eroare fatala:”;
$x = aceasta_functie_nu_este_definita();

echo „<BR>Ultima linie.”;

<nota>
Raspunsuri la test:
• reproducerea simptomului
• intelegerea hibei
• remedierea hibei</nota>

?>
</BODY>
<?HTML>

2. Studiati scriptul pentru a discerne elementele de structura a programului. Veti identifica urmatoarele elemente:
• O sectiune de program care foloseste nivelul prestabilit de raportare a erorilor
• O sectiune de program care foloseste nivelul cel mai detaliat de raportare a erorilor
• O sectiune de program care suprima toate mesajele de eroare
• O sectiune de program care apeleaza o functie nedefinita si care executa apoi o instructiune echo

Fiecare din primele trei elemente ale structurii include un program care genereaza doua erori: o referinta la o variabila nedefinita si o impartire la zero. Prima este considerata o eroare la nivel de anunt, iar ultima este o eroare de nivel avertisment. Ultimul element al structurii apeleaza o functie nedefinita; aceasta este considerata ca fiind o eroare fatala.
3. Orientati browserul dumneavoastra Web spre adresa URL asociata scriptului PHP p17-1.php. Ecranul browserului va fi asemanator cu urmatoarea ilustratie:
<ecran>
Using default error reporting:
Warning: Division by zero in /home/bmccarty/public_html/php/module-17/debug.php on line 12

Turning on all error reporting:
Warning Undefine variable: y in /home/bmccarty/public_html/php/module-17/debug.php on line 17

Warning: Division by zero in /home/bmccarty/public_html/php/module-17/debug.php on line 18

Turning off error reporting:

Generating a fatal error:
</ecran>

4. Observati ca:
• La nivelul prestabilit de raportare a erorilor, nu sunt afisate anunturile, dar avertis¬mentele sunt afisate
• La nivelul cel mai detaliat de raportare a erorilor, sunt afisate atat anunturile, cat si avertismentele
• Cand raportarea erorilor este suprimata, nu sunt afisate nici anunturile, nici avertis¬mentele
• Cand raportarea erorilor este suprimata, nu sunt afisate nici macar erorile fatale, desi acestea au ca rezultat incheierea imediata a executiei programului, asa cum s-a aratat prin lipsa datelor de iesire ale instructiunii echo finale

<Test de evaluare>
1. Care este numele tehnicii de depanare care implica si transformarea in comentarii a unor sectiuni de program?
2. Include PHP 4 o functionalitate de depanare?
3. Care este variabila PHP ce include textul celui mai recent mesaj de eroare, chiar daca raportarea erorilor este suprimata?
4. Cum se numesc erorile care incalca regulile gramaticale ale limbajului PHP?
5. Ce se intampla la aparitia unei erori fatale, atunci cand raportarea erorilor este suprimata? </Test de evaluare>


Colt dreapta
Creeaza cont
Comentarii:

Nu ai gasit ce cautai? Crezi ca ceva ne lipseste? Lasa-ti comentariul si incercam sa te ajutam.
Esti satisfacut de calitarea acestui document, eseu, cometariu? Apreciem aprecierile voastre.

Nume (obligatoriu):

Email (obligatoriu, nu va fi publicat):

Site URL (optional):


Comentariile tale: (NO HTML)


Noteaza documentul:
In prezent fisierul este notat cu: ? (media unui numar de ? de note primite).

2345678910

 
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite
Colt dreapta