Skip to content

Commit 3d2fb8c

Browse files
committed
Prva verzija analize
1 parent 257ef4d commit 3d2fb8c

File tree

117 files changed

+369096
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

117 files changed

+369096
-1
lines changed

.github/workflows/gate.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
name: gate
2+
on: [push, pull_request]
3+
4+
jobs:
5+
gate:
6+
name: Gate
7+
runs-on: ubuntu-latest
8+
steps:
9+
- uses: actions/checkout@master
10+
- run: bash <( wget -qO- https://raw.githubusercontent.com/MATF-Software-Verification/VS-project-ci/main/gate )
11+

.github/workflows/tickets.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
name: tickets
2+
on: [push, issues]
3+
4+
jobs:
5+
tickets:
6+
name: Tickets
7+
runs-on: ubuntu-latest
8+
steps:
9+
- name: Tickets
10+
id: tickets
11+
uses: lee-dohm/select-matching-issues@v1
12+
with:
13+
format: raw
14+
query: 'is:open'
15+
token: ${{ github.token }}
16+
- name: Report issues
17+
run: |
18+
echo "=== Open issues ==="
19+
grep 'http' ${{ steps.tickets.outputs.path }} && exit 1 || exit 0
20+

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "Mini-Student-Management-System"]
2+
path = Mini-Student-Management-System
3+
url = https://github.com/quyenjd/Mini-Student-Management-System.git

Mini-Student-Management-System

ProjectAnalysisReport.pdf

373 KB
Binary file not shown.

README.md

Lines changed: 137 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,137 @@
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

Comments
 (0)