A good mix between an iOS & Android Developer, Web Developer, Technical Lead, Tech Speaker, and a good guy :D.

Tags


Integración Continua: Asegura la estabilidad de tu software con software libre

28th May 2011

Introducción

No hay nada mas incómodo que un Bug. Incómodo para el usuario pues no sabe que hacer para continuar antes de que apareciera el bug, e incómodo para el desarrollador ya que la reputación y credibilidad decrece enormemente. Actualmente no existe ningún método o forma de trabajo que elimine por completo la probabilidad de que no existan fallas en una aplicación, pero sí existen métodos automatizados que ayudan a disminuir tan complicada probabilidad.

Las complicaciones en la creación de un software

Programar es realmente un arte. Pero cuando el proyecto es inmenso y existe mucha gente involucrada en este proceso, deja de ser un arte, sino más bien un buen dolor de cabeza. Partes del código intervenido una y otra vez, la falta de sincronización entre los desarrolladores e incluso la inexperiencia de los participantes en trabajar en equipo provocan ciertos riesgos en el proyecto. Un buen plan de pruebas puede mitigar la probabilidad de que existan estos riesgos, pero lo que realmente puede salvarnos el día, es estructurar el desarrollo para que exista, por cada módulo o de la aplicación, pruebas unitarias y pruebas funcionales.

¿Pruebas unitarias? ¿Pruebas funcionales?

Probar. Esa es la clave. Probar cada línea de código escrita. ¿Pero hasta que punto esto logra el éxito del desarrollo de una aplicación? La respuesta a esto, tiene que ver con la forma en que se estructuran las pruebas a un software: pruebas unitarias y pruebas funcionales. Las pruebas unitarias es una forma de comprobar el correcto funcionamiento de una función o módulo de código. Verifica principalmente que esas agrupaciones de código cumplan con la tarea para el cual han sido programadas. Si una función se escribió para sumar 2 números, la prueba será tan simple como entregar los 2 párametros y comprobar que 1 + 1 es igual a 2 y no cualquier número.

A pesar que esto suene interesante, (y algo muy importante), no asegura que realmente se está cumpliendo con el propósito o el fin de la aplicación que se está́ desarrollando. Para eso existen las pruebas funcionales. Por ejemplo, si se está desarrollando un blog, una prueba funcional sería escribir un post de prueba, y luego comprobar en la página principal del blog que lo que escribimos realmente aparezca posteado. O sea, las funcionalidades detalladas.

¿Que es Integración Continua?

La integración continua es una metología informática que consiste en realizar de forma automatizada (sin mayor intervención humana) distintas pruebas, ya sean unitarias o funcionales lo antes posible, y lo más seguido posible, con el fin de detectar fallos o bugs cuanto antes. Cuando hablamos de Integración, hablamos de la compilación del proyecto y la ejecución de todos sus tests.

El ciclo de vida de un software que realice la integración continua, es detectar cambios en un repositorio donde se esté́ llevando el control de versiones de la aplicación en desarrollo, luego descarga el código fuente, prosigue con la compilación, luego ejecuta las distintas pruebas necesarias para determinar que el software cumple con las expectativas, y finalmente informa a los encargados principales del estado de la ejecución.

Ventajas y Desventajas

Las principales ventajas de realizar Integración Continua son:

Los desarrolladores pueden detectar y solucionar problemas de integración de forma continua, evitando el caos de ultima hora cuando se acercan las fechas de entrega.
Disponibilidad constante de una build para pruebas, demos o lanzamientos anticipados.
Ejecución inmediata de las pruebas unitarias.
Monitorización continua de las métricas de calidad del proyecto.
Por otro lado, las desventajas, aunque son pocas, son:

Se requiere mucho tiempo inicial para configurar el ambiente de pruebas.
Se requiere que exista una suite de pruebas bien desarrolladas para tener las ventajas del testing automático.
El costo por hardware para las maquinas que realice los builds y las pruebas, puede ser elevado en algunas ocasiones.
¡Software Libre al rescate!

Así como Batman tenía de apoyo a su mayordomo Alfred, los desarrolladores tenemos de apoyo a Jenkins como nuestro robot mayordomo.

Jenkins (http://jenkins-ci.org/) es una herramienta Open Source de integración continua escrita en Java. Inicialmente este software se llamaba Hudson, mantenido por Oracle, pero por disputas por marcas entre Oracle y la comunidad de desarrolladores, estos últimosJenkins CIrealizaron un fork para ser mantenido únicamente por la comunidad. (Ups!, ¿alguien recordó con esto el caso OpenOffice/LibreOffice?).

En fin, Jenkins provee servicios de integración continua para distintos lenguajes. En un principio, estaba orientado a ser utilizado en proyectos programados en Java, pero hoy en día puede ser integrado en proyectos con distintos lenguajes, como Python, Ruby, C++, etc.

Es capaz de manejar distintos sistemas de control de versión, como CVS, Subversion, git, Clearcase, y puede ejecutar proyectos basados en Apache Ant y Apache Maven, como así también puede ejecutar cualquier tipo de comandos que pueda ser llamado desde una línea de comandos.

Extendiendo Jenkins con Plugins

Si bien es cierto, con toda la funcionalidad mencionada anteriormente puede ser suficiente, existen formas de extender sus funcionalidades a traves de los distintos plugins que esta aplicación posee. Es capaz de notificar las ejecuciones a través de Jabber, Twitter, o puede ser capaz de ejecutar pruebas funcionales con SeleniumHQ, también puede analizar el resultado de pruebas unitarias realizadas con JUnit, etc. La cantidad de plugins es inmensa, solo se debe revisarlos, e instalar aquellos que se adecúen a las necesidades del proyecto en desarrollo.

Conclusiones

Realizar pruebas al software es muy importante para asegurar la calidad el software. Pero cuando existe mucha gente involucrada en el proceso y el proyecto es grande, es dificil poder llevar un control sobre esto. Para ello, se da como solución utilizar Integración Continua, ocupando Software libre mantenido y desarrollado por una comunidad de desarrolladores. El uso de éste reduce la probabilidad de errores, mantiene la estabilidad y realiza de forma automatizada distintas labores programadas por un encargado, llevando como resultado final, la realización de un software estable y utilizable.

Rodrigo Ayala
AUTHOR

Rodrigo Ayala

View Comments