Herramientas de usuario

Herramientas del sitio


es:manual:items:externosfichero

¡Esta es una revisión vieja del documento!


Preguntas de evaluación con ficheros

Las preguntas con ficheros son un tipo muy especial de pregunta externa en la que Siette espera como respuesta del alumno uno o varios ficheros (con un límite de 4). Una vez que recibe el fichero, Siette lo guarda y lo copia en un directorio de trabajo y sobre aplica una serie de pruebas consistentes en la ejecución de una secuencia de instrucciones del sistema operativo de las que espera obtener ciertos resultados por la salida estándar. Comparando estos resultados con los resultados esperados, la ejecución de esta serie de pruebas devuelve a Siette una cadena de caracteres que Siette interpreta como la respuesta del alumno, comparándola con las posibles respuestas incluidas del ítem base y procediendo a partir de ese momento como con cualquier otro ítem interno.

En esta sección se introducen algunos ejemplos sencillos para explicar la base de su funcionamiento, hay casos especiales que se tratarán aparte como las preguntas generativas con ficheros y las preguntas compuestas con fichero.

Finalmente al final del capítulo se incluyen algunas consideraciones y consejos en el uso de preguntas con ficheros.

Ejemplo 1

El siguiente es el enunciado (y la solución) de un pequeño programa en Python para determinar si una lista de números que se le pasa como argumento al programa está o no ordenada:

Para evaluar la solución se mostrará al alumno un área de texto donde debe introducir la respuesta:

Para corregir este ítem se usa un script de procesamiento escrito en el lenguaje SPSL, con las siguientes instrucciones, en la pestaña Avanzado, en donde debe indicarse previamente que el Sistema de presentación de la pregunta es Enviar fichero :

 python3 test.py 1 2 3 4 == True ->           : Incorrecto
 python3 test.py 1 5 3 4 == False -> Correcto : Incorrecto

Este script toma escribe en un fichero test.py el texto introducido por el alumno, y lo ejecuta con el interprete python3 pasandole primero unos parametros con los que debe dar un resultado True. Si no da este resultado el script de procesamiento devolverá como respuesta <!– Incorrecto –>. Si la primer prueba tiene éxito, probara una segunda con una lista no ordenada. Si el resultado es False, devolverá como respuesta <!– Correcto –> y si no <!– Incorrecto –>.

Al igual que en otros ítem externos, hay que indicar en el ítem base que estas son las dos opciones posibles de respuesta mediante los correspondientes patrones, ya que en este caso el ítem base es un ítem de respuesta libre, en la pestaña Contenido

Tambien es interesante poder usar el campo Refuerzo para informar al alumno del motivo del fallo. Para ello se podría hacer la siguiente modificacion en el script de procesamiento:

 python3 test.py 1 2 3 4 == True ->           : Incorrecto1
 python3 test.py 1 5 3 4 == False -> Correcto : Incorrecto2

y consiguientemente las modificaciones en los patrones:

a los que puede añadirse un refuerzo específico pulsando el botón Completar y usando el formulario que aparece:

Evidentemente, en un caso real se deberían añadir mas pruebas en el script de procesamiento para garantizar que el programa cumple las especificaciones de forma general, y no tan solo en dos casos de prueba.

Ejemplo 2

Un ejemplo clásico es la evaluación de las prácticas de programación en un lenguaje de programación, por ejemplo, supongamos el siguiente enunciado:

en donde el alumno debe enviar su porpia implementación en C++, mediante un fichero de nombre mcd.cpp

Para evaluar este fichero hay que definir algunos parámetros en la pestaña Avanzado.

Nombre del fichero

Es el nombre que se dará al fichero que envia el alumno. En realidad da igual el nombre del fichero del alumno. Cualquier fichero que envíe se renombrará con el nombre que se le asigne. En el ejemplo mcd.cpp

Directorio base

Es un subdirectorio del directorio auxiliar de la asignatura que puede contener algunos archivos de prueba o archivos auxiliares para la ejecución de las pruebas.

Directorio de trabajo

Cada vez que se ejecuta un ítem externo de fichero Siette asigna un directorio diferente dentro del subdirectorio exec del directorio auxiliar de la asignatura. Sobre este directorio copia dos cosas en este orden:

  • El archivo o archivos enviados por el usuario.
  • Todos los archivos que hubiera en el directorio base o sus subdirectorios.

En el ejemplo anterior no es necesario ningún archivo adicional, por lo que no hace falta usar ningun directorio base.

Script de procesamiento

El script de procesamiento es un programa escrito en lenguaje SPSL, que se introduce en el campo Script de la pestaña Avanzado.

En el caso anterior el script de procesamiento es el siguiente:

 @PatronSiette: false, false, false, true
 @OnError stop
 g++ -w -o mcd mcd.cpp <> *(error|warning)* 
 chmod +x mcd == * 
 echo 18 24   | ./mcd == *<6|6>   -> 1
 echo 192 224 | ./mcd == *<32|32> -> 5
 echo 110 154 | ./mcd == *<22|22> -> 10

Básicamente este script lo que hace es compilar el fichero enviado por el alumno, mediante la instrucción del sistema operativo: 1).

 g++ -w -o mcd mcd.cpp

Modificar los permisos de ejecución mediante la instrucción:

 chmod +x mcd  

y realizar tres pruebas de ejecución en la que en vez de esperar una respuesta por la entrada estándar se le pasan los valores mediante la instrucción echo y una tubería de Unix, que conecta esa salida a la entrada del programa recien compilado

 echo 18 24   | ./mcd

El resultado de esta prueba debería ser 6, o bien mcd=6, o cualquier otra que terminase con el número 6. Para ello el script de procesamiento utiliza el patron Siette *<6|6>, que encaja con cualquiera de estas respuestas.

En caso de que la prueba tenga éxito el script asigna el valor de 1 como posible respuestas, pero continúa su ejecución. realiza a continuación la siguiente prueba

 echo 192 224 | ./mcd 

que debe dar como resultado una secuencia que termine en 32. Si esta prueba tiene éxito, asigna el valor 5 omo posible respuesta, y prosigue con le ejecución. Si no, la ejecución del script de procesamiento termina y devuelve el valor que habia preparado anteriormente, es decir 1.

Finalmente realiza la tercera prueba con otros valores diferentes. Si tiene exito devolverá un 10, y si no lo tiene devolvera 5 que es la etiqueta asociada a la última prueba correcta.

En realidad, las etiquetas que devuelve el script son algo mas elaboradas, ya que pueden incluir información sobre la ejecución del script y la última sentencia que provocó un error. Por ejemplo, suponiendo que las dos primeras pruebas funcionan, pero no asi la tercera, el script de procesamiento devolveria realmente una cadena de texto como esta:

 <!--5--><code><pre><font color='red'>&gt;echo 192 224 | ./mcd
 x: y: mcd=24</font></pre></code>

que se muestra al alumno de esta forma:

<html><pre><font color='red'>&gt;echo 192 224 | ./mcd x: y: mcd=24</font></pre> </html>

que le indica que al ejecutar el programa mcd con los valores 192 224 el resultado obtenido es 24 (que no es correcto).

La respuesta del script de procesamiento es un trozo de texto en HTML. La primera parte de esta respuesta corresponde a la etiqueta de evaluación que se devuelve dentro de un comenatrio HTML para no interferir con la presentación de la respuesta al alumno.

Reconocimiento de la respuesta externa

Como cualquier otra pregunta externa, la respuesta debe ser comparada con los patrones de respuesta que contenga el ítem base. En este ejemplo los patrones que contiene este ítem base se muestran en la siguiente imagen:

Como puede apreciarse en este caso el patrón de reconocimiento, en este caso un patrón Siette que encaja con la respuesta del script de procesamiento es <!–5–>*, es decir, el patrón reconoce solamente la etiqueta de evaluación dentro del comentario HTML e ignora el resto de la respuesta de cara a la evaluación.

Puesto que la respuesta del script de procesamiento no ha sido completamente erronea, es potestad del profesor decidir si asigna un credito parcial a esta respuesta, mediante el sistema de evaluación por puntos, o bien si se dispone de datos suficientes, se podría calibrar un modelo de respuesta TRI politómico; pero esto ya es otra historia…

1)
Obviamente, el servidor debe tener instalado el compilador g++
es/manual/items/externosfichero.1625315677.txt.gz · Última modificación: 2021/07/03 12:34 por root

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki