14 abr 2011

Diseño de pruebas unitarias

Programación Orientada a Objetos 
Semana 11 

Esta entrada es referente a las pruebas unitarias que estamos por aplicar a nuestro proyecto. Primeramente tenemos que conocer que es una prueba unitaria en la materia de programación, y es que esta es una manera de probar si una parte de nuestro código funciona correctamente. Con esto nos podemos asegurar que cada una de los métodos de una clase funcionen correctamente individualmente.

La principal razón por la que se escriben pruebas para cada función o método en una clase, es para que su buen funcionamiento sea independiente de las otras.

Con lo que debe cumplir una prueba unitaria para considerase buena debe seguir por lo menos los siguientes requisitos:

Automatizable: No debería requerirse una intervención manual.

Completas: Deben cubrir la mayor cantidad de código.

Reutilizables: No se deben crear pruebas que sólo puedan ser ejecutadas una sola vez.

Independientes: La ejecución de una prueba no debe afectar a la ejecución de otra.

El objetivo de una prueba unitaria es comprobar que partes individuales del código funcionan correctamente.

Las ventajas que nos brindan las pruebas unitarias son:

Fomentan el cambio: Las pruebas unitarias facilitan que el programador cambie el código para mejorar su estructura, puesto que permiten hacer pruebas sobre los cambios y así asegurarse de que los nuevos cambios no han introducido errores.

Simplifica la integración: Puesto que permiten llegar a la fase de integración con un grado alto de seguridad de que el código está funcionando correctamente.

Documenta el código: Las propias pruebas son documentación del código puesto que ahí se puede ver cómo utilizarlo.

Separación de la interfaz y la implementación: Dado que la única interacción entre los casos de prueba y las unidades bajo prueba son las interfaces de estas últimas, se puede cambiar cualquiera de los dos sin afectar al otro.

Los errores están más acotados y son más fáciles de localizar: Dado que tenemos pruebas unitarias que pueden desenmascararlos.

Otra ventaja de las pruebas unitarias es que nos da más confianza para modificar código ya que se pierde el miedo a hacer modificaciones y volver inconsistente el sistema.

Según el tipo de componente, podemos probar varios aspectos del código:
Funciones individuales o métodos de objeto: Probar las entradas y las salidas y comprobar que los valores obtenidos son los esperados.

Clases de objetos: Hacer pruebas aisladas de operaciones o probar también las secuencias de las operaciones.

Componentes: Hay que tener en cuenta si son distribuidos, en este caso es recomendable pasarle al componente pruebas de estrés.

¿Donde ejecutamos las pruebas unitarias?
En java podemos usar JUnit para las pruebas unitarias y JMeter para pruebas de rendimiento. Para otros lenguajes existen herramientas similares.


JUnit es un conjunto de clases que permite realizar la ejecución de clases Java de manera controlada, para poder evaluar si el funcionamiento de cada uno de los métodos de la clase se comporta como se espera. Es decir, en función de algún valor de entrada se evalúa el valor de retorno esperado; si la clase cumple con la especificación, entonces JUnit devolverá que el método de la clase pasó exitosamente la prueba; en caso de que el valor esperado sea diferente al que regresó el método durante la ejecución, JUnit devolverá un fallo en el método correspondiente.

Yo descargue JUnit desde el siguiente enlace:

Descargas

En la página hay varios paquetes, yo recomiendo bajar el más reciente que hasta el momento es el credo el 18 de enero de este año.

Crear nuestros propios Tests

En el enlace anterior esta una página de ayuda con un ejemplo simple de como empezar con JUnit y la creación de tests.

¿Cuándo implementamos las pruebas unitarias?
De forma paralela a la codificación o antes de la codificación siguiendo un desarrollo guiado por pruebas.

Referencias:
Prueba unitaria
Pruebas en el Software

1 comentario:

  1. Aquí hubiera sido bueno bajar todo al contexto de tu proyecto. 4.

    ResponderEliminar