This shows you the differences between two versions of the page.
programare:tutoriale:unittests [2021/12/29 17:01] darius.neatu created |
programare:tutoriale:unittests [2022/01/21 02:05] (current) radu.nichita |
||
---|---|---|---|
Line 9: | Line 9: | ||
**Resposabili**: | **Resposabili**: | ||
* Cristi Olaru | * Cristi Olaru | ||
- | * Cristi Popa | ||
* Cristi Pătrașcu | * Cristi Pătrașcu | ||
+ | * Cristi Popa | ||
* Darius Neațu | * Darius Neațu | ||
* Liza Babu | * Liza Babu | ||
Line 78: | Line 78: | ||
* scriind teste unitare pentru fiecare funcționalitate în parte | * scriind teste unitare pentru fiecare funcționalitate în parte | ||
* avantaje: | * avantaje: | ||
- | * testele rămân scrise undeva, pot fi rulate din nou când e nevoie (e.g. când vrem să revalidăm funcționalitatea în urma unei noi modificări) | + | * testele rămân scrise undeva, pot fi rulate din nou când e nevoie (e.g. când vrem să revalidăm funcționalitatea în urma unei noi modificări) |
* automate | * automate | ||
* dezavantaje: | * dezavantaje: | ||
* timpul de dezvoltare mai mare (un feature nu se poate considera terminat din punct de vedere implementare până nu s-au scris toate testele) | * timpul de dezvoltare mai mare (un feature nu se poate considera terminat din punct de vedere implementare până nu s-au scris toate testele) | ||
- | * testele (de orice fel) reprezintă cod scris de programator și acesta **trebuie** să respecte aceleași standarde ca și codul de feature-uri (e.g. coding style, review, etc) | + | * testele (de orice fel) reprezintă cod scris de programator și acesta **trebuie** să respecte aceleași standarde ca și codul de feature-uri (e.g. coding style, review, etc) |
===== Ce este un test unitar? ===== | ===== Ce este un test unitar? ===== | ||
Line 94: | Line 94: | ||
* cel puțin un număr este negativ, caz în care algoritmul nu se poate aplica, iar funcția noastră GCD trebuie să trateze această situație | * cel puțin un număr este negativ, caz în care algoritmul nu se poate aplica, iar funcția noastră GCD trebuie să trateze această situație | ||
- | Pentru toate cazurile prezentare mai sus, vom scrie un test unitar. Un **test unitar** este o funcție care apelează funcția noastră (e.g. GCD) cu date de intrare specifice (parametrii, fișiere, etc.). Dacă avem mai multe cazuri de test, vom scrie mai multe teste unitare, câte unul pentru fiecare caz de test. | + | Pentru toate cazurile prezentare mai sus, vom scrie un test unitar. Un **test unitar** este o funcție care apelează funcția noastră (e.g. GCD) cu date de intrare specifice (parametrii, fișiere, etc.). Dacă avem mai multe cazuri de test, vom scrie mai multe teste unitare, câte unul pentru fiecare caz de test. |
Funcția GCD este scrisă în C, declarată în ''%%~/support/algorithms.h%%'' și definită în ''%%~/support/algorithms.c%%'' și are următoarea semnătură: | Funcția GCD este scrisă în C, declarată în ''%%~/support/algorithms.h%%'' și definită în ''%%~/support/algorithms.c%%'' și are următoarea semnătură: | ||
Line 325: | Line 325: | ||
* repetabile: să putem să rulăm ori de câte ori testele, obținând de fiecare dată //același// rezultat | * repetabile: să putem să rulăm ori de câte ori testele, obținând de fiecare dată //același// rezultat | ||
* conclusiv: la finalul unui test trebuie să putem să tragem concluzia dacă funcția pe care o testăm funcționează corect pe această rulare particulară | * conclusiv: la finalul unui test trebuie să putem să tragem concluzia dacă funcția pe care o testăm funcționează corect pe această rulare particulară | ||
- | * izolate: ele nu depind de alte teste scrise anterior; cu alte cuvinte, dacă am rula într-o ordine aleatoare testele, nu ar trebui să fie afectat rezultatul testelor (e.g. orice resurse alocate/modificate într-un test //trebuie// să fie eliberate/restaurate la final de test) | + | * izolate: ele nu depind de alte teste scrise anterior; cu alte cuvinte, dacă am rula într-o ordine aleatoare testele, nu ar trebui să fie afectat rezultatul testelor (e.g. orice resurse alocate/modificate într-un test //trebuie// să fie eliberate/restaurate la final de test) |
* rapide: nu facem operații care nu sunt necesare în testele noastre | * rapide: nu facem operații care nu sunt necesare în testele noastre | ||
Line 603: | Line 603: | ||
Funcțiile conțin buguri ascunse care pot fi descoperite prin scrierea de teste unitare. Atunci când descoperiți o problemă, incercati sa o reparati astfel încât funcția de test să ruleze cu succes. PS: tutorialul de debugging poate fi util. | Funcțiile conțin buguri ascunse care pot fi descoperite prin scrierea de teste unitare. Atunci când descoperiți o problemă, incercati sa o reparati astfel încât funcția de test să ruleze cu succes. PS: tutorialul de debugging poate fi util. | ||
- |