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. | ||