Hacia un framework de desarrollo guiado por pruebas para Vala - primera parte

Posted on Fri 08 January 2016 in Vala

Encontre Vala por la primera vez cuando estaba averiguando la posibilidad de portear un viejo programa de código abierto desde GTK + 2 a GTK + 3. Yo no estaba muy seguro de qué hacer con Vala en aquel momento - era un lenguaje de programación orientado a objetos basado en el sistema de objetos de GObject y utilizaba C como el lenguaje intermediario con el compilador de gcc. Después de leer un montón de muestras, me llamó la atención la elegancia y parsimonia de la sintaxis y cómo fue comprensible de inmediato por mi familiaridad con Java y C #. Jugué con algunas aplicaciones de ejemplo y me sorprendió tal divertido fue utilizarlo también. Era GObject sin las interminables resmas de código repetitivo. Propiedades ya tenía sentido y el uso de señales resultaba mojo de pavo. Fue soportado por los ambientes de desarrollo integrado (IDE) tal como cualquier otro lenguaje, especialmente por Geany, mi herramienta preferida. Me enganché.

Había un problema solamente. Soy un gran fan de desarrollo guiado por pruebas o TDD (por sus siglas en ingles) y después de muchas horas de intensa Google-Fu, encontré muy poco sobre el tema en respecto al Vala. Lo que hubo fue básicamente utilizar las funciones de prueba de la biblioteca GLib y una pequeña clase adaptador para agrupar los casos de prueba particulares en un conjunto de pruebas. El resultado final se llevó a cabo a través de gtester por la línea de comandos, en general como parte de una cadena de herramientas como Autotools. Esto bastaba para aplicaciones sencillas con interacciones limitadas con el usario, pero en realidad no escala para el desarrollo guiado por comportamiento (BDD en ingles). Alguien había desarrollado un framework llamado Valadate pero esto fue abandonada por sus mantenedores ya hace unos años. Esto fue un verdadero bloqueo para mí. La filosofía mía es que de vez en cuando se puede escribir gran software en los momentos furiosos de creatividad pero se precisan pruebas aburridas para producir software de calidad consistentemente.

Su falta de preubas de unidad me resulta molesta

La trampa con el software libre es que solamente no cuesta nada en el cajero. Una vez que llegues a casa, tienes que pagar el costo de mantenimiento en tiempo si quieres seguir utilizándolo. Ese tiempo podría ser gastado en hacer contribuciones menores, como la presentación de informes de errores o dar ayudar a los nuevos usuarios en los foros o la traducción de aplicaciones hasta agregando y desarrollando funciones neuvas. Yo veo mucha potencia en Vala pero siento que esta falta le debilita mucho. Los desarrolladores del lenguaje han dado un gran regalo al mundo y su tiempo sería mejor ocupado en mantenerlo. La solución que ya existe es casi suficiente, pero genera una gran cantidad de código para mantener y no hay soporte para BDD. "Alguien debería hacer algo" es una frase que me molesta mucho al escuchar, porque creo que ese alguien debería ser la persona que la dijo. Bueno, alguien debería hacer algo...

Así que esta entrada del blog es un esfuerzo para tomar la iniciativa. Aunque en este momento tengo un poquito de tiempo libre, eso no var a ser el caso por siempre. Asimismo, no quiero empezar un proyecto vaporware o abandonadoware que sería agregado a la lista de buenas ideas que alguien tenía. Me gustaría construir algo que sea sostenible, que evolucione con sus usuarios y que podría ser traspasado a otros mantenedores si no tendría tiempo suficiente para dedicarme an ello. Me imagino que esto ha sido el manifiesto de miles de proyectos de código abierto ya fallados, pero es mejor que nada - así que hay va ...

Tomar la iniciativa

Dado que el objetivo del proyecto es capacitar Vala con TDD y BDD, me gustaría utilizar las técnicas de Agile para planificar y desarrollarlo. En este caso, los primeros pasos serían la creación de una visión de producto y la recopilación de los requisitos. Voy a tomar el primer paso (citado porque VISIÓN DE PRODUCTO).

Para los desarrolladores de Vala que necesitan probar su código, < insertar el chulo nombre de herramienta > es un framework de pruebas de gran potencia que proporciona funciones de pruebas de las características de comportamiento, funcionales y unitarias para ayudarles a escribir gran software de código abierto. La diferencia con los otros frameworks de prueba y < insertar el chulo nombre de herramienta > es que está diseñado especialmente para Vala, y integra perfectamente en las cadenas de herramientas ya existentes.

Supongo me toca a mi ser el propietario del producto también. De veras, no me importa cómo sera llamado - Valadate es suficiente bueno tal como cualquiera, pero estoy abierto a sugerencias. Si hay suficientes ideas siempre podemos tener una encuesta.

El siguiente paso será la recopilación de requisitos, lo que ya tengo algunas ideas, pero me gustaría saber lo que los usuarios potenciales piensan. Por eso he armado una pizarra Trello y si deseas sugerir una función o comentar sobre una que ya existe, haz clik aquí y hazte oír. Si eso no es su medio preferido, me puedes pingear en Twitter o en el canal de IRC de Vala (irc.gimp.org #vala), apodo: bizarro. Una herramienta como esta va a vivir o morir debido a su aptitud para el uso, así que no te callas por favor!

Ya está - en el próximo post voy a resumir los requisitos que habría recopilado y poner en la mesa las opciones para la arquitectura del sistema además de elaborar un calendario provisional para la primera versión. Gracias por escuchar y no olvides de unirse a la conversación si tienes algo que decir.