Desarrollo Dirigido por Pruebas

A la hora de realizar nuestros desarrollos,  muchas veces operamos de forma que escribimos nuestro código y luego realizamos nosotros una serie de pruebas de forma manual. Muchas veces con estas pruebas, se pierde mucho tiempo y no siempre son fiables. Es por esto que se requiere de algunas herramientas que nos ayudaran o realizar un desarrollo dirigido por pruebas.

El desarrollo dirigido por pruebas, es una metodología de desarrollo que consiste en desarrollar primero una batería de pruebas para nuestro software, y seguidamente escribir nuestro software a partir de la refactorización. Muchas veces cuando realizamos nuestros desarrollos no paramos mucho tiempo a la hora de realizar las pruebas. Sin embargo, estas son muy importantes ya que de esta forma podemos detectar errores y mejorar nuestro software considerablemente.

Como vemos en la figura anterior, vemos como primero realizamos las pruebas y después escribimos el software. En este caso, vamos a ver un ejemplo de como realizaríamos las pruebas utilizando el lenguaje de programación Python. Para realizar estas pruebas utilizaremos la librería pytest. Esta librería, nos permite escribir tests de forma sencilla para probar nuestros desarrollos. Para poder utilizarla, vamos a instalarla usando el gestor de paquetes pip.

 

$ pip install pytest

Una vez instalado, vamos a realizar nuestras pruebas para la siguiente clase:

Por lo pronto necesitaremos crear una prueba para cada método de esta clase. por lo que escribiremos el siguiente código.

 

from calculadora import Calculadora
 
def test_suma():
    calc= Calculadora(2,2)
    assert calc.suma() == 4
 
def test_resta():
    calc= Calculadora(2,2)
    assert calc.resta() == 0
 
def test_mult():
    calc= Calculadora(2,2)
    assert calc.mult() == 4
 
def test_div():
    calc= Calculadora(2,2)
    assert calc.div() == 1

como temos tenemos una serie de funciones que prueban una clase llamada Calculadora. después utilizamos la palabra reservada assert. La cual nos permite comprobar una condición de forma que si la condición no se cumple, el test falla. Tras esto, utilizamos la utilidad de pytest para ejecutar los tests. Con lo cual nos muestra los siguientes resultados.

Como vemos tenemos un error ya que no esta creada nuestra clase. Utilizando nuestra prueba, creamos el software. Por lo que crearemos nuestro software. y crearemos el siguiente fichero.

 

class Calculadora:
 
    a=0
    b=0
 
    def __init__(self,a,b):
        self.a=a
        self.b=b
 
    def suma(self):
        return self.a+self.b
 
    def resta(self):
        return self.a-self.b
 
    def mult(self):
        return self.a*self.b
 
    def div(self):
        return self.a/self.b
pass

Tras escribir esta clase ya podemos probar de nuevo nuestros test. Por lo que vamos a realizar de nuevo la llamada a pytest.

 

Como vemos, ya nuestras pruebas pasan por lo que nuestro software esta escrito y probado. Por ahora hemos terminado, sin embargo, tenemos que ejecutar automáticamente nuestras pruebas. Sería más interesante que en cada cambio de nuestro software se ejecutaran automáticamente y que podamos tenerlos rápidamente. Es por esto, que se utilizan sistemas de integración continua, como Jenkins o travis Estos software permitirán compilar y ejecutar los tests de nuestro software automáticamente siempre que haya un cambio. Para ello también utilizaremos un sistema de versionado . por lo que en este caso utilizaremos Git y más concretamente GitHub.

 

Como vemos en la figura anterior, desde Git guardamos nuestro código, y tras esto Pytest ejecuta los tests y los resultados se muestra en Travis. Travis es una aplicación en la nube que nos permite ejecutar los tests de nuestra aplicación de forma gratuita si nuestro código es libre. Si queremos utilizarlo para nuestro código privativo, tendremos que utilizar la versión de pago de travis, o utilizar otros sistemas como Jenkins.

 



Vamos a ver como realizar esto para nuestro ejemplo anterior; por lo que en primer lugar, subiremos nuestro código a Github utilizando Git. Si quieres ver como realizar esto, os recomendamos los tutoriales sobre Git que tenemos. Una vez subido nuestro código a nuestro repositorio, vamos a crear un fichero especial llamado .travis.yml donde pondremos la configuración necesaria para travis. Aquí dejamos el fichero de nuestro ejemplo.

 

language: python
python:
  - "3.6"

install:
  - pip install -r requeriments.txt
script: pytest

Como vemos en el código, tenemos primero el lenguaje a utilizar, después seleccionamos la versión de python que en este caso será la versión 3.6. Después vemos un comando de instalación de paquetes a partir de un fichero llamado requerimients.txt. Este fichero guarda todas las librerías y versiones de esta. El contenido de este es:

 

pytest>3.0.7

Con esto ya podemos subir al repositorio; con lo cual lo subiremos a Github y tras esto, pasaremos a ir a travis. En esta página nos registraremos utilizando nuestra cuenta de Github. Tras esto, seleccionaremos el repositorio donde esta nuestro código.

 

 

En nuestro caso, seleccionaremos el repositorio correcto(Si no aparece hay un botón para resincronizar). Activamos el repsotitorio y podremos ver la primera ejecución.

 

Con esto ya hemos terminado de crear nuestro proyecto con integración continua; ahora cada vez que subimos a nuestro proyecto código, se ejecutarán los tests y podemos ver si todo va correctamente. Ya hemos visto como se realizan tests con pytest y como utilizar un sistema de integración continua con travis.

Como en otros artículos dejamos el enlace a nuestro repositorio.

Be the first to comment on "Desarrollo Dirigido por Pruebas"

Deja un comentario.

Tu dirección de correo no será publicada.


*


*