PŘÍRUČKA PRO VÝVOJÁŘE SYSTÉMU
CODIANA
Bc. Jan Hybš 2014OBSAH PŘÍRUČKY
Princip funkce systému CoDiAna Struktura systému CoDiAna
Modul pro podporu zpracování programovacího jazyka
Modul pro určení podobnosti mezi zdrojovými kódy programovacího jazyka Závěrečné doporučení
PRINCIP FUNKCE SYSTÉMU CODIANA
V systému vystupují dvě role – pedagog a student.
Uživatelé zasílají požadavky na server, který obsahuje systém Moodle (výuková platforma Moodle)
Pedagog specifikuje algoritmické úlohy, na které studenti zasílají své řešení.
Systém Moodle obsahuje modul CoDiAna, který vyřizuje jednodušší požadavky a složitější předává Exekutivní aplikaci Java.
Exekutivní aplikace slouží pro zpracování přijatých algoritmů.
Podpora programovacích jazyků, je dána dostupností modulů pro Exekutivní aplikaci.
STRUKTURA SYSTÉMU CODIANA
systém se skládá ze dvou hlavních částí modul CoDiAna
správa úloh
zobrazení výsledků
exekutivní aplikace Java
zpracování náročnějších nebo potencionálně nebezpečných požadavků
Server pro zpracování úloh
Souborové úložiště Exekutivní
aplikace
Pedagog Student
Server se portálem Moodle
Modul CoDiAna Databázové
úložiště
SSH komunikace SSH komunikace
MODUL PRO PODPORU ZPRACOVÁNÍ PROGRAMOVACÍHO JAZYKA 1/4
Základní balíček pro vývojáře obsahuje všechny potřebné soubory pro vytvoření modulu pro zpracování určitého programovacího jazyka.
Na základě charakteru programovacího jazyka je nutné implementovat správné rozhraní, jsou zde rozlišovány jazyky, které jsou kompilované nebo spustitelné.
Nový modul vesměs připraví soubory na spuštění a definuje příkaz, jakým lze daný jazyk spustit.
Každé řešení se může skládat z více souborů, je nutné vytvořit takový algoritmus, který bere tuto skutečnost v potaz.
Rozhraní pro kompilované jazyky (ICompilableLanguage) rozšiřuje rozhraní pro spustitelné jazyky (IExecutableLanguage), jelikož každý programovací jazyk je vždy spustitelný.
Každé rozhraní obsahuje základní 3 metody, jsou to:
1) příprava na kompilaci/spuštění
2) definování příkazů pro kompilaci/spuštění 3) obslužná rutina po kompilaci/spuštění
Spustitelné rozhraní obsahuje navíc metodu pro předání objektu s nastavením. Tato metoda je volána jako první!
Metody jsou volány vždy v tomto pořadí.
MODUL PRO PODPORU ZPRACOVÁNÍ PROGRAMOVACÍHO JAZYKA 2/4
metoda obdržení objektu s nastavením
V této metodě je předán objekt, který obsahuje informace o úloze, jedná se zejména o:
název hlavního souboru úlohy
umístění složky, obsahující všechny soubory řešení
další detaily ohledně úlohy (umístění souborů, atd.)
metoda přípravy na kompilaci/spuštění
slouží pro přípravu pro danou akci (kompilaci/spuštění)
důležité připravit prostředí tak, aby bylo dále možné vykonat akci
lze zde provést lokalizace určitých souborů, případně určité opravy souborů (například modul pro zpracování jazyka Java se snaží opravit definice balíčků, pokud nejsou korektní)
v tomto místě je vhodné získat všechny hodnoty pro definování příkazu pro kompilaci/spuštění
MODUL PRO PODPORU ZPRACOVÁNÍ PROGRAMOVACÍHO JAZYKA 3/4
metoda definování příkazů pro kompilaci/spuštění
V této metodě je nutné definovat příkaz, pomocí kterého proběhne kompilace/spuštění.
V přípravné metody byly získány všechny detaily pro tuto operaci, nyní je nutné definovat objekt typu List<String>, který obsahuje příkaz s jeho argumenty.
příkladem může být modul pro zpracování jazyku Java, při kompilaci je definován příkaz
obdobně poté při spuštění
obslužná rutina po kompilaci/spuštění
Metody by měla uvést úložiště na severu do stejného stavu, jako před kompilací/spuštěním
To je například smazání dočasných souborů pokud byly nějaké vytvořeny apod.
javac –sourcepath adresar_se_soubory –d _vystupni_adresar
hlavni_soubor_reseni
java -classpath adresar_se_soubory nazev_a_balicek_hlavni_tridy
MODUL PRO PODPORU ZPRACOVÁNÍ PROGRAMOVACÍHO JAZYKA 4/4
Výjimky
Pokud řešení není možné spustit nebo zkompilovat, je důležité vyhodit výjimku RunException, která značí, že nastala chyba související s řešením. V popisu chyby je vhodné specifikovat, co chybu způsobilo (například skutečnost, že nelze lokalizovat hlavní třídu řešení, nebo nejednoznačnost souborů řešení). Popis chyby bude zobrazen uživateli, který řešení odeslal. To zda je řešení v korektním formátů, by měla řešit přípravná metoda.
Pokud proběhne přípravná metoda v pořádku, znamená to, že řešení je spustitelné/kompilovatelné. Metoda pro definování příkazu by neměla vyhazovat žádnou výjimku, ani provádět operace, které ji mohou vyhodit.
MODUL PRO URČENÍ PODOBNOSTI MEZI ZDROJOVÝMI KÓDY PROGRAMOVACÍHO JAZYKA 1/3
Tento modul slouží pro určení podobnosti mezi řešeními. Jsou zde tři metody, které jsou nutné implementovat. Určení podobnosti závisí na charakteru programovacího jazyka a mělo by být provedeno odpovídajícím způsobem (například syntaktickou analýzou zdrojových kódů).
Je nutné, aby porovnání bylo odolné (alespoň z části) refaktorování kódu
(přejmenování proměnných, metod, funkcí, atd.), jelikož tyto úpravy jsou velice lehké v moderních IDE a mohou způsobit rozsáhlé vizuální změny.
MODUL PRO URČENÍ PODOBNOSTI MEZI ZDROJOVÝMI KÓDY PROGRAMOVACÍHO JAZYKA 2/3
Všechny zdrojové kódy daného řešení jsou uloženy v jednom adresáři.
První je metoda
void prepare (File dir)
. Metoda by měla zanalyzovat zdrojové kódy z daného adresáře a předvypočítané výsledky uložit do paměti programu. Tato metoda slouží pouze pro optimalizaci – pokud modul nebudepodporovat optimalizaci, je důležité ponechat ji zcela prázdnou (použít návrhový vzor Null Object).
Druhá metoda
void clear ()
úzce souvisí s první a slouží pro smazání paměti s předpočítanými výsledky. Opět, pokud modul nebude podporovat optimalizaci, je důležité ponechat ji zcela prázdnou (použít návrhový vzor Null Object)MODUL PRO URČENÍ PODOBNOSTI MEZI ZDROJOVÝMI KÓDY PROGRAMOVACÍHO JAZYKA 3/3
Poslední metoda slouží pro porovnání dvou řešení. Každé řešení může obsahovat více souborů, metoda by tedy měla porovnat předpočítané objekty v paměti, pokud je použita optimalizace.
Difference compare (File dirA, File dirB) throws CompareException Pokud modul optimalizace nepodporuje, je nutné načíst všechny soubory z adresářů a porovnat je odpovídajícím algoritmem.
Pokud nelze správně načíst nebo zanalyzovat řešení, je nutné vyhodit výjimku CompareException
Objekt, který metoda vrací je objekt třídy Difference, který obsahuje informace o porovnání a určuje do jaké míry jsou porovnané objekty rozdílné.
ZÁVĚREČNÉ DOPORUČENÍ
V případě nejasností je vhodné prohlédnout zdrojové kódy již vytvořených modulů.
Jsou k dispozici moduly, které slouží pro podporu zpracování i pro určení podobnosti.
Lze kontaktovat tvůrce systému pro další případnou pomoc s vytvářením nových modulů pro systém CoDiAna (jan.hybs@tul.cz)