ago 01

La integración contínua (Continuous integration) es un conjunto de metodologías de ingeniería de software que aplicadas sirven para acelerar el desarrollo de software basándose en la aplicación de cambios de una forma ágil y controlada. La integración contínua fue propuesta inicialmente por Martin Fowler y Kent Beck a partir de las metodologías que forman la programación extrema.

Algunas de las metodologías que forman la integración contínua son: mantenimiento de un repositorio de código con, por ejemplo CVS, SVN o Visual Source Safe (tener un repositiorio de código además ayudará a tener disponible de forma sencilla la última versión del proyecto), mantener una copia exacta del servidor de producción para hacer pruebas, automatizar los despliegues, automatizar y hacer rápida la construcción (build) del proyecto si se utiliza un lenguaje compilado y la metodología de la que hablaré un poco más en profundidad, la creación de pruebas unitarias (Unit Testing).

El proceso completo de integración contínua consiste a grandes rasgos en realizar periódicamente (en periodos cortos, por ejemplo horas) los siguientes pasos:

  • La descarga o actualización de las fuentes desde el sistema de control de versiones.
  • Realizar los cambios necesarios para crear la nueva funcionalidad, realizar una modificación o corregir un bug.
  • Subir el código al repositorio que posteriormente se desplegará en el servidor clónico al de producción una vez realizadas las comprobaciones automáticas y comprobada la estabilidad y corrección de la nueva funcionalidad mediante pruebas unitarias, mecanismos de control de métricas (complejidad ciclomática, nivel de anidamiento…), control de sintaxis, etc. , generar los informes oportunos.
  • En caso de mantener más de una rama de desarrollo, al completar una funcionalidad, hacer merge de los cambios con la rama principal.
  • Actualizar la versión en producción en caso de tratarse de un proyecto web o actualizar la última versión disponible en caso de tratarse de una aplicación de escritorio.

La realización de pruebas unitarias juega un papel fundamental en este conjunto de metodologías ya que es responsable de la comprobación automática de la funcionalidad individual de cada unidad de código, habitualmente cada clase, utilizando el paradigma de programación orientada a objetos.

El concepto de las pruebas unitarias, o unit testing es sencillo. Si tenemos que hacer un programa, e ir comprobando según lo vamos haciendo si la funcionalidad del programa se corresponde con lo que en principio queríamos hacer, ¿porqué no programar una pequeña aplicación que haga las comprobaciones por nosotros? El comportamiento habitual de la mayoría de programadores es o bien ir escribiendo texto por la salida estandar como “llego hasta aqúi”, “el valor de esta variable es…”, etc. código que hay que escribir, comprobar, y luego eliminar. Otra posibilidad sería escribir todo el código confiando en nuestra concentración y luego usar algún algún tipo de debugger si el código no hace lo esperado. En el primer caso, perderíamos mucho tiempo. En el segundo quizá la pérdida de tiempo sería menor pero probablemente estemos pasando por alto casos de prueba que podrían ser propensos a error.

Por todo lo anterior y para ganar en tiempo y corrección, actualmente la mejor solución es la realización de pruebas unitarias. Además, estas pruebas servirán, no solo para probar el código al programarlo por primera vez, sino para comprobar que al realizar un cambio en una unidad del proyecto, el comportamiento de otras unidades dependientes de esta se mantiene y no aparecen efectos colaterales inesperados. Por esto, las pruebas unitarias son tan importantes en la integración contínua. Sin ellas, los cambios realizados en a intervalos pequeños y regulares introducirían probablemente errores difíciles de detectar.

Para la realización de pruebas unitarias, existen herramientas y entornos de desarrollo (frameworks) que facilitan su creación en multitud de lenguajes de programación. Estas son algunas de ellas (hay muchas más):

  • JUnit: Framework de pruebas unitarias en Java.
  • JTiger: Otro framework de pruebas unitarias en Java.
  • SimpleTest: Framework de pruebas unitarias de PHP, inspirado en JUnit.
  • PHPUnit: Framework de pruebas unitarias de PHP de PEAR.
  • PerlUnit: Framework de pruebas unitarias en Perl.
  • lisp-unit: Pruebas unitarias en Lisp.
  • tgM2: Pruebas unitarias en Modula2 ;)

Valorar esta entrada:

1 Estrella2 Estrellas3 Estrellas4 Estrellas5 Estrellas (Todavía no hay valoraciones)
Loading ... Loading ...

Entradas relacionadas:

4 respuesta a “Pruebas unitarias en integración contínua”

  1. Webmasters en Pruebas unitarias en integración contínua
    Webmasters dice:

    Efectivamente, muchas veces al programar, termino escribiendo pequeños mensajes de salida con el debug de las variables… y luego los elimino… no es la forma óptima de hacerlo como bien dices, pero me da un nivel de control a nivel programación único… sin embargo, voy a ver de probar alguno de las herramientas que mencionas… ;)

  2. Javier Callón en Pruebas unitarias en integración contínua

    Me alegro de que te haya sido últil el artículo. Seguro que si empiezas a usar un framework de testing para desarrollar notarás los beneficios. Y si lo que quieres es hacer debug, estoy pensando en escribir próximamente un artículo sobre ello que espero que también te resulte interesante.

    Un saludo.

  3. performante en Pruebas unitarias en integración contínua
    performante dice:

    Para tu articulo de debugging no te olvides del omniscient debugger ( http://www.lambdacs.com/debugger/ ) … o echale un vistazo si no lo conoces, seguro que te parece interesante poder volver atras en el tiempo ;) )

  4. Javier Callón en Pruebas unitarias en integración contínua

    Pues no, no lo conocía y tiene muy buena pinta. En cuanto tenga algo de tiempo le echaré un vistazo. ¡Gracias por el enlace!

Dejar una respuesta