This shows you the differences between two versions of the page.
tsc:laboratoare:laborator-09 [2024/02/29 14:40] 127.0.0.1 external edit |
tsc:laboratoare:laborator-09 [2025/05/12 13:42] (current) matei.calugaru [Fuzz testing] |
||
---|---|---|---|
Line 3: | Line 3: | ||
==== Regression testing ==== | ==== Regression testing ==== | ||
- | Testarea prin regresie este un tip de testare folosit pentru a determina o bucată de cod nouă va avea afecta negativ alte părți ale codului pe care nu le modifica în mod direct. În mod normal, atunci când introducem cod nou într-un modul al unui proiect, există teste unitare care verifică buna funcționare a modulului respectiv. Slăbicunea acestei metode este că nu verifică și posibilele efecte laterale ale noului modul. Astfel, testarea prin regresie este caracterizată prin testarea noului modul în contextul întregului proiect. | + | Testarea prin regresie este un tip de testare folosit pentru a determina dacă o bucată de cod nouă va afecta negativ alte părți ale codului pe care nu le modifică în mod direct. În mod normal, atunci când introducem cod nou într-un modul al unui proiect, există teste unitare care verifică buna funcționare a modulului respectiv. Slăbicunea acestei metode este că nu verifică și posibilele efecte laterale ale noului modul. Astfel, testarea prin regresie este caracterizată prin testarea noului modul în contextul întregului proiect. |
Testare prin regresie poate fi făcută în 3 moduri: | Testare prin regresie poate fi făcută în 3 moduri: | ||
Line 13: | Line 13: | ||
=== Retest all === | === Retest all === | ||
- | Cea mai costisitoare metodă, implică rerularea tuturor testelor aferente proiectului. Este de dorit să evităm această metodă pe cât posibil deoarece cosnumă foarte mult timp și resurse. | + | Cea mai costisitoare metodă, implică rerularea tuturor testelor aferente proiectului. Este de dorit să evităm această metodă pe cât posibil deoarece cosnumă foarte mult timp și foarte multe resurse resurse. |
=== Regression test selection === | === Regression test selection === | ||
Implică împărțirea testelor deja existente în suită în 2 categorii: cele care pot fi rulate pentru regresie și cele care nu sunt necesare pentru testarea prin regresie. | Implică împărțirea testelor deja existente în suită în 2 categorii: cele care pot fi rulate pentru regresie și cele care nu sunt necesare pentru testarea prin regresie. | ||
Line 72: | Line 72: | ||
Pentru acest laborator vom folosi fuzzer-ul atheris. | Pentru acest laborator vom folosi fuzzer-ul atheris. | ||
<note tip><code teraterm> | <note tip><code teraterm> | ||
- | $pip install atheris | + | Atheris supports Linux (32- and 64-bit) and Mac OS X, Python versions 3.6-3.11. |
</code></note> | </code></note> | ||
+ | <note tip><code teraterm> | ||
+ | $pip install atheris | ||
+ | </code></note> | ||
Line 98: | Line 101: | ||
{{:tsc:laboratoare:result_atheris.jpeg?600|}} | {{:tsc:laboratoare:result_atheris.jpeg?600|}} | ||
- | În același fișier în care se află executabilul atheris va genera un nou fișier text cu numele hash-ului generat, în care va scrie input-urile care au dus la generarea erorilor. În cazul de mai sus va crea dun fișier care conține doar cuvântul "bad" | + | În același fișier în care se află executabilul atheris va genera un nou fișier text cu numele hash-ului generat, în care va scrie input-urile care au dus la generarea erorilor. În cazul de mai sus va crea un fișier care conține doar cuvântul "bad". |
Pentru a-i putea spune lui atheris care părți din cod trebuie instrumentate. Pentru a face acest lucru avem 3 opțiuni: | Pentru a-i putea spune lui atheris care părți din cod trebuie instrumentate. Pentru a face acest lucru avem 3 opțiuni: | ||
Line 123: | Line 126: | ||
==== Exerciții ==== | ==== Exerciții ==== | ||
- | 0) Citiți documentația pentru atheris: [[https://github.com/google/atheris]] | ||
- | 1) Pentru început, scrieți o colecție de 5 funcții care pot genera excepții în cazul datelor de intrare eronate și scrieți teste pentru fiecare funcție. Folosiți atheris pentru a depista inputurile care ar putea genera erori | + | Pentru a clona [[https://github.com/cs-pub-ro/systems-testing | repo-ul]] și a accesa resursele aferente laboratorului: |
+ | |||
+ | <code bash> | ||
+ | student@tsc:~$ git clone git@github.com:cs-pub-ro/systems-testing.git | ||
+ | student@tsc:~$ cd systems-testing/laboratories | ||
+ | student@tsc:~/laboratories$ cd system-reg-fuzz-testing | ||
+ | </code> | ||
+ | |||
+ | Dacă aveți local [[https://github.com/cs-pub-ro/systems-testing | repo-ul]], asigurați-vă că aveți ultima versiune. | ||
+ | |||
+ | <code bash> | ||
+ | student@tsc:~$ cd systems-testing | ||
+ | student@tsc:~$ git pull | ||
+ | </code> | ||
- | 2) Pentru aceleași funcții de mai sus, creați încă un set de teste de regresie, generați primul output de referință, apoi alterați testele și analizați mesajele de eroare. | + | Dacă folosiți un fork al repo-ului, asigurați-vă că este sincronizat cu repo-ul principal. |
+ | TODO-urile sunt scrise pentru fiecare exercitiu in repo. | ||