fi-ksi / web-backend

Backend for KSI web written in Python.
MIT License
8 stars 3 forks source link

Nesrozumitelné pro řešitele: "Exited with error status 1" #104

Closed BorysekOndrej closed 3 years ago

BorysekOndrej commented 6 years ago

Na webu se nám pravidelně objevují dotazy, co znamená ve výstupu kódu "Exited with error status 1". Význam je převážně tento:

"Status 1 indikuje, že Tvé řešení není správné. Program sice je možné spustit, ale na testovacích vstupech nevrací správné výsledky." Tj. je tam nějaký neznámý testovací vstup, pro který tvé řešení nefunguje. Pokud řešíš stejný problém jako já, tak by ti tohle mělo stačit. - https://ksi.fi.muni.cz/ulohy/182/diskuse

Mohli bychom do příštího ročníku udělat status kód pro špatná odpověď na skrytém testu a dávat k němu relevantní hlášku?

horacekj commented 6 years ago

Tohle je chyba autora testů. Org prostě nekontroluje kód v sandboxu na výjimky a když nějaká nastane, program spadne. Správný test by měl být zabalený do try: except: bloku. Tohle moc nejde řešit nějak globálně, to si prostě org musí napsat dobré testy.

Problém nastává v tom, že ve skrytých testech už nemůžeš dát informaci řešitelovi na stdout. Tam bych využit "message". Každopádně moc nevím, jak tohle řešit na straně backendu, to si prostě musí pořešit autor úlohy.

BorysekOndrej commented 5 years ago

Tohle je zjevně systémový problém, vyskytuje se pořád a na různých úlohách. Navrhuji přeformulovat

Tvůj kód se nepodařilo spustit, oprav si chyby!

na

Tvůj kód nelze přeložit, nebo selhal na některém ze skrytých testů. Oprav si chyby!

Update 1: Trošku změněna formulace.

horacekj commented 5 years ago

Pořád říkám to stejné:

Tohle je chyba autora testů. Org prostě nekontroluje kód v sandboxu na výjimky a když nějaká nastane, program spadne. Správný test by měl být zabalený do try: except: bloku. Tohle moc nejde řešit nějak globálně, to si prostě org musí napsat dobré testy.

Ať orgové píšou pořádné testy, pak alespon řešitleé poznají, že chyba je u nich.

BorysekOndrej commented 5 years ago

Formát testů se reálně v nejbližší dobře nezmění. Aktuální hláška není fakticky ani vždy pravdivá, natož vypovídající.

BorysekOndrej commented 5 years ago

Note do budoucna: Neexistuje jednoduchý způsob, jak z check souboru vrátit řešiteli informaci, na čem selhal. Například že vyhodil takovou či makovou exception. I když si to autor úlohy pohlídá pomocí try, catch, co řešitel uvidí je Exited with status 1. A co udělá, zeptá se v diskuzi, jelikož jeho řešení je přece správné, ne?

Opět lobuji za změnu z:

Tvůj kód se nepodařilo spustit, oprav si chyby!

na

Tvůj kód nelze přeložit, nebo selhal (vyhodil výjimku nebo špatně odpověděl) na některém ze skrytých testů. Oprav si chyby!

Je to delší, ale když se to neobjeví v error msg, objeví se to buď na konci textu každé úlohy, nebo pak v diskuzi. :/ A obojí mi osobně přijdou jako horší varianty.

horacekj commented 3 years ago

Mělo by být vyřešeno testovacím frameworkem.