Semestrální práce

Cílem semestrální práce je ověřit znalosti nabyté v rámci přednášek a cvičení, a umožnit studentům vyzkoušet si práci na větším projektu v Javě. Semestrální práci je možno vykonávat samostatně či ve dvojicích, větší skupiny nejsou dovoleny. Při práci ve dvojici se předpokládá, že rozsah celé práce bude větší než při samostatné práci. Studenti v týmu mohou být z různých paralelek - v tom případě se ale domluví s oběma cvičícími, u kterého z nich budou práci odevzdávat.

Zadání

Téma semestrální práce si můžete určit sami, a pro formalizaci zadání je určen první checkpoint (viz níže); případně si můžete vybrat jedno z předpřipravených témat níže. V tom případě se však očekává, že dané zadání “obohatíte” o vlastní netriviální funkcionalitu. Předpřipravená zadání vám také mohou sloužit jako vodítko pro vlastní téma, abyste stanovili dostatečný rozsah práce. Rozsah bude případně korigován vašim cvičícím v jednotlivých checkpointech.

Nutné požadavky

Nehledě na vybrané téma musí každá odevzdaná práce splňovat následující požadavky:

  1. Semestrální práce bude psána v Javě >=21 (či po domluvě v jiném jazyku nad JVM), a spravována pomocí Mavenu.
  2. Práce bude mít doložitelný progress na GitLab. Průběžně (každou hotovou funkcionalitu s popisem) commitují všichni členové týmu. Pozor: neadekvátně málo commitů (velmi orientačně: méně než 10) obvykle vzbudí u cvičících (oprávněné) podezření na plagiát!
  3. Oba účastníci projektu se musí podílet na tvorbě GUI pomocí platformy JavaFX (jiný framework pouze po dohodě). Alespoň jedna netriviální komponenta bude vytvořena bez použití Scene Builderu či jiného “klikacího nástroje”.
  4. V projektu student předvede schopnost správně použít vlákna (za to se nepovažuje použití např. třídy Timer). Například vytvořením hodin reálného času, které interagují s průběhem hry.
  5. Několik netriviálních tříd bude pokryto unittesty nebo komplexnějším funkčním testem, za použití libovolného testovacího frameworku.
  6. Budou použity loggery. Logovací zprávy bude možno zapnout nebo vypnout parametrem při spuštění, či jinou uživatelskou interakcí (nikoliv editací zdrojového kódu).
  7. Stav aplikace (průběh hry, nastavení apod.) bude možné uložit. Preferovaný je zápis do souboru, je ale možné využít i jiné datové zdroje (např. databáze).
  8. Veškeré netriviální public prvky v programu musí mít smysluplný Javadoc (v kódu, není třeba generovat dokument). Za triviální se považují například jednoduché gettery a settery bez vedlejších efektů.
  9. Všechny netriviální části kódu budou vhodně okomentovány.
  10. Ve Wiki projektu musí být aktuální a použitelný uživatelský manuál (viz příklad v CP3) a technická dokumentace programu - jeho vlastností, struktura projektu, použité technologie podle výše popsaných podmínek. Pozor, nejedná se o Javadoc!
  11. Kód i komentáře v něm jsou psány v angličtině. Uživatelská a technická dokumentace může být psána i česky/slovensky.

V případě nesplnění některého z požadavků bude práce výrazně penalizována či vrácena studentovi k dopracování.

Odevzdání

Průběžná práce a samotné odevzdání semestrálních prací probíhá ve třech “Checkpointech”, a to vždy v GitLab projektu, který vám byl automaticky založen na začátku semestru, a který naleznete na adrese https://gitlab.fel.cvut.cz/B252_B0B36PJV/username - tedy např. https://gitlab.fel.cvut.cz/B252_B0B36PJV/novakjan. Jednotlivé checkpointy zároveň vždy nahrajte i pod patřičný upload do BRUTE.

CP1 - Vize projektu

Termín odevzdání („deadline“): 8.3.2026

Cílem tohoto odevzdání je formalizovat zadání, na kterém budete dále pracovat. Zadání bude odevzdáno ve formě PDF dokumentu (případně wiki stránce ve vašem GitLab projektu) o rozsahu ~2x A4, ve kterém je popsáno kompletní fungování aplikace z pohledu uživatele, a který by měl obsahovat:

  • zvolené téma práce
  • manažerské shrnutí - 1 - 2 odstavce, představující vizi projektu
  • podrobný popis funkcionalit, které bude/nebude práce umět, jako:
    • průběh a cíl hry
    • vlastnosti postavy
    • popis předmětů ve hře, jejich vlastnosti (a případná interakce s nimi)
    • ovládání, způsob načítání a ukládání
    • a další…
  • pro lepší pochopení lze přidat obrázky jako wireframes obrazovek, náčrty herního pole nebo herních map, vizuální návrhy prvků aplikace, apod.

V této fázi byste tedy měli mít podrobně vymyšlený celý projekt, a mělo by stačit se pustit do programování. Pro inspiraci si můžete prohlédnout, jak by měla vypadat správně odevzdaná vize projektu, a jak naopak špatná (vč. komentářů, co je na dokumentu špatně).

Cvičící bude hodnotit podrobnost dokumentu, jeho formu i rozsah celé práce.

CP2 - Objektový návrh

Termín odevzdání („deadline“): 12.4.2026

V rámci druhého checkpointu připravíte ve svém repozitáři (a odevzdáte pod patřičný upload do BRUTE):

  • kostru kódu
    • deklarace tříd, jejich vlastností a metod
    • dědičnost a další vazby mezi třídami
  • základní technickou dokumentaci
    • zjednodušený diagram tříd a vztahů mezi nimi
    • popis stavů hry/aplikace
    • použité technologie, knihovny, apod.
  • rozdělení práce mezi členy týmu (pokud pracujete ve dvojici)

Po tomto odevzdání by se základní struktura kódu neměla výrazně lišit, a mělo by stačit pouze doimplementovat předpřipravené třídy.

CP3 - Finální prezentace

Termín odevzdání („deadline“): 22.5.2026

Poslední checkpoint je zaměřen nejen na dokončení celého projektu dle zadání z CP1, ale i finální prezentaci, jejíž formu vám sdělí cvičící na hodině.

Součástí odevzdání je i uživatelská dokumentace, která může být formou uživatelského manuálu, a která zahrnuje všechny podstatné aspekty aplikace (včetně jejího spuštění!). Inspirací vám může být například tato příručka pro hru FlatOut UC.

Dokončena by měla být i technická dokumentace, obohacena o dokumentaci ve formátu JavaDoc (není třeba generovat HTML formu!). Pokud bude použita komunikace po síti, doporučuje se specifikovat komunikační protokol - tedy jaká data a v jakém formátu se budou mezi serverem a klientem posílat.

Kompletní práce se odevzdává během dvou posledních týdnů semestru. V případě dvojic se oba členové týmu musí zúčastnit odevzdání společně, a oba musí rozumět a být schopni odpovědět na otázky ohledně všech částí kódu (tedy nejen svých).

Jiný termín odevzdání je možný pouze ve výjimečných případech (nemoc, apod.) a po předchozí domluvě s cvičícím minimálně týden před oficiálním deadlinem!

Hodnocení

Za semestrální práci vám může být uděleno maximálně 45 bodů; minimálně však musíte získat:

  • 20 bodů z celé práce;
  • 15 bodů z finálního hodnocení (CP3);
  • alespoň jeden bod z každé položky níže.

Práce jsou hodnoceny dle následující tabulky:

PoložkaMax bodůPoznámka
CP1Vize projektu 5 5b = jasně a podrobně popsaná vize projektu
4–3b = mírné nejasnosti v částech popisu
2–1b = výrazné nejasnosti v částech popisu či chybějící popis mechanik
0b = příliš obecný popis, chybějící odevzdání
CP2Objektový návrh 7 7b = jasný a podrobný objektový návrh
6–4b = mírné nejasnosti/chyby v částech návrhu
3–1b = výrazné nejasnosti/chyby v částech návrhu či chybějící vlastnosti/vazby
0b = návrh bez vlastností/vazeb, chybějící odevzdání
CP3Rozsah implementace 10 Plný počet za implementaci všech funkcí uvedených v zadání
až -2b za každou chybějící či nefunkční funkcionalitu
Kvalita kódu10 Plný počet za vhodně navržený datový model, minimum duplicitního kódu a snadnou rozšířitelnost
až -4b za nevhodnou strukturu tříd a metod
až -3b za neduhy v datovém modelu
až -3b za nečitelnost kódu (příliš dlouhé metody, jména proměnných apod.)
Funkčnost 5 Plný počet za korektní chování programu v běžných i hraničních případech
-2b za každý neošetřený “edge-case”, spadnutí programu apod.
Dokumentace 5 až 2.5b za uživatelskou dokumentaci (instalace, návod k použití apod.)
až 2.5b za technickou dokumentaci (diagramy, popis architektury, JavaDoc v kódu)
Správné použití GITu 3 3–2b = vhodné používání větví, merge requestů, issues apod.
1b = základní práce s GITem (řádná velikost/pravidelnost commitů)
0b = neprokazatelná historie (moc málo/moc velké commity)
Celkem bodů45

Pozdní odevzdání každého z “checkpointů” je penalizováno 1b za každých započatých 72h.

courses/b0b36pjv/semestral/start.txt · Last modified: 2026/02/14 20:28 by jarymiro