2 Integración Continua
En palabras de Martin Fowler, unos de los principales exponentes del desarrollo ágil, la integración continua es una práctica de ingeniería de software dónde los miembros de un equipo integran su trabajo de manera frecuente, usualmente una persona realiza una tarea de integración diariamente. Cada integración es verificada mediante una compilación automatizada, que incluye las pruebas, con la finalidad de detectar errores de integración tan pronto como sea posible. El uso de esta práctica ha demostrado que ayuda a reducir significativamente los problemas de integración y permite a los equipos de desarrollo construir software cohesivo con mayor rapidez.
Uno de los conflictos que se presentan al no realizar integraciones continuas en los proyectos, es la ruptura del sistema al realizar e implementar cambios que aún no son probados; la falta de integración continua genera inestabilidad en el código además de un ciclo de retroalimentación muy largo, por mencionar solo algunos de los problemas derivados de la falta de uso de esta importante práctica de ingeniería de software.
Figura 2.1: Ciclo de vida de la integración continua
2.1 Ciclo de vida de la integración continua
Tal y como se muestra en la Fig. 2.1, el ciclo de vida de esta práctica de ingeniería de software es un proceso continuo, y que termina, hasta que el software alcanza una madurez en su integración lo suficientemente buena para que el producto de software desarrollado sea liberado al mercado o entregado a su usuario final. A continuación se describen brevemente cada una de las actividades del ciclo de vida de la integración continua.
2.1.1 Publicar código fuente de la máquina local
Checks in source code. ### 2.1.2 Descargar código fuente del servidor de control de versiones 2. Checks out source from VCS. ### 2.1.3 Compilar el código 3. Compile. ### 2.1.4 Realizar análisis estático de los estándares de programación y de errores 4. Static code analysis standards & bugs. ### 2.1.5 Ejecutar pruebas unitarias 5. Run unit test. ### 2.1.6 Realizar análisis de cobertura de código 6. Code coverage analysis. ### 2.1.7 Realizar análisis de seguridad estático del código fuente 7. Static code analysis security (time consuming). ### 2.1.8 Compilar unidades de código lista para distribución 8. build deployable units. ### 2.1.9 Desplegar la aplicación 9. Deploy APP. ### 2.1.10 Definir el análisis de rendimiento 10. Setup perf analysis. ### 2.1.11 Definir banco de pruebas 11. Set up test fixtures. ### 2.1.12 Realizar pruebas funcionales y de automatización 12. Functional test / automation. ### 2.1.13 Publicar reportes 13. Publish reports.
2.2 Ventas y desventajas de la integración continua
Como toda práctica en la ingeniería de software, la integración continua tiene sus ventajas y sus desventajas, a continuación en la Tabla 1 se mencionan las más relevantes.
| Ventajas | Desventajas |
|---|---|
| Detectar y solucionar problemas de integración | Requiere compromiso de la empresa (infraestructura). |
| de forma continua. | |
| Disponibilidad constante de una versión para | Mantenimiento de alto nivel. |
| pruebas. | |
| Ejecución inmediata de las pruebas unitarias. | Un experto para el manejo (Build master) |
| Monitorización continua de las métricas de | |
| calidad del proyecto. |
Tabla 1: Ventajas y desventajas de continuous integration
A continuación se nombran algunas de las herramientas que se pueden utilizar:
- GitHub. Repositorio para control de versiones
- Travis-CI. Sistema distribuido de integración continua libre integrado con GitHub
- CPD (Continuing Professional Development)
- PMD (Project Mess Detector)
- Coverity.
- FxCop. Herramienta de análisis de código
- Jenkins. Servidor de integración continua open source