Tento dokument je uživatelským manuálem pro ty učitele, kteří budou chtít validátor používat.
Původní verze dokumentu vznikla koncem roku 2005 s první verzí validačního serveru. Tato verze je aktualizovaná v říjnu 2007 pro validační server verze 2.
Validační server srovnává výstupy vzorového programu dodaného učitelem s výstupy odevzdávaných prací studentů. To znamená, že chce-li student úspěšně odevzdat svůj program, musí tento program na všechny sady testovacích vstupních dat vygenerovat stejné výstupy jako vzorový program dodaný vyučujícím.
Každá úloha, která se validačním serverem testuje, má svůj jedinečný identifikátor (v rámci předmětu). Tento identifikátor je libovolný řetězec rozumné délky, označme jej <ID prikladu> (například PPA1_Pr1_1 - pro první příklad první série předmětu PPA1...).
Potom si musím připravit soubory pojmenované takto:
Příklady:
Je vhodné pro studenty zveřejnit alespoň jeden soubor vstupních dat a k nim ukázku požadovaného výstupu. Dále je třeba zdůraznit, že výstup (viz též dále) musí být zcela totožný (tj. včetně mezer a odřádkování) se vzorovým výstupem. Jediná výjimka je sekvence posledních nevýznamových bílých znaků.
Poznámka: Pokud proběhnou úspěšně pokusy se "zašmodrcháním" kódu (obfuscator), bude možné zveřejnit i .class vzorový soubor (Aktualizace: obfuscator funkční a použitelný, .class soubory se k dispozici dávají).
Prostřednictvím ssh, respektive scp protokolu. Z prostředí Windows nejlépe poslouží program WinSCP (winscp.net). Připojte se na počítač vs.kiv.zcu.cz, jako uživatelské jméno zadejte "validator", heslo získáte např. od pana Herouta nebo Lukáše Valenty (UL408, lvalenta@kiv.zcu.cz).
Soubory nahrajte do adresáře /home/validator/validator/data/domains/ppa1/vzory a od tohoto okamžiku může validační server přijímat soubory od studentů k validaci.
Studenti musejí odevzdávaný soubor pojmenovat takto:
<ID prikladu>_<ID autora>.java - ID autora může být například jeho příjmení či studijní číslo. Na tom už z hlediska funkce serveru nezáleží, jen by si to měl každý učitel administrativně stanovit - jednoznačně doporučujeme osobní číslo studenta.
Vzor názvu studentského souboru: PPA1_Pr1_1_A05123.java
Poznámka: Velikost písmen v začátku názvu musí bezpodmínečně souhlasit s velikostí písmen vzorového příkladu od vyučujícího. Nesprávně: PPA1_PR1_1_A05123.java, PPA1_pr1_1_A05123.java, PPA1_pR1_1_A05123.java
Každý student se může pokusit odevzdat soubor kolikrát bude chtít, nemusí
mezi jednotlivými odevzdáními měnit jeho název - tj. může to zkoušet tolikrát,
dokud neopraví všechny chyby a validace neproběhne v pořádku.
Tuto politiku odevzdávání lze zpřísnit nastavením na portálu, například
omezit počet odevzdávání nebo omezit deadline. Podrobnosti viz.
nápověda k portletu
pro zápis a odevzdávání prací na portálu ZČU.
Představte si úkol: studenti mají udělat program, který načte z klávesnice dvě čísla a vypíše jejich součet. Vzorová třída například vypíše "Zadej a: ", pak "Zadej b: " a pak "Soucet je: 6". Jenže studentovo řešení bude vypisovat jiné hlášky - tudíž se výstupy programů liší, i když jsou oba napsány správně a mají stejný vstup.
Proto bylo rozhodnuto, že programy mohou mít libovolné výstupy (libovolné ty úvodní řetězce, nadpisy atd.) až do okamžiku, než začne skutečný výstup požadovaných hodnot (v tomto případě tedy součtu). Tento skutečný výstup musí začínat přesně řetězcem "---Vysledky---". Srovnávají se tedy pouze výstupní data, která následují za tímto řetězcem a vše, co je před ním, se může lišit.
Příklad vzorového programu pro sečtení dvou čísel:
... Scanner sc = new Scanner(System.in); System.out.print("Zadej a: "); int a = sc.nextInt(); System.out.print("Zadej b: "); int b = sc.nextInt(); System.out.println("---Vysledky---"); System.out.println("Soucet je: " + (a+b)); ...
Příklad vyhovujícího studentského programu pro sečtení dvou čísel:
... Scanner sc = new Scanner(System.in); System.out.print("Zadej prvni cislo: "); int a = sc.nextInt(); System.out.print("Zadej druhe cislo: "); int b = sc.nextInt(); System.out.println("---Vysledky---"); System.out.println("Soucet je: " + (a+b)); ...
Příklad nevyhovujícího studentského programu pro sečtení dvou čísel:
... Scanner sc = new Scanner(System.in); System.out.print("Zadej prvni cislo: "); int a = sc.nextInt(); System.out.print("Zadej druhe cislo: "); int b = sc.nextInt(); System.out.println("Dve cisla jsou: " + (a+b)); ...
Student zde udělal dvě chyby:
Aktualizováno: Nově se jště do kontroly nezapočítávají bílé znaky na konci výstupů (tj. poslední řádka může být např. odřádkována) - celkově se zachází s bílými znaky opatrněji, protože na ně lze těžko upozorňovat ve výstupu validátoru... (těžko upozornit, že odřádkování má být CR+LF a ne jen LF... proto se tyto věci akcptují jako správné). Dále je zavedena tolerance na desetinná čísla - liší-li se výstup v podřetězci, který může bý desetinným číslem, použije se porovnání s přesností např. 0.01.
Studenti se dozví výsledky okamžitě na portálu. V kladném i záporném případě se v seznamu jimi odevzdaných prací mohou kliknutím na obrázek reprezentující výsledek validace přenést na server "vs.kiv.zcu.cz" přímo na stránku s detailním výstupem validace.
Autoři tohoto dokumentu: Lukáš Valenta, Pavel Herout