scieee AI-readable full text Open interactive document viewer

Sistema de calificaciones con gestión web

Pérez Díaz, Francisco José

Abstract

El propósito principal de este proyecto es la consecución, por parte del profesor, de una hoja de cálculo con las calificaciones de los alumnos presentados a una convocatoria de una asignatura, generando la misma directamente desde las hojas de examen de los alumnos. Dicha solución es desarrollada a partir del software libre ImageMagick Convert, que es una suite para creación, edición, composición y conversión de imágenes disponible para sistemas Linux. Su funcionalidad es presentada mediante línea de comandos, y permite leer y escribir imágenes en más de 200 formatos (PNG, JPEG, GIF y TIFF, entre muchos otros). También se implementa una plataforma web que presentará la funcionalidad al profesorado. Aprovechando que los exámenes han de ser escaneados para el uso de nuestra herramienta, dicha plataforma web permitirá a los alumnos matriculados en las distintas asignaturas acceder (bajo usuario y contraseña) al sistema y ver las hojas de sus exámenes escaneadas junto a su calificación.

Full text

Equation Chapter 1 Section 1 Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de Telecomunicación Intensificación Telemática Sistema de calificaciones con gestión web Autor: Francisco José Pérez Díaz Tutor: Rafael María Estepa Alonso Departamento de Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2015 3 Trabajo Fin de Grado Grado en Ingeniería de Tecnologías de Telecomunicación Intensificación Telemática Sistema de calificaciones con gestión web Autor: Francisco José Pérez Díaz Tutor: Rafael María Estepa Alonso Profesor titular Departamento de Ingeniería Telemática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2015 5 Trabajo Fin de Grado: Sistema de calificaciones con gestión web Autor: Francisco José Pérez Díaz Tutor: Rafael María Estepa Alonso El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2015 El Secretario del Tribunal 7 Sobre el autor Francisco José Pérez Díaz Grado en Ingeniería de Tecnologías de Telecomunicación Intensificación Telemática Universidad de Sevilla [email protected] Agradecimientos Quiero agradecer a los profesores, a todos los encontrados a lo largo de este camino, por haberme enseñado todo lo necesario para estar hoy aquí. Gracias a mis padres, Francisca y José, quienes aparte de darme nombre, me han dado algo que ellos no recibieron en su juventud: orientación. A mi madre, por ese empuje que nos da cada día, en el extremo opuesto a aquellas familias que no quisieron una vida mejor para sus hijos. A mi padre, porque todos sabemos que su gran inteligencia y su capacidad de sacrificio nunca se vieron eclipsadas por la escasa fortuna de tiempos pasados. A mi hermana pequeña, Marina, por tus siempre necesarios deseos de suerte antes de los exámenes más duros que he tenido, muy importante para que este momento haya llegado tan pronto como lo ha hecho. No puede faltar una mención a mi abuela Gertrudis, quien siempre se ha alegrado de mis logros incluso cuando no he tenido tiempo ni para ir a visitarla. Tampoco puedo dejarme a mi difunto abuelo Francisco, que tanto ayudó (y ayuda) a mi familia pese a verse rodeado de personas dañinas. Gracias a Mari Carmen, que me lleva sufriendo dos cursos y medio ya, por saber escucharme y comprenderme, y brindarme su apoyo cuando no lo he encontrado en mí mismo. Fundamental su compañía y acogida en su casa mientras elaboraba este documento. A mis amigos de la escuela, Javier, Miguel, Francisco, Daniel, Ricardo, Adrián y Jairo, porque esta aventura en solitario hubiera sido imposible. A José Manuel y Alejandro, mejores amigos desde la ESO y por siempre con toda seguridad. Francisco José Pérez Díaz Sevilla, 2015 9 Resumen El propósito principal de este proyecto es la consecución, por parte del profesor, de una hoja de cálculo con las calificaciones de los alumnos presentados a una convocatoria de una asignatura, generando la misma directamente desde las hojas de examen de los alumnos. Dicha solución es desarrollada a partir del software libre ImageMagick Convert, que es una suite para creación, edición, composición y conversión de imágenes disponible para sistemas Linux. Su funcionalidad es presentada mediante línea de comandos, y permite leer y escribir imágenes en más de 200 formatos (PNG, JPEG, GIF y TIFF, entre muchos otros). También se implementa una plataforma web que presentará la funcionalidad al profesorado. Aprovechando que los exámenes han de ser escaneados para el uso de nuestra herramienta, dicha plataforma web permitirá a los alumnos matriculados en las distintas asignaturas acceder (bajo usuario y contraseña) al sistema y ver las hojas de sus exámenes escaneadas junto a su calificación. 17 2 ESTADO DEL ARTE l reconocimiento óptico de marcas [1] se define como el proceso de capturar datos de marcas desde documentos. No es algo novedoso, pues sus orígenes datan de la década de 1930 [2]. Es ampliamente utilizado en corrección de exámenes a los que se presentan muchos candidatos, tales como oposiciones, niveles de idiomas o permisos de conducir. Su uso también se extiende al procesamiento de encuestas, participaciones de loterías, e incluso procesos electorales [3]. 2.1 Reconocimiento óptico de marcas (OMR) Los formularios OMR están diseñados para ser leídos por una unidad lectora óptica de marcas, y dicho diseño va unido con su funcionamiento. En los formularios OMR se distinguen tres tipos de elementos: clocks, columnas y casillas de marca [4].  Casillas de marca: campos donde el interesado realiza las marcas que conforman su respuesta.  Clocks: marcas rectangulares situadas en uno de los bordes verticales de la hoja, que señalan una línea horizontal de lectura. Si la lectora detecta un clock, interpretará que el resto de la línea horizontal puede contener casillas de marca. Mientras no se detecte ningún clock, no se realizará lectura alguna en línea horizontal.  Columnas: se define como el máximo número de casillas de marca que puede existir en una línea horizontal definida por un clock. También se denominan como canales de lectura [4]. El par clock-columna define a una casilla de marca. A continuación se muestra la imagen de una hoja de respuestas de un examen de nivel de idiomas de la Universidad de Cambridge (a modo de ejemplo), extraída de un libro [5], sobre la que se detallan los conceptos anteriores. E «No basta tener buen ingenio; lo principal es aplicarlo bien». - René Descartes - Estado del arte 18 Figura 5.- Casillas de marca, clocks y columnas 2.2 Historia La primera consecución en cuanto a reconocimiento óptico de marcas vino de la mano de IBM y su 805 Test Scoring Machine [1] [2], comercializada en 1937. Figura 6.- IBM 805 Test Scoring Machine [2] Poseía 750 contactos eléctricos, los cuales se presionaban contra la hoja de respuesta. Las marcas se debían realizar con lápiz, de modo que, si una casilla estaba marcada, la conductividad del grafito permitiría el paso de corriente entre ambos contactos. La IBM 805 fue retirada del mercado en 1963, dejando paso en el mercado a la IBM 1230 optical mark scoring reader, que fue comercializada el año anterior. Este nuevo modelo ya hacía uso de la nueva tecnología óptica, dejando atrás el uso de los contactos eléctricos, y pudiendo procesar hasta 1200 hojas por hora [6]. 19 19 Sistema de calificaciones con gestión web A partir de este momento otras compañías se unieron al mercado, destacando Scantron Corporation [7], que en torno a 1967 comenzó a ofrecer servicios de distribución de unidades lectoras y venta de formularios de respuestas para exámenes. Hoy en día sigue en activo, ofreciendo también servicios de recolección de datos a diversas instituciones. 2.3 Servicios vía software El coste económico de los dispositivos necesarios y de la generación de formularios en papel desencadenó la aparición de software que solo requería escáneres convencionales para la lectura de formularios. Los mismos también ofrecen la posibilidad de diseñar los formularios según las necesidades, e imprimirlos sin utilizar tampoco ningún hardware extra. Ejemplos de software de este tipo son los siguientes:  queXF [8]  Udai OMR tool [9]  Ogami OMR [10] 2.4 Conclusiones sobre el estado del arte El proyecto que se detalla en los próximos capítulos del presente texto podría catalogarse de la misma forma que los ejemplos software anteriores: utilizando equipos convencionales de escaneo e impresión, generar formularios a rellenar por alumnos y/o profesores para su posterior procesado en forma de ficheros de imagen. 21 3 PREVIO A LA AUTOMATIZACIÓN ntes de comenzar con el desarrollo de la utilidad en sí, conviene aclarar diversos conceptos que el software debe manejar. 3.1 Tipos de exámenes Como se ha indicado en el primer capítulo (Introducción), se van a distinguir entre exámenes tipo test y exámenes de solución abierta. Los exámenes tipo test estarán formado por el número de preguntas que se indique, las cuales contarán con un número de opciones de respuesta (también a indicar), de las cuales solamente habrá una opción válida. En cada pregunta el alumno puede o no marcar alguna de las opciones. La secuencia de respuesta dada por el alumno se comparará con la secuencia que define a la solución correcta del examen, obteniendo así el número de aciertos, el número de fallos, y el número de “no contestadas”. La nota final se calculará en función de los aciertos y los fallos, no influyendo las preguntas que no se han contestado. Este cálculo se realizará utilizando la siguiente expresión: 𝑁𝑂𝑇𝐴 𝐹𝐼𝑁𝐴𝐿 𝑇𝐸𝑆𝑇= (𝑁𝐴−𝑁𝐹 𝑁𝑂−1)10 𝑁𝑃 Donde,  NA es el número de aciertos que ha tenido el alumno,  NF es el número de fallos que ha cometido el alumno,  NO es el número de opciones con el que cuenta cada pregunta,  NP es el número de preguntas que conforman el examen,  NOTA FINAL TEST es la nota obtenida por el alumno sobre un total de 10 puntos. El motivo de esta formulación es que la nota esperada en un alumno que contesta al azar sea de 0 puntos. A «La ciencia puede divertirnos y fascinarnos, pero es la ingeniería la que cambia el mundo». - Isaac Asimov - Previo a la automatización 22 Por otro lado, los exámenes de solución abierta requieren el juicio del profesor para ser puntuados. Serán exámenes de este tipo los que consten de preguntas de desarrollo, cuestiones cortas y/o resolución de problemas. El profesor calificará cada una de las partes (preguntas, secciones, problemas,…) sobre un total de 10 puntos, y la nota final será la suma de todas ellas multiplicando cada una por un factor de ponderación, el cual se almacenará en la base de datos de la herramienta en forma de tanto por ciento. 𝑁𝑂𝑇𝐴 𝐹𝐼𝑁𝐴𝐿 𝐶𝐴𝐿𝐼𝐹𝐼𝐶𝐴𝐵𝐿𝐸=∑ 𝑝𝑖 100𝑐𝑖 𝑖 Donde,  pi es la ponderación de la parte i sobre el total del examen expresada en tanto por ciento,  ci es la calificación otorgada al alumno en la parte i del examen sobre 10 puntos,  NOTA FINAL CALIFICABLE es la nota obtenida por el alumno sobre un total de 10 puntos. Es evidente que la suma de todas las ponderaciones que conforman el examen debe ser el 100%. En este caso, el alumno responderá al examen en los huecos destinados a tal fin con lo que se pida en cada una de las partes. Posteriormente, será el profesor quien rellene la cabecera con la calificación que se le otorga al alumno en cada una de las partes (por ello, de ahora en adelante denominaremos a estos exámenes como calificables). El sistema será capaz de leer las calificaciones y almacenarlas junto a la nota final calculada haciendo uso de las ponderaciones. 3.2 Parámetros de interés Nuestra herramienta pretende ofrecer gestión sobre las calificaciones que obtienen los alumnos en una convocatoria de una asignatura. Orientándonos a dicho fin, se van a enunciar una serie de parámetros que la lógica de la herramienta debe manejar:  Asignatura: esta herramienta podrá ser utilizada para trabajar sobre varias asignaturas, y es por este motivo por el que conviene identificarlas de forma unívoca. Se utilizará como identificador de asignatura el proporcionado por la Universidad de Sevilla. También conviene almacenar el nombre de la asignatura y la titulación y el curso donde se imparte. Figura 7.- Programa de la asignatura Redes Multiservicio, con identificador resaltado 23 23 Sistema de calificaciones con gestión web  Examen: cada examen registrado en el sistema tendrá una referencia unívoca, la cual consistirá en un número entero positivo autoincremental (cada vez que se añade un examen, su identificador será superior en una unidad al último examen guardado). También se almacenará un nombre para el examen, que en principio hará referencia a la convocatoria de la asignatura a la que esté asociado. Por motivos de funcionalidad que más adelante se desarrollarán, también se va a almacenar la ruta relativa al lugar donde se almacene la cabecera de corrección del examen, el número de páginas, y el tipo de examen (test o calificable). Para el tipo de examen se tienen, además, dos nuevas entidades, con ciertos parámetros de interés:  Test: esta entidad es una especialización [11] de Examen, y además del identificador correspondiente, almacenará el número de preguntas que conforma el test, el número de opciones posibles que tiene cada pregunta, y la secuencia correcta de respuesta correspondiente a la solución del mismo. Incluye además campos de configuración de visualización, que utilizará el profesor para especificar qué información se le ofrece al alumno al momento de consultar su nota (secuencia de respuesta correcta, secuencia de respuesta dada, número de aciertos, número de errores, nota final, descarga de examen completo y descarga de cabecera de su examen).  Calificable: esta especialización almacenará dos nuevos valores; el número de partes calificables que tiene el examen, y las ponderaciones que tendrán cada una de las partes sobre el total. Incluye además campos de configuración de visualización, que utilizará el profesor para especificar qué información se le ofrece al alumno al momento de consultar su nota (calificaciones de cada parte del examen, calificación final del examen, descarga de examen completo y descarga de cabecera de su examen).  Convocatoria: se pretenden gestionar las calificaciones obtenidas por los alumnos en una convocatoria, por tanto las mismas deben quedar identificadas unívocamente. El identificador de una convocatoria tendrá la estructura idASIGNATURA_AÑO_CONVOCATORIA donde AÑO identifica al año natural en el que finaliza el curso (2016 si hablamos del curso académico 2015-2016), y convocatoria se refiere a si es primera (1), segunda (2) o tercera (3). Además de este identificador, conviene almacenar el identificador del examen que conforma a la convocatoria, y una lista de alumnos que figuran en el acta de la convocatoria.  Alumno: la entidad alumno almacenará número de DNI, apellidos, nombre, usuario virtual de la Universidad de Sevilla (UVUS) y grupo, de cada uno de los alumnos contenidos en alguna de las actas de convocatoria de alguna asignatura. Para iniciar sesión un alumno en el sistema se le requerirán su DNI y su UVUS, que serán comprobados directamente con la información que se tenga sobre ellos.  Profesor: se identificarán también por su DNI, y se almacenará su nombre y apellidos. A diferencia de los alumnos, el acceso al sistema se hará mediante una clave que les proporcione el administrador del mismo, en lugar de utilizando UVUS. Alumno y Profesor se tomarán como especializaciones de la entidad Usuario, que almacena DNI, Nombre y Apellidos (campos comunes de ambas entidades). Para el manejo de las calificaciones de los alumnos, se han de desarrollar entidades intermedias que relacionen alumno-examen y almacenen la calificación. Teniendo en cuenta que existen dos tipos de exámenes, estas entidades almacenarán distinta información para cada caso:  Si se trata de exámenes tipo test, se almacenará la secuencia de respuesta que da el alumno, el número de aciertos, el número de fallos y la nota final calculada según lo indicado en el punto 3.1.  Para el caso de los exámenes calificables, resulta de interés almacenar la nota obtenida en cada parte y la nota final calculada aplicando las ponderaciones correspondientes. En ambos casos, se almacenará también la ruta en la que se dispondrá de las hojas del examen del alumno escaneadas, así como de la cabecera correspondiente al examen del alumno, a donde se accederá para lanzar la descarga de las mismas desde el navegador en el que inicia sesión el alumno. Previo a la automatización 24 Finalmente, se almacenará también el valor de la tolerancia de corrección, que más adelante se explicará en detalle. 3.3 Esquema de la base de datos Se presenta a continuación un diagrama de base de datos realizado con el software Data Base Designer 4. El mismo está diseñado para el trabajo con bases de datos SQL. No obstante, nuestra implementación final no se realizará mediante SQL, sino mediante ficheros de texto, de modo que, salvando las distancias existentes entre ambas formas, se tomará como válido el siguiente diagrama acompañado de la posterior explicación. Figura 8.- Diagrama Entidad-Relación de la base de datos del sistema En primer lugar, la lista de alumnos asociada a una convocatoria consistirá en un fichero en formato XLS, el cual es proporcionado a los profesores de las asignaturas por la Universidad de Sevilla, y se cargará al sistema sin modificación alguna. Se tendrá un fichero de lista por cada una de las convocatorias creadas en el sistema. Las mismas se almacenarán en un directorio llamado listas con el nombre idASIGNATURA_AÑO_CONVOCATORIA.xls. Para el inicio de sesión por parte de un alumno, la búsqueda de credenciales de acceso se realizará sobre todos los ficheros contenidos en dicho directorio. Igualmente existirá un directorio llamado notas, que almacenará ficheros en formato CSV (valores separados por coma, comma separated values), los cuales almacenarán las calificaciones de los alumnos en un examen determinado. El nombre de cada uno de los ficheros será el de un identificador de examen, y los campos que almacenará serán los correspondientes para referir la calificación obtenida por cada alumno en el mismo examen (los campos variarán dependiendo de si se trata de un examen tipo test o un examen calificable). En el diagrama E-R estos ficheros se corresponden con las entidades ALUMNO_has_TEST y ALUMNO_has_CALIFICABLE. 25 25 Sistema de calificaciones con gestión web A continuación se muestran dos CSV de ejemplo, correspondientes a los exámenes con identificador 1 y 2 respectivamente. El examen con identificador 1 es de tipo test, y el examen con identificador 2 es de tipo calificable. Figura 9.- Calificaciones de los alumnos presentados al examen con identificador 1 (test) Figura 10.- Calificaciones de los alumnos presentados al examen con identificador 2 (calificable) Puede observarse que los campos coinciden con los mostrados en el diagrama de la Figura 8. El resto de entidades se almacenarán cada una en un fichero CSV ubicado en el directorio raíz de la aplicación (en el que se sitúan notas y listas). Se muestra a continuación la correspondencia:  asignaturas.csv: entidad ASIGNATURA.  convocatorias.csv: entidad CONVOCATORIA.  profesor.csv: entidad PROFESOR.  calificables.csv: entidad CALIFICABLE.  examenes.csv: entidad EXAMEN.  tests.csv: entidad TEST. Por último, la tolerancia de corrección (no debe considerarse una entidad como tal, al ser un valor que se sobreescribirá cada vez que se modifique) se almacenará en un fichero llamado tolerancia.csv, también en el directorio raíz de la herramienta. Automatización para exámenes tipo test 32 Figura 15.- En recuadro rojo, la zona a la cual se limita la búsqueda de los testigos Para esta delimitación se utiliza el comando convert con la opción -extract, de la siguiente forma: convert -extract ANCHOxALTO+POS_X+POS_Y examen_escaneado.jpg extraer_testigo.jpg  ANCHO: medida en píxeles correspondiente al lado horizontal que tendrá el área extraída.  ALTO: medida en píxeles correspondiente al lado vertical que tendrá el área extraída.  POS_X y POS_Y: coordenada en píxeles inicial del área a extraer.  examen_escaneado.jpg: imagen original de la que se extrae el área indicada.  extraer_testigo.jpg: imagen que se crea con el área extraída. Posterior a esta extracción, se realiza la búsqueda (compare -subimage-search) descrita anteriormente, pero no sobre la hoja del examen escaneada, sino sobre la extracción que acabamos de realizar. Por último, una vez realizada la búsqueda, se elimina el fichero de imagen que almacena la extracción, pues no se necesitará en ningún otro momento. Cabe destacar que esta búqueda de testigos se realizará tanto para el testigo izquierdo (círculo hueco) como para el testigo derecho (círculo compacto). Para que la búsqueda sea efectiva, es necesario que la aplicación tenga guardado de alguna forma el aspecto que tienen los testigos al ser escaneados con el hardware utilizado. No se puede utilizar el aspecto genérico de los testigos, pues se corre el riesgo de que el aspecto que tienen en los exámenes escaneados no tenga apenas coincidencia con las imágenes utilizadas para su búsqueda. Como se verá en la plataforma web, será tarea del administrador del sistema la carga de testigos escaneados recortados, y solo podrán realizarse correcciones utilizando el escáner al que correspondan las imágenes de los testigos. Figura 16.- Testigo izquierdo escaneado en multifunción Epson Stylus SX130 Figura 17.- Testigo derecho escaneado en multifunción Epson Stylus SX130 33 33 Sistema de calificaciones con gestión web 4.2.2 Equilibrado de imagen Como ya se ha comentado, la finalidad de la búsqueda de testigos es la de obtener en qué medida se encuentra un folio de examen girado, para que el programa sea capaz de compensar dicha desviación en el sentido contrario. Una vez se tienen las posiciones de los testigos, es fácil sacar el ángulo de giro aplicando relaciones trigonométricas. Según se representa en la siguiente figura, resulta sencillo deducir una expresión para nuestro fin. Figura 18.- Trigonometría aplicada al cálculo de la rotación de la hoja de examen  X1 e Y1: coordenadas en las que se ha localizado el testigo izquierdo.  X2 e Y2: coordenadas en las que se ha localizado el testigo derecho. 𝛼=−atan(|𝑌1−𝑌2| |𝑋1−𝑋2|) De esta forma, definimos α como el ángulo que es necesario girar la imagen posicionándonos en las coordenadas del primer testigo para que los dos resulten situados al mismo nivel horizontal. Así, al aplicar dicho giro, la imagen del examen quedará completamente enderezada. Figura 19.- Posiciones de los testigos una vez aplicado el ángulo de giro ( 𝒀𝟏 ′=𝒀𝟐 ′ ). Computacionalmente esto se consigue gracias al comando convert y la opción -distort SRT, de la siguiente forma: convert examen_escaneado.jpg -distort SRT "${test1_X},${test1_Y} 1 ${anguloGiro} 0,0" examen_escaneado_girado.jpg  examen_escaneado.jpg: hoja de examen escaneada original.  examen_escaneado_girado.jpg: hoja de examen escaneada tras aplicar el giro.  ${test1_X} y ${test1_Y}: variables que almacenan la posición en la que ha sido encontrado el primer testigo.  ${anguloGiro}: variable que almacena el ángulo α. Automatización para exámenes tipo test 34 4.2.3 Lectura de identificador de examen Recordemos que el identificador de examen queda representado en binario en la esquina superior izquierda de la cabecera. Como el programa tiene la capacidad de generar cabeceras, podemos conocer las coordenadas de comienzo cada una de esas casillas y las dimensiones de las mismas. Como la imagen escaneada ha sido previamente enderezada, solo tenemos que desplazarnos a dichas coordenadas, extraer un área rectangular del tamaño correspondiente a una casilla, y comprobar si la misma está marcada o desmarcada. No obstante, esto no es tan sencillo, pues surge el problema de la escala: la cabecera escaneada de un examen tendrá unas dimensiones en píxeles muy diferentes a las que posee la cabecera recién generada directamente por genCab.sh. Para solucionar esto es necesario sacar un factor de escala, y esto lo podemos hacer a partir de las posiciones en las que han sido detectados los testigos. Se sabe que en cualquier cabecera que se genere la distancia entre testigos es de 652 píxeles. Podemos sacar la distancia entre testigos de cualquier imagen escaneada, simplemente con X1 ′−X2 ′ (según la imagen de la Figura 19). Inmediatamente se obtiene que la relación entre dimensiones de una cabecera escaneada y una cabecera recién generada es la siguiente: 𝐸𝑆𝐶𝐴𝐿𝐴=𝐷𝐼𝑆𝑇𝐴𝑁𝐶𝐼𝐴 𝑇𝐸𝑆𝑇𝐼𝐺𝑂𝑆 𝐶𝐴𝐵𝐸𝐶𝐸𝑅𝐴 𝐸𝑆𝐶𝐴𝑁𝐸𝐴𝐷𝐴 𝐷𝐼𝑆𝑇𝐴𝑁𝐶𝐼𝐴 𝑇𝐸𝑆𝑇𝐼𝐺𝑂𝑆 𝐶𝐴𝐵𝐸𝐶𝐸𝑅𝐴 𝑔𝑒𝑛𝐶𝑎𝑏.𝑠ℎ =X1 ′−X2 ′ 𝑝í𝑥𝑒𝑙𝑒𝑠 652 𝑝í𝑥𝑒𝑙𝑒𝑠 Por tanto, conociendo cualquier dimensión de las cabeceras que generemos, basta multiplicarlo por este valor para obtener la dimensión asociada a la cabecera escaneada que estemos procesando. Y como dichas dimensiones son todas conocidas (se muestran a continuación), tenemos este problema resuelto.  Ancho de casilla: 13 píxeles.  Alto de casilla: 1 píxel.  Separación horizontal entre casillas: 24 píxeles.  Coordenada de comienzo de casillas de ID: (15,5) píxeles. Figura 20.- Dimensiones originales de las casillas de identificación de examen Una vez se tiene lo necesario para localizar a cada una de las casillas, puede extraerse su contenido (de una en una) por medio de la opción -extract del comando convert (se explicó en 4.2.1), la cual se utilizará para generar un fichero de imagen aparte con el contenido de la casilla que se esté procesando. En este nuevo fichero comprobaremos si la casilla está marcada o no, después de lo cual se eliminará. Dicha comprobación consiste en convertir la imagen a escala de grises, para después verificar si la media de todos los tonos de grises contenidos en la imagen es más cercana al blanco (no marcada, media de grises con valor 1) o al negro (marcada, media de grises con valor 0). Aquí se introduce el concepto de tolerancia, que definimos como el valor (entre 0 y 1) que marca la diferencia entre lo que se considerará marcado y lo que se considerará no marcado. Realizando diversas pruebas de impresión y escaneo con la multifunción Epson Stylus SX130, se ha obtenido que para la misma, el valor 0,7 es un buen valor de tolerancia, funcionando a la perfección en todo momento. Es decir, si la media de grises leída es mayor a 0,7, se considerará que la casilla no ha sido marcada, y si es menor se tomará como marcada. 35 35 Sistema de calificaciones con gestión web Computacionalmente, se puede comprobar la media de grises con los siguientes comandos:  Convierte la casilla recortada a escala de grises: convert casilla.jpg -colorspace Gray casilla.jpg  Extrae información de la imagen: identify -verbose -alpha off casilla.jpg | sed -n '/Histogram/q; /Colormap/q; /statistics:/,$ p'  Salida: Channel statistics: Gray: min: 0 (0) max: 255 (1) mean: 245.985 (0.964648) standard deviation: 39.1474 (0.153519) kurtosis: 21.7219 skewness: -4.76403 Colors: 256  Extrae únicamente el valor de la media de grises: VALOR_GRISES=`identify -verbose -alpha off casilla.jpg | sed -n '/Histogram/q; /Colormap/q; /statistics:/,$ p' | grep "mean" | cut - d'(' -f2 | cut -d')' -f1` echo $VALOR_GRISES  Salida: 0.964648 Automatización para exámenes tipo test 36 4.2.4 Lectura de DNI del alumno Se basa en la misma idea que la que se ha aplicado para la lectura de las casillas de identificación. La principal diferencia es que aquí, además, se requiere un desplazamiento vertical por las casillas, a diferencia de en la del identificador de examen, que el desplazamiento era únicamente horizontal. Aparece así un nuevo dato: la separación vertical entre casillas, con valor de 18 píxeles. El resto de valores permanece igual a los indicados en el apartado anterior (separación horizontal entre casillas, altura de casillas y anchura de casillas). La coordenada de comienzo es (15,62). Figura 21.- Dimensiones originales de las casillas de inserción del DNI del alumno Cada columna corresponde a la inserción de una cifra del DNI. Por este motivo, el criterio de lectura va a ser recorrer la primera columna hasta detectar una casilla marcada, desplazarse al comienzo de la siguiente llegado este momento, y así sucesivamente hasta procesar las 8 cifras. 4.2.5 Lectura de secuencia respondida por alumno Nuevamente se vuelve a aplicar la misma idea. Ahora también se añade una nueva dimensión más, la separación entre columnas de preguntas. En cada columna hay lugar para 10 preguntas con un máximo de 4 opciones. Por cada 10 preguntas que se tengan será necesario ocupar una columna más en la cabecera. La separación entre dichas columnas es de 110 píxeles. La coordenada de comienzo es la (231,62). El criterio de lectura de las respuestas del alumno va a ser recorrer las opciones de cada pregunta, comenzando por la A y acabando cuando se detecte una opción marcada, o al haber recorrido todas las casillas de opciones de la pregunta (en caso de que no se haya respondido a esa pregunta). Llegado este momento, se avanza a comprobar la opción A de la siguiente pregunta teniendo en cuenta la separación vertical existente entre las mismas. Si se trata de la última pregunta de una columna, se pasará a la opción A de la primera pregunta de la columna siguiente, conocido el valor de la separación entre columnas. 37 37 Sistema de calificaciones con gestión web Figura 22.- Dimensiones originales de las casillas de respuesta del alumno Cabe destacar que el script correctorTEST.sh necesita conocer el número de preguntas y de opciones que conforman el test, de modo que procese únicamente las posiciones en las que se espere que haya una casilla. Elevaría el consumo de recursos, y consecuentemente el tiempo de lectura, que el script procesara posiciones correspondientes a la opción de respuesta D si el examen solo tuviera tres opciones de respuesta (hasta la C). 4.3 Funcionamiento del script correctorTEST.sh El funcionamiento se apoya en diversas funcionalidades implementadas en lenguaje C, las cuales se describen a continuación, y deben ser compiladas en la máquina en la que vaya a ser instalado el servidor. Se proporciona también un fichero Makefile que agiliza este proceso de compilación. Utilidades en lenguaje C:  correctorTEST/funcionalidades/arcotangente.c: recibe por línea de comandos las coordenadas Y2, Y1, X2 y X1, y calcula el ángulo –α, que es mostrado por salida estándar. (Figura 18)  correctorTEST/funcionalidades/comparaCad.c: recibe por línea de comandos la secuencia de respuestas dada por el alumno, la secuencia de respuestas correcta (que el script recibirá también como parámetro) y el número de opciones que tienen las preguntas. Devuelve por salida estándar el número de aciertos, el número de fallos, y la nota final calculada sobre 10 puntos mediante la expresión que aparece en el apartado 3.1.  correctorTEST/funcionalidades/comparaTolerancia.c: el script recibirá también como parámetro la tolerancia de corrección que se está utilizando. Esta utilidad compara el valor de la media de grises leída en cada casilla con el valor de tolerancia, permitiendo así al script determinar si una casilla está marcada o no.  correctorTEST/funcionalidades/cuentaCar.c: el script requiere conocer el número de preguntas que conforma el test. Como ya se ha dicho, correctorTEST recibe como parámetro la secuencia de respuestas correctas, así que, contando los caracteres de la misma, se tendrá ese número. De esto se encarga esta utilidad.  correctorTEST/funcionalidades/escala.c: calcula la escala en la que se representa un examen escaneado según la expresión del apartado 4.2.3. Automatización para exámenes tipo test 38  correctorTEST/funcionalidades/multiplica.c: realiza la multiplicación de todos los números que se pasen como argumento. Se desarrolla esta utilidad porque no se puede realizar una multiplicación de números decimales desde el fichero “.sh”.  correctorTEST/funcionalidades/raizcuadrada.c: realiza la raíz cuadrada del número que reciba como argumento, lo cual no es realizable directamente desde el fichero “.sh”. También cabe mencionar que el script cuenta con las sentencias de bucle y las variables bandera necesarias para el recorrido de las casillas a procesar, de modo que se trabaje siguiendo el criterio de lectura establecido en cada caso. Se tiene entonces que la forma de ejecución de correctorTEST.sh es la siguiente (siempre que se tengan permisos de ejecución chmod a+x ./correctorTEST/correctorTEST.sh): ./correctorTEST/correctorTEST.sh id_examen num_opciones num_paginas secuencia_correcta tolerancia  id_examen: identificador del examen (0-255) que se va a corregir. En el directorio correctorTEST existira un fichero comprimido en “.zip” cuyo nombre sera id_examen.zip. Dicho fichero se descomprimirá en el directorio .correctorTEST/id_examen, pasando a contener todas las páginas del examen escaneado. Se leerá el identificador de todos los exámenes que haya ahí contenidos, y solo se leerá el resto del examen si coincide el identificador con el aquí introducido.  num_opciones: número de opciones que tendrá cada pregunta, de las cuáles habrá solo una válida (24).  num_paginas: número de páginas que conforman el examen.  secuencia_correcta: solución del examen. Se compara con la que dé el alumno para obtener su nota.  tolerancia: número entre 0 y 1 referente al valor medio de la escala de grises en las casillas recortadas. Si el valor leido en una casilla es mayor que este valor, se toma como no rellena, y si es menor, se toma como rellena. 39 5 AUTOMATIZACIÓN PARA EXÁMENES DE SOLUCIÓN ABIERTA ara el caso de los exámenes tipo calificables hay que procesar:  Identificador del examen  Número de DNI del alumno  Calificaciones de cada una de las partes diferenciadas que posee el examen Previo a la corrección, será necesario generar la cabecera adaptada al examen en cuestión, lo cual se realizará también utilizando esta herramienta. El funcionamiento en detalle de lo que se acaba de indicar en relación a los exámenes manualmente calificables se detalla en los siguientes apartados. 5.1 Generación de cabecera e inserción en documento En este caso, en la cabecera el alumno solamente tiene que introducir su DNI. El identificador de examen ya estará relleno en el momento de la impresión, y las respuestas se darán en la zona del examen correspondiente, donde el profesor encargado de la corrección acudirá para comprobarla. No obstante, habrá espacio en la cabecera donde el profesor transcribirá dichas calificaciones de la misma forma en la que el alumno introduce su DNI. La calificación tendrá una precisión de dos cifras decimales. Al igual que en los exámenes tipo test, esta cabecera se situará al comienzo de la primera página del examen. A continuación se muestra un ejemplo en el que puede observarse que el examen cuyo identificador es el 3 (el identificador contiene el valor binario 00000011) está formado por 3 partes que van a ser calificadas por separado sobre 10 puntos con dos decimales. P «Es preferible obtener una respuesta razonablemente aproximada pero rápida que le indique si el diseño funciona o no, que invertir más tiempo y obtener el mismo resultado sólo que con más decimales». - R.L. Norton - Automatización para exámenes de solución abierta 40 Figura 23.- Aspecto de la cabecera para exámenes de solución abierta Esta cabecera es generada utilizando el script genCab.sh de la siguiente forma: ./genCab.sh C ID_EXAMEN NUM_CALIFICACIONES  C: indica que la cabecera corresponde a un examen tipo calificable.  ID_EXAMEN: es el identificador del examen en formato decimal que va a representarse en binario en la zona correspondiente. Para el caso de la figura anterior se debe introducir el valor 2 en este campo. Como puede observarse en la figura, el valor debe ser representable en binario con 8 bits, de modo que la herramienta admitirá exámenes con identificador desde 0 hasta 255.  NUM_CALIFICACIONES: la cabecera tendra tantos campos calificables como se indique. Por cuestiones de espacio solo se admitirá un valor entre 1 y 5, ambos incluídos. La generación de la cabecera tomará como base la mostrada en la siguiente figura: Figura 24.- Cabecera base para exámenes calificables La generación del identificador de examen correspondiente se hace de la misma forma que para el caso de los exámenes tipo test (4.1) 41 41 Sistema de calificaciones con gestión web Lo siguiente es conseguir que la imagen definitiva contenga tantos espacios para calificaciones como se indique por línea de comandos, lo cual se hace insertando en el hueco en blanco disponible alguna de las siguientes imágenes, según corresponda: Figura 25.- Espacio para una sola calificación Figura 26.- Espacio para dos calificaciones Figura 27.- Espacio para tres calificaciones Plataforma web 48  Profesores: inician sesión con su número de DNI como usuario, y la contraseña que les proporcione el administrador. Trabaja con las asignaturas existentes en el sistema, y para cada una de ellas puede:  Añadir y eliminar una convocatoria con su examen y lista de alumnos “.xls”.  Ver la lista de alumnos de una convocatoria de una asignatura.  Descargar la cabecera del examen de una convocatoria, la cual se genera automáticamente al crear la convocatoria.  Descargar la plantilla “.docx” para la elaboración de sus exámenes con hueco para insertar cabecera.  Cargar exámenes escaneados para su corrección.  Ver las calificaciones de los alumnos de una convocatoria (tanto de los alumnos que están en lista como de los que no), y exportar las mismas a una hoja “.xls”.  Administrador: solo hay una cuenta de administrador. Su modo de acceso queda definido en el código PHP, de forma inicia sesión con el usuario administrador y la contraseña FJPD-TFG2015. Se encarga de:  Añadir y eliminar asignaturas que gestiona el sistema.  Añadir y eliminar profesores que acceden al sistema.  Establecer el valor por defecto de la tolerancia de corrección con la que se procesarán las cabeceras.  Cargar testigos escaneados con el hardware que vayan a utilizar los profesores para la corrección de sus exámenes (Ver Figura 16 y Figura 17). 6.2 Descripción de los ficheros web  anadir_asignatura.php: accesible por administrador, contiene el formulario de adición de una asignatura.  anadir_calificable.php: accesible por profesores, contiene la parte del formulario de adición de convocatoria con un examen calificable asociado.  anadir_convocatoria.php: accesible por profesores, contiene el formulario genérico de adición de convocatoria a una asignatura.  anadir_profesor.php: accesible por administrador, contiene el formulario de adición de un profesor.  anadir_test.php: accesible por profesores, contiene la parte del formulario de adición de una convocatoria con un examen tipo test asociado.  cambiar_tolerancia.php: accesible por administrador, contiene el formulario de inserción del valor de la tolerancia.  check_login.php: comprueba si los datos de inicio de sesión son válidos, redirigiendo a la “home” de la plataforma web en ese caso, y mostrando mensajes de error en caso contrario.  corregir.php: formulario de carga de un fichero comprimido con exámenes escaneados. Accede al script de corrección correspondiente en función del tipo del examen (correctorTEST.sh o correctorCALIF.sh). Permite definir un valor para la tolerancia de corrección, o utilizar el valor por defecto establecido por el administrador. Para el caso de los exámenes calificables, permite establecer el número de decimales a procesar.  descargar_cabecera.php: se redirige a esta página cada vez que se hace clic en el botón “Descargar cabecera” de una convocatoria. Contiene el código PHP necesario para forzar la descarga de la cabecera correspondiente. 49 49 Sistema de calificaciones con gestión web  descargar_cabecera_alumnos.php: se redirige a este fichero cada vez que un alumno intenta descargar la cabecera de alguno de sus exámenes. Contiene el código PHP necesario para forzar su descarga en formato “.jpg”, o para mostrar un error en caso de que un alumno intente descargar la cabecera de un examen de otro alumno (6.3.4).  descargar_docx.php: fuerza la descarga de la plantilla de elaboración de exámenes con cabecera en formato “.docx”.  descargar_examen.php: se redirige a este fichero cada vez que un alumno intenta descargar un examen. Contiene el código PHP necesario para forzar la descarga del examen correspondiente en un directorio comprimido en “.zip”, o para mostrar un error en caso de que un alumno intente descargar el examen de otro alumno (6.3.4).  eliminar_asignatura.php: accesible por administrador, elimina la asignatura correspondiente de los ficheros que conforman la base de datos.  eliminar_convocatoria.php: accesible por profesores, elimina la convocatoria correspondiente, su examen, su lista y fichero de calificaciones asociados de los ficheros que conforman la base de datos.  eliminar_profesor.php: accesible por administrador, elimina al profesor correspondiente de los ficheros que conforman la base de datos.  exportar_notas.php: fuerza la descarga de las calificaciones de los alumnos presentados a una convocatoria en formato “.xls”.  home_admin.php: página principal mostrada al administrador, accesible solo por el mismo.  home_alumno.php: página principal mostrada a los alumnos que inicien sesión, no accesible desde los roles de profesor o de administrador.  home_asignatura.php: página principal de una asignatura, accesible solo por profesores. Contiene una tabla con todas las convocatorias que hay creadas de una asignatura.  home_profesor.php: página principal mostrada a los profesores que inicien sesión, no accesible desde los roles de alumno o de administrador.  listado_alumnos.php: accesible por profesores, muestra el listado de alumnos asociados a una convocatoria de una asignatura.  listado_asignaturas.php: accesible por el administrador, muestra el listado de asignaturas que maneja el sistema.  listado_notas_calificables.php: accesible por profesores, se entra a esta página para mostrar las calificaciones de los alumnos en una convocatoria compuesta por un examen de solución abierta.  listado_notas_test.php: accesible por profesores, se entra a esta página para mostrar las calificaciones de los alumnos en una convocatoria compuesta por un examen tipo test.  listado_profesores.php: accesible por el administrador, muestra el listado de profesores que maneja el sistema.  login.php: página de inicio de sesión.  logout.php: se accede a esta página para cerrar sesión. Inmediatamente después, redirige a login.php.  procesa_anadir_asignatura.php: guarda los datos de una asignatura que se añade en un fichero.  procesa_anadir_calificable.php: guarda los datos de un examen de solución abierta que se añade en los ficheros de datos.  procesa_anadir_profesor.php: guarda los datos de un profesor que se añade en un fichero de datos.  procesa_anadir_test.php: guarda los datos de un examen tipo test que se añade en los ficheros de datos.  sube_testigos.php: accesible por el administrador, contiene el formulario y el procesamiento necesario para la carga de testigos escaneados al sistema, los cuales serán usados por los script correctorTEST.sh y correctorCALIF.sh para buscarlos en las hojas de los exámenes que procese. Plataforma web 50 6.3 Mecanismos de seguridad implementados Para preservar hasta cierto punto un nivel seguridad en nuestra herramienta, se han propuesto las siguientes pautas de sentido común con las que debe cumplir la plataforma web:  Los ficheros de texto que conforman la base de datos de la plataforma web (“.csv”, “.xls”) no van a ser exportados por el servidor web, puesto que van a contener información sensible tal como contraseñas de otros usuarios, números de DNI, UVUS, respuestas a exámenes tipo test, etc.  Tampoco serán exportables por el servidor web las cabeceras generadas por genCab.sh, ni los exámenes escaneados hechos por alumnos. Este tipo de ficheros podrá ser descargado por los usuarios correspondientes, lo cual es conseguido gracias al código PHP, pero no van a situarse en un directorio exportable.  Un usuario que ha iniciado sesión no podrá ver información correspondiente a otro usuario, y mucho menos acceder a funcionalidades reservadas a otro rol que no es el suyo.  Sin iniciar sesión, el único directorio accesible será login.php, y si se trata de acceder a otra página “.php” distinta, se redirigirá a login.php. En los siguientes subapartados se detalla cómo se han conseguido. 6.3.1 Permisos del directorio exportable Este es el contenido del directorio padre de la herramienta completa, incluyendo scripts, plataforma web y ficheros de datos: Figura 31.- Directorio padre de la herramienta completa Lo único que va a exportar el servidor web es el directorio html, el cual contiene todos los ficheros “.php” descritos en 6.2: Figura 32.- Contenido del directorio html 51 51 Sistema de calificaciones con gestión web La instalación por defecto del servidor Apache2 sitúa al único directorio exportable en /var/www/html, para la versión de Ubuntu 14.04. Por ello, el contenido del directorio padre de la herramienta se situará en /var/www, y todos los ficheros “.php” a exportar en /var/www/html. Se muestra a continuación los permisos óptimos que tendrán tanto el directorio html como los ficheros “.php”: Tabla 1.- Permisos del directorio exportable [13] Elemento Usuario propietario Grupo propietario Otros (Apache) Explicación /var/www/html Lectura Escritura Ejecución Lectura Escritura Ejecución Ejecución El propietario del directorio html debe poder ver su contenido (lectura), añadir y eliminar ficheros (escritura), y acceder a sus ficheros (ejecución). El servidor Apache debe poder acceder a los ficheros contenidos (ejecución), pero no puede listar sus ficheros (no lectura) ni modificarlo (no escritura). /var/www/html/*.php Lectura Escritura Lectura Escritura Lectura El propietario de los ficheros debe poder ver el contenido de los mismos (lectura) y modificarlo (escritura). No requiere permiso de ejecución, al no tratarse de ficheros ejecutables. El servidor Apache debe poder acceder al contenido de los mismos (lectura), pero no tiene por qué modificarlo (no escritura). Igualmente, no requiere de permiso de ejecución. 6.3.2 Ubicaciones no exportadas  ./correctorCALIF: contiene todo lo que necesita el script correctorCALIF.sh para funcionar. Aquí se cargan los directorios comprimidos con exámenes de solución abierta de los cuales se quiere procesar las calificaciones. Es aquí también donde se descomprime el mismo y donde se organizan los subdirectorios correspondientes a cada alumno (para que PHP fuerce su descarga). Contiene un subdirectorio llamado “testigos” donde se cargan las imágenes de los testigos escaneados que sube el administrador del sistema.  ./correctorTEST: contiene todo lo que necesita el script correctorTEST.sh para funcionar. Aquí se cargan los directorios comprimidos con exámenes tipo test que se quiere corregir. Es aquí también donde se descomprime el mismo y donde se organizan los subdirectorios correspondientes a cada alumno (para que PHP fuerce su descarga). Contiene un subdirectorio llamado “testigos” donde se cargan las imágenes de los testigos escaneados que sube el administrador del sistema.  ./genCab: contiene todo lo que necesita el script genCab.sh para funcionar. Es en este directorio donde se guardan las cabeceras que se van generando, a donde accede el código PHP para lanzar las descargas de las mismas.  ./notas: contiene un fichero “.csv” por cada examen, con la nota de todos los alumnos presentados al mismo.  ./listas: contiene un fichero “.xls” por cada convocatoria, con la lista de los alumnos asociada a la misma.  Ficheros “./*.csv”: almacenan información de asignaturas, convocatorias, exámenes de solución abierta y tipo test, profesores y tolerancia de corrección (según se indicó en 3.3). Plataforma web 52  Fichero “./PlantillaExamen.docx”: plantilla que utilizarán los profesores para generar sus exámenes, con espacio para la inserción de la cabecera. No se exporta directamente, pero PHP forzará su descarga desde esta ubicación cuando se solicite. 6.3.3 Distinción de roles en el acceso a páginas El array $_SESSION almacena la secuencia prof si ha iniciado sesión un profesor, o alum si la sesión pertenece a un alumno. La limitación en cuanto a roles tiene en cuenta esta distinción:  Si un alumno pretende entrar a la página de un profesor, se le redirigirá automáticamente a home_alumno.php. //Si se ha iniciado sesion, se comprueba que no haya sido un alumno $pos = strpos($_SESSION['username'], 'alum'); if ($pos === false) { //Si no fue un alumno, se comprueba que fue un profesor $pos = strpos($_SESSION['username'], 'prof'); if($pos === false) { //Si no fue un profesor, fue un administrador header("Location:home_admin.php"); } else{ $DNI=substr($_SESSION['username'], 0, -4); } } else { //Si fue un alumno se le redirige a home_alumno header("Location:home_alumno.php"); }  Si un profesor pretende entrar a la página de un alumno, se le redirigirá automáticamente a home_profesor.php. //Si se ha iniciado sesion, se comprueba que no haya sido un profesor $pos = strpos($_SESSION['username'], 'prof'); if ($pos === false) { //Si no fue un profesor, se comprueba que fue un alumno $pos = strpos($_SESSION['username'], 'alum'); if($pos === false) { //Si no es ni alumno ni profesor, fue admin header("Location:home_admin.php"); } else{ $DNI=substr($_SESSION['username'], 0, -4); } } else { //Si fue un profesor se le redirige a home_profesor header("Location:home_profesor.php"); } 53 53 Sistema de calificaciones con gestión web  Si no se ha iniciado sesión, cualquier página a la que se intente entrar redirige a login.php. //Si no se habia iniciado sesion, se vuelve a login.php if(!isset($_SESSION['username'])){ header("Location:login.php"); } else { ... }  Si se ha iniciado sesión y se trata de entrar a login.php se redirige automáticamente a la home correspondiente, dependiendo del rol del usuario que haya iniciado sesión. //Si ya estaba la sesion iniciada se accede directamente a la web if(isset($_SESSION['username'])){ header("Location:home_alumno.php"); /* Si se ha iniciado sesión se redirige a home_alumno.php. Si se trata de un alumno se quedará en dicha página, y si se trata de otro tipo de rol, se le redirigirá a su rol correspondiente desde home_alumno.php, como ya se ha visto en los puntos primero y segundo de esta enumeración. */ } 6.3.4 Confidencialidad de exámenes y cabeceras de alumnos De lanzar la descarga de un examen de un alumno se encarga el fichero descargar_examen.php. Al mismo se accede cuando un alumno pulsa en el botón Descargar examen (que solo aparece si está permitida la descarga del examen), redirigiéndose a una URL del siguiente tipo (método GET [14]): descargar_examen.php?tipo=CALIF/TEST&DNI=XXXXXXXX&exam=ID_EXAMEN  CALIF/TEST: si el examen es de solución abierta este campo tomará el valor CALIF, y si es tipo test valdrá TEST.  XXXXXXXX: número de DNI del alumno que quiere descargar su examen.  ID_EXAMEN: valor del identificador del examen (en decimal) asociado a la convocatoria que el alumno está consultando. Podría darse el caso de que un alumno modificara dicha URL con la intención de poder descargar algún examen de otro compañero (siempre y cuando conozca su DNI). Para evitar esta posibilidad, cobra importancia el array $_SESSION de PHP. En este se almacena, entre otras cosas, el valor del DNI del usuario que ha iniciado sesión. En descargar_examen.php se comprueba si el DNI almacenado en $_SESSION coincide con el que se recibe como parámetro por el método GET, y solo en ese caso se permitirá la descarga. Algo parecido es lo que tiene lugar en el fichero descargar_cabecera_alumnos.php (llamado al pulsar, si está disponible, el botón Descargar cabecera), cuyo modo de acceso es similar descargar_cabecera_alumnos.php?tipo=CALIF/TEST&DNI=XXXXXXXX&exam=ID_EXAMEN y también es prioritario preservar la confidencialidad de las cabeceras de los exámenes de los distintos alumnos. 55 7 VALORACIÓN DE LA SOLUCIÓN Y CONCLUSIONES n esta sección se va a realizar una primera valoración de la herramienta desarrollada y su funcionalidad completa, la cual atiende a ciertos parámetros que se han considerado de interés para el servicio que se quiere ofrecer. En primer lugar, se va a valorar el tiempo que se invierte en procesar un examen. Seguidamente se comentarán unas líneas acerca de la seguridad de la plataforma web. Por último, se expondrá el único caso de fallo detectado en las pruebas que se han ido realizando durante el proceso de desarrollo. 7.1 Temporización de correción Los scripts correctorTEST.sh y correctorCALIF.sh, funcionando bajo un entorno Linux instalado directamente sobre una máquina física (sin virtualizar) Intel Core i5 3.20 GHz 4GB DDR3, invierten un tiempo en procesar una cabecera que oscila entre los 15 y los 20 segundos. Se ha comprobado que los comandos de búsqueda de testigos (compare -subimage-search) y de extracción y comprobación de casillas (convert -extract […], convert -colorspace Gray […] e identify -verbose […]) repetidos en tantas ocasiones como casillas se tengan que comprobar, tienen un peso importante en el tiempo de corrección. Es por ello por lo que se deduce que difícilmente se podría reducir el tiempo de corrección, al menos utilizando los comandos de ImageMagick Convert. Por otro lado, mencionar que tampoco se trata de un tiempo excesivo. Teniendo también en cuenta que la inversión en hardware especial de generación y lectura de formularios ha sido nula, podemos calificar nuestra solución como aceptable, en lo que a tiempo de corrección se refiere. 7.2 Seguridad La plataforma web cumple con las pautas marcadas en 6.3, las cuales son producto de la aplicación del sentido común. No obstante, la simple idea inicial de que los alumnos accedan utilizando DNI y UVUS es ya una vulnerabilidad, puesto que es fácil deducir el UVUS de un alumno sabiendo su nombre completo, y su DNI puede ser encontrado en alguna lista de clase de alguna otra asignatura que publique el propio profesor de la misma. E «Si piensas que los usuarios de tus programas son idiotas, sólo los idiotas usarán tus programas». - Linus Torvalds - Valoración de la solución y conclusiones 56 Desde el punto de vista técnico, podría obtenerse un grado más de seguridad aplicando las siguientes medidas:  Utilizar una conexión segura (HTTPS) para evitar ataques Man In The Middle en los que el atacante pueda conseguir una clave de acceso o robar una sesión (Session Hijacking [15]) de otro usuario.  Cifrar todas las contraseñas que se almacenen en el servidor. Actualmente podría ser viable con el fichero de contraseñas profesores.csv, pero no con las listas de alumnos, puesto que siempre el usuario será el número de DNI y la contraseña el UVUS, datos que se consultan directamente en las listas que sube el profesor. Si se permitiera a los alumnos modificar sus contraseñas de acceso sí tendría sentido almacenar la misma cifrada. 7.3 Caso de fallo Se ha comprobado que si la impresión no alcanza un mínimo de calidad, pueden existir desplazamientos en la misma, como se muestra a continuación: Figura 33.- Impresión en “modo rápido” realizada con Epson Stylus SX130 En la figura se resalta un fallo de impresión consistente en un desplazamiento vertical que da lugar a la aparición de una línea en blanco. Este fallo junto a otros de menor escala (que también pueden apreciarse en la propia figura) dan lugar a que los scripts de corrección no encuentren las casillas exactamente en la posición en la que deberían aparecer. Por tanto, puede ser que se esté leyendo sobre una línea delimitadora de casilla en vez de sobre la casilla en sí, considerando como marcada una casilla que no está marcada. Como puede verse, la secuencia que rellena el alumno es: DDDDDDDDDDAAAAAAAAAA No obstante, la secuencia que detecta la herramienta al procesar la cabecera es: DDDDDDDDDBAAAAAAAAAA 57 57 Sistema de calificaciones con gestión web Definitivamente, esto se debe a que cuando el script correctorTEST.sh se ha posicionado sobre la opción B de la pregunta 10, realmente lo ha hecho ocupando un trozo de la línea superior de la propia casilla, como se muestra en la siguiente imagen: Figura 34.- Extracción defectuosa de una casilla de marca La media de tonos de grises detectada devuelve un valor 0.618101, el cual es menor a la tolerancia utilizada para el escáner de prueba (Epson Stylus SX130 con tolerancia 0.7). Por este motivo es por el que se ha tomado como marcada una casilla que realmente no lo está. El que se ha expuesto aquí ha sido el único caso de fallo detectado. El funcionamiento será correcto siempre y cuando no se realice una impresión en modo rápido en una impresora de cabezales mecánicos. No hay problema si se utilizan impresoras de tóner, como las que disponen en cualquier copistería. 7.4 Conclusiones e implantación Se ha comprobado que el funcionamiento de nuestra herramienta es el deseado si la impresión cumple unos requisitos mínimos de calidad, los cuales no son más exigentes que los deseables en cualquier tipo de documento. El tiempo de corrección se ha optimizado a una marca aceptable, la cual difícilmente podría ser mejorada utilizando funcionalidades de ImageMagick Convert. La plataforma web cumple con las medidas de seguridad que se decidieron implementar, las cuales responden adecuadamente ofreciendo la protección requerida sobre datos confidenciales. Con todo esto, podemos decir que se trata de una buena solución, al menos de momento, a falta de un periodo de funcionamiento en pruebas en el escenario del cliente en el cual se producirá la implantación definitiva. Para la configuración en el equipo donde se realice la implantación hay que tener en cuenta ciertos detalles:  Se requiere que Apache tenga permiso de escritura en los directorios en los que se van a realizar subidas de ficheros (correctorTEST, correctorCALIF y listas). Esto se consigue con chmod a+w correctorTEST correctorCALIF listas en el directorio principal de la herramienta  La inserción y eliminación de información en los ficheros de texto en formato “.csv” requiere también permiso de escritura sobre los mismos chmod a+w *.csv (en el directorio principal)  En la instalación original de PHP5 solo se permite subir ficheros cuyo tamaño no exceda 2 MB. Este valor viene determinado en el fichero /etc/php5/apache2/php.ini con la etiqueta upload_max_filesize, y conviene modificarlo de manera adecuada para que soporte la subida de exámenes sin ningún tipo de problema. Se requieren permisos de superusuario para realizar la modificación y reiniciar Apache (sudo service apache2 restart). Anexo A: Manual para el profesor 64 Si entramos a la página de la asignatura Redes Multiservicio, se tendrá un listado de las convocatorias que hay disponibles de la asignatura (inicialmente no hay ninguna). Podemos crear una nueva convocatoria clicando en el botón Agregar una convocatoria. Vamos a proceder a dar de alta la tercera convocatoria del curso 2015-2016, la cual consistirá en un examen tipo test, con la lista asociada lista_redes.xls, que se muestra a continuación: Rellenamos el formulario que aparece con la información que se pide y pulsamos el botón Continuar. Aparece un nuevo formulario en el que se nos solicita información acerca de cuántas páginas tendrá el examen, cuántas opciones de respuesta tienen cada pregunta (entre 2 y 4), y cuál es la secuencia de respuestas correctas (no más de 40 preguntas). Vamos a probar con un examen de una página, 15 preguntas tipo test y 3 opciones de respuesta (A, B y C), con solución AAAAABBBBBCCCCC. 65 65 Sistema de calificaciones con gestión web En este mismo formulario se pide la configuración de visualización por parte de los alumnos. Vamos a permitir que los alumnos que se presenten a esta convocatoria puedan ver la secuencia de respuestas correctas, la secuencia de respuestas que ellos mismos han dado, los números de aciertos y fallos obtenidos, la calificación calculada y la imagen de la cabecera de su examen en la que han plasmado sus respuestas, pero no las páginas de su examen completo. Finalmente, pulsamos en Agregar. Como vemos, ya nos aparece la convocatoria agregada en el listado de la asignatura Redes Multiservicio (1990026). Podemos descargarnos la cabecera pulsando en Descargar cabecera, en la que comprobamos que el identificador de examen es el 1 (como se indica en la imagen anterior), y hay espacio para responder 15 preguntas con 3 opciones. Anexo A: Manual para el profesor 66 Esta sería la cabecera que el profesor debería insertar en el lugar indicado de la plantilla en “.docx” cuando edite el examen. Pulsando sobre Ver alumnos se nos muestra un listado con los alumnos asociados a la convocatoria de la asignatura, que se corresponde con los cargados a partir del fichero lista_redes.xls mostrado anteriormente. Al entrar en el apartado Corregir se solicita un fichero “.zip” que contenga todos los exámenes de los alumnos escaneados, cuya carga y procesado se inicia al pulsar en el botón Cargar. Este proceso tiene una duración elevada (se estima una demora de entre 15 y 20 segundos por examen). No obstante, a partir de aquí no se requiere juicio humano en ningún momento, pudiendo incluso cerrarse la sesión. Las calificaciones irán apareciendo en el sistema conforme se vayan procesando los exámenes. Puede introducirse un valor para la tolerancia de corrección distinto del valor por defecto establecido desde la cuenta de administrador. En nuestro caso no introduciremos ningún valor, tomándose el valor por defecto configurado a 0.7, que ha demostrado un correcto funcionamiento utilizando la multifunción Epson Stylus SX130 tanto para imprimir como para escanear. 67 67 Sistema de calificaciones con gestión web A partir de este momento se podrán consultar las calificaciones de los alumnos (conforme vayan siendo procesados sus exámenes) en el apartado Ver Calificaciones correspondiente a la convocatoria en cuestión. Una vez procesados todos los exámenes se tiene que los que no contienen ninguna nota no se han presentado a la convocatoria. Se observa, además, un listado de los exámenes cuyo DNI detectado no aparece en la lista de la convocatoria (“huérfanos”), además de una tabla con estadísticas relativas a la corrección de este examen en concreto. Finalmente, se tiene la posibilidad de exportar la lista de calificaciones a formato “.xls”, más manejable para el profesor. Anexo A: Manual para el profesor 68 Puede observarse que el DNI que no se ha encontrado en la lista (02468124) es muy similar al del alumno José Díaz Díaz (02468024), por tanto puede deducirse fácilmente que este alumno se ha equivocado introduciendo su DNI en la cabecera del examen. Este error es fácilmente subsanable debido a esta posibilidad que ofrece la plataforma web. Para continuar este manual, vamos a crear también como ejemplo la tercera convocatoria del curso 201516 de la asignatura Proyectos de Telemática, que tendrá un examen de tipo calificable de una página con cinco cuestiones cortas que deben ser evaluadas por separado ponderadas todas por igual (20%). La lista asociada será la siguiente (lista_proyectos.xls): Las opciones de visualización para esta convocatoria permitirán al alumno ver su nota en cada una de las cinco partes que conforma el examen, la nota final del mismo tras aplicar la ponderación de cada una de las partes, y realizar una descarga del examen al completo. 69 69 Sistema de calificaciones con gestión web La cabecera a insertar en los exámenes se muestra a continuación: Una vez editados, imprimidos, realizados los exámenes por los alumnos, calificados por el profesor y escaneados, se procede a la corrección, estableciendo la precisión de la misma a dos decimales. Anexo A: Manual para el profesor 70 Se muestran a continuación las calificaciones procesadas (esta vez ningún alumno ha errado introduciendo su número de DNI) junto a las estadísticas de corrección: Una vez se tengan las calificaciones procesadas, los alumnos podrán acceder al sistema (según se indica en el anexo correspondiente) para consultar sus calificaciones y exámenes. 71 ANEXO B: MANUAL PARA EL ADMINISTRADOR a cuenta de administrador es accesible a través de los credenciales de acceso administrador (usuario) y FJPD-TFG-2015 (contraseña). Al acceder se tiene inmediatamente la siguiente vista: Como vemos, el administrador tiene cuatro posibilidades asociadas: gestionar profesores, gestionar asignaturas, establecer la tolerancia de corrección (recordemos que la tolerancia era el valor de la media de grises de una casilla que diferencia entre marcada y no marcada) y cargar los testigos escaneados (para la búsqueda de cabeceras). Si en la vista principal de administrador accedemos a Ver listado actual de profesores, observaremos que inicialmente está vacío. Vamos a insertar al profesor utilizado como ejemplo para el anexo anterior: Rafael María Estepa Alonso, con DNI 11111111 y contraseña qwerty. Para ello hacemos clic en Agregar un profesor y rellenamos el formulario con los datos pedidos, pulsando en Agregar al concluir. Ahora ya se verá al profesor en la lista de profesores, y el mismo podrá acceder con su DNI y la clave de acceso que indiquemos. También tenemos la posibilidad de eliminarlo simplemente clicando en Eliminar profesor. L Anexo B: Manual para el administrador 72 Volvemos a la vista principal de administrador y accedemos a Ver listado actual de asignaturas, que observaremos que inicialmente también está vacío. Vamos a agregar la asignatura Redes Multiservicio de 3º de GITT con identificador 1990026. Ahora ya se ve la asignatura en el listado, y la misma estará visible para los profesores, de modo que podrán asociar convocatorias a la misma. También tenemos la posibilidad de eliminar la asignatura del sistema, simplemente clicando sobre Eliminar asignatura. Agregamos también la asignatura Proyectos de Telemática de 4º de GITT con identificador 1990061. Volvemos a la vista principal de administrador y entramos en Establecer tolerancia de corrección por defecto. Vemos como se nos muestra un campo para introducir el nuevo valor de la tolerancia (entre 0 y 1), junto al valor actual (establecido a 0.7, óptimo utilizando la multifunción Epson Stylus SX130, en la que se han desarrollado las pruebas). 73 73 Sistema de calificaciones con gestión web Por último, clicamos sobre Cargar testigos escaneados en la vista principal de adminsitrador. Se muestra un formulario para cargar los testigos izquierdo y derecho que se utilizarán en la búsqueda de los mismos en las imágenes de los exámenes escaneados. Examinamos en busca del testigo izquierdo. Examinamos en busca del testigo derecho. Y finalmente se pulsa en cargar.