Sreda 20. 11.

U sredu neće biti časova:

GMail

Ako pišete na fakultetske adrese sa svojih ličnih gmail adresa, računajte da vam odgovori verovatno neće biti isporučeni jer GMail često odbija poruke sa MATF servera poincare.

Alati za razvoj softvera

Nalozi na studentskom servisu alas

Proverite da su vam nalozi na servisu alas ispravni:

Snimci predavanja

Snimci predavanja ranijih godina:
Čas 1:Uvod u kurs, GCC, BASH, Vim (nije sniman)
Fakultativno: Crazy code, crazy coders (W. E. Brown)
Čas 2:Uvod u Git
Čas 3:Git - nastavak
Čas 4:Git From the Bits Up (T. Berglund)
Čas 5:GDB
Nije potrebno sve pamtiti iz narednih predavanja o integraciji GDB-a i Python-a, ali je potrebno okvirno znati šta je moguće:
Python integration with GDB
GDB User Defined Commands - Part 1
GDB User Defined Commands - Part 2
GDB User Defined Commands - Part 3
Čas 6:Git i GitLab
Čas 7:Paketi
Čas 8:Sanitajzeri
Čas 9:LCov, Hotspot, Git hooks, ...

Asistenti

Pragovi

Prag na ispitu je 30 poena, a na projektu je 15.

Ispit

Primer zadataka kakve možete očekivati na ispitu vidite ovde.

Napomena: Na ispitu pakete koji vam zatrebaju za zadatak ćete moći da instališete preko konana. Za ovaj primer iznad koristite normalan paket menadžer koji imate na sistemu (apt, yum...).

Projekti

Projekti se rade u timu, ali se ocenjuju pojedinačno -- svakome se boduju oni zadaci koje je uradio/la. Maksimalan broj poena koji je putem projekta moguće osvojiti je 30. Ocenjuje se primena alata koji se obrađuju na predavanjima i vežbama, ali i drugih alata koje ste koristili.

Rok za predaju projekata

Projekte će biti moguće predavati u svkom ispitnom roku preko narednog linka:

Biće naknadno postavljeno

Poslednji dan za predaju projekta za svaki ispitni rok je termin ispita.

Studenti koji su prethodne godine radili projekat, neka se prijave preko istog ovog formulara i neka stave "od prethodne godine, XX poena" umesto linka ka kanban tabli (zamenite XX brojem poena koji ste imali na projektu).

Rezultati će biti objavljivani zajedno sa rezultatima ispita.

Informacije o izradi projekata

Možete da radite sledeće:

Zadaci

Na ličnom GitLab nalogu napraviti projekat koji će se zvati azrs-tracking i u njemu napraviti kanban tablu i kartice za svaki od zadataka koje planirate da uradite. Ovde ćete voditi evidenciju o progresu zadatka i opisivati način upotrebe alata koji su u tom zadatku korišćeni.

Dakle, napravite kanban kartice za svaki zadatak, i dok radite na zadatku dodajete komentare u samoj kartici šta ste i kako uradili. Dodajte i snike ekrana alata tokom upotrebe.

Dodatak: Na svaki zadatak stavite tag na koji se alat odnosi. Tagovi treba da budu napisani malim slovima, reči unutar taga razdvojene crticama. Na primer, za Git, tag bi bio git, za Clang Format bi bio clang-format, i slično.

Bitno: Svrha alata je da unaprede kvalitet nekog softvera. Tako da, kad alatom detektujete neki problem i napravite izmene nad izvornim kodom projekta nad kojim ste primenili alat, pošaljite merge zahtev, i link ka zahtevu takođe dodate kao komentar na kartici.

Sam repozitorijum azrs-tracking ne mora da sadrži ništa, -- kod projekta držite u repozitorijumu u kom radite, a izveštaji su unutar kanban tabele. Otvarate repozitorijum da biste mogli da napravite kanban tablu.

U svakom ispitnom roku će biti objavljivan formular preko kog predajete završen projekat (link ka kanban tabeli).

Git (tag git)
Koristiti neki poznati model grananja, pisati uredne commit poruke, koristiti merge zahteve prilikom pravljenja izmena na projektu.
GDB (tag gdb)
Koristiti dibager prilikom nalaženja neke greške u projektu na kome radite i ispraviti tu grešku.
GDB (tag gdb-command)
Napraviti neku korisnu komandu za GDB (Python dodatak).
CI (tag ci)
Osmisliti i implementirati nekoliko neuobičajenih CI zadataka koji će se izvršavati kad god se nova revizija koda pošalje na server.
git hook (tag git-hook)
Osmisliti i implementirati bar 3 neuobičajena git hook-a.
CMake (tag cmake)
Napraviti ili unaprediti CMakeLists.txt za projekat (ako je drugi član tima napravio CMakeLists.txt, dodajte neke novine u isti).
Valgrind (tag valgrind)
istražiti funkcije koje troše više vremena nego što bi trebalo i rešiti problem.
Gammaray (tag gammaray)
U slučaju da projekat koristi Qt, ispitati aplikaciju -- korisnički interfejs i da li ima problema u istom.
ClangTidy (tag clang-tidy)
Automatski refaktorisati kod izabranim clang-tody proverama. Objasniti zbog čega ste uključili baš te provere.
ClangFormat (tag clang-format)
Napraviti svoj format zasnovan na nekom već postojećem. Obezbediti da je ceo projekat formatiran tim stilom.
Statička analiza koda (tagovi cppcheck, clang-tidy, clazy, clang-analyzer)
Preko nekog od alata za statičku analizu koda naći 2-3 problema u projektu na kome radite. Ispravite problem i pošaljite zakrpu putem merge zahteva.
Docker (tag docker)
Pripremiti aplikaciju da se može pokrenuti kao Docker kontejner (dokerizovati). Bonus: kombinovati sa CI.
GCov (tag gcov)
Generisati coverage izveštaj za projekat.
Ostali alati
Na projektima će biti uračunato i ako ste isprobali i dokumentovali upotrebu i nekih alata koji nisu predavani na kursu.

Završetak projekata

  • pre predaje projekata, proverite sva pravila vezana za projekte na ovoj stranici;
  • mnogi pogrešno pokreću clang-tidy (bez kompilacione baze, bez skripte run-clang-tidy) i dobijaju greške da, na primer, <vector> ili QObject ne postoje iz čega nekako zaključe da clang-tidy nema zamerke na ljihov kod;
  • izvorni kod ne treba da se nalazi u repozitorijumu azrs-tracking, projekat na kome radite ima svoj repozitorijum;
  • ako ostavljate linkove ka tuđim izmenama, navedite autora i objasnite zašto ostavljate linkove ka tuđim izmenama;
  • ako ostavljate linkove ka izmenama, te izmene traba da budu vezane za taj konkretan zadatak;
  • sam snimak ekrana da ste pokrenuli neki alat ne govori ništa o tome kako ste ga koristili;
  • ako posle upotrebe nekog alata niste zbog rezultata koje ste dobili izmenili kod (i postavili link ka tim izmenama), ili bar nešto konkretno zaključili o svom projektu (što ste detaljno opisali), probajte ponovo;
  • Git repozitorijum projekta ne treba da sadrži proizvode kompilacije, html fajlove koje generišu razni alati (gcov, clang-analyzer)... Ako želite da ih postavite negde, njih još i možete da postavite u repozitorijum azrs-tracking.