La correcció d'exàmens amb ``doctest`` ====================================== La correcció dels exàmens la fem a partir de tests que es poden executar amb ``doctest`` però amb un afegit per poder calcular les notes. La nota depèn del nombre de tests passats però alguns tests poden comptar diferent depenent si tracten casos més simples o més complexos. La correcció és absolutament transparent, *sempre tindreu disponibles els tests que fem servir per corregir*. Llegiu aquest document per entendre no només com es calcula la nota sinó **com fer servir els tests de correcció per trobar a on heu fallat i quins casos particulars no resolt correctament la vostra solució**. Els tests d'exemple no serveixen per calcular la nota ------------------------------------------------------ Això succeeix perquè no tots els tests de l'exemple compten per la correcció. Per exemple, si tenim el següent ``doctest`` .. literalinclude:: test1.txt :language: python3 ``doctest`` compta com a test tot el que comença amb ``>>>``, en aquest cas, 3 línes. El primer test (la importació) passarà sempre que existeixin el fitxer i la funció amb els noms indicats. El segon test (l'assignació de la variable a) passarà simplement amb que la funció retorni alguna cosa, sigui correcta o no. L'únic test rellevant per la nota seria el tercer, que és el que comprova si el resultat és correcte. Així, una funció que no doni el resultat correcte, podria tenir el següent resultat .. literalinclude:: resultat1.txt :language: console que **no es pot interpretar com que, passant dos de tres tests, la nota és un 6,66**, perquè l'únic test que comptaria no l'ha passat i per tant seria un 0. Per això, **mentre feu els exercicis o els exàmens heu de mirar el detall de quins tests falla la vostra funció**, no només mirar els resultats finals. Dit això, és habitual que, si es passen tots els tests d'example, la nota no sigui baixa. Però teniu en compte sempre que són exemples i potser que no cobreixin tots els casos de l'enunciat que és el que heu de resoldre. Algunes solucions dels estudiants són massa específiques, només funcionen amb els exemples i fallen quan s'apliquen a dades diferents. Com interpretar les etiquetes del fitxer de tests de correcció --------------------------------------------------------------- Al fitxer de tests de correcció els tests que compten estan etiquetats amb ``# doctesttag``. A l'exemple anterior podríem tenir, per exemple: .. literalinclude:: test1-etiquetat.txt :language: python3 Quan passeu el ``doctest`` sobre un fitxer de test de correcció amb etiquetes, ``doctest`` les ignora i, per tant, tindreu *totals que inclouran tests que no compten*. És per això que, si voleu trobar a on heu fallat, **heu de revisar els resultats de doctest per buscar quins són els tests etiquetats que no passen**. Com interpretar el càlcul de la nota a partir de les etiquetes -------------------------------------------------------------- A la retroacció de l'examen a Atenea podeu trobar un fitxer amb els resultats que hem obtingut passant els tests de correcció amb les vostres funcions. Al final d'aquest fitxer, hi ha un *resum de les puntuacions parcials* a partir de les que es calcula la vostra nota final. Les **etiquetes** no només indiquen els tests que compten per la nota sinó que també **serveixen per detallar quants punts s'assignen a diferents casos** de cada problema i saber quants s'han obtingut. Per exemple, amb el següent resultat: .. literalinclude:: notes-etiquetes.txt :language: console tindriem que hi ha un problema d'operacions amb cadenes que compta 3,33 punts i que puntua per separat cinc aspectes diferents que compten el mateix (0,67). Com que és una funció modificadora que no ha de retornar res, hi ha tests per comprovar si ho fa o no etiquetats com a ``1_ops_cadenes-comprova_return``. També hi ha tests per comprovar i puntuar per separat les tres operacions explicades a l'enunciat (cute, cutf i dup) amb diferents etiquetes. I, finalment, hi ha tests etiquetats ``1_ops_cadenes-ops_variades`` que comproven combinacions de les tres operacions. Addicionalment, poden haver-hi **penalitzacions a la nota** que s'indicaran al final de la retroacció. Al següent exemple, s'aplica una penalització del 20% de la nota als exercicis marcats amb una etiqueta per no haver cridat a una funció com indicava l'enunciat: .. literalinclude:: penalitzacio.txt :language: console