kpi

Magazín KPI

Pieskovisko — nekontrolované články

Trenažér na precvičenie a hodnotenie práce s Unixovými nástrojmi a systémom Git

Schopnosť pracovať s nástrojmi príkazového riadku a systémami pre správu verzií by mal mať každý študent Informatiky. Práca sa zaoberá vytvorením simulovaného prostredia na precvičovanie a hodnotenie študentov Informatiky práce s nástrojmi príkazového riadku a systémom Git.

Úvod

V práci boli vytvorené 2 osobitné systémy na precvičenie a hodnotenie študentov z danej oblasti. Systémy boli vytvorené na precvičovanie a hodnotenie študentov na predmete Základy softvérového inžinierstva. Nebol nájdený systém, ktorý by spĺňal potreby pre tento predmet a zároveň by bol voľne dostupný. Bol iba nájdený systém, ktorý čiastočne spĺňal potrebnú funkcionalitu podľa popisu ale nebol voľne dostupný.

Dôležitou schopnosťou študenta Informatiky, by malo byť efektívne pracovať s nástrojmi príkazového riadku. Pre študenta Informatiky na Technickej univerzite v Košiciach je to veľmi potrebné, pretože ich bude využívať napríklad na niektorých predmetoch počas svojho štúdia. Ďalším dôvodom prečo študentov informatiky učiť Unix systémy je to, že sú využívané na väčšine serverov.

Študent informatiky by taktiež mal ovládať prácu so systémom pre správu verzií. Na technickej univerzite v Košiciach sa využíva systém Git. Tento systém zjednoduší študentom prácu na ich projektoch. Využíva sa taktiež ak na projekte pracuje viacero ľudí a to na spoluprácu medzi jednotlivými členmi tímu. Schopnosť spolupracovať v tíme je taktiež dôležitá vlastnosť, ktorú by Informatik mal mať.

Cieľom práce bolo precvičiť a ohodnotiť praktické znalosti študenta z danej problematiky. Preto bolo v tejto práci vytvorené simulované prostredie, ktoré poskytuje možnosť precvičenia a hodnotenia praktických vedomostí študentov práce s nástrojmi príkazového riadku a systémom Git. Bol vytvorený spôsob, ktorý hodnotí študentov či vykonali to, čo sa od nich žiada v úlohe a nie len či bol vykonaný správny príkaz. Tento spôsob bol vytvorený pretože zadané úlohy môžu mať rôzne riešenia a bolo by náročné kontrolovať všetky riešenia iba pomocou správnych príkazov pre danú úlohu. V tejto práci bola vytvorená aj simulovaná interakcia s inými používateľmi a to vytvorením konfliktov v systéme pre prácu so systémom Git. Taktiež bol vytvorený spôsob definovania nových úloh pre oba systémy.

Systém testovania práce s nástrojmi príkazového riadku

Prvý systém vytvorený v tejto práci sa zaoberá precvičovaním a hodnotením študentov práce s nástrojmi príkazového riadku. Systém má 2 typy používateľov.

• Študent, • Vyučujúci.

Pre systém bol vytvorený Unix server, na ktorom bol systém umiestnený. Požívatelia pristupujú k systému pomocou SSH. Prihlasovacie mená pre študentov sú pripravené z ich emailov, ktoré sú im pridelené Technickou univerzitou. Emaily sú v tvare meno.priezvisko@student.tuke.sk poprípade meno.priezvisko.id@student.tuke.sk. Pre prihlasovacie meno je vybrané všetko, čo sa nachádza pred znakom @. Heslo pre študentov je definované pri vytváraní testu, pričom je rovnaké pre všetkých študentov v aktuálnom teste. Prihlasovacie údaje pre vyučujúceho sú vopred pripravené.

Systém z pohľadu študenta

Študent na prihlásenie do systému môže použiť napríklad program putty. Študentovi bude poskytnutý taktiež názov servera respektíve ip adresa. Po prihlásení sa bude mať študent k dispozícii domovský adresár používateľa, ktorý bol preňho vytvorený. V domovskom adresári študenta sa nachádzajú všetky súbory, ktoré sú potrebné pre študenta pri vykonaní testu. Príklad domovského adresára študenta je zobrazený na obrázku 1.

Obrázok 1: Príklad domovského adresára študenta
Obrázok 1: Príklad domovského adresára študenta

Znenie zadania sa nachádza v súbore zadanie. Výpis zadania môže študent uskutočniť, napríklad pomocou príkazu cat zadanie. Na obrázku 2 je zobrazený výpis zadania študenta.

Obrázok 2: Výpis zadania študenta
Obrázok 2: Výpis zadania študenta

Študent má určený čas na vypracovanie zadania. Po uplynutí tohto času sa študentovi zobrazí správa o jeho dosiahnutom hodnotení. Na obrázku 3 je zobrazený príklad správy, ktorá sa zobrazí študentovi.

Obrázok 3: Príklad správy hodnotenia študenta
Obrázok 3: Príklad správy hodnotenia študenta

Vytvorenie úloh pomocou systému

Vyučujúci pred vytvorením testu musí mať definované úlohy, ktoré budú použité v teste. Definovanie jednotlivých úloh prebieha v samostatných súboroch. Bol vytvorený Doménovo špecifický jazyk, pomocou ktorého sa definujú jednotlivé úlohy. Jednotlivé úlohy sú rozdelené do 2 častí. V prvej časti sa vytvára všetko potrebné pre vykonanie úlohy, napríklad sa vytvárajú súbory, adresáre, používateľské práva alebo sa pre nich náhodne vyberajú mená. Taktiež sa môže vykonať zadaný príkaz.

V druhej časti definície úlohy sú určené akcie, ktoré sa majú vykonať pre kontrolu danej úlohy. Pre kontrolu úloh je možné vykonať akcie pre zistenie, či existuje respektíve neexistuje zadaný súbor alebo adresár. Taktiež je možné vykonať porovnanie súboru so súborom so správnym riešením, ktorý sa vytvára pri vytvorení úlohy v zálohe systému. Je možné skontrolovať používateľské práva súboru, či majú správnu hodnotu zadanú v definícii úlohy. Tieto akcie boli vytvorené na kontrolu toho, či sa vykonali všetky zmeny v pracovnom prostredí študenta, ktoré sa mali vykonať. Niekedy však môže byť potrebné skontrolovať, aj či študent zadal konkrétny príkaz. To sa vykonáva pomocou poslednej vytvorenej akcie pre kontrolu úloh. Všetky príkazy, ktoré zadáva študent počas vykonania testu sa ukladajú do určeného log súboru. Následne sa porovnávajú všetky príkazy, ktoré zadal študent počas testu s príkazom, ktorý je správny pre riešenie úlohy. Ak študent zadal tento príkaz úlohu vyriešil správne.

Systém testovania práce so systémom Git

Druhý systém vytvorený v tejto práci sa zaoberá precvičovaním a hodnotením študentov práce so systémom Git. Systém má opäť 2 typy používateľov.

• Študent, • Vyučujúci.

Systém sa nachádza na Unix serveri, kde sa nachádzajú Git projekty, s ktorými študenti pracujú.

Systém z pohľadu študenta

Študenti majú pripravené prihlasovacie mená z emailu a heslo jedinečné pre test. Študent môže pracovať vo svojom vlastnom prostredí. Bolo to navrhnuté, aby bola zjednodušená študentova práca na teste. Študent si stiahne znenie zadania, ktoré sa nachádza v domovskom adresári používateľa pre neho pripravené. Taktiež si naklonuje projekt, ktorý je pre neho pripravený so všetkým potrebným pre vykonanie testu. Príklad znenia zadania úloh je zobrazený na obrázku 4.

Obrázok 4: Znenie zadania úloh
Obrázok 4: Znenie zadania úloh

Po skončení času, ktorý bol poskytnutý študentovi na vypracovanie úloh nebude môcť študent zapisovať do vzdialeného repozitára. Hodnotenie úloh za riešenia úloh, ktoré študent vytvoril, si môže stiahnuť z domovského adresára pre neho pripraveného používateľa.

Vytvorenie úloh pomocou systému

Definovanie úloh systému pre Git sa líši od systému pre Unix. Definovanie úloh systému pre Git sa nachádza v samostatnom Python module. Teda tvorca úloh musí poznať jazyk Python a ak chce vytvoriť novú úlohu musí ju naprogramovať. Sú pripravené metódy, ktoré zabezpečujú základnú vytvorenú funkcionalitu pre vytváranie a kontrolu úloh. Ak by bola pripravená funkcionalita nedostatočná je možné ju doprogramovať. Volania týchto pripravených metód sa musia nachádzať v určených metódach v Python module pre úlohu. Tieto metódy slúžia na:

• Definovanie znenia zadania úlohy, • Pripravenie študentovho repozitára pred začatím testu, • Vytvorenie zmien po prvom zapísaní študenta do vzdialeného repozitára, táto metóda slúži hlavne na vytváranie konfliktov, • Vytvorenie správneho riešenia pre vytváranú úlohu, • Kontrola úlohy.

Pripravené metódy, ktoré sa volajú pri vytváraní úlohy slúžia na vytvorenie novej vetvy, vytvorenie prázdneho súboru alebo súboru s pripraveným obsahom v zadanej vetve, modifikovanie súboru v repozitári študenta v zadanej vetve, náhodný výber mena pre súbor a vetvu z pripravených mien. Pre kontrolu bola vytvorená metóda, ktorá porovnáva obsah vetvy v repozitári, s ktorým pracuje študent a repozitár so správnym riešením.

Vytvorenie konfliktov

Na vytvorenie konfliktov bolo použité Git rozšírenie s názvom Git Hooks. Toto rozšírenie nám umožňuje spustiť vlastný skript, ak sa nachádza projekt v určitom stave. Pre každý stav, v ktorom môžeme spustiť vlastný skript musí mať tento skript špecifický názov. Pre potreby vytvorenia konfliktu bol vybraný Git Hooks s názvom Update. Tento skript sa vykoná tesne predtým ako sa spustí zápis do vzdialeného repozitára. Tento skript sa nachádza vo vzdialenom repozitári na strane servera v adresári hooks. Na obrázku 5 je zobrazený priebeh vytvorenia konfliktu.

Obrázok 5: Priebeh vytvorenia konfliktu
Obrázok 5: Priebeh vytvorenia konfliktu

Ak sa niekto pokúsi o zápis do vzdialeného repozitára spustí sa skript update. Po spustení skriptu update sa najprv testuje, aký používateľ tento skript spustil. Ak sa pokúsil o zápis do vzdialeného repozitára študent získa sa vetva, ktorú sa pokúsil zapísať. Zistí sa, či už bol vytvorený konflikt pre zapisovanú vetu. Ak nebol vytvorený konflikt, spustí sa metóda v module úloha, ktorá slúži na zmeny po zapísaní do vzdialeného repozitára. Po vykonaní zmien sa uloží informácia o tom, že už bol vytvorený konflikt pre určenú vetvu. Po vykonaní skriptu update pokračuje zápis študenta do vzdialeného repozitára. Teda v prípade, ak bol konflikt vytvorený, zápis študenta do vzdialeného repozitára sa nevykoná.

Vyhodnotenie

Testovanie systémov bolo vykonané na študentoch Informatiky 5. ročníka. Boli im náhodne vybrané niektoré úlohy z pripravených úloh. Teraz bude ukázaná ukážku vyhodnotenia testu pre 3 študentov.

$ sudo python3 run.py -e -n test_3 –o
jakub.kobylan:      [1, 0, 1, 0, 0, 1, 1, 1], Total points: 5
stanislav.kachman:  [1, 1, 1, 1, 0, 1, 0, 1], Total points: 6
damian.krupa:       [1, 1, 1, 1, 1, 1, 0, 1], Total points: 7

Táto ukážka znázorňuje výpis bodového ohodnotenia študentov. Pre každého študenta je zobrazený celkový počet bodov, ale aj to ktoré úlohy už má vyriešené. Tento výpis je rovnaký pre oba vytvorené systémy.

Pri systéme na testovanie práce s nástrojmi príkazového riadku bolo zistené, že pre nájdenie správneho riešenia všetkých 8 úloh potrebovali študenti 20-30 minút. Pre testovanie práce so systémom Git potrebovali študenti na vypracovanie 3 úloh 15-25 minút. Tento čas záležal hlavne od toho aké skúsenosti mali s nástrojmi príkazového riadku respektíve so systémom Git. Taktiež bolo zistené, že študentom najdlhšie trvalo vykonať prvé úlohy. Keď sa oboznámili s prostredím, v ktorom pracujú, čas vykonania úloh sa výrazne skrátil. Študenti informatiky, ktorý si vyskúšali systémy povedali, že by sa im páčilo precvičovanie a testovanie z danej problematiky pomocou vytvorených systémov.

Záver

Táto práca sa zaoberala vytvorením systémov pre precvičovanie a hodnotenie študentov práce s nástrojmi príkazového riadku a systémom Git v simulovanom prostredí. Je dôležité, aby študenti Informatiky ovládali aspoň základnú prácu s nástrojmi príkazového riadku a systémom Git, preto byli vytvorené tieto systémy. Funkčnosť a použiteľnosť vytvorených systémov bola overená na vybraných študentoch Informatiky, ktorí vyskúšali vytvorené systémy v tejto práci. Títo študenti uviedli, že by sa im páčilo, ak by si mohli takýmto praktickým spôsobom precvičovať svoje vedomosti z danej problematiky, poprípade byť týmto spôsobom hodnotení.