2. ANALÝZA PROBLÉMU
Príjem a evidencia študentských zadaní:
Podľa vyjadrení opýtaných cvičiacich predmetu SOJ
prebieha v súčasnej dobe zbieranie vypracovaných zadaní tromi spôsobmi:
·
skopírovaním na
disketu,
·
namapovaním
sieťového disku cvičiaceho,
·
posielaním pomocou
elektronickej pošty.
Avšak ku každému zo spomenutých prístupov existujú výhrady a pripomienky.
Kopírovanie na disketu:
Je najjednoduchším spôsobom, ale je tu vždy dosť vysoká hrozba
poruchy média a tým vlastne straty najmenej jedného zadania.
Mapovanie sieťového disku:
Spôsob,
pri ktorom je nutné pri každom študentovi namapovať sieťový disk s heslom
cvičiaceho. Hlavnou výhradou bola nutná prítomnosť cvičiaceho pri mapovaní
disku, čo vlastne predlžuje čas odovzdávania vypracovaného zadania u každého
študenta.
Posielanie pomocou elektronickej pošty:
Pomocou elektronickej pošty je možné posielať
zadanie aj bez prítomnosti cvičiaceho (znamená úsporu času), ale na druhej
strane je nutné, aby si cvičiaci pri preberaní pošty triedil prichádzajúce
správy na zadania a ostatnú poštu (to znamená ďalšiu stratu času).
Každý
prístup má svoje výhody, ale aj nevýhody. Práve preto sme sa rozhodli urobiť
akýsi kompromis medzi nimi. Jednak budeme podporovať aj odovzdávanie na diskete
resp. sieťovom disku, ale odovzdávanie poštou uľahčíme cvičiacemu vyrobením
modulu na preberanie zadaní pomocou elektronickej pošty s možnosťou
automatického triedenia pošty a automatickým identifikovaním študentov. V
celkovom meradle by tento spôsob znamenal úsporu času pri odovzdávaní a
zjednodušil by aj preberanie zadaní a evidenciu v systéme. Preberanie z
poštového servera je riešené protokolom POP3, ktorý podporuje aj ponechanie
kópií správ na serveri po prebratí, takže je možné prebrať zadania zo servera a
ostatné správy ponechať naďalej na strane servera – ostávajú prístupné pre
používaného klienta elektronickej pošty.
Testovanie funkčnosti študentských zadaní:
Aj keď bude program správny čo do programovacieho
štýlu, ešte nemusí byť správny aj funkčne. Môžu sa v ňom vyskytovať syntaktické
chyby, a nemusí byť správny ani po sémantickej stránke.
Na testovanie syntaktickej správnosti sa môžu
použiť už existujúce prostriedky, takzvané prekladače.
Test funkčnosti (sémantiky) sa vykoná samotným
spustením preloženého programu.
Preklad:
Systém by mal byť schopný preložiť program zo
zdrojového tvaru do spustiteľného tvaru. Preložiť program znamená
pretransformovať program napísaný vo vyššom programovacom jazyku do iného tvaru
(napríklad do strojového kódu).
Schéma prekladu programu:
V konečnom dôsledku nás však zaujíma len program v
spustiteľnom tvare. Pretože len tak si môžeme overiť jeho funkčnosť. Súbor v
spustiteľnom tvare má formát závislý na operačnom systéme na ktorom sa program
prekladá. Nezávisle na operačnom systéme však každý program obsahuje
inštrukcie, ktoré sa na danom procesore budú vykonávať.
Preklad sa nemusí vždy skončiť úspešne. Ak je
program v zdrojovom tvare syntakticky nesprávny, potom preklad vráti chybu a popis
chyby, ako napríklad riadok v zdrojovom tvare, na ktorom bola chyba objavená a
príčina chyby. Ak nastane tento prípad, samotné testovanie ani nebude
nasledovať.
Spustenie:
Po úspešnom preložení sa musí program spustiť a
potvrdiť sa tak správnosť alebo nesprávnosť funkcie programu. Spúšťanie je
realizované službou operačného systému, ktorá zaistí alokáciu pamäte a
inicializáciu systémových štruktúr a následné spustenie programu.
Po spustení programu sa bude čakať na jeho
ukončenie. Po ukončení programu bude potrebné "pozbierať" výsledky,
ktoré program vygeneroval. Väčšinou však pôjde iba o výstup na obrazovku
prípadne do súboru.
Vstupy a výstupy:
Veľká väčšina programov bude potrebovať interakciu s
užívateľom. Je teda nemysliteľné, aby človek, ktorý kontroluje správnosť
programu tieto vstupy vymýšľal. Jednak by to preňho bolo pri desiatkach zadaní
časovo veľmi náročné a zároveň je pravdepodobné, že by sa nevyhol omylom, ktoré
by mohli spôsobiť chybne vyplnené (zapísané) výsledky.
Bolo by teda vhodné generovať čo najlepšie vstupy.
Pre každý program bude množina testovacích údajov odlišná. Avšak pri náhodnom
generovaní vstupov (keď zadanie nemá dávkový charakter, napríklad ak je v
zadaní spravené menu) nie je možné zistiť, aké by mali byť jeho správne
výstupy. Preto by malo pre každú úlohu existovať takzvané referenčné (vzorové)
riešenie, s ktorým sa budú tieto výsledky porovnávať. Boli by to referenčné
testovacie vstupy a výstupy vyprodukované referenčným (vzorovým) zadaním. Tieto
referenčné vstupy by sa potom použili ako testovacie vstupy do testovaných
programov a vyprodukované výstupy by sa porovnali s referenčnými.
Analýza podobnosti študentských zadaní:
Keďže zatiaľ nebol vytvorený žiadny podobný systém podporujúci
cvičenia z predmetu Strojovo orientované jazyky, v súčasnosti je
hodnotenie zadania len na cvičiacich, vrátane analýzy podobnosti programov.
Z vlastnej skúsenosti
získanej absolvovaním predmetu SOJ vieme, že cvičiaci pedagógovia sú plne
vyťažení preberaním zadaní kvôli počtu študentov, nemajú teda dostatok času
podrobne si preštudovať zadanie, nehovoriac o odhalení podobného zadania. Podľa
ich vyjadrenia je teda jednoznačne potrebné (okrem iného) vytvorenie podporného
systému, ktorý by túto činnosť automatizoval. Takýto systém musí byť dostatočne
inteligentný, musí rátať s vynaliezavosťou študentov a poskytovať čo
najpresnejšie výsledky.
Cvičiaci zhodne upozornili na tieto aspekty automatizácie
porovnávania zadaní:
·
odfiltrovanie vzorových konštrukcií – vylúčenie programových konštrukcií, ktoré sa pravdepodobne budú
nachádzať vo väčšine zadaní, pretože boli napríklad odprednášané. Pričom každý
cvičiaci by si mal vedieť zadefinovať vlastné vzorové konštrukcie.
·
kontrola zadania – musí byť dostatočne inteligentná, aby odhalila podobnosť
odovzdaných zadaní, musí počítať so zámenou registrov, premenovávaním návestí,
názvov procedúr a podobne.
·
porovnávanie väčšieho počtu zadaní – ľubovoľné zadanie by sa malo dať porovnať automaticky
s väčším množstvom zadaní.
Systém poskytujúci funkcie pre automatickú kontrolu podobnosti
zadaní odbremení cvičiaceho, ktorý sa takto môže plne sústrediť na odbornú
stránku cvičení a na pomoc študentom, ako aj na kontrolu funkčnosti zadania.
Pri porovnávaní väčšieho množstva zadaní sa zároveň zvýši pravdepodobnosť
odhalenia podobných resp. identických zadaní.
Hodnotenie zadania vypracovaného študentom, je
komplexným zhodnotením jeho práce a schopnosti splniť zadané požiadavky.
Bohužiaľ, niektorí študenti sú schopní odovzdať aj zadanie, ktoré vypracoval niekto
iný, či už s jeho vedomím, alebo bez. Táto časť systému má preto za úlohu
odhaliť takéto riešenia a upozorniť na ne.
Hľadanie vzorových konštrukcií:
Keďže zdrojové kódy programov môžu obsahovať
jazykové konštrukcie ktoré boli napríklad vysvetlené na prednáške, je
pravdepodobné, že sa budú nachádzať aj vo väčšine odovzdaných zadaní. Preto by
analýza podobnosti takýchto konštrukcií nemala zmysel a viedla by k
dezinformácii hodnotiaceho pedagóga. Bude ich teda nutné v zdrojovom programe
nájsť a vylúčiť z ďalšieho porovnávania.
Predpokladá sa, že k zadaniu bude existovať súbor,
v ktorom sa budú nachádzať vzorové konštrukcie, alebo vzorovo vyriešené
zadania, s ktorými sa budú zdrojové kódy programov porovnávať.
Hľadanie zhodných konštrukcií:
Takéto hľadanie skrýva mnoho úskalí a problémov.
Je potrebné rátať s vynaliezavosťou autorov (premenovávanie, zámena registrov,
vkladanie návestí a pod.), aby bola úspešnosť čo najvyššia.
Ak miera zhodnosti dvoch zadaní prekročí istú
hranicu, je nutné, premietnuť ju do celkového hodnotenia zadania, prípadne
oznámiť to používateľovi, teda cvičiacemu.
Aby sa predišlo situácii, že systém identické
riešenia neodhalí, je vhodné vykonávať porovnanie každého zadania so všetkými,
ktoré už boli odovzdané, resp. ktoré sú k dispozícii. Samozrejme je nutné
umožniť aj porovnanie s niektorým konkrétnym zadaním, príp. s viacerými.
Výsledky hľadania môžu určiť napríklad koeficient s ktorým sa bude potom
narábať pri celkovom hodnotení zadania.
Analýza programovacieho štýlu autorov zadaní:
Problematika správneho
formátovania textu zdrojového kódu programu v JSI, teda programovacieho štýlu
je veľmi dôležitá a to hlavne z toho dôvodu, že správne štruktúrovaný text
zdrojového kódu je lepšie čitateľný a tým pádom aj ľahšie pochopiteľný.
Čitateľnosť zdrojového kódu je veľmi dôležitá
napríklad (a hlavne) pri ladení programu. Ak je program dobre odsadený
(návestie, inštrukcia, operandy, prípadne komentár), je oveľa jednoduchšie
"pohybovať" sa v ňom, ako keď sa text zdrojového kódu neriadi žiadnymi
pravidlami. Takisto správne umiestnené komentáre veľmi výdatne pomáhajú pri
ladení programu a ešte viac pri chápaní programu iného autora, alebo pri snahe
porozumieť program po dlhšom čase.
Všetky "pravidlá" správneho formátovania
textu zdrojového kódu sú nesmierne dôležité hlavne v prípade programovania v
JSI, pretože JSI je jazyk nízkej úrovne, čo sa odráža napríklad na počte
riadkov zdrojového kódu, alebo na počte rutín (podprogramov). Nehovoriac o
definovaní rôznych premenných, segmentov a podobne, na začiatku programu.
Samozrejme, krátke a jednoduché programy (rutiny)
naprogramované v JSI nepotrebujú veľa komentárov alebo striktné dodržiavanie
určitých pravidiel, no programovať zložitejšie programy bez správneho
programovacieho štýlu je z hľadiska ladenia alebo opätovného chápania programu
nesmierne zložité.
V súčasnosti sa programovací štýl autora zadania kontroluje iba pri
odovzdávaní zadania na cvičeniach. A keďže na jednom cvičení odovzdáva svoje
zadania viac študentov, je bežné, že hodnoteniu formálnej stránky zadania sa
nevenuje dostatočná pozornosť. Pedagóg, ktorý preberá zadanie, stihne nanajvýš
zbežne prelistovať text zdrojového kódu, či nezbadá letmým pohľadom nedostatky
formátovania textu (programovacieho štýlu).
Kontroluje sa hlavne to, či text zadania obsahuje komentáre, či
inštrukcie a ich operandy sú v riadku správne zarovnané (pod sebou).
Táto časť projektu by mala zahŕňať práve takúto
analýzu textu zdrojového kódu, teda analýzu programovacieho štýlu a takisto by
mala jeho úroveň zhodnotiť.
Ďalšie postrehy (požiadavky):
Medzi nápady a podnety cvičiacich patrilo hlavne
zníženie počtu študentov pripadajúcich na jedného cvičiaceho (na jednom cvičení
iba 10 študentov, alebo pridanie jedného asistenta cvičiacemu). Radi by sme
vyriešili tento problém, ale vzhľadom na naše možnosti a zameranie práce to
zrejme nebude tak celkom možné.
Možné vylepšenia v časti Testovanie funkčnosti študentských zadaní:
Ako voľba by sa mohlo pridať spustenie takzvaného
strážcu, ktorý bude dávať pozor, aby program nebežal donekonečna, a po určitom
čase ho zruší. Ďalej by mohlo byť umožnené nastaviť rôzne parametre, ako typ
prekladača zdrojového súboru alebo mód spracovania.
Závislosti:
Koncepcia načrtnutá v časti Testovanie funkčnosti študentských
zadaní závisí na organizovaní správy zadaní. Existuje viacero možných
alternatív správy zadaní. Napríklad správa by mohla byť realizovaná klasickou
hierarchiou adresárov na súborovom systéme.
Ďalšou variantou by mohla byť databázová správa
zadaní, kde by všetky zadania boli v jednej databáze spolu s menami autorov
zadaní, prípadne ďalšími informáciami.
Ak by bola správa zadaní robená formou
databázového systému, mohli by nastať problémy s nadbytočnosťou pri
programovaní oproti práci so súbormi. Nadbytočnosť v programovaní by spočívala
v tom, že programátor by musel používať prostriedky poskytované databázovým
systémom na prístup k zadaniam, ako aj k testovacím údajom, atď. Výhodou je
však transparentný prístup k ľubovoľnému objektu v databáze, čo znamená, že
programátora nezaujíma ako je tento objekt reprezentovaný, ani čo v skutočnosti
predstavuje. Ďalšou veľkou výhodou je zabezpečenie prístupu iba oprávneným
používateľom.
Výhoda súborového systému je vlastne v tom, že
prostriedky na správu poskytuje sám operačný systém. Hierarchická štruktúra
adresárov nám poskytuje dobrý prostriedok na logické rozdelenie zadaní pri ich
správe.
Schéma hierarchického súborového systému:
Ďalšou z výhod je aj to, že ľubovoľný program dokáže
využiť tieto prostriedky a my takto môžeme vlastne využiť vhodné už fungujúce
aplikácie pre náš účel. Dobrým príkladom takéhoto využitia je už spomínaný
prekladač, kde sa stačí iba dohodnúť, ktorý súbor sa má preložiť a o ostatné sa
postará prekladač. Nevýhodou oproti databázovemu prístupu môže byť bezpečnosť.
Bezpečnosť pri súborovej organizácii totiž závisí na operačnom systéme, pod
ktorým je aplikácia spustená. Ak však operačný systém poskytuje dostatočné
bezpečnostné prostriedky, nevýhoda oproti databázovému prístupu sa stráca.