You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
-
96
85
---
97
86
98
87
## 6. Procena kvaliteta testova
@@ -115,10 +104,10 @@ Testovi ne pokrivaju:
115
104
116
105
## 7. Zaključak
117
106
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
122
111
123
112
---
124
113
@@ -186,9 +175,9 @@ Integration test passed!
186
175
187
176
### 4.1 Tumačenje rezultata:
188
177
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
@@ -206,35 +194,6 @@ Branches executed:39.56% of 321
206
194
Taken at least once:22.43% of 321
207
195
Calls executed:17.95% of 39
208
196
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
-
238
197
Zaključak:
239
198
- 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.
240
199
@@ -275,25 +234,21 @@ Integracioni testovi ne pokrivaju:
275
234
276
235
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:
277
236
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
284
241
285
242
---
286
243
287
244
## 2. Objašnjenje korišćenih opcija
288
245
289
246
| Opcija | Opis |
290
247
|--------|------|
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 |
297
252
298
253
---
299
254
@@ -317,12 +272,12 @@ Ove opcije omogućavaju detaljnu statičku analizu ključnih fajlova projekta sa
317
272
318
273
Analiza sa Clang-Tidy pokazuje da kod projekta:
319
274
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
324
279
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
326
281
327
282
# Dinamička analiza – AddressSanitizer (ASan)
328
283
@@ -336,11 +291,11 @@ Kompilacija je izvršena sledećom komandom:
336
291
337
292
| Opcija | Opis |
338
293
|--------|------|
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 |
344
299
345
300
## Test 1 - Dugačko polje (realloc stres test)
346
301
@@ -434,15 +389,15 @@ Na osnovu sprovedenih testova može se zaključiti:
434
389
- Dinamičko upravljanje memorijom funkcioniše stabilno u testiranim scenarijima
435
390
- Biblioteka pokazuje otpornost na granične i nekorektne ulaze
436
391
437
-
# Libcsv Valgrind Memcheck test
392
+
# Valgrind Memcheck test
438
393
439
394
Ovaj izveštaj dokumentuje testiranje `libcsv` parsera korišćenjem **Valgrind Memcheck** alata.
440
395
441
396
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
443
398
- 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
446
401
447
402
---
448
403
@@ -454,7 +409,7 @@ Cilj:
454
409
455
410
Opcija | Opis |
456
411
|--------|------|
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 |
458
413
459
414
460
415
@@ -466,17 +421,17 @@ Cilj:
466
421
467
422
Opcija | Opis |
468
423
|--------|------|
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 |
472
427
473
428
474
429
## 3. Modifikacije u testu za Valgrind
475
430
476
431
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)
480
435
481
436
## 4. Primer izlaza
482
437
@@ -502,10 +457,10 @@ Za Valgrind je test modifikovan da:
502
457
# AFL++ (Fuzzing)
503
458
504
459
## 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
507
462
- 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
509
464
510
465
## 2. Kompilacija i pokretanje AFL++
511
466
@@ -515,13 +470,10 @@ Za Valgrind je test modifikovan da:
515
470
|--------|------|
516
471
|`afl-clang-fast`| LLVM-based instrumentirani kompajler za AFL++ koji omogućava praćenje izvršavanja programa i generisanje fuzz inputa |
517
472
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 |
521
474
522
-
`export AFL_SKIP_CPUFREQ=1`
475
+
|`export AFL_SKIP_CPUFREQ=1`| Preskače proveru CPU frequency scaling-a i moguće performansne upozorenja |
523
476
524
-
Opis | Preskače proveru CPU frequency scaling-a i moguće performansne upozorenja |
0 commit comments