Las funciones de evaluación son pequeños programas escritos en un lenguaje de script propio de Siette denominado lenguaje SSL que sirven para determinar si la respuesta de un alumno cumple una determinada condición, asignándole en cada caso un valor como correcta o no. Al igual que pasa con los demás patrones, puede haber condiciones que si se cumplen indican que la respuesta es correcta, (o al menos parcialmente correcta), y otras condiciones que indiquen lo contrario, es decir, que si se cumplen la respuesta es incorrecta (o parcialmente incorrecta, en el caso de varias respuestas).
A continuación se presentan algunos ejemplos sencillos para aclarar esta idea. 1)
Por ejemplo, supongamos que se quiere evaluar la siguiente pregunta:
En este caso no sirven los patrones de evaluación anteriores, ya que habría que introducir uno a uno todas las posibles respuestas. El patrón correcto en este caso sería una única función de evaluación:
if (answer <100 || answer>=1000) { return false; } for(i=2; i<answer; i++) { if (answer % i == 0) { return false; } } return true;
Esta a función devuelve false
en caso de que consiga hallar un divisor de la respuesta dada por el alumno y true
en caso contrario. También devolvería false
en caso de que se produzca cualquier error o excepción de programación al evaluar el código.
Nótese que para acceder a la respuesta del alumno se utiliza una variable predefinida denominada answer
. 2)
Supongamos ahora que se usan dos campos de respuesta, que deben indicarse en el campo Número de respuestas de la pestaña Contenido.
En este caso, Siette requiere que haya al menos dos patrones de respuesta que sean correctos, así que la pregunta se formula pensando en la evaluación de dos restricciones y se escriben dos funciones de evaluación, una para el producto y otra para la suma:
Además se han añadido sendos mensajes de refuerzo para que quede claro al presentar la evaluación, cuales han sido los patrones que se han aplicado
En este caso ambas funciones de evaluación se han satisfecho y consiguientemente las dos respuestas se han considerado correctas:
Nótese que para acceder ahora a las respuestas del alumno se utilizan independientemente las variables answer[0]
y answer[1]
, en el ejemplo 6
y 7
respectivamente. La variable answer
contiene una combinación de ambas respuestas, exactamente la secuencia: {6,7}
.
A diferencia de otros patrones que evalúan cada una de las respuestas de forma separada comparándolas con cada uno de los patrones, las funciones de evaluación componen siempre las respuestas del alumno en una sola, y ésta se compara con las funciones de evaluación tantas veces como respuestas se hayan declarado. (El siguiente ejemplo mostrará una mejora en este sentido.)
En este caso solo una de las restricciones se satisface. La otra restricción no se llega a cumplir por lo que el segundo patrón que se aplica es el patrón por defecto. 3)
Finalmente en este caso no se cumple ninguna de las dos restricciones, por lo que el patrón por defecto se utiliza dos veces, no asignando ninguna puntuación a esta pregunta:
El ejemplo es el mismo que el anterior, con dos opciones de respuesta, y dos patrones de respuesta correctos mediante dos funciones de evaluación. La diferencia en esta caso es que se han añadido otros tres patrones de respuesta, mediante otras tres funciones de evaluación que recogen casos de error específicos con el objeto de poder presentar refuerzos mas informativos:
En los siguientes casos se dispara en cada caso un patrón de respuesta correcta y un patrón de respuesta incorrecta correspondiente a la negación del segundo patrón. Nótese que hay que diferenciar dos cosas: (1) Que el patrón (en este caso la función de evaluación) se cumpla o no se cumpla. Se cumplirá solo si devuelve true
.; (2) Que el patrón (función de evaluación) sea correcto o incorrecto, lo que tendrá implicaciones para la evaluación de la pregunta. Téngase en cuenta que como se vio en el ejemplo anterior si Siette no consigue satisfacer ninguno de los patrones propuestos por el profesor, escogerá como identificador de respuesta un patrón por defecto Ver ejemplo anterior.
En el siguiente caso no se dispara ninguno de los patrones de respuesta correcta, pero si que se dispara un patrón de respuesta incorrecta, dando como resultado un refuerzo. (Estos refuerzos deben introducirse en el editor intermedio que aparece al pulsar el botón Completar
, junto a cada una de las funciones de evaluación).
Por coherencia interna, Siette impone la restricción de que el número de respuestas que da el alumno a una pregunta de respuesta libre debe ser siempre inferior al número de patrones declarados como correctos, de manera que pueda haber al menos un patrón correcto por cada campo de respuesta.
Una alternativa que permite sortear esta restricción es forzar a que Siette utilice un único campo de respuesta. En este caso, la respuesta debe venir compuesta en esta forma:
'{' respuesta0 , respuesta1 , respuesta2 , …. '}'
Aunque Siette presenta un único campo de respuesta , en el interfaz se puede indicar que el número de respuestas es mayor que uno (Dos en el ejemplo anterior), así que Siette presentará un solo campo de respuesta y probará si se verifican los patrones dos veces con la misma respuesta dada por el alumno. Por ejemplo:
La respuesta del alumno ha sido {6,7}
; de la cual Siette extrae los dos valores answer[0]
y answer[1]
, de la misma manera que lo hizo anteriormente. Las funciones de evaluación son las mismas, y como puede verse, con esta respuesta se han verificado las dos.
Evidentemente hay una crítica al ítem anterior, y es que el alumno no tiene porque saber cómo escribir la respuesta, podría haber escrito simplemente 6 y 7
, en vez de {6,7}
. Si hubiera hecho esto, el ítem anterior habría fallado en su evaluación, al no poder diferencias cada uno de los componentes de la respuesta.
La solución a este problema son los ítems interactivos mediante javascript, mediante los cuales podemos modificar libremente el enunciado, componer la respuesta y enviarla a Siette. 4)
que contiene en el enunciado el siguiente código en html + javascript:
Escriba dos números mayores que 1, cuyo producto sea exactamente 42 y su suma 13.<br/><br/> <font size='+1'> <input id='x0' type='text' size='2' onKeyUp="set('x1','x0')"> × <input id='y0' type='text' size='2' onKeyUp="set('y1','y0')"> = 42<br/> <input id='x1' type='text' size='2' onKeyUp="set('x0','x1')"> + <input id='y1' type='text' size='2' onKeyUp="set('y0','y1')"> = 13 </font> <script> function set(id1, id2) { document.getElementById(id1).value = document.getElementById(id2).value } function evaluacion() { x = document.getElementById('x0').value; y = document.getElementById('y0').value; return '{' + x + ','+ y + '}' ; } </script>
Aunque aparecen cuatro casillas de respuesta, los valores de cada columna se copian automáticamente al escribir en una de ellas. El evento onKeyUp
llama a la función set(id1,id2)
que se encarga de pasar los valores de uno a otro campo de respuesta.
La funcion javascript evaluacion(), es llamada por Siette al finalizar el ejercicio, compone la cadena de respuesta, en esta caso {6,7}
y la devuelve como respuesta del alumno. En el campo Número de respuestas de la pestaña Contenido se ha escrito un 2
y en la pestaña Presentacion se ha seleccionado la opción Utilizar un solo campo de respuesta, al igual que en el ejemplo anterior.
Las funciones de evaluación son las mismas, la respuesta la misma, y consiguientemente el ítem se comporta del mismo modo que en el ejemplo anterior, aunque eso si, no presenta sobrecarga cognitiva para responder como ocurría en el ítem anterior.
El ítem podría mejorarse incluso utilizando la función resolver() para colocar otra vez en su sitio las respuestas del alumno y corregirlas sobre el propio enunciado, pero eso es ya otro problema, que nada tiene que ver con los patrones de funciones de evaluación.
respuesta
que tiene exactamente la misma función.javascript
en el campo Autocorreccion de la pestaña Avanzado del menú de Preguntas