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.