Introducción
1.1 Introducción al proyecto
En los últimos años el lenguaje de programación PHP ha experimentado una evolución por parte de la industria, debido principalmente, a que algunas de las empresas más importantes de internet como Facebook.com están desarrolladas en este lenguaje.
Una de las partes del desarrollo en PHP que más crecimiento ha experimentado ha sido la forma de realizar pruebas automáticas del código y las distintas herramientas y metodologías que se han adaptado en ecosistema PHP. En este proyecto vamos a trata de presentar dichas herramientas, las alternativas y los problemas que podemos encontrarnos normalmente al desarrollar y especialmente testear proyectos PHP.
En nuestra opinión, los acontecimientos que han revolucionado la comunidad PHP han sido la adopción de un conjunto de herramientas, buenas prácticas y estándares por parte de desarrolladores y empresas. De este conjunto de herramientas y estándares la comunidad a comprendido los beneficios de tener testeado un proyecto PHP. Como prueba de ello podemos ver al estudiar el código de cualquier proyecto PHP alojado en GitHub, que la mayor parte tiene un gran conjunto de pruebas automáticas en sus respectivos repositorios.
La comunidad detrás de PHP-FIG está motivando a que los desarrollos de PHP sigan estándares que faciliten la modularización y reutilización componentes. Bajo esta premisa de poder compartir código es necesario que el comportamiento de dichos componentes sea predecible y estable. Para ello la comunicad desarrolla tests en las distintas fases del proyecto y a distintos niveles (unitarios, funcionales, de integración o de aceptación).
En este PFC intentaremos dar visibilidad a las distintas herramientas, centrándonos especialmente a las que están publicadas bajo licencias de código abierto. También estudiaremos las distintas metodologías que podemos realizar cuando hablamos de testo automático.
Realizar pruebas automáticas no es lo mismo que adquirir los conocimientos de programación necesarios, pero tanto en la vida profesional, como en la académica o comunitaria (nos referimos a comunidades de software), entregar con un código de mayor calidad es mejor para todos. Con este PFC hemos intentado aportar algo de conocimiento sobre este area, a riesgo de que esté cubierto en la actualidad.
1.2 Contenido de la memoria
Capítulo 1 "Introducción". Es el capítulo actual, en el que damos una pequeña introducción y objetivos del proyecto.
Capítulo 2 "Primer acercamiento a tests". En este capítulo definiremos algunos conceptos relacionados con el testeo, identificaremos los distintos tipos de tests y comentaremos algunas proyectos como Git y Composer, que son dependencia para entender el resto de ecosistema relacionado a desarrollo en PHP.
Capítulo 3 "Ejemplos de distintos frameworks". Este capítulo lo dedicaremos como introducción práctica para testeo. Para ello crearemos unos tests sencillos con PHPUnit y Atoum para una clase de manipulación de cadenas de texto.
Capítulo 4 "Aislamiento de tests e interacción con datos". Es este capítulo expondremos la importancia de testear en una situación controlada y estudiaremos diferentes herramientas especializadas en crear datos de entradas para testear.
Capítulo 5 "Testeando bases de datos". En este capítulo explicaremos los problemas que existen al testear código con dependencia de una base de datos. Veremos un ejemplo para documentar la forma en la que se podría testear códigos con este tipo de dependencias.
Capítulo 6 "Test dobles". En este capítulo analizaremos el problema que existe al testear con dependencias y analizaremos distintas formas de resolver ese problema, así como distintas alternativas a herramientas que ayudar a este efecto.
Capítulo 7 "TDD". En este capítulo estudiaremos la metodología de desarrollo guiado por los tests. Estudiaremos los distintos pasos de la metodología a través de un ejemplo y veremos una herramienta para desarrollar : Phpspec.
Capítulo 8 "BDD" Este capítulo está dedicado a estudiar el desarrollo guiado por comportamiento (behavior-driven development), así como la principal librería dedicada de PHP para ello: Behat. Veremos como utilizar Behat con un ejemplo como test de aceptación, aunque expondremos las bases para usarlo como herramienta de BDD. Al final del capítulo veremos ligeramente dos alternativas a Behat, Pho y Peridot.
Capítulo 9 "Codeception: Solución todo en uno". En el capítulo 9 estudiaremos una herramienta para testeo en PHP con capacidad de generar los tres principales tipos de tests, unitarios, de integración ty de aceptación. Veremos algunas diferencias entre otras alternativas y la forma de uso para un ejemplo como test de aceptación.
Capítulo 10 "Testeando API". En este capítulo veremos como testear la API pública de un servicio online, Flickr.com, siguiendo las dos alternativas a las que podemos optar: mockear o conexión. Veremos los problemas y ventajas al optar una u otra alternativa.
Capítulo 11 "Integración continua". En este capítulo explicaremos el concepto de la integración continua. Además desarrollaremos dos ejemplos para ilustrar el proceso de integración continua, utilizando Jenkins y Travis CI.
Capítulo 12 "Test de proyectos existentes". En este capítulo veremos una herramienta, Humbug, para análisis de test de otros proyectos. Estudiaremos los resultados de esta herramienta sobre dos frameworks PHP, Slim y Silex.
Capítulo 13 "Mas Mests". En este capítulo recopilaremos algunas situaciones de testeo no triviales y expondremos diferentes debates relativos al testeo de proyectos en PHP.
Conclusión. En este capítulo se describen las conclusiones y aprendizajes obtenidos con este proyecto, así como futuras lineas de trabajo.
Bibliografía. Se describe el material utilizado para realizar este proyecto, tanto libros como páginas web.