← Înapoi la concepte
🐛

Depanare și testare programe

Programare Cls. VII Cls. VIII

Pe scurt

Bugurile sunt complet normale — chiar și programatorii cu experiență le au. Ceea ce contează este să știi cum să le găsești: urmărești execuția pas cu pas, testezi cu date diferite și identifici exact unde calculatorul face altceva față de ce ai intenționat.

Depanarea (debugging) înseamnă să mergi pe urmele programului ca un detectiv: notezi valorile variabilelor la fiecare pas și compari cu ce ar fi trebuit să fie. Testarea înseamnă să verifici că programul funcționează corect pentru toate cazurile posibile, nu doar pentru exemplul pe care l-ai folosit în timp ce scriai codul.

Ce este

Un mediu de dezvoltare (IDE) cum este Code::Blocks combină trei unelte într-un singur program: editorul de cod (unde scrii), compilatorul (care transformă codul în program executabil) și debuggerul — unealta care te lasă să pui programul în pauză și să vezi exact ce valori au variabilele în orice moment al execuției.

Gândește-te la depanare ca la un joc video unde poți activa modul „slow-motion": în loc să rulezi totul dintr-o dată și să nu înțelegi unde a mers prost, avansezi câte un pas pe rând și urmărești cum se schimbă fiecare variabilă — exact ca atunci când trasezi un algoritm pe hârtie la ciornă.

Trasarea manuală (urmărirea valorilor pe hârtie) este prima tehnică de depanare pe care o exersezi la clasă: notezi valorile inițiale ale tuturor variabilelor, parcurgi instrucțiunile una câte una și actualizezi valorile după fiecare pas. Această metodă este identică cu ce face debuggerul automat — diferența este că tu ești calculatorul.

Testarea sistematică înseamnă să rulezi programul cu mai multe seturi de date deliberat alese:

La clasa a VIII-a, fiecare produs sumativ include o etapă de testare — nu poți preda proiectul fără să verifici că algoritmul funcționează corect pentru toate cele trei tipuri de cazuri de mai sus.

Breakpoint-ul este un marcaj pe o linie de cod care oprește execuția exact acolo. În Code::Blocks, dai clic în marginea stângă a editorului și apare un cerc roșu. Când pornești programul în modul Debug (opțiunea „Debug → Start" din meniu), execuția se oprește la breakpoint și poți inspecta fiecare variabilă în panoul „Watches" fără să modifici codul.

Dacă trasarea manuală este ca și cum citești o carte cuvânt cu cuvânt, breakpoint-ul este un semn de carte pus exact înaintea paragrafului suspect — sari direct acolo, fără să parcurgi tot ce știi deja că funcționează corect.

Tehnica înjumătățirii (binary search debugging): dacă nu știi unde se află bugul, pune un breakpoint la mijlocul programului. Dacă valorile sunt corecte acolo, bugul e în a doua jumătate; dacă nu, e în prima. Repeți până găsești linia exactă — mult mai rapid decât să parcurgi toate instrucțiunile de la început.

De ce contează

🎮
Un joc care se blochează Ai scris un joc simplu în C++ și funcționează cu valori mici, dar se blochează la anumite intrări. Cu debuggerul pornit, oprești execuția înainte de bucla suspectă și observi că variabila contor ajunge la o valoare negativă — ai găsit bugul.
📊
Algoritm care dă rezultat greșit La evaluarea națională apare frecvent întrebarea „Ce afișează algoritmul?". Metoda corectă este exact trasarea pas cu pas: notezi valorile inițiale, parcurgi fiecare instrucțiune, actualizezi variabilele — același proces pe care îl folosești în Code::Blocks când depanezi un program real.
🔁
Bucla infinită Dacă programul tău nu se mai oprește, înseamnă că o buclă CAT TIMP are o condiție care nu devine niciodată falsă. Depanarea îți arată la a câta iterație valorile nu se mai schimbă cum ar trebui — și poți corecta instrucțiunea care ar fi trebuit să modifice condiția.

Harta lecțiilor

Verifică-te

1. Ce este un IDE și ce trei componente principale combină Code::Blocks?
IDE = Integrated Development Environment — un program care reunește: editorul de cod (unde scriem programul), compilatorul (transformă codul în fișier executabil) și debuggerul (ne lasă să urmărim execuția pas cu pas și să vedem valorile variabilelor). Fără un IDE, ar trebui să folosim trei programe separate.
2. Care este primul pas corect atunci când trasezi un algoritm pe hârtie (sau îl depanezi mental)?
Notezi valorile inițiale ale tuturor variabilelor, apoi parcurgi instrucțiunile una câte una în ordine, actualizând valorile după fiecare pas. La bucle, verifici condiția înainte de fiecare execuție a corpului (la CAT TIMP) sau după (la REPETA…PANA CAND). Niciodată nu sari direct la răspuns fără să parcurgi pașii.
3. Care sunt cele trei tipuri de cazuri de test pe care trebuie să le verifici pentru orice program? Dă câte un exemplu concret pentru un program care citește un șir de numere întregi și afișează maximul.
Cazul tipic: șir de 5 numere distincte pozitive (ex: 3, 7, 1, 9, 4) — maximul așteptat este 9.
Cazul limită: șir cu un singur element (ex: 42) — maximul trebuie să fie 42; sau toate elementele egale (ex: 5, 5, 5) — maximul trebuie să fie 5.
Cazul de eroare: șir cu numere negative (ex: −3, −7, −1) — programul trebuie să returneze −1, nu 0 sau o valoare neinițializată. Dacă variabila max este inițializată cu 0, acest caz dezvăluie bugul.

Concepte înrudite