Ya hemos hablado en el blog de Scrum, de kanban, de herramientas de gestión de proyectos. Ahora quiero ir un poco más allá y empezar con TDD. Últimamente he estado adentrándome en encontrar una manera de desarrollar software con calidad y creo que utilizar Test Driven Development es un buen comienzo. Así que haya vamos.
Introducción
Test Driven Development (TDD) es una técnica de diseño e implementación de software incluida dentro de la metodología XP. Se basa en la idea de desarrollar pruebas, codificar y refactorizar el código construido.
TDD se basa en la idea de realizar pruebas unitarias para el código que debemos construir.
Basándome en el libro de “diseño ágil con TDD” podemos decir que la esencia de TDD es sencilla pero ponerla en práctica correctamente es cuestión de entrenamiento, como tantas otras cosas. El algoritmo TDD sólo tiene tres pasos:
- Escribir la especificación del requisito (el ejemplo, el test).
- Implementar el código según dicho ejemplo.
- Refactorizar para eliminar duplicidad y hacer mejoras.
Obviamente la obtención de un buen resultado aplicando TDD depende de realizar un conjunto de pruebas unitarias que cubran todos los casos descritos en los requisitos. Es cierto que habrá que trabajar la técnica para realizar buenos test, siendo aquí donde reside una de las mayores dificultades de este método.
Instalando el entorno: XAMPP + ECLIPSE PDT + PHP UNIT
Para empezar con TDD he decidido utilizar como lenguaje PHP, como soy usuario de Windows las herramientas que utilizaremos aquí serán Xampp para tener un servidor de aplicaciones (Apache), Eclipse como IDE para escribir código y PHPUnit para ejecutar las pruebas.
Instalar Xampp
XAMPP es un servidor independiente de plataforma, software libre, que consiste principalmente en la base de datos MySQL, el servidor web Apache y los intérpretes para lenguajes de script: PHP y Perl.
Lo podemos descargar aquí: http://www.apachefriends.org/es/xampp.html
Cuando esté instalado tendremos algo como esto:
Instalar Eclipse PDT
Existen muchos IDE´s para programar en PHP, incluso podemos hacerlo con un editor de texto normal. Aquí mucha gente utiliza PHP Storm, Netbeans, yo e optado por Eclipse porque su Marketplace es genial.
Lo podemos descargar aquí http://www.eclipse.org/pdt/downloads/ o, si ya tenemos eclipse instalarnos la extensión PDT utilizando el Marketplace de eclipse (en la pestaña help -> eclipse Marketplace).
Cuando nos pregunten por el workspace debemos elegir C:\xampp\htdocs
Instalar PHPUnit
PHPUnit es un entorno para realizar pruebas unitarias en el lenguaje de programación PHP. Yo he instalado PTI – PHP Tool Integration es una serie de plugin para eclipse que puedes descargar e instalar del Marketplace. Esta es su página oficial: http://www.phpsrc.org/
Configurando un par de cosillas
Configurando PEAR
Para que todo funcione a la perfección debemos configurar PEAR, así que seguiremos estos pasos:
1º Descargar Pear de aquí http://pear.php.net/go-pear.phar y copiarlo en C:\xampp\php folder.
2º Abrir un terminal (cmd.exe) y escribir los siguientes comandos:
cd c:\xampp\php php go-pear.phar
3º Ejecutar el fichero de registro C:\xampp\php\PEAR_ENV.reg para que PEAR termine de funcionar (crea una variable de entorno)
4º para ver si todo está correcto tecleamos en el terminal algo como esto: pear config-show
Configurando Eclipse PDT
Bien ya lo tenemos casi todo montado, xampp funcionando, eclipse con PDT instalado y con el workspace como en htdocs, phpunit instalado y pear instalado, ahora solo queda configurar eclipse.
Para ello en eclipse vamos a Windows -> preferences y en la en menú escogemos “PHP Executable” y pulsamos sobre Add
Ahora le decimos a eclipse que hemos tenemos PHP instalado en c:\xampp\php
Por ultimo seleccionamos “PHP Tools” -> “Library -> PEAR y añadimos Pear
Por ultimo solo nos queda configurar PHPUnit.
Configurando PHPUnit
En Windows -> preferences nos vamos al menú de “PHP Tools”-> “PHP Unit” y escogemos las siguientes opciones
Si nos apetece podemos abrir la ventana de PHPUnit en Windows -> “show view”
Tendremos un IDE como este:
Probando que todo funciona – Creando un proyecto
Llegado aquí ya lo tenemos todo funcionando (o eso creo) ya solo nos queda probar que todo está correctamente. Arrancamos Apache, y en eclipse creamos un nuevo proyecto llamado phpunittest.
Pulsamos sobre Next y en la pestaña “Library” añadimos PEAR
Ahora tenemos que habilitar PHPUnit, para ello hacemos clic con el botón derecho sobre el proyecto y nos vamos a “properties” allí en el menú “PHP Tools” -> “PHP Unit” marcamos el tick para habilitar PHPUnit en este proyecto.
Creamos una nueva carpeta donde vamos a ir almacenando los test. Así que hacemos clic derecho encima del proyecto pulsamos new -> folder
Creando nuestro primera clase de test
Lo que hacemos es sobre la carpeta test que acabamos de crear vamos a “new” -> “php file” y le damos el nombre que queramos, por ejemplo “miprimeraprueba.php”
Creando el código de nuestra primera prueba
Lo primero que debemos hacer es crear una clase de test a la que llamaremos “miprimeraprueba”, esta clase debe extender a “PHPUnit_Framework_TesCase”. Una vez creada la clase solo tenemos que crear nuestro primer test para ver que todo funciona correctamente.
Aquí tenemos el código:
<?php class miprimeraprueba extends PHPUnit_Framework_TestCase { public function test() { $this->assertTrue(true); } }
Un test se declara de la misma manera que una función, la única condición es que debe tener un assert para comprobar. Nuestro primer assert será solamente una prueba donde para saber que PHPUnit funciona a la perfección.
*Es importante guardar antes de ejecutar el test, sino no estaremos haciendo las cosas bien.
Como vemos el test falla, si cambiamos false por true, guardamos y volvemos a ejecutar el test podemos asegurar que phpunit funciona a la perfección.
Llegados a este punto ya podemos utilizar PHPUnit para empezar con TDD. En los siguientes posts iremos comentando un poco más sobre cómo ir adentrándonos en esta técnica.
Referencias
Diseño ágil con TDD http://www.dirigidoportests.com/el-libro
http://blog.loftdigital.com/running-phpunit-tests-in-eclipse-pdt