Generación de exámenes aleatorios

Pablo Angulo - Juan Viu Sos - Otros compañeros de la UPM

Charla ENSEMAT II

Objetivos

¿Qué?

  • Exámenes con variantes cualitativas: enunciados parecidos, pero con cambios cualitativos
  • No basta con barajear las respuestas o “cambiar los números” si no cambia el discurso.

¿Para qué?

  • Para que una persona no pueda hacer el examen de toda la clase (exámenes online, etc)
  • Para poder generar uno o más de los ejercicios de un examen (alumnos que faltan por causa justificada, etc)
  • Para ofrecer exámenes “para prácticar” que no son idénticos a los de pasadas convocatorias.

Dificultades

  • Generar y gestionar las variantes
  • Experiencia del estudiante:
    • cuestionario online
    • versus
    • escribir en un papel o rellenar un documento
  • Corrección
  • Revisión (parcial o general)
  • Dar feedback

¿Cómo?

¿Cómo? (1/2)

  • Preguntas conceptuales tipo “test moodle”…copia y pega y crea variantes. Misma categoría para todas. (Alicia@ETSIN)
    • Buen control y corrección.
    • Feedback al estudiante
    • ¡Costoso!
  • Preguntas moodle con variables (Leonardo@ETSIN, Carlos@ETSIAAB, Juan@ETSICCP)
    • Gestión parcial sobre las variantes…
    • Moodle: únicamente preguntas calculadas
    • Difícil acceso a los datos completos

¿Cómo? (2/3)

  • Preguntas numbas con variables (Carlos@ETSIAAB, pang)
    • Más posibilidades
    • Mucho mejor feedback para el estudiante
    • Mal encaje con moodle si quieres hacer un examen de verdad

¿Cómo? (3/3)

  • Auto Multiple Choice con fpeval o similar (pang)
    • Distribuir enunciado y solución por email con un adjunto pdf
    • Distribuir pdf por moodle usando una actividad “carpeta”
    • Recoger pdf por moodle usando una “entrega”
  • Módulo exams de R (no lo hemos usado “in the battlefield”)

Nuestras soluciones

pang: con sagetex

  • full latex
  • todo el cálculo simbólico de sage
  • entrega y recoge via email, o via moodle
  • pdf forms para las preguntas multiple choice, que se evalúan automáticamente
    • pero no reconoce “imprimir a un archivo”

jviu: jupyter con sagetex

  • Generar bancos de preguntas para moodle
  • Jupyter: interfaz tipo notebook para python, sage, R,…
    • ¡Gestión y generación de parámetros para ejercicios!
  • En una misma Categoria del banco de preguntas de moodle:
    • una misma pregunta de tipo Desarrollo con distintos parametros
    • moodle: reparte aleatoriamente las preguntas
    • estudiante: escribe la solución a mano y sube una foto…
    • …¡y recibe todas las soluciones detalladas del ejercicio! (sagetex)

Wishlist

Wishlist (1/3)

  • LaTeX look and feel
    • un sólo documento LaTeX (¡con tu editor favorito!)
    • expansión de comandos LaTeX
  • Cálculo simbólico (sage, sympy …)

Wishlist (2/3)

  • Exportar a pdf y a moodle
    • parametriza los enunciados y las soluciones detalladas
    • recibir tanto pdf rellenando los formularios, como pdf “quemados” o impresos+escaneados, para el mismo examen
  • Banco de preguntas para futuros exámenes
    • bancos de preguntas privados
    • bancos de preguntas de un grupo reducido
    • bancos de preguntas públicos
    • categorización por temáticas, técnicas usadas, dificultad…

Wishlist (3/3)

Cuadrante de features deseables, y cuáles de las soluciones anteriores satisface cada una:

latex lenguaje (¿CAS?) pdf form pdf scan moodle question database
moodle half simple cross cross tick tick
numbas half javascript cross cross Htick tick
auto multiple choice full simple tick tick tick cross
R exams half R cross tick tick Htick
sagetex pang full Sage tick tick cross cross cross
sagetex jupyter jviu full Sage tick cross cross tick cross

¿Un enfoque modular?

Combinar paquetes existentes

Combinar varios paquetes con esas capacidades parece una buena forma de conseguir todas las features de la wishlist, ¿verdad?

Frankenstein
Frankenstein

Soluciones à la Frankenstein (1/2)

  • Auto-Multiple-Choice + sagetex + un poco de LaTeX adicional -> ¡Vive! pero los dos hackean verbatim de formas incompatibles, y cualquier fallo se multiplica: muy incómodo
  • sagetex + \usepackage{moodle} + ??? -> No funciona
    • el paquete moodle ya avisa que no es compatible con muchos paquetes LaTeX
    • ¡el paquete moodle no expande \newcommand{}{}!
    • LaTeX es un lenguaje de marcado venido a más, no es buena idea usarlo como un lenguaje de propósito general

Soluciones à la Frankenstein (2/2)

  • R exams + sage + reticulate -> habría que usar tanto sage como R, no tendría full LaTeX
  • python glue + R exams + sage -> podría ser, pero no tendría full LaTeX, y creo que no funcionaría bien

Un proyecto propio: pyexams

pyexams

  • TexSurgery para evaluar los comandos
    • reemplaza comandos LaTeX como \name por el nombre del estudiante
    • usa cualquier kernel jupyter (sage, Julia, Python, R, etc etc)
    • sintaxis LaTeX para construcciones habituales: \sif{condition}{tex1}{tex2}, \schoose{tex1}{tex2}, ssample, …
  • primera versión con el paquete moodle de ctan-latex para generar los ejercicios (-> funciona ¡pero no expande comandos!)
  • segunda versión con amc2moodle, que sí expande comandos
  • cambia el comando pdflatex por pyexams en tu editor de LaTeX y trabaja con un sólo documento

pyexams


				\usepackage[sagemath]{pyexams}
				\newcommand{\R}{\mathbb{R}}
				%...
				\begin{minipage}{.85\linewidth}
				Student: {\bf \name \;  \surname},  \quad ID:  {\bf \id}
				\end{minipage}
				%...
				\begin{question}{derivative-sin}
				\qvariant{1} \qtags{derivative}
				\begin{runsilent}
				set_random_seed(\seed)
				a = randint(2,10)
				f = sin(a*x)
				fd = f.derivative(x)
				\end{runsilent}
				What is the first derivative of $\eval{f}$?
				\begin{choices}
				  \correctchoice{$\eval{fd}$}
				  \wrongchoice{$\eval{fd*a}$}
				  \wrongchoice{$\eval{fd + a}$}
				\end{choices}
				\end{question}

pyexams

  • Extraer ejercicios y almacenarlos
    • plain old text files
    • base de datos con los metadatos, para buscar ejercicios de otros años
    • se guarda el ejercicio y los exámenes en los que apareció
  • git-under-the-hood para crear y compartir repositorios de ejercicios (github, gitlab, etc)
  • Current status: proof of concept

pyexams

Coming soon

  • tick pip install texsurgery, pip install pyexams
  • tick TexSurgery con jupyter kernels
    • Htick inserta las imágenes en el tex
    • question mark inserta las imágenes en moodle.
  • tick \usepackage{automultiplechoice}
  • Htick Recoger ejercicios, colocarlos en carpetas, montar repositorio git, poblar la base de datos, interfaz web a la base de datos (local)
  • Htick Recopilar información de pdf forms
  • Htick Compila las variantes en paralelo

pyexams the future?

  • question mark Recopilar información de scans
    • Htick Identificar un código QR para exámenes escritos escaneados
    • tick Posicionar los formularios en el pdf
    • question mark pillow, scikit-image, opencv,…
  • question mark Respuestas simbólicas
    • question mark ¿Recopilar las respuestas de moodle y procesarlas con pyexams?
    • question mark ¿Modificar el servidor de exámenes de numbas?

Conclusiones

Conclusiones

  • El problema de calificar y certificar a distancia está muy mal resuelto (comparado con enseñar a distancia)
  • Enseñar es más importante, pero calificar es parte de nuestro trabajo
  • Generar exámenes con variantes también sirve para entrenar
  • Nuestras soluciones con sage son usables (¡y las hemos usado!)
  • Pero pensamos que merece la pena pararse y pensar antes de continuar
    • Solución 100% código abierto
    • Multiplataforma (linux, mac y windows nativo)
    • Multilenguaje (sage, python, R, julia, octave, muchos otros)

¡Eso es todo!