• No se han encontrado resultados

Capítulo 2: Estado de la cuestión

2.3.1 Sistemas Correctores

En la siguiente sección, en primer lugar, se definen los sistemas de calificación automática y se enumeran sus ventajas. En segundo lugar, se recogen los sistemas correctores.

2.3.1.1 Sistemas de Calificación Automática

Los sistemas de calificación automática (automatic grading system) son herramientas que hacen uso de los avances en la tecnología Web y adoptan enfoques de prueba cada vez más sofisticados. La evaluación automatizada puede producir beneficios para los profesores y alumnos. Douce y sus colegas (2005) describen una serie de sistemas de evaluación automática influyentes. En su artículo argumentan una serie de ventajas e inconvenientes del uso de estos sistemas. Por ejemplo, que ahorran mucho tiempo para el profesor, dado que la evaluación de las tareas de programación es una tarea difícil y consume mucho tiempo, entonces el profesor puede dedicar más tiempo dando orientación a los alumnos y explicando los conceptos que encuentran difícil de entender. Otra ventaja es que los evaluadores humanos son falibles, mientras que los evaluadores automáticos pueden dar respuestas totalmente objetivas. De las inconvenientes se encuentra las restricciones que se aplican cuando se evalúa de forma automática. Un sistema de evaluación no puede identificar una solución innovadora o creativa del alumno y por lo tanto no la puede premiar (subir nota). Siempre habrá una necesidad de los evaluadores humanos. Estos sistemas pueden proporcionar apoyo para el profesor permitiendo identificar las ideas erróneas potenciales o los problemas de los alumnos más fácilmente. En resumen, se debe combinar estos sistemas con la evaluación humana.

Por otro lado, Cheang y sus colegas (2003) identifican tres componentes principales que intervienen en la calificación de las tareas de programación:

1) Exactitud. El componente más importante al calificar una tarea de programación debe ser su corrección. Un programa es correcto si muestra el comportamiento correcto de Entrada/Salida para todas las entradas en el dominio del espacio del problema.

2) Eficiencia. Un programa es eficiente si desempeña sus actividades sin consumir demasiado tiempo de procesamiento y espacio de memoria.

3) Mantenibilidad. Un programa es fácil de mantener si el código es fácil de entender empleando nombres descriptivos de variables, comentarios, sangría y programación modular.

2.3.1.2 Revisión de los Sistemas Correctores

Podemos distinguir dos tipos de sistemas, sistemas que dan apoyo a la gestión de los concursos de programación y que están diseñados para evaluar a los concursantes de las competiciones de programación y sistemas para el aprendizaje de programación que están diseñados para los cursos de programación y que permiten a sus usuarios practicar y evaluar sus programas.

En primer lugar, de los sistemas que apoyan la gestión de concursos de programación, encontramos el entorno PC2 (Anon., 2013) que está diseñado para apoyar las competiciones de programación y tiene capacidades para la gestión individual y de concursos. El sistema también soporta el modo “jueces automáticos”, donde se juzga mediante la herramienta sin la necesidad de jueces humanos. PC2 proporciona un mecanismo para que los concursantes presenten solicitudes de aclaración y consultas a los jueces. Los concursantes presentan sus programas. Los jueces pueden volver a compilar el programa presentado, ejecutarlo, ver el código fuente y los resultados de la ejecución y enviar una respuesta a los concursantes.

Del mismo modo, el sistema Mooshak (Leal & Silva, 2003) actúa como un administrador de concurso completo y como un juez automático para concursos de programación. Mooshak se aplica además para el aprendizaje de programación. Tiene capacidades de evaluación automática para ayudar a los jueces humanos en la evaluación de programas. Los concursantes presentan programas de código, hacen preguntas a los jueces y acceden a todas las preguntas formuladas por los participantes y sus correspondientes respuestas dadas por los jueces. Además permite el acceso a la lista de todas las presentaciones y las notas correspondientes, imprimir los programas de código de desarrollo y visualizar en el navegador descripciones del problema. Este sistema es una herramienta automática que es capaz de evaluar la corrección de los programas a base de un conjunto predeterminado de pares de Entrada/Salida. Cuenta con una interfaz basada en la web para los profesores, alumnos, usuarios invitados y el administrador del sistema. García y Alemán (2009) detallaron una experiencia innovadora en el curso de Algoritmos y Estructuras de Datos usando Mooshak. En esta experiencia ha sido remplazada por completo la evaluación tradicional del examen

final con una serie de actividades, muchas de ellas con Mooshak, obteniendo dos beneficios: la motivación de los alumnos para participar en el actividades propuestas para evitar el examen final y la evaluación del trabajo del alumno durante el curso, en lugar de en un único examen, consiguiendo la objetividad de la evaluación. Con Mooshak, los alumnos tienen que ser mucho más riguroso en el desarrollo de sus programas obteniendo retroalimentación inmediata del sistema. Como ventaja está el ahorro de tiempo y trabajo por parte del profesor con el uso de un sistema de evaluación automática aunque los conceptos importantes como la robustez y la legibilidad deben ser puntuadas manualmente por los profesores. Además, la usabilidad de Mooshak ha sido evaluada positivamente.

Online Judge (Cheang, et al., 2003) es otro sistema en línea para concursos de programación que comprueba la corrección y eficiencia de un programa ejecutando los programas presentados. La corrección depende de si la salida producida coincide con las respuestas pre-especificados. La eficiencia de una presentación depende de si el programa es capaz de producir su salida dentro del límite de tiempo y recursos de memoria. Los alumnos deben presentar sus soluciones como programas que se pueden ejecutar. Los programas se compilan y ejecutan en el servidor, la salida del programa presentado se compara con la salida real. El sistema permite detectar casos de plagio. Sin embargo, los comentarios del sistema a los alumnos no son concisos. Además Online Judge no es capaz de manejar varios cursos a la vez y el sistema no puede determinar la mantenibilidad de un programa presentado.

En segundo lugar, existen varios sistemas que se utilizan para los cursos de aprendizaje de programación o para mejorar las habilidades de programación de los alumnos o entrenar a los concursantes dado que practicar es uno de los pasos más importantes en el aprendizaje de la programación. Por ejemplo UVa Onlinejudge (Revilla, et al., 2008) es un repositorio de problemas de programación que tiene una colección grande y creciente de problemas de programación (más de 4.300 problemas). Proporciona un juez automatizado en línea 24 horas que interactúa con los usuarios a través de los e-mails. Es un servidor que contiene la descripción de los problemas de diferentes concursos. Un usuario, desde cualquier parte del mundo, puede registrar en el sistema de forma gratuita y resolver tantos problemas que quiera. Incluso puede enviar tantas soluciones como él quiera, hasta que reciba información satisfactoria, no sólo acerca de la corrección de su programa, sino también acerca del tiempo que el código tardó en ejecutarse. El usuario recibe una evaluación más completa del sistema, no sólo indicando que el problema es correcto (o no) pero además

incluyendo la calificación de la calidad de las soluciones. Esto puede variar desde una solución no significativa (menos de 50% de la corrección) a una solución completamente correcta (100%). También permita analizar la eficiencia de un programa.

CourseMarker (Higgins, et al., 2003)(Higgins, et al., 2002) es otra herramienta para cursos de programación. El alumno puede seleccionar el curso, el tema y el ejercicio que quiere completar. La herramienta permite comprobar el diseño del programa presentado como la sangría, elección y duración de identificadores y el uso de comentarios. Todos los parámetros de la tipografía se pueden personalizar en base del ejercicio. CourseMarker permite a los alumnos volver a presentar su solución tantas veces como especifica el desarrollador del ejercicio. La evaluación se realiza mediante un mecanismo automatizado que analiza el programa a través de una serie de criterios con el énfasis en la exploración de diseño del programa. El sistema puede detectar casos de plagio. Una de sus novedades más interesantes es su apoyo a una impresionante variedad de lenguajes, incluyendo Prolog, SQL y FORTRAN. Incluso se puede ver la información acerca del progreso de los alumnos. Además se ha comprobado su usabilidad positivamente.

El sistema ASAP (Douce, et al., 2005) de la Universidad de Kingston es una herramienta para el aprendizaje de lenguaje de programación Java. El sistema permite a los profesores ver la solución de los alumnos a través de un servicio Web y evaluar automáticamente el código del alumno con comentarios apropiados. Cuando un alumno envía una tarea, su programa se califica y se evalúa. Un documento XML, que contiene los comentarios acerca del programa, una descripción de las pruebas y una calificación final, se genera automáticamente. Los comentarios proporcionados por el sistema pueden ser muy simples o más detallados (en el caso de un resultado incorrecto, se proporcionan sugerencias a los alumnos para la respuesta correcta). Incluso permite la generación automatizada de preguntas objetivas para poner a prueba los resultados de aprendizaje y la detección de plagio.

Jutge.org (Giménez, et al., 2012) es un juez de programación educativa en línea que está diseñado tanto para los profesores como los alumnos. Los alumnos pueden inscribirse en los cursos del profesor y en los cursos públicos para practicar. El repositorio de problemas en Jutge.org está organizado por temas y clasificado por dificultad. Los profesores pueden adaptar sus cursos de programación utilizando una gran base de 800 problemas y 22 lenguajes de programación de

acuerdo a sus necesidades y preferencias. En Jutge.org, una solución del alumno no debe coincidir exactamente con los resultados producidos por la solución de Jutge.org. En el proceso de validación de una solución del alumno no se da por incorrecta si no tiene un formato estricto de la salida o si las palabras están separadas por un espacio o una línea en blanco. Además el orden de la salida también es irrelevante, siempre que contenga todo lo que debe contener. Es más, cuando la salida de un problema es un número flotante (float), una aproximación puede ser tolerada. Finalmente, en los problemas de optimización, las soluciones no son únicas. Jutge.org comprueba la salida para este tipo de problemas utilizando correctores externos. Primero se calcula la solución del problema utilizando su propia solución y luego se comprueba si es el mismo resultado introducido por el alumno. Las principales características de Jutge.org para los profesores son la automatización del proceso de corrección, la creación y el mantenimiento de sus propios cursos, la gestión de sus listas de tareas y el acceso a la información acerca del progreso de los alumnos.

AlgoVista (Collberg, et al., 2004)(Collberg, et al., 2002) también puede ser utilizado como una herramienta para la verificación de programas. Cada algoritmo tiene vinculado un corrector que es el encargado de verificar la exactitud de los resultados que calcula. La base de datos almacena tanto las descripciones de problema como su verificación o “checklets”. Además, es un motor de búsqueda basado en la Web que ayuda a los alumnos a encontrar algoritmos e implementaciones que resuelven problemas específicos. Para buscar un algoritmo determinado, un usuario simplemente escribe la consulta mediante un editor sobre la base de un navegador Web. El resultado de la búsqueda es una lista de enlaces a recursos Web que describen o proporcionan implementaciones del algoritmo. El sistema se puede utilizar para crear tareas de programación interesantes en clases de algoritmos.