pedroreina.net

Encuesta
Como profesor de Enseñanza Secundaria, me gusta realizar encuestas a mi alumnado para saber qué opinión tienen de las clases. También es una obligación en esta profesión. Siempre me ha parecido que hay que garantizar el anonimato de quien da las respuestas. Como mis alumnos tienen acceso a Internet, se me ocurrió desarrollar un sistema para rellenar encuestas a través de Internet que garantizara el anonimato. En esta página presento todo el código del sistema de encuestas para que quien lo desee pueda comprobar el modo en que se garantiza el anonimato y también por si alguien desea utilizar todo o parte del código para sus propias encuestas.
Descripción
El proceso completo consta de tres fases que mostraré primero sin detalles y más abajo pormenorizadamente.

Primero se prepara un archivo con las preguntas de la encuesta y se generan un archivo de base de datos y un archivo PDF. La base de datos se sube a un servidor web y el archivo PDF se imprime para repartir al alumnado los datos de acceso al servidor web.

En la segunda fase el alumnado accede al servidor y responde a las preguntas de la encuesta. Las respuestas quedan acumuladas en la base de datos, sin que se pueda saber individualmente cuáles fueron.

Por último, se descarga la base de datos del servidor y un programa la lee y genera un PDF con el resumen de las respuestas.

Requerimientos
El sistema ha sido desarrollado y probado en sistemas Debian GNU/Linux, pero los componentes utilizados son muy básicos y deberían funcionar correctamente en cualquier otro sistema que los admita.

Para la primera y la tercera fases se utilizan programas en Python con las extensiones Another Python SQLite Wrapper para manejar bases de datos SQLite3 y ReportLab para generar PDF.

Para la segunda fase se utiliza un servidor web Apache con PHP5, pero debería valer cualquier otro servidor web que admita PHP5.

Procedimiento
En esta sección se ven todos los detalles necesarios para realizar encuestas, se puede acceder a todo el código y ver ejemplos de uso. Pero si alguien está interesado en trabajar con el código, es mejor que lo descargue completo en la siguiente sección.

Las preguntas

Se comienza trabajando en un ordenador cualquiera con un editor de textos y se prepara el archivo de preguntas de la encuesta usando codificación UTF-8. Cada pregunta se separa de la siguiente con una línea en blanco. En las preguntas se pueden insertar etiquetas HTML que posteriormente serán copiadas tal cual en la página web. Como muestra para ilustrar el sistema voy a preparar una encuesta con dos preguntas. Uso el editor de textos geany y preparo un archivo que llamo pregunta.txt:

pregunta.png

Creación de la base de datos

Usando el archivo encuesta.sql creo la base de datos encuesta.db con la orden

sqlite3 encuesta.db ".read encuesta.sql"

Generación de los códigos de acceso

El programa prepara.py se encarga de rellenar la base de datos y crear los códigos de acceso, pero antes de ejecutarlo hay que modificar algunas de sus variables para adaptarlo a tus necesidades; concretamente, es imprescindible modificar las variables Titulo, Web, Inicio y Final. El resto se pueden dejar tal como están si se desea. Cuando está preparado, se invoca usando como parámetro el número de códigos que se desea generar. En principio, hay que generar tantos códigos como estudiantes vayan a contestar la encuesta, aunque se puede generar alguno más como reserva por si alguno lo pierde. Vamos a generar ocho:

./prepara.py 8

Si todo ha ido correctamente, el archivo encuesta.db ha sido rellenado con nuevos datos y se ha generado el archivo encuesta.pdf

Preparación del servidor web

El archivo encuesta.db se sube al servidor web; es importante comprobar que el usuario que ejecuta el servidor web tenga permiso de escritura sobre este archivo, porque ha de modificarlo con las respuestas que se reciban.

En el servidor web hay que instalar varios archivos además de la base de datos: el archivo index.php que dirige la interacción al usuario, el archivo encuesta.php que contiene las funciones auxiliares, el archivo basedato.php que se encarga de la interacción con la base de datos (incluye más funciones de las que necesita el sistema, puesto que es un archivo genérico que voy llevando de proyecto en proyecto), el archivo encuesta.css con la hoja de estilos y el pequeño icono encuesta.png. También es aconsejable usar el archivo .htaccess proporcionado, por seguridad.

La función Encuesta_Incrementa() es la principal muestra de la garantía de anonimato del sistema, ya que en ella se aprecia que las respuestas obtenidas se suman globalmente, por lo que no se puede saber qué contestó cada alumno a cada pregunta.

Reparto de los códigos

El archivo encuesta.pdf se imprime, se cortan las hojas por la mitad y se reparten entre los estudiantes. Se les puede señalar que cada código es de un solo uso, que pueden intercambiar sus códigos si lo desean y que la encuesta ha de ser realizada entre las fechas indicadas.

Contestaciones a la encuesta

Es el turno ahora del alumnado. Teclean en sus navegadores la URL que recibieron en la hoja de papel. Si lo hacen en la fecha correcta (no antes de Inicio ni después de Final), verán que se les pide que introduzcan el código de acceso:

codigo.png

Si lo escriben correctamente, verán la lista de las preguntas con unos botones para contestar cada una:

respuesta.png

Pueden contestar a las que deseen y dejar sin contestar cuantas quieran.

Cuando pulsen el botón Enviar respuestas, el sistema sumará sus puntuaciones en la base de datos y recibirán una confirmación:

gracias.png

Generación del informe final

Una vez trascurrido el plazo determinado, se descarga del servidor web el archivo encuesta.db y se ejecuta el programa informe.py

./informe.py

Esto genera el archivo informe.pdf con el resumen de las respuestas obtenidas.

Descarga
encuesta-20161211.tgz
Licencia
Este programa es sotfware libre con licencia CC0 1.0 Universal.
Posibilidades para seguir
Mejor visto con cualquier navegador HTML 4.01 válido CSS válido