Nagy házi feladat
Minden, a tárgyat felvevő hallgatónak választania kell egy házi feladat témát, és ki kell dolgoznia a pontosított feladatspecifikációt, amelyet a JPorta rendszerbe határidőre (NHF 1.) fel kell töltenie. A pontosított specifikációt az előző félévben tanult mélységben kell elkészíteni.
A laborvezető által jóváhagyott specifikáció apróbb részletekben még módosulhat, de alapvetően ennek alapján kell elkezdeni a feladat megoldását. A megoldáshoz több részhatáridő (NHF 2., NHF 3.) is kapcsolódik, melynek betartásával biztosítható a megfelelő ütemű haladás, és még extra pontok is szerezhetők. A kész program beadásának végső határideje a 13. oktatási hét vége. A beadott (feltöltött) megoldást legkésőbb a 14. oktatási héten személyesen be kell mutatni, illetve meg kell „védeni”.
Feladatválasztás
- A feladat kiválasztásához ötletek itt találhatók, amelyekhez hasonló nehézségű, az elvárásoknak megfelelő saját problémák is megoldhatóak. Az is megengedett, hogy valaki az előző félévben választott problémát oldja meg OO szemlélettel, de ezt a lehetőséget megfelelő körültekintéssel (alkalmas-e a feladat erre) kell kezelni.
- A választást illetve a pontosított feladatspecifikációt mindenképpen jóvá kell hagynia a laborvezetőnek.
- A választott problémát objektum-orientált szemlélettel kell megközelíteni, modellezni és megoldani.
- A megoldandó feladatot úgy kell meghatározni, hogy az OO szemlélet előnyei kerüljenek előtérbe, és ne a felhasználói felület csillogása.
- A probléma nagyságára jellemző, hogy 3-10 osztállyal legyen modellezhető.
- A feladat specifikálásánál fontos szempont, hogy a működés helyessége parancssoros batch alkalmazásként (is) ellenőrizhető legyen, azaz a tesztprogram ne tételezzen fel semmilyen speciális be/kiviteli eszközt, a szabványos be/kimenetet ill. a hibakimenetet úgy kezelje, hogy az átirányítható legyen fájlba. Amennyiben a feladat lehetővé teszi, érdemes a gtest_lite ellenőrző csomagot használni a teszteléshez. Ezt a JPorta rendszerbe előre feltöltöttük, csak használni kell. Ugyanígy elérhető a memtrace környezet is.
- Lehetőség van grafikus vagy kvázi grafikus interaktív felhasználói felület kialakítására is, de fontos, hogy a JPorta rendszerbe olyan változatot töltsön fel, ami ezt nem használja! Az eltérő változatokat fordítási opciókkal célszerű közös kódbázisban tartani. Kihasználható pl. hogy a JPorta a CPORTA makrót definiálja.
- Azok számára, akik mindenképpen grafikus felhasználói felülettel rendelkező feladatot szeretnének:
- A grafikus felhasználói felületek és a C++ kapcsolata a 10. hét körül kerül terítékre előadáson.
- Leginkább a Wt toolkit használatát javasoljuk, amivel komolyabb webalkalmazások is előállíthatók C++ nyelven. A Wt toolkit-hez kapcsolódó laboranyag itt található.
- Javasoljuk továbbá az SFML könyvtárat is.
- Az SDL használata is szóba kerülhet, de ehhez nem ismerünk szép objektum-orientált interfészt.
Feladat megoldása, értékelési szempontok, tesztelés
- Fontos értékelési kritérium, hogy a megoldás legyen bővíthető. A feldolgozható adatok száma ne legyen korlátozva (hiba, ha pl. csak 80 karakteres sorokat tud kezelni), azaz a tárolandó adatokat jellemzően dinamikus memóriában kell tárolni.
- Egyszerűbb feladatok esetén a dinamikusan tároló osztályokat vagy sablonokat el kell készíteni, összetettebb modellezési feladatoknál STL tárolók is használhatók. Az STL tárolók használatának lehetőségéről kérje ki laborvezetője véleményét.
- A működés helyességét, vagy funkciók egy részének helyességét gépi eszközökkel kell ellenőrizni (ahol ez alkalmazható, pl random számok generálását végző osztályokra kevésbé alkalmas, pl. gtest_lite eszközzel). Ezzel kapcsolatban nyugodtan kérje ki laborvezetője véleményét.
- A tesztadatokat úgy kell megválasztani, hogy lehetőleg a program minden függvénye legalább egyszer hívódjon meg, illetőleg a program minden fontosabb ága fusson.
- A megvalósításnak modulárisnak kell lennie. A tesztprogramot, vagy főprogramot minden esetben külön fordítandó modulként kell elkészíteni.
- Csak az a feladat fogadható el, amiben bizonyíthatóan nincs memóriaszivárgás. A bizonyítás során valamilyen eszközzel (memtrace, valgrind, VS beépített ellenőrzője, address sanitizer, stb.) be kell mutatni, hogy legalább a tesztesetekben nem fordult elő szivárgás.
- A leadott házi feladatot a laborvezető pontozza. Elsősorban a laborvezetőknek szóló pontozási útmutató az alábbi: pontozás.
Feladat beadása
A feladat eredményes teljesítéséhez határidőig a következőket kell elektronikusan beadni:
- Feladat dokumentációját, melynek elkészítéséhez célszerű valamilyen öndokumentáló rendszert választani (pl. doxygen). Az így előállított nyers dokumentáció (latex, rtf) részbeni felhasználásával tömör, igényes leírás állítható elő. A dokumentációnak egyetlen PDF fájlba szerkesztve a következőket kell tartalmaznia:
- A pontosított/kibővített specifikáció elfogadott, végleges változatát.
- Megoldási vázlatot rövid szöveges leírással.
- UML jelölésű osztálydiagramot, valamint az osztályok és tagfüggvények rövid leírását, paraméterek értelmezését.
- Tesztelési dokumentációt, amiben le kell írni, hogy hogyan látta be a működés helyességét. Külön ki kell térni a memóriaszivárgás-mentesség ellenőrzésének módjára is.
- A program teljes forráskódját, egyetlen ZIP állományba csomagolva. (Minden fordítási egységében biztosítani kell, hogy a memtrace.h állomány feldolgozásra kerüljön a standard fejlécállományok után! (A memtrace.h, memtrace.cpp és a gtest_lite.h állományokat nem kell a csomagba beletennie, azokat a JPorta biztosítja!)
- A program teszteléséhez szükséges bemeneti fájlokat – ha van ilyen – egy másik ZIP állományba csomagolva.
- A program teszteléséhez szükséges standard bemenet adatait – ha van ilyen – egy TXT fájlban
Határidők
A folyamatos előrehaladás érdekében több részfeladatot definiáltunk. A részfeladatok határideje a JPORTA rendszerben illetve az ütemtervben (itt) található.
- NHF 1. - specifikáció: Pontosított feladatspecifikáció elkészítése és feltöltése PDF formátumban. A pontosított specifikáció részletesen leírja feladatot. Megadja a bemenetek és az elvárt kimenetek tartalmát és formátumát, a program működésének feltételeit, valamint rögzít minden olyan körülményt, ami egyértelműsíti a feladatot. A specifikáció a megoldásra fekete dobozként tekint, azaz a program belső felépítésével, működésével nem foglalkozik.
- NHF 2. - terv: Osztálydiagram és/vagy algoritmus elkészítése és bemutatása. A részfeladat teljesítéséhez egyetlen PDF fájlba szerkesztve kell beadnia a pontosított feladatspecifikációt és a feladat megoldásához tervezett osztályok kapcsolatát és attribútumait bemutató osztálydiagramot. Feladat jellegétől függően ezt ki kell egészítenie a fontosabb algoritmusok leírásával. Az osztálydiagramot UML jelöléssel, az algoritmust tetszőleges (szöveges, folyamatábra, pszeudokód, …) kell megadnia.
- NHF 3. - váz: Véglegesített osztályok deklarációjának illetve a főbb algoritmusok elkészítése és bemutatása. A részfeladat ellenőrzéséhez fel kell tölteni a JPorta rendszerbe olyan nem végleges tesztprogramot, ami a megtervezett osztályokat használva bemutatja azok kapcsolatát, együttműködését. A feltöltött forráskódnak szintaktikailag helyesnek kell lennie, de nem kell érdemben működnie. A JPorta rendszer csak a fordítást ellenőrzi, a futás eredményét nem, így a (tag)függvények törzse teljesen hiányozhat! E határidőt akkor tudja megfelelően teljesíteni, ha az osztályokat már olyan részletesen megtervezte, hogy a deklarációk a tervek alapján könnyen leírhatók.
- NHF 4. - végleges: A feltöltött programot a feladatbeadó rendszer lefordítja és összeszerkeszti. Feltételezheti, hogy a fordítás során a CPORTA és MEMTRACE azonosítók definiáltak. A feladat csak akkor elfogadható, ha a fordítás és szerkesztés eredményeként hiba- és figyelmeztető üzenet nem keletkezik! Sikeres fordítás után a rendszer lefuttatja a programot a megadott tesztadatokkal. Sikeres elektronikus beadás után a dokumentációt és a működő programot a laborvezetőnek személyesen is be kell mutatni a tárgykövetelményben megadott határidőig. Az utolsó szakasz tartalmaz (változtatásokkal együtt) egy dokumentációt is: a program specifikációjának, tervdokumentációjának összesített változatát. (Ha közben történt változás, akkor azokat is tüntesse fel, ha nem, ez gyakorlatilag megegyezik a korábban beadott dokumentációkkal.)
Egy példa NHF letölthető a következő git tárolóból: NHF-GIT
A beadásokat összevettjük az aktuális és előző évfolyamok megoldásaival is, plágium esetén a HF feladat nem javítható, nem pótolható, értékelése 0 pont.