Esta extensión permite ejecutar instrucciones del shell del sistema operativo (Linux) directamente e incrustar el resultado de la ejecución dentro del campo enunciado, o en cualquiera de las respuestas o patrones de evaluación, ayudas o refuerzos de una pregunta.
Por ejemplo, una pregunta de respuesta libre puede incluir el siguiente código en el enunciado:
Indicar el resultado de la ejecución del siguiente programa en Python:<br/> <code><pre> <EXEC> cat $HOME/for1.py </EXEC> </pre><code>
y como patrón de respuesta, y como ejemplo de respuesta correcta el siguiente:
<EXEC> python3 $HOME/for1.py </EXEC>
Que dará lugar a la siguiente pregunta:
Esta pregunta muestra el contenido del fichero “for1.py” situado en el directorio auxiliar de la asignatura, y lo ejecuta mediante el interprete de Python colocando el resultado de la ejecución como patrón de respuesta. Por consiguiente la respuesta del alumno podrá evaluarse Utilizando simplemente el método de Correspondencia, asumiendo que los espacios en blanco y fines de linea no son significativos.
Nótese que se ha definido una macro $HOME
que se sustituye por la ruta completa del directorio de la asignatura en el servidor de manera que pueda localizarse el fichero.
En realidad esta pregunta se podría haber formulado de forma estática, sin necesidad de utilizar la etiqueta <EXEC>. Simplemente sustituyendo el código manualmente en el enunciado y añadiendo manualmente el resultado de la ejecución como patrón de respuesta.
No obstante esta operación no siempre será posible compilarla a priori, si se introducen en la llamada elementos que hayan sido generados aleatoriamente, lo que dará una mayor variabilidad a la pregunta, por ejemplo:
<% int x = Random.nextInt(4,7); %> Dado el siguiente programa en Python, for2.py:<br/> <code><pre> <EXEC> cat $HOME/for2.py </EXEC> </pre><code> Hallar el resultado de la ejecución de la instrucción:<br/> <code>python3 for2.py <%= x %></code>
y como patrón de respuesta, y ejemplo de respuesta correcta:
<EXEC> python3 $HOME/for2.py <%= x %> </EXEC>
En este caso, Siette genera aleatoriamente un número entre 4 y 7 que se usa como parámetro de entrada en el patrón de respuesta, generando de esta forma múltiples preguntas con esta plantilla:
Este mecanismo también podría extenderse a la elección aleatoria del fichero de entrada entre un elenco de posibles ficheros disponibles en el directorio base. Por ejemplo suponiendo que disponemos de distintos ficheros “for1.py”, “for2.py”, “for3.py”, “for4.py”, etc. y eligiendo aleatoriamente uno de ellos tanto en el enunciado como en la ejecución:
<% int n = Random.nextInt(1,9); %> <% int x = Random.nextInt(4,7); %> Dado el siguiente programa en Python, for.py:<br/> <code><pre> <EXEC> cat $HOME/for<%= n %>.py </EXEC> </pre><code> Hallar el resultado de la ejecución de la instrucción:<br/> <code>python3 for2.py <%= x %></code>
y como patrón de respuesta, y ejemplo de respuesta correcta:
<EXEC> python3 $HOME/for<%= n %>.py <%= x %> </EXEC>
Este etiqueta puede considerarse como una alternativa mas simple a la evaluación de preguntas mediante envío de ficheros. La diferencia entre uno y otro caso es que al usar la etiqueta no se tiene acceso a la respuesta del alumno, ya que la evaluación con esta etiqueta lo máximo que puede hacer es modificar el patrón de respuesta. Sin embargo, el uso de la etiqueta <EXEC> es muy simple y es adecuado cuando lo que se quiere es comprobar si se ha entendido el funcionamiento de un determinado algoritmo.
También puede usarse para presentar datos dinámicos, bien sea de forma gráfica o mediante estadísticos, utilizando comandos como RScript.
En general si los datos de entrada son fijos, será mas conveniente reemplazar la ejecución por su resultado evitando la sobrecarga que supone la ejecución externa. Los ejemplos planteados anteriormente son tan simples que pueden reemplazarse por plantillas en JSP, pero esto no siempre será posible.