Ingeniería del software y OpenOffice.org

La creación de una nueva funcionalidad en cualquier proyecto software no trivial requiere seguir una serie de pautas y métodos que aseguren que lo que se va a crear se hace según lo especificado, en el tiempo acordado y con el coste previsto. Para conseguirlo, es necesario pasar por una serie de trámites que harán además que lo creado pueda ser revisado, modificado o reutilizado en el futuro sin dejarse la salud en el intento. Crear una nueva funcionalidad en OpenOffice.org, aunque sea pequeña, requiere también pasar por un proceso de documentación ingenieril que aunque pueda asustar al principio, se ve como algo imprescindible si se quiere que OOo sea una suite ofimática de calidad. Un ejemplo de todas estas abstracciones lo podemos encontrar en la nueva funcionalidad «overline» prevista para OpenOffice 3.1.

Para que esa nueva funcionalidad se aceptara en OOo Writer, lo primero que tuvo que hacer su autor es redactar una completa especificación siguiendo la plantilla que el equipo de revisión de OOo (iTeam) ha preparado al efecto. Alguien podría decir, bueno, no hace falta todo esto para poner un efecto de subrayado superior a las fuentes… hasta que se da cuenta de que ese efecto requiere un cambio/añadido en la especificación del estándar OpenDocument… vaya, pues sí, habrá que hacerlo. Luego se da cuenta de que ese cambio incluye nuevas cadenas de texto en el interfaz, que por supuesto habrá que traducir. «Ah… pues también es verdad». Cuando ha terminado, observa que el API UNO de OOo también debería de ofrecer la posibilidad de cambiar por programación el efecto de subrayado superior… etc., etc. El redactar una especificación requiere pensar y hacer frente a todos esos problemas (y más) por escrito. ¿Hemos terminado? No. El equipo iTeam de OpenOffice requiere también, para el control de calidad, la redacción de una serie de «pruebas unitarias» para el interfaz gráfico. Una serie de pasos muy detallados con un final esperado. Algo del estilo: «Pulsa en Nuevo documento writer, elige Formato/Carácter en el menú. Pulsa la pestaña Efectos de Fuente. Selecciona «Overline» en la lista, la primera opción debería de ser «Sin subrayado», comprueba que en el desplegable Color, la opción por defecto es «Sin color»…» Son especificaciones de casos de prueba (Testcase specifications)

Si queréis saber más al respecto, podéis echarle un vistazo a esta presentación bajo el título «The OpenOffice.org specification process demystified»

Frases y celebridades en Informática (I)

«Premature optimization is the root of all evil» C.A.R. Hoare («La optimización prematura es la madre de todos los males»). Hoare (1934 – ) es entre muchas otras cosas, el inventor del algoritmo de ordenación Quicksort, que permite, en promedio, ordenar n elementos en O(n log n).

Ojo, porque la frase original tiene miga: «Deberíamos de olvidarnos de intentar conseguir pequeños avances en la eficiencia de un programa; digamos que el 97% de las veces la optimización prematura es la madre de todos los males», también se le atribuye a Donald Knuth (1938-) … otro monstruo (si no el mayor) en el campo de la informática.

Gracias a Wikipedia por la foto y la información complementaria. Gracias a «Algorithms in a nutshell» (OReilly-2008) por el excelente libro y las constantes referencias a frases célebres en informática.

Sinadura 1.3 publica el código fuente y manual técnico

David Olmos (Zylk.net) me envió a finales de año información sobre el código fuente de la versión 1.3 de Sinadura, la aplicación libre para el uso de firma digital en Linux (en concreto, para la firma digital de documentos PDF).

«Acabamos de publicar las fuentes de la versión 1.3 de sinadura, está dividido en en core y en desktop como en la v.1.0. Hemos estado limpiándolas un poco y, todavía no tenemos manual para explicar cómo se configura el proyecto para compilar desde las fuentes y satisfacer las dependencias, pero dános unas semanas y estará todo publicado.»

Dicho y hecho, han pasado unas semanas y ya tenemos manual técnico, que nos explica paso a paso cómo descargar y compilas las fuentes de Sinadura. Entre las funcionalidades que se requieren con más urgencia yo destacaría el soporte a la comprobación de listas de revocación (si no se comprueba no podremos realmente confirmar la validez de un certificado) y el soporte a la firma múltiple (imprescindible para firmar actas con certificado digital por parte de varias personas).

Igual hasta se podrían proponer estas funcionalidades al Google Summer Of Code 2009… si es que este año Google también se anima a llevarlo adelante (con eso de la crisis, lo veo difícil…)

Web-Cat: evaluación automática de prácticas de programación

Web-CAT es un sistema de evaluación automatizado de ejercicios prácticos de programación. Dicho de otro modo: si estás enseñando a programar a un grupo de alumnos, les pides que resuelvan ejercicios prácticos y quieres que los puedan subir a una web y recibir feedback automáticamente, WebCat es lo que andabas buscando, en especial si el lenguaje de programación en el que solicitas los ejercicios es Java, dado que dispone de buenos plugins para integrar los tests sobre los ejercicios con JUnit, así como para la realización de tests de cobertura, de forma automática.

En mi caso, lo que buscaba era que los propios alumnos pudieran crear sus pruebas unitarias sobre las clases que deben de programar y que el sistema (WebCat en este caso), pasara dichos tests MÁS las pruebas JUnit que yo haya especificado (y que el alumno no dispone). WebCat es justo la herramienta que buscaba. Veamos el proceso de instalación.

Bajamos el .war desde SourceForge (un .war es un archivo de instalación automática de una aplicación web J2EE, para poder instalarla en dos clicks sobre por ejemplo, el servidor Tomcat).

Desde el Tomcat Manager (http://localhost:8080/manager), instalamos el .war recién descargado.
Desconozco la razón, pero desde que pulsamos el botón de instalar hasta que realmente se instala transcurren unos 2 minutos (¡en local!). ¿Tal vez se esté descargando dependencias? No lo sé, pero tras esos dos minutos, recibiremos un mensaje de OK.

Pulsamos a continuación sobre el enlace que lleva el nombre de la aplicación (/Web-CAT_1.4.0) para entrar en el asistente de configuración.

Vamos siguiendo los pasos, aceptamos la licencia, configuramos MySQL, le damos un nombre al sitio web, indicamos directorios de trabajo, dirección del servidor SMTP, email de administración, mecanismo de autenticación (built-in database, es decir, MySQL, o bien LDAP o bien a través de un plugin que especifiquemos), nombre de usuario administrador… hasta terminar por crear un semestre de prueba, con nombre de asignatura, cursos, etc.

Al terminar, el asistente nos felicitará por haber recorrido todos sus apartados correctamente y nos dejará en la pantalla de login. Nos identificamos con la cuenta de administrador que hayamos especificado previamente. Una vez autenticados, entraremos en la pantalla principal de WebCat.

Lo primero será ahora crear algún usuario/alumno (aparte del administrador), luego un curso (si no lo hemos hecho antes) y finalmente asociar usuarios/alumnos al curso. Para ello, pulsamos en la pestaña «Administer», «Edit database», y en la opción «User», seleccionamos el icono de la lupa ( < sarcastic mode > sólo me costó 15 minutos encontrar la opción en este panel tan intuitivo… < / sarcastic mode > ). Pulsamos el botón New (antes de rellenar los campos) y ahora sí, cumplimentamos los campos Authentication Domain – el nombre de tu centro – , username, password, email (son los únicos campos obligatorios) y pulsamos Save.

Crear el curso: pulsamos en Courses / New. Le damos un nombre al curso y siguiente. Ahora, elegimos «Manually add students» y elegimos a los estudiantes. Por ahora sólo tenemos uno, así que no hay mucho que pensar.

Crear ejercicios: pulsamos en Assignments, seleccionamos el curso, y pulsamos Next hasta que nos permita bautizar al nuevo ejercicio con un nombre, url, etc.

En el apartado Submission Rules, podemos indicar quién puntúa qué, plazos para aceptar los trabajos, si penalizamos por envíos tardíos, etc. Guardamos nuestras preferencias y volvemos a la página anterior.

Ahora podemos indicar que queremos usar el plugin JUnit en WebCat. Para ello, en el apartado Plugin, pulsamos el botón Add. Seleccionamos JavaTddPlugin, y a continuación pulsamos en el botón de edición del plugin.

En el apartado «JUnit Reference Test Class(es)», es donde podremos especificar los tests JUnit que queremos pasar a cada uno de los ejercicios que nos envíen los alumnos. En «Supplemental Classes for Assignment», podemos indicar clases auxiliares que WebCat deberá de incluir para compilar los ejercicios. Subimos un archivo .java con las pruebas unitarias que deseemos (se puede subir también un .zip con varios .java…)

Al terminar, no olvidarse de pulsar en «Publish it» o los alumnos no verán el ejercicio.

Charlas del grupo ITSAS en la Facultad de Informática de Donostia

El grupo ITSAS ha organizado para el próximo día 16 (día especial de mañana) en la Facultad de Informática de Donostia una serie de 4 charlas sobre diversos temas:

* Diseño gráfico con software libre, Gimp e Inkscape (Jon Ander Hernández)
* Software Librea Euskal Herrira (Iñaki Alegria)
* Programación gráfica rápida y libre (Jon Unibaso)
* Adobe Flex eta Adobe AIR teknologien aurkezpena (Juanan Pereira)

Esta última suena raro, a que sí 🙂 Bueno, recordad que Adobe Flex es software open source (licencia Mozilla Public License), así que esa parte se salva. La otra (Adobe AIR) es software privativo. Sin embargo, la posibilidad de convertir aplicaciones web realizadas usando el Flex SDK en aplicaciones AIR para el escritorio Linux (creando de paso un paquete .deb con 3 clicks de ratón) es tan interesante que no me he resistido a meter esa cuña. Además, me gustaría que alguien se animara a hablarnos sobre la alternativa libre a Adobe AIR, es decir, que nos hablara de Mozilla Prism.

Finalmente, agradecer a todos los ponentes por su ayuda, y en especial a Jon Ánder que además de dar la charla, se ha currado el cartel del evento. Y a Xabier, que ha ayudado con la difusión del evento.