Validační server - automatická kontrola semestrálních prací

PPA1 - Validace semestrálek - návod pro učitele

Zpět na hlavní stránku

Jak validátor používat?

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.

Co musím udělat, pokud chci používat validátor?

Jak validační server pracuje?

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.

Jak pojmenovat soubory, které budu na validační server nahrávat?

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:

  1. <ID prikladu>_Vzor.java - vzorová třída
  2. <ID prikladu>.in<index> - soubor se vstupními daty. <index> je od 1..n, musí začínat od 1 a žádné číslo nesmí být vynecháno.

Příklady:

  1. PPA1_Pr1_1_Vzor.java - vzorová třída
  2. PPA1_Pr1_1.in1, PPA1_Pr1_1.in2, PPA1_Pr1_1.in3 - tři vzorové vstupní soubory
  3. PPA1_Pr1_1.in6, PPA1_Pr1_1.in8, PPA1_Pr1_1.txt - tři chybně pojmenované vzorové vstupní soubory
  4. QuickSort_Vzor.java - vzorová třída s vyhovujícím pojmenováním, které ovšem naprosto není systémové a nedoporučujeme jej používat (viz též dále malá a velká písmena).

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í).

Jak nahrát soubory na validační server?

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.

Jak studenti musejí pojmenovat odevzdávané soubory?

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.

Jak se řeší rozdílné výstupy studentských programů?

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.

Kde se studenti dozví výsledky?

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.

Celý cyklus je třeba se studenty podrobně projít na vzorových příkladech!

Zpět na hlavní stránku

Autoři tohoto dokumentu: Lukáš Valenta, Pavel Herout

autor: Lukáš Valenta, září 2007 (lukas.valenta at seznam.cz)