viernes, julio 15, 2005
Pruebas unitarias en C++
Estoy aprendiendo a programar. Probablemente hice mi primer programa (en BASIC de Commodore 64) hace 20 años, pero siento que estoy aprendiendo de nuevo. Mejor.
Creo que la culpa es del libro «Refactoring» de Martin Fowler. Eso y que últimamente he tenido que programar bastante, que también habrá tenido algo que ver. Me he hecho cargo de ingentes cantidades de código desarrollado por otras personas y eso me sirvió para aplicar algunas ideas de refactorización. Pero había una cosa que hasta hoy me fallaba: las pruebas unitarias (o tests unitarios, no sé cuál es la traducción más adecuada).
Para mí está claro que las pruebas automáticas son fundamentales: hacer pruebas es aburrido, especialmente cuando no puedes permitirte el lujo de tener un equipo específico para llevarlas a cabo. Empecé haciendo algunos scripts para automatizarlas, pero eran pruebas de validación. Hoy por fin me decidí a hacer pruebas unitarias.
Tardé en parte porque no sabía qué entorno («framework») utilizar. En el Wiki de Ward (el primero que se hizo y el que inventó el concepto) encontré algunos textos muy buenos sobre pruebas de software, entre ellos una comparación de entornos para C++. En Java la cosa está clara: se usa JUnit y punto. Pero en C++ no acaba de haber un candidato que se imponga a los demás. En esta comparativa decidían quedarse con CxxTest. A mí había una cosa que no me gustaba: necesitaba perl. Pero al final me convencieron los argumentos del autor citado, en especial tres: es sencillo, potente y tiene una muy buena documentación.
La aplicación a la que le quería añadir las pruebas está hecha en Qt. Costó la parte del Makefile, pero una vez superado ese obstáculo, me parece que CxxTest ofrece la sencillez que a mí me gusta: te pones a escribir el código de las pruebas y ya está. Ahora, a añadir pruebas poco a poco y a ver si me sigue gustando la teoría después de haberla puesto en práctica durante un tiempo...
Todo esto (refactorización, pruebas, el uso de Subversion, la lectura de muy buenos textos sobre Programación Extrema en el Wiki de Ward y la lectura de partes de «Code Complete») es lo que me hace tener la sensación de estar aprendiendo a programar de nuevo. Y es divertido.
Creo que la culpa es del libro «Refactoring» de Martin Fowler. Eso y que últimamente he tenido que programar bastante, que también habrá tenido algo que ver. Me he hecho cargo de ingentes cantidades de código desarrollado por otras personas y eso me sirvió para aplicar algunas ideas de refactorización. Pero había una cosa que hasta hoy me fallaba: las pruebas unitarias (o tests unitarios, no sé cuál es la traducción más adecuada).
Para mí está claro que las pruebas automáticas son fundamentales: hacer pruebas es aburrido, especialmente cuando no puedes permitirte el lujo de tener un equipo específico para llevarlas a cabo. Empecé haciendo algunos scripts para automatizarlas, pero eran pruebas de validación. Hoy por fin me decidí a hacer pruebas unitarias.
Tardé en parte porque no sabía qué entorno («framework») utilizar. En el Wiki de Ward (el primero que se hizo y el que inventó el concepto) encontré algunos textos muy buenos sobre pruebas de software, entre ellos una comparación de entornos para C++. En Java la cosa está clara: se usa JUnit y punto. Pero en C++ no acaba de haber un candidato que se imponga a los demás. En esta comparativa decidían quedarse con CxxTest. A mí había una cosa que no me gustaba: necesitaba perl. Pero al final me convencieron los argumentos del autor citado, en especial tres: es sencillo, potente y tiene una muy buena documentación.
La aplicación a la que le quería añadir las pruebas está hecha en Qt. Costó la parte del Makefile, pero una vez superado ese obstáculo, me parece que CxxTest ofrece la sencillez que a mí me gusta: te pones a escribir el código de las pruebas y ya está. Ahora, a añadir pruebas poco a poco y a ver si me sigue gustando la teoría después de haberla puesto en práctica durante un tiempo...
Todo esto (refactorización, pruebas, el uso de Subversion, la lectura de muy buenos textos sobre Programación Extrema en el Wiki de Ward y la lectura de partes de «Code Complete») es lo que me hace tener la sensación de estar aprendiendo a programar de nuevo. Y es divertido.