ÚMIKT FEI STU

Tvorba softvéru v IKT  

TSIKTZimný semester 2018/2019

 

Semestrálne zadanie


Navrhnite a implementujte funkcionalitu pripomienkovača v programovacom jazyku Java. Zadanie môžu riešiť tímy max. 3 Študentov, každý študent ale musí poznať celé riešenie, vedieť vysvetliť každú jeho časť. Pri dvoch študentov očakávam, že jeden bude robit klienta a druhý server, a navzájom si budú robiť aj testerov - časť venovaná testovaniu bude rozsiahlejšia a popis rozhrania medzi klientom a serverom dôkladnejší. Ak je tím zložený z 3 Študentov, tretí študent by sa mal venovať hlavne dokumentácii, a táto teda bude na vyššej obsahovej a rozsahovej úrovni. Pripomienkovač by mal pozostávať z 2 hlavných častí:
  • klientská časť - rozhranie na komunikáciu s užívateľom.
  • serverová časť - program spracúvajúci požiadavky klienta a perzistentne evidujúci informácie.

Je na uvážení študenta ako sa rozhodne danú aplikáciu implementovať, tj. či daná aplikácia bude konzolová resp. bude mať grafické rozhranie, v akom formáte bude posielať dáta medzi klientom a serverom (XML, JSON, ...), či bude server RESTful web service resp. java aplikácia komunikujúca pomocou socketov, TCP/UDP, ... atď. Ak študentovi nevadí strata 3 bodov, je možné riešenie zjednodušiť tak, že klient aj server budú iba rozne triedy v rámci toho istého projektu, stačí, že budú komunikovať pomocou jasne definovanej "interface triedy. Zadanie nemusí byť zrealizované v JAVE, stačí ľubovoľný jazyk s podporou OOP (prostriedky OOP musia byť využité). Napríklad klient môže byť kľudne v bashi (bez využitia OOP) a server v jave (s využitím prostriedkov OOP). Ak bude použitá databáza, musí podporovať SQL a SQL musí byť využité. Systém môže, ale nemusí podporovať paralelné pripojenie viacerých klientov naraz. Komunikácia ani prezistentne ukladané informácie nemusí byť šifrované. Server musí podporovať ukladanie informácií na súborový systém, alebo do databázy (stačí DERBY). Server musí tvoriť logovací súbor z ktorého je jasné, ktorý užívateľ sa kedy prihlásil a čo robil. K systému musí byť navrhnuté (ale nie realizované) ako by sa prevádzka systému mala monitorovať.

Požadovaná minimálna funkcionalita programu:

  • prihlasovanie sa (menom+heslom)
  • multiuser - každý užívateľ pracuje zo svojimi vlastnými pripomienkami
  • zobrazovanie pripomienok
  • pridávanie pripomienok
  • mazanie pripomienok
  • upravovanie (aktualizovanie) pripomienok
  • vyhľadávanie v pripomienkach
Odovzdávanie semestrálneho zadania bude prebiehať na poslednom cvičení z predmetu TST. Zadanie bude musieť pozostávať zo technického popisu riešenia (zhrnutie funkcionality, architektúry riešenia, technické vlastnosti riešenia, škálovateľnosť riešenia, limitácie riešenia, požiadavky na SW/HW, vyjadrenie k licencii riešenia vrátane licencií všetkých využitých častí, špecifikácie rozhraní, diagram tried (stačí vygenerovaný), usecases, vyznačenie, kde sa využili aké návrhové vzory, unit testy a ich výsledky, popis testov výsledného riešenia a ich výsledky), zdrojového kódu aplikácie, vygenerovanej dokumentácie na základe zdrojových kódov, stručnej inštalačnej a užívateľskej príručky. Pri generovaní dokumentácie na základe zdrojových kódov platí, že najzložitejšia trieda v programe musí byť ukážkovo zdokumentovaná (vrátane každej metódy atď.). Pre ostatné triedy stačí popísať účel triedy. Je dôležité aby študent pri odovzdávaní zadania vedel pohotovo reagovať a odpovedať na prípadné otázky cvičiaceho (nie je dôležité zadanie odovzdať, ale aj obhájiť si že ste skutočne jeho autorom). Základné vyhodnotenie funkcionality prebehne priamo na cvičení, detailné vyhodnotenie celého riešenia, vrátane dodávanej dokumentácie bude prebiehať nadalej.

Pomocné programceky k zadaniu sú tu: TU. Aktuálny obsah:

  • od 15.10.2018 - demo klient/server na komunikáciu cez UDP

Ak nejaký študent zostrojí zaujímavú knižnicu / súbor, o ktorej si myslí, že by mohla pomôcť ostatným pri vypracovaní zadania, môže ju ponúknuť tak, že si ju dá schváliť vedúcim cvičení, ktorý ju následne uloží do vyššieuvedeného sdresára. Následne tento kód študenti môžu využiť v zadaní bez toho aby boli kvoli nemu obvinení z toho, že na zadaní "nadštandardne spolupracovali" s kolegami. Vyššie uvedené platí aj pre šablóny + kostry pre sprievodné dokumenty, resp. iné druhy zabalených informácií ktoré by mohli ostatným študentom pomôcť. Táto aktivita má hodnotu 0 až 2 body pri udelovaní bodov za aktivitu na cvičení. Termín ukončenia je 31.12.2018.

ZJEDNODUŠENIA ZADANIA (už zapracované do vyššie uvedeného zadania):

3.12.2018 16:50: Text "mazanie starých pripomienok" v zadaní bol zmenený "mazanie pripomienok", aby si riešiteľ nemyslel, že systém to musí vediet robit automaticky, keď pripomienka zostarne.

3.12.2018 16:44: Doplnený príklad: "Napríklad klient môže byť kľudne v bashi (bez využitia OOP) a server v jave (s využitím prostriedkov OOP)"

3.12.2018 16:00: Zväčšené bodové ohodnotenie a predĺžený termín, na dávanie podporných modulov pre ostatných študentov študentami. Táto aktivita má teraz hodnotu 0 až 2 body pri udelovaní bodov za aktivitu na cvičení. Termín ukončenia je 31.12.2018.

3.12.2018 15:45: Zadanie môžu riešiť tímy max. 3 Študentov, každý študent ale musí poznať celé riešenie, vedieť vysvetliť každú jeho časť. Pri dvoch študentov očakávam, že jeden bude robit klienta a druhý server, a navzájom si budú robiť aj testerov - časť venovaná testovaniu bude rozsiahlejšia a popis rozhrania medzi klientom a serverom dôkladnejší. Ak je tím zložený z 3 Študentov, tretí študent by sa mal venovať hlavne dokumentácii, a táto teda bude na vyššej obsahovej a rozsahovej úrovni.

3.12.2018 14:30: Riešenie je možné zjednodušiť tak, že klient aj server budú iba rozne triedy v rámci toho istého projektu, stačí, že budú komunikovať pomocou jasne definovanej "interface triedy". Celý program sa tým pádom stane dosť reálne nepoužiteľný a s tým súvisí aj strata v hodnote 3 bodov za obmedzenie funkcionality, ak si študent zvolí toto zjednodušenie.

29.11.2018 18:38: K rieseniu musí byť vygenerovaná dokumentácia (javadoc). Pričom najzložitejšia trieda v programe musí byť ukážkovo zdokumentovaná (vrátane každej metódy atď.). Pre ostatné triedy stačí popísať účel triedy.

29.11.2018 18:35: Odstránená požiadavka na prítomnosť "navigačného menu" v klientovi

29.11.2018 18:30: Zadanie nemusí byť zrealizované v JAVE, stačí ľubovoľný jazyk s podporou OOP (prostriedky OOP musia byť využité). Ak bude použitá databáza musí podporovať SQL a SQL musí byť využité.

29.11.2018 14:00: Text zadania: "Server musí podporovať ukladanie informácií na súborový systém aj do databázy (pri odovzdávaní sa overí funkčnosť riešiteľom vybranej možnosti, druhá možnosť stačí, že bola otestovaná a zdokumentovaná riešiteľom)." sa zmenil NA "Server musí podporovať ukladanie informácií na súborový systém, alebo do databázy (stačí DERBY)."

Harmonogram a systém bodovania zadania (vytvorené 3.12.2018 o 14:00):

Funkcionalita (kompletnosť, fungovanie, reagovanie a vysvetlovanie študenta): 18 bodov. Dokumentácia: 8 bodov. Odovzdanie kódu do AIS do 21.12.2018 do 23:00 max 18 bodov. Odovzdanie kódu do AIS do 2.1.2018 do 23:00: max 12 bodov (pokles 0.5 bodu/kalendárny den). Odovzdanie kódu do AIS po 2.1.2018 po 23:00: max 0 bodov. Odovzdanie dokumentácie k programu do AIS do 2.1.2018 do 23:00: max 8 bodov. Odovzdanie dokumentácie k programu do AIS po 2.1.2018 po 23:00: max 0 bodov. Ak sú študentí v tíme, musia zadanie do AISu odovzdať všetci (obe časti - kód aj dokumentáciu) a jasne v ňom deklarovať, s kým tvorili tím. Funkcionalita zadania sa bude overovať 10.12.2018 na cvičení, 17.12.2018 od 9:00 do 11:00, prípadne aj kedykoľvek do 21.12.2018 po dohode s cvičiacim. Dalej 3.1.2019 po skúške (2 hodiny). Na dosiahnutie plného počtu bodov za funkčnosť zadanie musí byť 100% funkčné a študenti musia vedieť vysvetliť ako všetko robili. Bude sa overovať funkcionalita kódu uloženého v AISe. Body budú udelené spolu so skúškou do 4.1.2019. 4.1.2019 je možné medzi 10:30 a 12:00 nahladnuť k výsledkom hodnotenia zadania (aj skúšky). Zápočet bude udelený po dosiahnutí >=13 bodov za zadanie.