Ime i prezime: Nikolina Lazarević
Naziv: GitStat
Opis: Desktop GUI aplikacija za Git koja omogućava rad sa više repozitorijuma istovremeno.
Izvorni kod: GitStat – GitLab repo
Analizirana grana: main
Commit hash: f20ddedfb456496b8bf7485b7ab9dd17be18d044
| Alat | Namena |
|---|---|
| Clang-Tidy | Statička analiza i automatska korekcija stilskih i performansnih problema |
| Cppcheck | Statička analiza za detekciju potencijalnih grešaka i stilskih nepravilnosti |
| Valgrind Memcheck | Dinamička analiza memorije — otkrivanje curenja i neinicijalizovanih promenljivih |
| Valgrind Callgrind | Profilisanje performansi i analiza potrošnje procesorskog vremena |
| Doxygen | Generisanje tehničke dokumentacije iz komentara u kodu |
| CBMC | Formalna verifikacija i simbolička analiza C/C++ koda |
Za pokretanje svih analiza neophodno je instalirati sledeće komponente:
CMake >= 3.16Qt6Clang-TidyValgrind(sa alatima Memcheck i Callgrind)DoxygenCppcheck(verzija 2.12 ili novija)Python3i bibliotekaPygments(za HTML izveštaj Cppcheck-a)
Inicijalizacija git submodule-a:
git submodule update --init --recursiveClang-Tidy analiza:
cd 2023_Analysis_13-Git-stat/clang-tidy
./run_clang_tidy.shValgrind Memcheck analiza:
cd 2023_Analysis_13-Git-stat/valgrind-memcheck
./run_memcheck.shValgrind Callgrind analiza:
cd 2023_Analysis_13-Git-stat/valgrind-callgrind
./run_callgrind.shDoxygen dokumentacija:
cd 2023_Analysis_13-Git-stat/doxygen
doxygen DoxyfileCppcheck statička analiza
cd 2023_Analysis_13-Git-stat/cppcheck
./run_cppcheck.shCBMC formalna analiza:
cd 2023_Analysis_13-Git-stat/cbmc
./run_cbmc.shDetaljni rezultati i interpretacija se nalaze u odgovarajućim README fajlovima u svakom direktorijumu, kao i u ProjectAnalysisReport fajlu.
Clang-Tidy analiza je identifikovala oblasti za modernizaciju i poboljšanje čitljivosti koda.
Automatske ispravke, poput uklanjanja nepotrebnih kopiranja objekata i dodavanja const kvalifikatora, uspešno su primenjene bez uticaja na funkcionalnost.
Ove izmene su doprinele većem kvalitetu, čitljivosti i održivosti koda.
Cppcheck analiza nije otkrila ozbiljne greške u logici programa niti probleme sa upravljanjem memorijom.
Detektovani su uglavnom manji stilski i strukturni nedostaci:
- razlike u redosledu inicijalizacije članova klasa,
- nekonzistentni nazivi argumenata između deklaracija i definicija,
- redundantne inicijalizacije i neiskorišćene promenljive,
- preporuke za upotrebu prefiks operatora (
++it) i STL algoritama (std::find_if,std::any_of) umesto ručnih petlji.
Ovi rezultati ukazuju da je kod stabilan i konzistentan, uz mogućnost daljeg estetskog i performansnog poboljšanja kroz manje stilske izmene.
Valgrind Memcheck je identifikovao kritičnu grešku tipa Invalid read u okviru Qt widget hijerarhije.
Greška je uspešno rešena implementacijom pravilnog parent-child modela, čime je eliminisano use-after-free ponašanje.
Većina preostalih upozorenja odnosi se na Qt biblioteke i ne predstavlja stvarne greške u korisničkom kodu.
Valgrind Callgrind profilisanje pokazalo je da najveći deo procesorskog vremena zauzimaju Qt event petlje (QApplication::exec(), QEventLoop::exec()), što je tipično za GUI aplikacije.
Korisničke funkcije, poput NetworkResponseParser::parseResponse(), pokazuju dobru efikasnost bez značajnih performansnih uskih grla.
Analiza omogućava precizno usmeravanje budućih optimizacija na najrelevantnije delove aplikacije.
Doxygen analiza je pokazala da originalni kod nije sadržao dovoljno komentara za automatsko generisanje dokumentacije.
Dodavanjem Doxygen komentara za ključne klase (Repo, Author, Commit) demonstriran je potencijal alata za generisanje strukturisane dokumentacije.
Ovo značajno olakšava održavanje i budući razvoj projekta.
CBMC (C Bounded Model Checker) je korišćen za formalnu proveru funkcije commitFromQJsonToClass, koja konvertuje JSON objekte u Commit strukture. Pošto CBMC nije kompatibilan sa Qt bibliotekama (QString, QJsonObject, QDateTime, itd.), izrađene su mock implementacije ovih tipova, čime je omogućeno simboličko izvršavanje funkcije.
Analiza je otkrila potencijalne probleme:
-
dereferenciranje null vrednosti
-
pristup neinicijalizovanim podacima u QString objektima
-
mogućnost da neka JSON polja (id, author.email, title) budu null
Projekat GitStat predstavlja stabilnu i funkcionalno ispravnu aplikaciju sa dobro osmišljenom arhitekturom.
Rezultati kombinovane statičke i dinamičke analize pokazuju da:
- nema ozbiljnih grešaka ni curenja memorije,
- performanse su u skladu sa očekivanjima za Qt GUI aplikacije,
- formalna verifikacija je otkrila granične slučajeve sa neinicijalizovanim podacima,
- stil koda i dokumentacija mogu se dodatno unaprediti.