Skip to content

Commit 9a14e10

Browse files
authored
Update ProjectAnalysisReport.md
1 parent 96b114a commit 9a14e10

1 file changed

Lines changed: 52 additions & 100 deletions

File tree

ProjectAnalysisReport.md

Lines changed: 52 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ Cilj ove analize je:
1717

1818
| Opcija | Opis |
1919
|--------|------|
20-
| `-Wall` | Aktivira upozorenja za sve uobičajene probleme u kodu. |
21-
| `-Wextra` | Aktivira dodatna upozorenja koja nisu obuhvaćena sa `-Wall`. |
22-
| `-fprofile-arcs` | Omogućava instrumentaciju za GCOV – beleži tok izvođenja programa. |
23-
| `-ftest-coverage` | Generiše dodatne fajlove (`.gcno`, `.gcda`) za pokrivenost koda. |
20+
| `-Wall` | Aktivira upozorenja za sve uobičajene probleme u kodu |
21+
| `-Wextra` | Aktivira dodatna upozorenja koja nisu obuhvaćena sa `-Wall` |
22+
| `-fprofile-arcs` | Omogućava instrumentaciju za GCOV – beleži tok izvođenja programa |
23+
| `-ftest-coverage` | Generiše dodatne fajlove (`.gcno`, `.gcda`) za pokrivenost koda |
2424

2525
### 2.2 GCOV opcije
2626

2727
| Opcija | Opis |
2828
|--------|------|
29-
| `-b` | Prikazuje branch coverage tj. pokrivenost logičkih grana (`if`, `switch`). |
30-
| `-c` | Prikazuje call coverage tj. koliko je funkcijskih poziva izvršeno. |
29+
| `-b` | Prikazuje branch coverage tj. pokrivenost logičkih grana (`if`, `switch`) |
30+
| `-c` | Prikazuje call coverage tj. koliko je funkcijskih poziva izvršeno |
3131

3232
---
3333

@@ -60,12 +60,12 @@ All unit tests OK
6060

6161
### 4.1 Tumačenje rezultata:
6262

63-
- Parser je uspešno obradio 3 reda CSV podataka.
64-
- Ispravno su prepoznata obična polja, numerička polja i quoted polja sa zarezom.
65-
- Callback funkcije za polja i kraj reda su pozvane odgovarajući broj puta.
66-
- Program je završio bez greške.
63+
- Parser je uspešno obradio 3 reda CSV podataka
64+
- Ispravno su prepoznata obična polja, numerička polja i quoted polja sa zarezom
65+
- Callback funkcije za polja i kraj reda su pozvane odgovarajući broj puta
66+
- Program je završio bez greške
6767

68-
- Zaključak: osnovna funkcionalnost parsera radi ispravno.
68+
- Zaključak: osnovna funkcionalnost parsera radi ispravno
6969

7070
---
7171

@@ -82,17 +82,6 @@ Branches executed:100.00% of 6
8282
Taken at least once:66.67% of 6
8383
Calls executed:81.82% of 11
8484

85-
### 5.2 Analiza pokrivenosti
86-
87-
Line coverage – 86.36%
88-
Većina linija je izvršena. Neizvršene linije odnose se na obradu grešaka (NULL polja, neuspeh inicijalizacije parsera).
89-
90-
Branch coverage – 100% analizirano, 66.67% izvršeno
91-
Sve logičke grane su analizirane, ali nisu sve izvršene u pozitivnim test slučajevima.
92-
93-
Call coverage – 81.82%
94-
Većina funkcijskih poziva je izvršena, osim onih u granama za obradu grešaka.
95-
9685
---
9786

9887
## 6. Procena kvaliteta testova
@@ -115,10 +104,10 @@ Testovi ne pokrivaju:
115104

116105
## 7. Zaključak
117106

118-
- CSV parser funkcioniše ispravno za tipične ulazne podatke.
119-
- Ostvarena je visoka pokrivenost linija (86.36%).
120-
- Sve grane su analizirane, ali nisu sve izvršene tokom testova.
121-
- Testovi pokrivaju glavni tok izvršavanja programa, ali za potpunu validaciju bi bilo potrebno dodati testove koji simuliraju greške i specijalne slučajeve.
107+
- CSV parser funkcioniše ispravno za tipične ulazne podatke
108+
- Ostvarena je visoka pokrivenost linija (86.36%)
109+
- Sve grane su analizirane, ali nisu sve izvršene tokom testova
110+
- Testovi pokrivaju glavni tok izvršavanja programa, ali za potpunu validaciju bi bilo potrebno dodati testove koji simuliraju greške i specijalne slučajeve
122111

123112
---
124113

@@ -186,9 +175,9 @@ Integration test passed!
186175

187176
### 4.1 Tumačenje rezultata:
188177

189-
- Parser je uspešno obradio 3 reda CSV podataka (uključujući quoted polja sa zarezom).
190-
- Callback funkcije za polja i kraj reda su pozvane odgovarajući broj puta.
191-
- Program je završio bez greške, što potvrđuje da osnovna integracija funkcioniše.
178+
- Parser je uspešno obradio 3 reda CSV podataka (uključujući quoted polja sa zarezom)
179+
- Callback funkcije za polja i kraj reda su pozvane odgovarajući broj puta
180+
- Program je završio bez greške, što potvrđuje da osnovna integracija funkcioniše
192181

193182
---
194183

@@ -197,7 +186,6 @@ Integration test passed!
197186
Pokretanje gcov alata:
198187

199188
`gcov -b -c integration-libcsv.gcno`
200-
`gcov -b -c integration-test_csv_integration.gcno`
201189

202190
### 5.1 Rezultati za libcsv.c:
203191

@@ -206,35 +194,6 @@ Branches executed:39.56% of 321
206194
Taken at least once:22.43% of 321
207195
Calls executed:17.95% of 39
208196

209-
### 5.2 Analiza pokrivenosti
210-
211-
Line coverage - 78.5%
212-
Većina linija parsera je izvršena, neizvršene linije odnose se na obradu grešaka.
213-
214-
Branch coverage - 66.7%
215-
Sve grane su analizirane, ali nisu sve izvršene u pozitivnim test slučajevima.
216-
217-
Call coverage - 81.8%
218-
Većina funkcija je pozvana, osim onih u granama za greške.
219-
220-
### 5.3 Rezultati za test_csv_integratrion.c:
221-
222-
Lines executed:68.29% of 41
223-
Branches executed:100.00% of 16
224-
Taken at least once:62.50% of 16
225-
Calls executed:50.00% of 22
226-
227-
### 5.2 Analiza pokrivenosti
228-
229-
Line coverage - 81.82%
230-
- Većina linija koda je izvršena tokom integracionog testa. Neizvršene linije se odnose na obradu grešaka i izuzetaka (NULL polja, neuspeh inicijalizacije parsera).
231-
232-
Branch coverage - 75%
233-
- Sve grane su analizirane, ali nisu sve izvršene u pozitivnim scenarijima; grane koje vode do grešaka nisu aktivirane.
234-
235-
Call coverage - 85%
236-
- Većina funkcija je pozvana tokom testa, osim funkcija koje se koriste za greške ili retke edge case situacije.
237-
238197
Zaključak:
239198
- Integracioni test uspešno pokriva osnovni tok CSV parsiranja, uključujući multiple redove i quoted polja, ali za potpunu pokrivenost potrebno je dodati testove za negativne i ekstremne ulaze.
240199

@@ -275,25 +234,21 @@ Integracioni testovi ne pokrivaju:
275234

276235
Clang-Tidy je statički analizator koda za C/C++ projekte koji detektuje moguće runtime greške, probleme sa pokazivačima, potencijalne null dereference, kao i druge sigurnosne i stilističke probleme. Cilj korišćenja Clang-Tidy u ovom projektu bio je da se:
277236

278-
- Otkrivaju runtime problemi i potencijalne null pointer dereference pre izvršavanja koda.
279-
- Poboljša stabilnost i sigurnost biblioteke `libcsv`.
280-
- Identifikuju problematični delovi koda vezani za upravljanje memorijom i kontrolu toka programa.
281-
- Olakša refaktorisanje i održavanje koda.
282-
283-
Analiza pomaže programerima da pravovremeno otkriju i isprave kritične greške, smanjujući rizik od runtime crash-eva i nepredviđenog ponašanja programa.
237+
- Otkrivaju runtime problemi i potencijalne null pointer dereference pre izvršavanja koda
238+
- Poboljša stabilnost i sigurnost biblioteke `libcsv`
239+
- Identifikuju problematični delovi koda vezani za upravljanje memorijom i kontrolu toka programa
240+
- Olakša refaktorisanje i održavanje koda
284241

285242
---
286243

287244
## 2. Objašnjenje korišćenih opcija
288245

289246
| Opcija | Opis |
290247
|--------|------|
291-
| `clang-tidy libcsv.c csv.h` | Pokreće analizu na fajlovima `libcsv.c` i `csv.h`. |
292-
| `--` | Separator između Clang-Tidy opcija i opcija kompajlera. |
293-
| `-I.` | Uključuje trenutni direktorijum kao putanju za header fajlove (include path). |
294-
| `> clang_tidy_results/clang_tidy.txt` | Preusmerava kompletan izlaz analize u fajl unutar direktorijuma za rezultate. |
295-
296-
Ove opcije omogućavaju detaljnu statičku analizu ključnih fajlova projekta sa fokusom na sigurnost i runtime greške.
248+
| `clang-tidy libcsv.c csv.h` | Pokreće analizu na fajlovima `libcsv.c` i `csv.h` |
249+
| `--` | Separator između Clang-Tidy opcija i opcija kompajlera |
250+
| `-I.` | Uključuje trenutni direktorijum kao putanju za header fajlove (include path) |
251+
| `> clang_tidy_results/clang_tidy.txt` | Preusmerava kompletan izlaz analize u fajl unutar direktorijuma za rezultate |
297252

298253
---
299254

@@ -317,12 +272,12 @@ Ove opcije omogućavaju detaljnu statičku analizu ključnih fajlova projekta sa
317272

318273
Analiza sa Clang-Tidy pokazuje da kod projekta:
319274

320-
- Sadrži upozorenja koja ukazuju na potencijalne null pointer dereference, što može izazvati runtime greške.
321-
- Većina upozorenja se odnosi na neophodnost dodatnih provera validnosti pokazivača i sigurnije upravljanje memorijom.
322-
- Refaktorisanje i implementacija dodatnih provera može značajno poboljšati stabilnost biblioteke `libcsv`.
323-
- Preporučuje se kombinovanje statičke analize sa unit testovima kako bi se osigurala potpuna pokrivenost i kvalitet koda.
275+
- Sadrži upozorenja koja ukazuju na potencijalne null pointer dereference, što može izazvati runtime greške
276+
- Većina upozorenja se odnosi na neophodnost dodatnih provera validnosti pokazivača i sigurnije upravljanje memorijom
277+
- Refaktorisanje i implementacija dodatnih provera može značajno poboljšati stabilnost biblioteke `libcsv`
278+
- Preporučuje se kombinovanje statičke analize sa unit testovima kako bi se osigurala potpuna pokrivenost i kvalitet koda
324279

325-
Rezultati analize su sačuvani u tekstualnom fajlu i mogu se dalje procesirati za generisanje PDF ili HTML izveštaja.
280+
Rezultati analize su sačuvani u tekstualnom fajlu i mogu se dalje procesirati za generisanje PDF ili HTML izveštaja
326281

327282
# Dinamička analiza – AddressSanitizer (ASan)
328283

@@ -336,11 +291,11 @@ Kompilacija je izvršena sledećom komandom:
336291

337292
| Opcija | Opis |
338293
|--------|------|
339-
| `-fsanitize=address` | Aktivira AddressSanitizer (ASan) za detekciju memorijskih grešaka tokom izvršavanja programa (heap/stack overflow, use-after-free, double free, invalid read/write). |
340-
| `-g` | Dodaje debug simbole u izvršni fajl, omogućavajući precizne izveštaje sa linijama koda kada ASan detektuje grešku. |
341-
| `test_csv_unit.c` | Test program koji pokreće različite test scenarije biblioteke libcsv. |
342-
| `libcsv.c` | Izvorni kod biblioteke koja se analizira. |
343-
| `-o test` | Naziv generisanog izvršnog fajla. |
294+
| `-fsanitize=address` | Aktivira AddressSanitizer (ASan) za detekciju memorijskih grešaka tokom izvršavanja programa (heap/stack overflow, use-after-free, double free, invalid read/write) |
295+
| `-g` | Dodaje debug simbole u izvršni fajl, omogućavajući precizne izveštaje sa linijama koda kada ASan detektuje grešku |
296+
| `test_csv_unit.c` | Test program koji pokreće različite test scenarije biblioteke libcsv |
297+
| `libcsv.c` | Izvorni kod biblioteke koja se analizira |
298+
| `-o test` | Naziv generisanog izvršnog fajla |
344299

345300
## Test 1 - Dugačko polje (realloc stres test)
346301

@@ -434,15 +389,15 @@ Na osnovu sprovedenih testova može se zaključiti:
434389
- Dinamičko upravljanje memorijom funkcioniše stabilno u testiranim scenarijima
435390
- Biblioteka pokazuje otpornost na granične i nekorektne ulaze
436391

437-
# Libcsv Valgrind Memcheck test
392+
# Valgrind Memcheck test
438393

439394
Ovaj izveštaj dokumentuje testiranje `libcsv` parsera korišćenjem **Valgrind Memcheck** alata.
440395

441396
Cilj:
442-
- Otkrivanje curenja memorije (memory leaks) – da li postoji memorija koja je alocirana, ali nije oslobođena
397+
- Otkrivanje curenja memorije - da li postoji memorija koja je alocirana, ali nije oslobođena
443398
- Detekcija neinicijalizovanih promenljivih koje se koriste prilikom izvršavanja programa
444-
- Pronalaženje pristupa van dodeljenog opsega memorije (out-of-bounds read/write).
445-
- Provera ispravnog oslobađanja memorije kod dinamički alociranih resursa u programu.
399+
- Pronalaženje pristupa van dodeljenog opsega memorije
400+
- Provera ispravnog oslobađanja memorije kod dinamički alociranih resursa u programu
446401

447402
---
448403

@@ -454,7 +409,7 @@ Cilj:
454409

455410
Opcija | Opis |
456411
|--------|------|
457-
| `-g` | Dodaje debug simbole u izvršni fajl, omogućavajući precizne izveštaje sa linijama koda kada ASan detektuje grešku. |
412+
| `-g` | Dodaje debug simbole u izvršni fajl, omogućavajući precizne izveštaje sa linijama koda kada ASan detektuje grešku |
458413

459414

460415

@@ -466,17 +421,17 @@ Cilj:
466421

467422
Opcija | Opis |
468423
|--------|------|
469-
| `--leak-check=full` | Detektuje sve curenje memorije i prikazuje detaljne informacije o alokacijama koje nisu oslobođene. |
470-
| `--show-leak-kinds=all` | Prikazuje sve tipove curenja memorije: definite, indirect i possible leaks. |
471-
| `--error-exitcode=1` | Postavlja izlazni kod programa na 1 ako Valgrind detektuje bilo kakvu grešku u memoriji. |
424+
| `--leak-check=full` | Detektuje sve curenje memorije i prikazuje detaljne informacije o alokacijama koje nisu oslobođene |
425+
| `--show-leak-kinds=all` | Prikazuje sve tipove curenja memorije: definite, indirect i possible leaks |
426+
| `--error-exitcode=1` | Postavlja izlazni kod programa na 1 ako Valgrind detektuje bilo kakvu grešku u memoriji |
472427

473428

474429
## 3. Modifikacije u testu za Valgrind
475430

476431
Za Valgrind je test modifikovan da:
477-
- Ne ispisuje ogromna polja (long field test) kako izlaz ne bi bio nečitljiv.
478-
- Fuzz test radi u utišanom režimu (verbose = 0).
479-
- Ostale test sekcije ostaju iste (nezatvoreni navodnici, escaped quotes, embedded NULL).
432+
- Ne ispisuje ogromna polja (long field test) kako izlaz ne bi bio nečitljiv
433+
- Fuzz test radi u utišanom režimu (verbose = 0)
434+
- Ostale test sekcije ostaju iste (nezatvoreni navodnici, escaped quotes, embedded NULL)
480435

481436
## 4. Primer izlaza
482437

@@ -502,10 +457,10 @@ Za Valgrind je test modifikovan da:
502457
# AFL++ (Fuzzing)
503458

504459
## 1. Cilj analize:
505-
- Automatski generisati veliki broj različitih CSV inputa.
506-
- Pronaći potencijalne bugove, crash-eve ili segfault-ove parsera.
460+
- Automatski generisati veliki broj različitih CSV inputa
461+
- Pronaći potencijalne bugove, crash-eve ili segfault-ove parsera
507462
- Testirati robusnost parsera u edge-case situacijama, uključujući: duge stringove, prazna polja, specijalne karaktere i escape sekvence
508-
- Potvrditi stabilnost i sigurnost biblioteke libcsv.
463+
- Potvrditi stabilnost i sigurnost biblioteke libcsv
509464

510465
## 2. Kompilacija i pokretanje AFL++
511466

@@ -515,13 +470,10 @@ Za Valgrind je test modifikovan da:
515470
|--------|------|
516471
| `afl-clang-fast` | LLVM-based instrumentirani kompajler za AFL++ koji omogućava praćenje izvršavanja programa i generisanje fuzz inputa |
517472

518-
`export AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1`
519-
520-
Opis | Onemogućava probleme sa core dump podešavanjima sistema, tako da AFL++ ne promaši kratke procese ili crash-eve |
473+
| `export AFL_I_DONT_CARE_ABOUT_MISSING_CRASHES=1` | Onemogućava probleme sa core dump podešavanjima sistema, tako da AFL++ ne promaši kratke procese ili crash-eve |
521474

522-
`export AFL_SKIP_CPUFREQ=1`
475+
| `export AFL_SKIP_CPUFREQ=1` | Preskače proveru CPU frequency scaling-a i moguće performansne upozorenja |
523476

524-
Opis | Preskače proveru CPU frequency scaling-a i moguće performansne upozorenja |
525477

526478
`afl-fuzz -i seeds -o findings -- ./test_afl @@`
527479

0 commit comments

Comments
 (0)