|
1 |
| -# 2024_Analysis_Mini-Student-Management-System |
| 1 | +# Seminarski rad iz kursa: Verifikacija Softvera |
| 2 | + |
| 3 | +## Opis projekta |
| 4 | + |
| 5 | +Projekat koji je analiziran u okviru ovog seminarskog rada je: |
| 6 | +**Mini Student Management System (MSMS)** |
| 7 | + |
| 8 | +Ovaj projekat pruža osnovne funkcionalnosti za upravljanje akademskim podacima, kao što su: |
| 9 | +- Kreiranje i uređivanje predmeta. |
| 10 | +- Evidencija prisustva studenata. |
| 11 | +- Upravljanje profesorima i studentima. |
| 12 | +- Izvoz podataka u CSV format. |
| 13 | + |
| 14 | +Projekat je preuzet sa sledećeg GitHub repozitorijuma: |
| 15 | +[Mini Student Management System - GitHub Repozitorijum](https://github.com/quyenjd/Mini-Student-Management-System.git) |
| 16 | + |
| 17 | +**Analizirana grana:** `master` |
| 18 | +**Heš kod commit-a:** `[a5178934b6fa6e9bd3263ce7b18999209b3a6423]` |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## Priprema projekta za analizu na Linux sistemu |
| 23 | + |
| 24 | +S obzirom da je originalni projekat razvijen za Windows operativni sistem, potrebno je izvršiti određene izmene kako bi se uspešno kompajlirao i pokrenuo na Linux sistemu. |
| 25 | + |
| 26 | +Pre pokretanja alata za analizu, potrebno je primeniti sve izmene koje su sačuvane u fajlu `custom.patch`. |
| 27 | +Ovaj fajl sadrži: |
| 28 | +- Izmene u originalnom kodu kako bi bio kompatibilan sa Linux okruženjem. |
| 29 | +- Dodatni `Makefile` koji omogućava kompilaciju projekta na Linuxu. |
| 30 | + |
| 31 | +#### Primena `custom.patch`: |
| 32 | +```bash |
| 33 | +cd Mini-Student-Management-System |
| 34 | +git apply ../custom.patch |
| 35 | +``` |
| 36 | + |
| 37 | + |
| 38 | +## Korišćeni alati za analizu |
| 39 | + |
| 40 | +U analizi ovog projekta korišćeni su sledeći alati: |
| 41 | + |
| 42 | +1. **Jedinični testovi i LCOV (Pokrivenost koda)** |
| 43 | + - Jedinični testovi su napisani koristeći `Catch2` biblioteku. |
| 44 | + - Testovi su implementirani sa ciljem provere funkcionalnosti ključnih komponenti sistema (npr. `scoreboard.cpp`, `interface.cpp`, itd.). |
| 45 | + - **LCOV alat** je korišćen za generisanje izveštaja o pokrivenosti koda na osnovu izvršenih jediničnih testova. |
| 46 | + - Generisani su HTML izveštaji koji pokazuju koji delovi koda su pokriveni testovima. |
| 47 | + - Preduslov za pokretanje: |
| 48 | + ```bash |
| 49 | + sudo apt install lcov |
| 50 | + cd unit_tests |
| 51 | + chmod +x run_tests_with_coverage.sh |
| 52 | + ``` |
| 53 | + - Komanda za pokretanje: |
| 54 | + ```bash |
| 55 | + ./run_tests_with_coverage.sh |
| 56 | + ``` |
| 57 | +2. **Clang-Tidy (Statička analiza)** |
| 58 | + - Korišćen za identifikaciju potencijalnih problema u kodu, kao što su neinicijalizovane promenljive, nepravilan način oslobađanja memorije i generalne greške u pisanju C++ koda. |
| 59 | + - Pokretanje alata i generisanje izveštaja izvršeno je putem pripremljene `run_clang.sh` skripte. |
| 60 | + - Preduslov za pokretanje: |
| 61 | + ```bash |
| 62 | + sudo apt install clang-tidy |
| 63 | + cd clang |
| 64 | + chmod +x run_clang_tidy.sh |
| 65 | + ``` |
| 66 | + - Komanda za pokretanje: |
| 67 | + ```bash |
| 68 | + ./run_clang_tidy.sh |
| 69 | + ``` |
| 70 | + |
| 71 | +#**Napomena:** Pre pokretanja Valgrind alata (Memcheck i Callgrind) neophodno je prevesti program. |
| 72 | + |
| 73 | +Program se prevodi korišćenjem `Makefile` komandom u sabmodulu Mini-Student-Management-System: |
| 74 | + |
| 75 | +```bash |
| 76 | +cd Mini-Student-Management-System |
| 77 | +make |
| 78 | +``` |
| 79 | + |
| 80 | + |
| 81 | +3. **Valgrind - Memcheck (Dinamička analiza)** |
| 82 | + - Korišćen za detekciju curenja memorije i nepravilnog upravljanja memorijskim resursima. |
| 83 | + - Generisani izveštaj sadrži informacije o `HEAP Summary`, `LEAK Summary` i detektovanim greškama. |
| 84 | + - Pokretanje alata i generisanje izveštaja izvršeno je putem pripremljene `run_memcheck.sh` skripte. |
| 85 | + - Preduslov za pokretanje: |
| 86 | + ```bash |
| 87 | + |
| 88 | + sudo apt install valgrind |
| 89 | + cd valgrind/memcheck |
| 90 | + chmod +x run_memcheck.sh |
| 91 | + ``` |
| 92 | + - Komanda za pokretanje: |
| 93 | + ```bash |
| 94 | + ./run_memcheck.sh |
| 95 | + ``` |
| 96 | + |
| 97 | +4. **Valgrind - Callgrind (Analiza performansi)** |
| 98 | + - Korišćen za profilisanje aplikacije i identifikaciju najintenzivnijih delova koda. |
| 99 | + - Rezultati su analizirani pomoću `callgrind_annotate` alata, a vizualizacija je urađena sa `KCachegrind`. |
| 100 | + - Pokretanje alata i generisanje izveštaja izvršeno je putem pripremljene `run_callgrind.sh` skripte. |
| 101 | + - Preduslov za pokretanje: |
| 102 | + ```bash |
| 103 | + sudo apt install valgrind |
| 104 | + sudo apt-get install kcachegrind |
| 105 | + cd valgrind/callgrind |
| 106 | + chmod +x run_callgrind.sh |
| 107 | + ``` |
| 108 | + - Komanda za pokretanje: |
| 109 | + ```bash |
| 110 | + ./run_callgrind.sh |
| 111 | + ``` |
| 112 | + |
| 113 | + |
| 114 | +--- |
| 115 | + |
| 116 | +## Zaključci |
| 117 | + |
| 118 | +Na osnovu analize izvršene ovim alatima, identifikovani su sledeći problemi i predložena su sledeća poboljšanja: |
| 119 | + |
| 120 | +- **Statička analiza (Clang-Tidy):** |
| 121 | + - Detektovane su greške u alokaciji i oslobađanju memorije, korišćenju neinicijalizovanih promenljivih i nepravilnom korišćenju pokazivača. |
| 122 | + - Preporučena je zamena `delete` sa `delete[]` gde je to neophodno i primena pametnih pokazivača za bolje upravljanje memorijom. |
| 123 | + |
| 124 | +- **Dinamička analiza (Memcheck):** |
| 125 | + - Utvrđeno je ozbiljno curenje memorije, pri čemu su najveći deo memorije `Definitely lost` i `Indirectly lost`. |
| 126 | + - Preporučeno je pravilno oslobađanje svih alociranih resursa i implementacija pametnih pokazivača. |
| 127 | + |
| 128 | +- **Analiza performansi (Callgrind):** |
| 129 | + - Identifikovane su funkcije koje najviše utiču na performanse aplikacije, posebno one koje se nalaze u `csv.h` biblioteci. |
| 130 | + - Predložene su optimizacije kao što su smanjenje poziva na `malloc()` i optimizacija operacija poređenja. |
| 131 | +
|
| 132 | +- **Pokrivenost koda (LCOV):** |
| 133 | + - Pokrivenost koda testovima je proverena i prikazana u generisanim HTML izveštajima. |
| 134 | +
|
| 135 | +--- |
| 136 | +## Autor |
| 137 | +**Nikola Stojanović** *1024/2024* |
0 commit comments