SlideShare una empresa de Scribd logo
1 de 55
Descargar para leer sin conexión
Testing en PHP
Herramientas y algunas cosicas más.

Isidro Merayo Castellano
Agradecimientos
Sobre mi
Isidro Merayo Castellano
@isidromerayo
http://www.lastfm.es/user/_imc_
https://bitbucket.org/isidromerayo o https://github.com/isidromerayo
Publicidad
#Movember http://moteam.co/pucela-motown
Katayunos
http://katayunos.com/
Disclaimer
Voy a contar mis experiencias con PHP y
testing, no soy ni gurú ni “experto” ni
“certificado”.
Agenda
● Frameworks xUnit.
● Herramientas de QA e integración continua.
● Vengo a hablar de mi libro (simple php
skeleton).
● Kata (dos pomodoros al menos).
Frameworks xUnit
http://en.wikipedia.
org/wiki/List_of_unit_testing_frameworks#PHP
● PHPUnit (http://phpunit.de/manual/current/en/index.
html)
● Simple Test (http://www.simpletest.org/)
● Enhance PHP (https://github.com/EnhancePHP/Enhance-PHP)
● Atoum (https://github.com/atoum/atoum)
Frameworks xUnit
PHPUnit
● Más extendido (y antiguo, en 2001 ver 1.0).
● Fácil de instalar e integrado en IDEs.
● Documentado y muchas aserciones.
● Soporte y actualizaciones frecuentes.
● Plugins y extensiones.
● Versiones: 3.7 (PHP 5.3.3) y 3.8 (PHP 5.4.7)
Frameworks xUnit
Simple Test
● Usado por Drupal (< 8.x).
● Instalación sencilla (plugin para Eclipse).
● Documentación pobre.
● Muy parado (v1.0.1 del 2008 - v1.1.0 2012).
● Mocks y Web Page test (http://simpletest.org/en/overview.html).
● Versiones: 1.1.0 (PHP 5.0.5) y 1.0.1 (PHP 4)
Frameworks xUnit
Simple Test
https://bitbucket.org/isidromerayo/pucelatestingdays_simpletest
Frameworks xUnit
Enhance PHP
● Reciente aparición (2011).
● Fácil de instalar, solo requiere 1 fichero.
● Dispone de Mock y Stubs.
● Informes en XML y TAP, para utilizar en CI.
● Se ha quedado un parado (último commit
hace dos meses).
Frameworks xUnit
Enhance PHP
https://bitbucket.org/isidromerayo/pucelatestingdays_enhance-php
Frameworks xUnit
Atoum
● Reciente aparición (requiere PHP 5.3.3).
● Fácil de instalar (soporte Netbeans 7.4).
● Mejorar SimpleTest y PHPUnit (más rápido para
implementar, simplificar el desarrollo y fácil de leer).

● Informes para utilizar en CI y cobertura.
● Uso con Symfony2 y Zend Framework 2.
Frameworks xUnit
Atoum
https://bitbucket.org/isidromerayo/pucelatestingdays_atoum
Frameworks xUnit: resultados
Instalación

Documentación

Estado/soporte

Test Dobles y
Funcionales

Aspectos interesantes

PHPUnit

Git, PEAR, PHAR
o composer.

Buena.

Muy activo,
GitHub.

Mock/Stub y extensión
Selenium.

Anotaciones,
plugin/extensiones, Data
provider, etc.

Simple Test

SVN, descarga y
composer (no
oficial).

Básica y enlaces
“perdidos”.

Poco activo,
sourceforge con
lista de correo.

Mock/Stub y Web.

Roadmap con nuevas
versiones http://simpletest.

Enhance PHP

Git y composer.

Poca pero hay post
por blogs.

Poco activo,
GitHub..

Mock/Stub

Ligero.

Atoum

Git, PHAR y
composer.

En francés y
parcialmente en
inglés.

Activo, GitHub.

Mock/Stub

Muchas aserciones (aprox
200), informes de
cobertura al aire.

org/api/SimpleTest/tutorial_Sim
pleTest.pkg.html.
Frameworks BDD
Frameworks BDD
● Behat (http://behat.org/)
● phpspec (http://www.phpspec.net/)
● Codeception (http://codeception.com/)
Herramientas de QA e integración continua.
● PHP QA Tools (http://phpqatools.org/)
○
○
○

PHP Copy/Paste Detector
PHP Mess Detector
PHP Depend...

● Otras herramientas
○
○
○
○
○
○
○

Security Advisories Checker (https://security.sensiolabs.org/)
SensioLabsInsight (https://insight.sensiolabs.com/)
Sismo (http://sismo.sensiolabs.org/)
Travis CI (https://travis-ci.org/)
phpci (http://www.phptesting.org/)
Scrutinizer (https://scrutinizer-ci.com/)
Jenkins PHP (http://jenkins-php.org/)
Herramientas de QA e integración continua.
PHP QA Tools (http://phpqatools.org/)
● PHPUnit: Test framework.
● PHP_Depend: Métricas de calidad.
● PHP Mess Detector: Detector de problemas potenciales
como: bugs, código muerto, etc.
● PHP_CodeSniffer: Coding standards.
● PHP Copy/Paste Detector: Detección de código
duplicado.
Herramientas de QA e integración continua.
PHP QA Tools - PHP_Depend
● Generación de todas las métricas --summary-xml=
●

N Path Complexity, Coupling, Cyclomatic Complexity, etc.

● Gráficas (SVG): dependencias de los paquetes y análisis
del código fuente.
http://pdepend.org/
http://pdepend.org/documentation/handbook/reports/overview-pyramid.html
http://pdepend.org/documentation/software-metrics.html
Herramientas de QA e integración continua.
PHP QA Tools - PHP Mess Detector
● Reglas: clean code, code size, controversial, design,
naming y unusedcode establecidad por defecto.
/usr/share/php/data/PHP_PMD/resources/rulesets

● Elementos a inspeccionar (ficheros o directorios)
● Formato del informe: xml, text o html.
http://phpmd.org/
http://phpmd.org/documentation/index.html
Herramientas de QA e integración continua.
PHP QA Tools - PHP Code Sniffer
● Reglas: Detecta tanto en ficheros PHP, como JS o CSS
inconsistencias respecto al estándar usado por el
equipo. PEAR, Zend, PSR1, etc.
/usr/share/php/test/PHP_CodeSniffer/CodeSniffer/Standards/
http://pear.php.net/package/PHP_CodeSniffer/
Herramientas de QA e integración continua.
PHP QA Tools - PHP Copy Paste Detector
● Detección de la combinación de teclas más usada en el
mundo (ctrl+c, ctrl + v).
● Dos o más, son una fuente de bugs que duplica,
triplica, etc dependiendo del número de C+P.
https://github.com/sebastianbergmann/phpcpd
Herramientas de QA e integración continua.
Security Advisories Checker (https://security.sensiolabs.org/)
● Proyectos que usan composer.
● Utiliza composer.lock para chequear vulnerabilidades
de seguridad.
● Podemos usarlo como comando, herramienta online o
web service (API)
● Base de datos https://security.sensiolabs.org/database
Herramientas de QA e integración continua.
SensioLabsInsight (https://insight.sensiolabs.com/)
Detector de “fallos” de tu aplicación PHP.
Análisis de código de errores comunes y buenas prácticas por el equipo
de Code Audit de SensioLabs.
○ Tipos : Seguridad, bugrisk, performance, arquitectura, código muerto
(dead code), legibilidad (Readbility) y estilo del código (Code Style).
○ Niveles de chequeo: críticas, mayores, menores e info.
● Gratis para proyectos FLOSS y de pago para código cerrado.
Charla de Fabien Potencier http://desymfony.com/ponencia/2013/french-style
●
●

https://insight.sensiolabs.com/projects/52929054-b0be-4fbc-9d75-7cc1180f1ffe
Herramientas de QA e integración continua.
Travis CI
Integración continua, solo ejecutar test.
●
●
●
●
●
●

Múltiples lenguajes (C, C++, Clojure, Groovy, Java, JS, Python, Ruby, etc).
Integración por “trivial” con GitHub (XXX/settings/hooks).
Gratuito para proyectos FLOSS, y servicio de pago para cerrados.
Un archivo de configuración .travis.yml.
Permite ejecutar sobre diferentes versiones de PHP y HHVM.
https://travis-ci.org/isidromerayo/simple_php_skeleton/builds/
Herramientas de QA e integración continua.
Sismo
Herramienta de integración continua
●
●
●
●
●

Es un solo fichero (http://sismo.sensiolabs.org/get/sismo.php).
Optimizado para ejecutarse en local.
Proyectos Git local (y remoto) y usado como post-commit.
Agnóstico sobre lenguaje y herramientas.
Un fichero de configuración PHP (~/.sismo/config.php).
Herramientas de QA e integración continua.
PHPCI
Herramienta de integración continua
●
●
●
●
●
●
●

Soporta Github, Bitbucket o local.
Setup y TearDown BBDD.
Instalar las dependencias con composer.
Ejecuciones a través de los plugins.
Requiere PHP 5.3.3+.
Requiere que se puedan ejecutar las funciones exec() y shell_exec().
Servidor web (nginx recomendado) y MySQL.
Herramientas de QA e integración continua.
Jenkins CI
Herramienta de integración continua más conocida y extendida.
●
●
●
●

Software FLOSS.
Multiplataforma (Windows, Distribuciones de Linux, Mac OS, *BSD,
Solaris).
Require Java y puede ser ejecutado como servicio propio o en un servidor
de aplicaciones.
Múltiples plugins (alrededor de 839), para hacer casi de todo.
Herramientas de QA e integración continua.
Servidores de CI
PHPCI

Jenkins

Travis CI

Sismo

Gratis

Si

Si

Si *

Si

Open source

Si

Si

Si

Si

Self hosted

Si

Si

Si

Si

Diseñado PHP

Si

No

No

Si

Proyectos de
código cerrado

Si

Si

Servicio

Si

Configuración

Sencilla

Plantilla

Sencilla

Sencilla
Herramientas de QA e integración continua.
Scrutinizer CI
Herramienta de “Continuous Inspection”
●
●

Custom commands y JavaScript (JS Hint)
PHP
○
○
○
○
○
○
○
○
○
○

PHP Code Coverage
PHP Code Sniffer
PHP Copy/Paste Detector
PHP CS Fixer
PHP HHVM
PHP LOC
PHP Mess Detector
PHP PDepend
PHP Analyzer
SensioLabs Security Checker
Herramientas de QA e integración continua.
Scrutinizer CI
● Badges de quality y code coverage.
● Integración con GitHub y Bitbucket
○
○

https://scrutinizer-ci.com/b/isidromerayo/skeleton_php_project/
https://scrutinizer-ci.com/g/isidromerayo/simple_php_skeleton/

● La documentación https://scrutinizer-ci.
com/docs/tools/php/
Herramientas de QA e integración continua.
Scrutinizer CI
Un fichero de configuración, llamado .scrutinizer.yml :O
filter:
excluded_paths: [vendor/*, app/*, web/*]
tools:
php_cpd: true
php_pdepend:
excluded_dirs: [vendor]
php_mess_detector: true
php_analyzer: true
php_loc:
command: phploc
excluded_dirs: [vendor]
enabled: true
Herramientas de QA e integración continua.
Jenkins CI y PHP http://jenkins-php.org/
● Necesitamos: PHPQATools y phpDocumentor.
● Necesitamos Apache Ant para construir el “build”.
● Instalar plugins para plantilla: checkstyle, cloverphp, dry,
htmlpublisher, jdepend, plot, pmd, violations, xunit.

● Crear tarea desde la plantilla del proyecto.
● En nuestro proyecto, el fichero “build.xml”.
Herramientas de QA e integración continua.
PHPUnit
Framework xUnit
○
○
○
○

xTestCase: extends PHPUnit_Framework_TestCase
Los test son métodos que tienen prefijo “test”
Métodos especiales para preparar el escenario: setUp() y tearDown()
Estructura de los test siguen el principio AAA (Arrange, Act and
Assert), es decir preparar, actuar y afirmar.
■ Afirmamos el resultado de un test con los métodos assert del
framework (http://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit.
assertions)
PHPUnit
PHPUnit
● Anotaciones (http://phpunit.de/manual/current/en/appendixes.annotations.html):
○
○
○
○
○
○

@test: evitamos tener que utilizar prefijo test en los nombres de los
métodos.
@todo: indicamos que el test no se ejecuta.
@depends: dependencia entre test (con mucho OJO).
@dataProvider: proveedores de datos.
@expectedException: excepciones.
@group: formar “grupos” (--exclude-group o --group)
PHPUnit
PHPUnit
● Línea de comandos
○

Indicación del progreso de los test:
■

.

test con éxito,

omitido,

F Falla una aserción, E Ocurre un error, S Test marcado como

I Incompleto o sin implementar.

○

Generación de log de los test: --log-FORMATO (junit, TAP, JSON).

○

Cobertura de código: --coverage-FORMATO (clover, html, PHP y text).

○

Informes “agile”: --testdox-FORMATO (html y text).
PHPUnit
Línea de comandos
○

filtrar: solo se ejecutaran los que cumplan un patrón (--filter).

○

grupos: incluir o excluir los @group XXX (--group o --exclude-group).

○

fichero de configuración: -c|--configuration <file> (XML).

○

bootstrap (Fichero PHP común “para antes” de ejecutar los test): -bootstrap <file>

○

ejecutar el comando (y vemos todas la opciones :)
PHPUnit
Fichero de configuración XML Suite
○

Evitar tener un línea de comando con todas las opciones.

○

Formar una suite para ejecutar “todos” los test.

○

Se puede combinar con opciones por comando.

○

Podemos (y tal vez debemos) tener varios ficheros... solo test, test y
cobertura, etc.
PHPUnit
Test dobles (doble test)
● PHPUnit (http://phpunit.de/manual/current/en/test-doubles.html).
● Mockery (https://github.com/padraic/mockery).
● Phake (https://github.com/mlively/Phake).
Pequeño análisis de los tres en programania (autobombo).
http://www.programania.net/diseno-de-software/frameworks-de-tests-doubles-en-php-i/
http://www.programania.net/diseno-de-software/frameworks-de-tests-doubles-en-php-ii/
http://www.programania.net/diseno-de-software/frameworks-de-tests-doubles-en-php-y-iii/
PHPUnit
PHPUnit Test Doubles
PHPUnit
Test funcionales con Selenium (http://docs.seleniumhq.org/download/).
●

Disponible como extensión (PHPUnit_Selenium).

●

Necesitamos Selenium Server (Selenium RC).

●

... extends PHPUnit_Extensions_Selenium2TestCase
○

●

Usa WebDriver API (implementación parcial)

... extends PHPUnit_Extensions_SeleniumTestCase
○

Implementa el protocolo cliente/servidor de Selenimum Server

● Selenium IDE plugin para Firefox y formateador PHP
Basado en hechos reales
Vengo a hablar de mi libro: simple php
skeleton.
simple php skeleton
● Un “juguete” para hacer katas en PHP con PHPUnit
○
○

Requiere de composer, y algunas extensiones de PHP.
Sencillo de instalar.

$ composer(.phar) create-project isidromerayo/simple_php_skeleton
my_project_name

○

Sencillo de usar.

$ ./bin/phpunit -c tests/

○
○
○
○

Autocargador de clases de Autoload.
Dispone de tres frameworks de dobles de test.
Tienes Pimple con inyección de dependencias.
CI: Travis, Scrutinizer y Jenkins
Repaso teoría
● Tipos de test (resumen simplificado):
○ Unitarios (con test dobles).
○ Integración.
○ De punta a punta (End-to-end).
Repaso teoría
Repaso teoría
Repaso teoría
Principios SOLID:
●
●
●
●
●

SINGLE RESPONSIBILITY PRINCIPLE Principio de responsabilidad única: Cada
clase debe tener uno y sólo un motivo para cambiar.
OPEN CLOSED PRINCIPLE Principio abierto/cerrado: Los objetos deben estar
abiertos a extensión, pero cerrados a la modificación.
LISKOV SUBSTITUTION PRINCIPLE Principio de sustitución de Liskov: Los objetos
de una clase deben poder ser sustituidos por instancias de clases derivadas.
INTERFACE SEGREGATION PRINCIPLE Principio de segregación de interfaces:
Crear pequeñas interfaces específicas para los clientes.
DEPENDENCY INVERSION PRINCIPLE Principio de inversión de dependencias:
Depender de abstracciones, no de implementaciones concretas.
Kata
Enunciado (I):
Aplicación para la gestión de usuarios de nuestra empresa. La información
básica del usuario será: nombre, apellidos, email, contraseña y grupos.
En un principio no esta decidido el sistema donde donde persistir esta
información (ficheros, BBDD o LDAP).
Para una primera versión vamos a tener un fichero de texto, en el que cada
línea va a tener tener campos separados por ; (y los grupos van a estar entre
corchetes), ejemplo:
juan; pérez peréz; juanperez@ejemplo.com ;juan;[contabilidad,dirección]
maría; garcía garcía; martagarcia@ejemplo.com ;maria;[contabilidad]
sergio; fernández díez; sergio@ejemplo.com ;oigres;[TI,BBDD]
Kata
Enunciado (cont II):
●
●

el email y contraseña van a ser obligatorios, sino es así no se creará el
registro y se informará de ello.
en esta primera versión la contraseña no irá cifrada, pero si en la
siguiente versión.

El servicio de usuario tendrá las acciones:
●
●
●

añadir
buscar por email
validar

El repositorio (primera versión sobre ficheros):
●
●

almacenar
recuperar
Kata
Enunciado (cont y III):
En nuestra web tendremos una página de inicio con email y contraseña para
validarnos.
Si no nos podemos validar en el sistema, nos aparecerá un mensaje de error.
Si estamos dentro veremos información sobre nosotros y un listado de
usuarios.
$ git clone https://github.com/isidromerayo/agilecyl_ptd_php_kata
$ cd agilecyl_ptd_php_kata
$ composer install
Kata

“Queréis la fama, pero la fama cuesta y aquí
es donde vais a empezar a pagar. Con sudor”
Referencias
Enlaces
https://github.com/juanignaciosl/ptd
http://aprendiendotdd.wordpress.com/
http://www.carlescliment.com/publications/calidad-e-integracion-continuaenero-2012
https://drupal.org/simpletest
http://pablasso.com/200905/unit-tests-en-php-con-simpletest/
http://www.programania.net/diseno-de-software/frameworks-de-testsdoubles-en-php-i/
http://eugeniabahit.blogspot.com.es/2011/09/enhance-php-acerca-de-los-test.
html
Referencias
Enlaces (II)
http://martinfowler.com/bliki/TestPyramid.html
http://blogs.agilefaqs.com/2011/02/01/inverting-the-testing-pyramid/
http://blog.armesto.net/inspeccion-continua-de-la-calidad-de-nuestro-codigo/
Referencias
Libros
Carlos Blé - Diseño Ágil con TDD http://www.dirigidoportests.com/el-libro
Eugenia Bahit - Scrum y eXtreme Programming para Programadores http:
//www.etnassoft.com/biblioteca/scrum-y-extreme-programming-paraprogramadores/
Cecilio Álvarez Caules: Arquitectura Java Solida http://www.arquitecturajava.
com/el-libro/
Javier Gutiérrez - Desarrollo Dirigido por Pruebas Práctico (en desarrollo)
http://www.iwt2.org/web/opencms/IWT2/comunidad/LibroTDD/index.html

Más contenido relacionado

La actualidad más candente

Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Micael Gallego
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en phpIsmael Ambrosi
 
Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...César Hernández
 
¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?Micael Gallego
 
Taller de Introducción a Scripting con gvSIG
Taller de Introducción a Scripting con gvSIGTaller de Introducción a Scripting con gvSIG
Taller de Introducción a Scripting con gvSIGÓscar Martínez Olmos
 
Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]
Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]
Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]Websec México, S.C.
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Micael Gallego
 
Webinar: Migrar el testing a open source
Webinar: Migrar el testing a open sourceWebinar: Migrar el testing a open source
Webinar: Migrar el testing a open sourceFederico Toledo
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserMicael Gallego
 
Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15Aitor Suso Gáceta
 
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...TestingUy
 
TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2Micael Gallego
 
Escribiendo firmas para el sistema de detección de versiones de Nmap
Escribiendo firmas para el sistema de detección de versiones de NmapEscribiendo firmas para el sistema de detección de versiones de Nmap
Escribiendo firmas para el sistema de detección de versiones de NmapWebsec México, S.C.
 
Jornadas Odoo 2015. Gestión de traducciones. Domatix
Jornadas Odoo 2015. Gestión de traducciones. DomatixJornadas Odoo 2015. Gestión de traducciones. Domatix
Jornadas Odoo 2015. Gestión de traducciones. DomatixDomatix
 
Introducción a TypeScript
Introducción a TypeScriptIntroducción a TypeScript
Introducción a TypeScriptPablo Bouzada
 
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]RootedCON
 
Jorge Rodriguez - Técnicas de evasión y anti-análisis [rooted2018]
Jorge Rodriguez - Técnicas de evasión y anti-análisis [rooted2018]Jorge Rodriguez - Técnicas de evasión y anti-análisis [rooted2018]
Jorge Rodriguez - Técnicas de evasión y anti-análisis [rooted2018]RootedCON
 

La actualidad más candente (20)

Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 
Introducción a testing en php
Introducción a testing en phpIntroducción a testing en php
Introducción a testing en php
 
Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...Java mission control para monitoreo, administración y profilig de aplicacione...
Java mission control para monitoreo, administración y profilig de aplicacione...
 
Taller de laravel
Taller de laravelTaller de laravel
Taller de laravel
 
¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?¿Cómo poner software de calidad en manos del usuario de forma rápida?
¿Cómo poner software de calidad en manos del usuario de forma rápida?
 
Taller de Introducción a Scripting con gvSIG
Taller de Introducción a Scripting con gvSIGTaller de Introducción a Scripting con gvSIG
Taller de Introducción a Scripting con gvSIG
 
Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]
Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]
Desarrollando para Nmap Scripting Engine (NSE) [GuadalajaraCON 2013]
 
Python en Android
Python en AndroidPython en Android
Python en Android
 
Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019Dev Tools para Kubernetes - Codemotion 2019
Dev Tools para Kubernetes - Codemotion 2019
 
Webinar: Migrar el testing a open source
Webinar: Migrar el testing a open sourceWebinar: Migrar el testing a open source
Webinar: Migrar el testing a open source
 
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browserTypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
TypeScript para Javeros. Por fin un lenguaje 'de verdad' en el browser
 
Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15Dealing with fear in legacy projects #PHPDS15
Dealing with fear in legacy projects #PHPDS15
 
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
Taller evento TestingUY 2015 - Técnicas de Automatización Going from GOOD to ...
 
TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2TypeScript - Angular 2 - ionic 2
TypeScript - Angular 2 - ionic 2
 
Escribiendo firmas para el sistema de detección de versiones de Nmap
Escribiendo firmas para el sistema de detección de versiones de NmapEscribiendo firmas para el sistema de detección de versiones de Nmap
Escribiendo firmas para el sistema de detección de versiones de Nmap
 
Jornadas Odoo 2015. Gestión de traducciones. Domatix
Jornadas Odoo 2015. Gestión de traducciones. DomatixJornadas Odoo 2015. Gestión de traducciones. Domatix
Jornadas Odoo 2015. Gestión de traducciones. Domatix
 
Introducción a TypeScript
Introducción a TypeScriptIntroducción a TypeScript
Introducción a TypeScript
 
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
Abraham Pasamar & Carlos Fernández - Purple brain, purple brain ... [rooted2019]
 
Jorge Rodriguez - Técnicas de evasión y anti-análisis [rooted2018]
Jorge Rodriguez - Técnicas de evasión y anti-análisis [rooted2018]Jorge Rodriguez - Técnicas de evasión y anti-análisis [rooted2018]
Jorge Rodriguez - Técnicas de evasión y anti-análisis [rooted2018]
 
Sobre GrooScript
Sobre GrooScriptSobre GrooScript
Sobre GrooScript
 

Similar a Pucela testingdays testing_en_php

Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI
Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CICalidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI
Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CIYannick Warnier
 
Herramientas Ágiles para Desarrollo
Herramientas Ágiles para DesarrolloHerramientas Ágiles para Desarrollo
Herramientas Ágiles para DesarrolloGastón Guillerón
 
Herramientas agilesdesarrollo
Herramientas agilesdesarrolloHerramientas agilesdesarrollo
Herramientas agilesdesarrollogabrielpiccoli
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoManuel Carrasco Moñino
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesJobsket
 
Desarrollo rápido de apps web con laravel - DevAcademy
Desarrollo rápido de apps web con laravel - DevAcademyDesarrollo rápido de apps web con laravel - DevAcademy
Desarrollo rápido de apps web con laravel - DevAcademyJorge Antonio Linares Vera
 
01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptx01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptxDyllanBastidas
 
Aug frontend dev ops
Aug frontend dev opsAug frontend dev ops
Aug frontend dev opsMitzi Moncada
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas.. ..
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOnacho mascort
 
Oscar recio - De 0 a 100 con Magento 2
Oscar recio  -  De 0 a 100 con Magento 2Oscar recio  -  De 0 a 100 con Magento 2
Oscar recio - De 0 a 100 con Magento 2Mage Titans ES
 

Similar a Pucela testingdays testing_en_php (20)

Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI
Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CICalidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI
Calidad de código en Chamilo: Behat, Travis-CI y Scrutinizer-CI
 
Herramientas Ágiles para Desarrollo
Herramientas Ágiles para DesarrolloHerramientas Ágiles para Desarrollo
Herramientas Ágiles para Desarrollo
 
Herramientas agilesdesarrollo
Herramientas agilesdesarrolloHerramientas agilesdesarrollo
Herramientas agilesdesarrollo
 
"Al rico" PHP
"Al rico" PHP"Al rico" PHP
"Al rico" PHP
 
Gwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrascoGwt seminario java_hispano_manolocarrasco
Gwt seminario java_hispano_manolocarrasco
 
Desarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agilesDesarrollo con Java y metodologías agiles
Desarrollo con Java y metodologías agiles
 
Desarrollo rápido de apps web con laravel - DevAcademy
Desarrollo rápido de apps web con laravel - DevAcademyDesarrollo rápido de apps web con laravel - DevAcademy
Desarrollo rápido de apps web con laravel - DevAcademy
 
01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptx01 T1 2021 Sistemas Embebidos.pptx
01 T1 2021 Sistemas Embebidos.pptx
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
Gestión Remota de Equipos con Python
Gestión Remota de Equipos con PythonGestión Remota de Equipos con Python
Gestión Remota de Equipos con Python
 
Aug frontend dev ops
Aug frontend dev opsAug frontend dev ops
Aug frontend dev ops
 
Gwt I - entendiendo gwt
Gwt I - entendiendo gwtGwt I - entendiendo gwt
Gwt I - entendiendo gwt
 
CodeCamp 2010 | Diez formas de escribir código (in)seguro
CodeCamp 2010 | Diez formas de escribir código (in)seguroCodeCamp 2010 | Diez formas de escribir código (in)seguro
CodeCamp 2010 | Diez formas de escribir código (in)seguro
 
Desarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por PruebasDesarrollo de Software Guiado por Pruebas
Desarrollo de Software Guiado por Pruebas
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEO
 
Skipfish
Skipfish Skipfish
Skipfish
 
Modulo 1
Modulo 1Modulo 1
Modulo 1
 
De 0 a 100 con Magento 2
De 0 a 100 con Magento 2De 0 a 100 con Magento 2
De 0 a 100 con Magento 2
 
Oscar recio - De 0 a 100 con Magento 2
Oscar recio  -  De 0 a 100 con Magento 2Oscar recio  -  De 0 a 100 con Magento 2
Oscar recio - De 0 a 100 con Magento 2
 

Pucela testingdays testing_en_php

  • 1. Testing en PHP Herramientas y algunas cosicas más. Isidro Merayo Castellano
  • 3. Sobre mi Isidro Merayo Castellano @isidromerayo http://www.lastfm.es/user/_imc_ https://bitbucket.org/isidromerayo o https://github.com/isidromerayo
  • 5. Disclaimer Voy a contar mis experiencias con PHP y testing, no soy ni gurú ni “experto” ni “certificado”.
  • 6. Agenda ● Frameworks xUnit. ● Herramientas de QA e integración continua. ● Vengo a hablar de mi libro (simple php skeleton). ● Kata (dos pomodoros al menos).
  • 7. Frameworks xUnit http://en.wikipedia. org/wiki/List_of_unit_testing_frameworks#PHP ● PHPUnit (http://phpunit.de/manual/current/en/index. html) ● Simple Test (http://www.simpletest.org/) ● Enhance PHP (https://github.com/EnhancePHP/Enhance-PHP) ● Atoum (https://github.com/atoum/atoum)
  • 8. Frameworks xUnit PHPUnit ● Más extendido (y antiguo, en 2001 ver 1.0). ● Fácil de instalar e integrado en IDEs. ● Documentado y muchas aserciones. ● Soporte y actualizaciones frecuentes. ● Plugins y extensiones. ● Versiones: 3.7 (PHP 5.3.3) y 3.8 (PHP 5.4.7)
  • 9. Frameworks xUnit Simple Test ● Usado por Drupal (< 8.x). ● Instalación sencilla (plugin para Eclipse). ● Documentación pobre. ● Muy parado (v1.0.1 del 2008 - v1.1.0 2012). ● Mocks y Web Page test (http://simpletest.org/en/overview.html). ● Versiones: 1.1.0 (PHP 5.0.5) y 1.0.1 (PHP 4)
  • 11. Frameworks xUnit Enhance PHP ● Reciente aparición (2011). ● Fácil de instalar, solo requiere 1 fichero. ● Dispone de Mock y Stubs. ● Informes en XML y TAP, para utilizar en CI. ● Se ha quedado un parado (último commit hace dos meses).
  • 13. Frameworks xUnit Atoum ● Reciente aparición (requiere PHP 5.3.3). ● Fácil de instalar (soporte Netbeans 7.4). ● Mejorar SimpleTest y PHPUnit (más rápido para implementar, simplificar el desarrollo y fácil de leer). ● Informes para utilizar en CI y cobertura. ● Uso con Symfony2 y Zend Framework 2.
  • 15. Frameworks xUnit: resultados Instalación Documentación Estado/soporte Test Dobles y Funcionales Aspectos interesantes PHPUnit Git, PEAR, PHAR o composer. Buena. Muy activo, GitHub. Mock/Stub y extensión Selenium. Anotaciones, plugin/extensiones, Data provider, etc. Simple Test SVN, descarga y composer (no oficial). Básica y enlaces “perdidos”. Poco activo, sourceforge con lista de correo. Mock/Stub y Web. Roadmap con nuevas versiones http://simpletest. Enhance PHP Git y composer. Poca pero hay post por blogs. Poco activo, GitHub.. Mock/Stub Ligero. Atoum Git, PHAR y composer. En francés y parcialmente en inglés. Activo, GitHub. Mock/Stub Muchas aserciones (aprox 200), informes de cobertura al aire. org/api/SimpleTest/tutorial_Sim pleTest.pkg.html.
  • 16. Frameworks BDD Frameworks BDD ● Behat (http://behat.org/) ● phpspec (http://www.phpspec.net/) ● Codeception (http://codeception.com/)
  • 17. Herramientas de QA e integración continua. ● PHP QA Tools (http://phpqatools.org/) ○ ○ ○ PHP Copy/Paste Detector PHP Mess Detector PHP Depend... ● Otras herramientas ○ ○ ○ ○ ○ ○ ○ Security Advisories Checker (https://security.sensiolabs.org/) SensioLabsInsight (https://insight.sensiolabs.com/) Sismo (http://sismo.sensiolabs.org/) Travis CI (https://travis-ci.org/) phpci (http://www.phptesting.org/) Scrutinizer (https://scrutinizer-ci.com/) Jenkins PHP (http://jenkins-php.org/)
  • 18. Herramientas de QA e integración continua. PHP QA Tools (http://phpqatools.org/) ● PHPUnit: Test framework. ● PHP_Depend: Métricas de calidad. ● PHP Mess Detector: Detector de problemas potenciales como: bugs, código muerto, etc. ● PHP_CodeSniffer: Coding standards. ● PHP Copy/Paste Detector: Detección de código duplicado.
  • 19. Herramientas de QA e integración continua. PHP QA Tools - PHP_Depend ● Generación de todas las métricas --summary-xml= ● N Path Complexity, Coupling, Cyclomatic Complexity, etc. ● Gráficas (SVG): dependencias de los paquetes y análisis del código fuente. http://pdepend.org/ http://pdepend.org/documentation/handbook/reports/overview-pyramid.html http://pdepend.org/documentation/software-metrics.html
  • 20. Herramientas de QA e integración continua. PHP QA Tools - PHP Mess Detector ● Reglas: clean code, code size, controversial, design, naming y unusedcode establecidad por defecto. /usr/share/php/data/PHP_PMD/resources/rulesets ● Elementos a inspeccionar (ficheros o directorios) ● Formato del informe: xml, text o html. http://phpmd.org/ http://phpmd.org/documentation/index.html
  • 21. Herramientas de QA e integración continua. PHP QA Tools - PHP Code Sniffer ● Reglas: Detecta tanto en ficheros PHP, como JS o CSS inconsistencias respecto al estándar usado por el equipo. PEAR, Zend, PSR1, etc. /usr/share/php/test/PHP_CodeSniffer/CodeSniffer/Standards/ http://pear.php.net/package/PHP_CodeSniffer/
  • 22. Herramientas de QA e integración continua. PHP QA Tools - PHP Copy Paste Detector ● Detección de la combinación de teclas más usada en el mundo (ctrl+c, ctrl + v). ● Dos o más, son una fuente de bugs que duplica, triplica, etc dependiendo del número de C+P. https://github.com/sebastianbergmann/phpcpd
  • 23. Herramientas de QA e integración continua. Security Advisories Checker (https://security.sensiolabs.org/) ● Proyectos que usan composer. ● Utiliza composer.lock para chequear vulnerabilidades de seguridad. ● Podemos usarlo como comando, herramienta online o web service (API) ● Base de datos https://security.sensiolabs.org/database
  • 24. Herramientas de QA e integración continua. SensioLabsInsight (https://insight.sensiolabs.com/) Detector de “fallos” de tu aplicación PHP. Análisis de código de errores comunes y buenas prácticas por el equipo de Code Audit de SensioLabs. ○ Tipos : Seguridad, bugrisk, performance, arquitectura, código muerto (dead code), legibilidad (Readbility) y estilo del código (Code Style). ○ Niveles de chequeo: críticas, mayores, menores e info. ● Gratis para proyectos FLOSS y de pago para código cerrado. Charla de Fabien Potencier http://desymfony.com/ponencia/2013/french-style ● ● https://insight.sensiolabs.com/projects/52929054-b0be-4fbc-9d75-7cc1180f1ffe
  • 25. Herramientas de QA e integración continua. Travis CI Integración continua, solo ejecutar test. ● ● ● ● ● ● Múltiples lenguajes (C, C++, Clojure, Groovy, Java, JS, Python, Ruby, etc). Integración por “trivial” con GitHub (XXX/settings/hooks). Gratuito para proyectos FLOSS, y servicio de pago para cerrados. Un archivo de configuración .travis.yml. Permite ejecutar sobre diferentes versiones de PHP y HHVM. https://travis-ci.org/isidromerayo/simple_php_skeleton/builds/
  • 26. Herramientas de QA e integración continua. Sismo Herramienta de integración continua ● ● ● ● ● Es un solo fichero (http://sismo.sensiolabs.org/get/sismo.php). Optimizado para ejecutarse en local. Proyectos Git local (y remoto) y usado como post-commit. Agnóstico sobre lenguaje y herramientas. Un fichero de configuración PHP (~/.sismo/config.php).
  • 27. Herramientas de QA e integración continua. PHPCI Herramienta de integración continua ● ● ● ● ● ● ● Soporta Github, Bitbucket o local. Setup y TearDown BBDD. Instalar las dependencias con composer. Ejecuciones a través de los plugins. Requiere PHP 5.3.3+. Requiere que se puedan ejecutar las funciones exec() y shell_exec(). Servidor web (nginx recomendado) y MySQL.
  • 28. Herramientas de QA e integración continua. Jenkins CI Herramienta de integración continua más conocida y extendida. ● ● ● ● Software FLOSS. Multiplataforma (Windows, Distribuciones de Linux, Mac OS, *BSD, Solaris). Require Java y puede ser ejecutado como servicio propio o en un servidor de aplicaciones. Múltiples plugins (alrededor de 839), para hacer casi de todo.
  • 29. Herramientas de QA e integración continua. Servidores de CI PHPCI Jenkins Travis CI Sismo Gratis Si Si Si * Si Open source Si Si Si Si Self hosted Si Si Si Si Diseñado PHP Si No No Si Proyectos de código cerrado Si Si Servicio Si Configuración Sencilla Plantilla Sencilla Sencilla
  • 30. Herramientas de QA e integración continua. Scrutinizer CI Herramienta de “Continuous Inspection” ● ● Custom commands y JavaScript (JS Hint) PHP ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ PHP Code Coverage PHP Code Sniffer PHP Copy/Paste Detector PHP CS Fixer PHP HHVM PHP LOC PHP Mess Detector PHP PDepend PHP Analyzer SensioLabs Security Checker
  • 31. Herramientas de QA e integración continua. Scrutinizer CI ● Badges de quality y code coverage. ● Integración con GitHub y Bitbucket ○ ○ https://scrutinizer-ci.com/b/isidromerayo/skeleton_php_project/ https://scrutinizer-ci.com/g/isidromerayo/simple_php_skeleton/ ● La documentación https://scrutinizer-ci. com/docs/tools/php/
  • 32. Herramientas de QA e integración continua. Scrutinizer CI Un fichero de configuración, llamado .scrutinizer.yml :O filter: excluded_paths: [vendor/*, app/*, web/*] tools: php_cpd: true php_pdepend: excluded_dirs: [vendor] php_mess_detector: true php_analyzer: true php_loc: command: phploc excluded_dirs: [vendor] enabled: true
  • 33. Herramientas de QA e integración continua. Jenkins CI y PHP http://jenkins-php.org/ ● Necesitamos: PHPQATools y phpDocumentor. ● Necesitamos Apache Ant para construir el “build”. ● Instalar plugins para plantilla: checkstyle, cloverphp, dry, htmlpublisher, jdepend, plot, pmd, violations, xunit. ● Crear tarea desde la plantilla del proyecto. ● En nuestro proyecto, el fichero “build.xml”.
  • 34. Herramientas de QA e integración continua.
  • 35. PHPUnit Framework xUnit ○ ○ ○ ○ xTestCase: extends PHPUnit_Framework_TestCase Los test son métodos que tienen prefijo “test” Métodos especiales para preparar el escenario: setUp() y tearDown() Estructura de los test siguen el principio AAA (Arrange, Act and Assert), es decir preparar, actuar y afirmar. ■ Afirmamos el resultado de un test con los métodos assert del framework (http://phpunit.de/manual/current/en/writing-tests-for-phpunit.html#writing-tests-for-phpunit. assertions)
  • 36. PHPUnit PHPUnit ● Anotaciones (http://phpunit.de/manual/current/en/appendixes.annotations.html): ○ ○ ○ ○ ○ ○ @test: evitamos tener que utilizar prefijo test en los nombres de los métodos. @todo: indicamos que el test no se ejecuta. @depends: dependencia entre test (con mucho OJO). @dataProvider: proveedores de datos. @expectedException: excepciones. @group: formar “grupos” (--exclude-group o --group)
  • 37. PHPUnit PHPUnit ● Línea de comandos ○ Indicación del progreso de los test: ■ . test con éxito, omitido, F Falla una aserción, E Ocurre un error, S Test marcado como I Incompleto o sin implementar. ○ Generación de log de los test: --log-FORMATO (junit, TAP, JSON). ○ Cobertura de código: --coverage-FORMATO (clover, html, PHP y text). ○ Informes “agile”: --testdox-FORMATO (html y text).
  • 38. PHPUnit Línea de comandos ○ filtrar: solo se ejecutaran los que cumplan un patrón (--filter). ○ grupos: incluir o excluir los @group XXX (--group o --exclude-group). ○ fichero de configuración: -c|--configuration <file> (XML). ○ bootstrap (Fichero PHP común “para antes” de ejecutar los test): -bootstrap <file> ○ ejecutar el comando (y vemos todas la opciones :)
  • 39. PHPUnit Fichero de configuración XML Suite ○ Evitar tener un línea de comando con todas las opciones. ○ Formar una suite para ejecutar “todos” los test. ○ Se puede combinar con opciones por comando. ○ Podemos (y tal vez debemos) tener varios ficheros... solo test, test y cobertura, etc.
  • 40. PHPUnit Test dobles (doble test) ● PHPUnit (http://phpunit.de/manual/current/en/test-doubles.html). ● Mockery (https://github.com/padraic/mockery). ● Phake (https://github.com/mlively/Phake). Pequeño análisis de los tres en programania (autobombo). http://www.programania.net/diseno-de-software/frameworks-de-tests-doubles-en-php-i/ http://www.programania.net/diseno-de-software/frameworks-de-tests-doubles-en-php-ii/ http://www.programania.net/diseno-de-software/frameworks-de-tests-doubles-en-php-y-iii/
  • 42. PHPUnit Test funcionales con Selenium (http://docs.seleniumhq.org/download/). ● Disponible como extensión (PHPUnit_Selenium). ● Necesitamos Selenium Server (Selenium RC). ● ... extends PHPUnit_Extensions_Selenium2TestCase ○ ● Usa WebDriver API (implementación parcial) ... extends PHPUnit_Extensions_SeleniumTestCase ○ Implementa el protocolo cliente/servidor de Selenimum Server ● Selenium IDE plugin para Firefox y formateador PHP
  • 44. Vengo a hablar de mi libro: simple php skeleton. simple php skeleton ● Un “juguete” para hacer katas en PHP con PHPUnit ○ ○ Requiere de composer, y algunas extensiones de PHP. Sencillo de instalar. $ composer(.phar) create-project isidromerayo/simple_php_skeleton my_project_name ○ Sencillo de usar. $ ./bin/phpunit -c tests/ ○ ○ ○ ○ Autocargador de clases de Autoload. Dispone de tres frameworks de dobles de test. Tienes Pimple con inyección de dependencias. CI: Travis, Scrutinizer y Jenkins
  • 45. Repaso teoría ● Tipos de test (resumen simplificado): ○ Unitarios (con test dobles). ○ Integración. ○ De punta a punta (End-to-end).
  • 48. Repaso teoría Principios SOLID: ● ● ● ● ● SINGLE RESPONSIBILITY PRINCIPLE Principio de responsabilidad única: Cada clase debe tener uno y sólo un motivo para cambiar. OPEN CLOSED PRINCIPLE Principio abierto/cerrado: Los objetos deben estar abiertos a extensión, pero cerrados a la modificación. LISKOV SUBSTITUTION PRINCIPLE Principio de sustitución de Liskov: Los objetos de una clase deben poder ser sustituidos por instancias de clases derivadas. INTERFACE SEGREGATION PRINCIPLE Principio de segregación de interfaces: Crear pequeñas interfaces específicas para los clientes. DEPENDENCY INVERSION PRINCIPLE Principio de inversión de dependencias: Depender de abstracciones, no de implementaciones concretas.
  • 49. Kata Enunciado (I): Aplicación para la gestión de usuarios de nuestra empresa. La información básica del usuario será: nombre, apellidos, email, contraseña y grupos. En un principio no esta decidido el sistema donde donde persistir esta información (ficheros, BBDD o LDAP). Para una primera versión vamos a tener un fichero de texto, en el que cada línea va a tener tener campos separados por ; (y los grupos van a estar entre corchetes), ejemplo: juan; pérez peréz; juanperez@ejemplo.com ;juan;[contabilidad,dirección] maría; garcía garcía; martagarcia@ejemplo.com ;maria;[contabilidad] sergio; fernández díez; sergio@ejemplo.com ;oigres;[TI,BBDD]
  • 50. Kata Enunciado (cont II): ● ● el email y contraseña van a ser obligatorios, sino es así no se creará el registro y se informará de ello. en esta primera versión la contraseña no irá cifrada, pero si en la siguiente versión. El servicio de usuario tendrá las acciones: ● ● ● añadir buscar por email validar El repositorio (primera versión sobre ficheros): ● ● almacenar recuperar
  • 51. Kata Enunciado (cont y III): En nuestra web tendremos una página de inicio con email y contraseña para validarnos. Si no nos podemos validar en el sistema, nos aparecerá un mensaje de error. Si estamos dentro veremos información sobre nosotros y un listado de usuarios. $ git clone https://github.com/isidromerayo/agilecyl_ptd_php_kata $ cd agilecyl_ptd_php_kata $ composer install
  • 52. Kata “Queréis la fama, pero la fama cuesta y aquí es donde vais a empezar a pagar. Con sudor”
  • 55. Referencias Libros Carlos Blé - Diseño Ágil con TDD http://www.dirigidoportests.com/el-libro Eugenia Bahit - Scrum y eXtreme Programming para Programadores http: //www.etnassoft.com/biblioteca/scrum-y-extreme-programming-paraprogramadores/ Cecilio Álvarez Caules: Arquitectura Java Solida http://www.arquitecturajava. com/el-libro/ Javier Gutiérrez - Desarrollo Dirigido por Pruebas Práctico (en desarrollo) http://www.iwt2.org/web/opencms/IWT2/comunidad/LibroTDD/index.html