Rugalmas teszteset-kiértékelés és részpontozás a TMS beadandókezelő rendszerben
A nyílt forráskódú TMS beadandókezelő rendszer egyik fő funkciója programozási beadandó és zárthelyi feladatok kiírása és a hallgatói megoldások begyűjtése. A TMS rendszer automata fordítással, fekete-doboz elvű teszteléssel, statikus analízissel és plágiumvizsgálattal tudja a hallgatók és az oktatók munkáját segíteni.
A rendszer automatikus értékelő szolgáltatása jelenleg minden tesztesetet lefuttat, és a hallgatói program szabványos kimenetét normalizálást követően — a sorkezdő és sorvégi üres karakterek, valamint az üres sorok elhagyásával — veti össze az oktató által megadott elvárt kimenettel. Az összehasonlítás módja azonban rögzített, az oktató nem befolyásolhatja: nincs lehetőség numerikus értékek megadott hibahatáron belüli, sorrendtől független vagy reguláris kifejezés alapú összevetésére. A tesztesetek nem súlyozhatók és nem pontozhatók, a kiértékelés eredménye tesztesetenként pusztán a sikeres, illetve sikertelen minősítés lehet; a futásidő- és memóriakorlát ráadásul csak a futtatókörnyezet egészére, nem tesztesetenként állítható be, tesztadatot pedig kizárólag a szabványos be- és kimeneten keresztül lehet megadni.
A szakdolgozat célja az automatikus értékelő szolgáltatás kiértékelési képességeinek kiterjesztése. A szakdolgozat keretében specifikálandó és implementálandó a tesztesetek kibővített adatmodellje, amely lehetővé teszi az összehasonlítási mód tesztesetenkénti megválasztását (karakterre pontos, kis- és nagybetűket nem megkülönböztető, sorrendtől független, megadott hibahatáron belüli numerikus, illetve reguláris kifejezés alapú), valamint a tesztesetenkénti pontszám, súly és egyedi erőforráskorlát beállítását. Az értékelő szolgáltatásban ehhez a kimenet-összehasonlítás meglévő absztrakcióját kell több, egymástól függetlenül bővíthető stratégiával kiváltani. A tesztesetenkénti eredményekből a rendszer számítson részpontszámot, és ez alapján tegyen jegyjavaslatot az oktatónak, aki azt felülbírálhatja. Emellett a tesztesetek be- és kimenete állományokon keresztül is megadható legyen. Elkészítendő az oktatói felület a bővített tesztesetek szerkesztéséhez, valamint a hallgatói felület a tesztesetenkénti eredmények és a részpontszám megjelenítéséhez.
A megvalósítás a TMS rendszer meglévő architektúrájába illeszkedik. A központi komponens és annak REST API-ja PHP nyelven, a Yii2 keretrendszer használatával, a webes felhasználói felület React és TypeScript technológiákkal készül. Az automatikus értékelő szolgáltatás C# nyelven, .NET platformon, vertical slice architektúrában valósul meg; a hallgatói megoldásokat a Docker Engine API-n keresztül vezérelt konténerekben futtatja, a központi komponenssel pedig OpenAPI specifikáció alapján generált klienssel kommunikál. Az értékelő szolgáltatáshoz egység- és integrációs tesztek készítése is elvárt.