Pucela testingdays testing_en_php
-
Upload
isidro-merayo-castellano -
Category
Documents
-
view
928 -
download
1
Transcript of Pucela testingdays testing_en_php
![Page 1: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/1.jpg)
Testing en PHPHerramientas y algunas cosicas más.
Isidro Merayo Castellano
![Page 2: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/2.jpg)
Agradecimientos
![Page 3: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/3.jpg)
Sobre mi
Isidro Merayo Castellano@isidromerayohttp://www.lastfm.es/user/_imc_
https://bitbucket.org/isidromerayo o https://github.com/isidromerayo
![Page 4: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/4.jpg)
Publicidad
#Movember http://moteam.co/pucela-mo-townKatayunoshttp://katayunos.com/
![Page 5: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/5.jpg)
Disclaimer
Voy a contar mis experiencias con PHP y testing, no soy ni gurú ni “experto” ni “certificado”.
![Page 6: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/6.jpg)
Agenda
● Frameworks xUnit.● Herramientas de QA e integración continua.● Vengo a hablar de mi libro (simple php
skeleton).● Kata (dos pomodoros al menos).
![Page 7: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/7.jpg)
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/Enhance-
PHP/Enhance-PHP)● Atoum (https://github.com/atoum/atoum)
![Page 8: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/8.jpg)
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)
![Page 9: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/9.jpg)
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)
![Page 10: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/10.jpg)
Frameworks xUnit
Simple Test
https://bitbucket.org/isidromerayo/pucelatestingdays_simpletest
![Page 11: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/11.jpg)
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).
![Page 12: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/12.jpg)
Frameworks xUnit
Enhance PHP
https://bitbucket.org/isidromerayo/pucelatestingdays_enhance-php
![Page 13: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/13.jpg)
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.
![Page 14: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/14.jpg)
Frameworks xUnit
Atoum
https://bitbucket.org/isidromerayo/pucelatestingdays_atoum
![Page 15: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/15.jpg)
Frameworks xUnit: resultadosInstalación Documentación Estado/soporte Test Dobles y
FuncionalesAspectos 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.org/api/SimpleTest/tutorial_SimpleTest.pkg.html.
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.
![Page 16: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/16.jpg)
Frameworks BDD
Frameworks BDD● Behat (http://behat.org/)● phpspec (http://www.phpspec.net/)● Codeception (http://codeception.com/)
![Page 17: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/17.jpg)
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/)
![Page 18: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/18.jpg)
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.
![Page 19: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/19.jpg)
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.htmlhttp://pdepend.org/documentation/software-metrics.html
![Page 20: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/20.jpg)
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
![Page 21: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/21.jpg)
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/
![Page 22: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/22.jpg)
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
![Page 23: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/23.jpg)
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
![Page 24: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/24.jpg)
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-stylehttps://insight.sensiolabs.com/projects/52929054-b0be-4fbc-9d75-7cc1180f1ffe
![Page 25: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/25.jpg)
Herramientas de QA e integración continua.
Travis CIIntegració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/
![Page 26: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/26.jpg)
Herramientas de QA e integración continua.
SismoHerramienta 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).
![Page 27: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/27.jpg)
Herramientas de QA e integración continua.
PHPCIHerramienta 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.
![Page 28: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/28.jpg)
Herramientas de QA e integración continua.
Jenkins CIHerramienta 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.
![Page 29: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/29.jpg)
Herramientas de QA e integración continua.
Servidores de CIPHPCI 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
![Page 30: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/30.jpg)
Herramientas de QA e integración continua.
Scrutinizer CIHerramienta 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
![Page 31: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/31.jpg)
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/
![Page 32: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/32.jpg)
Herramientas de QA e integración continua.
Scrutinizer CIUn fichero de configuración, llamado .scrutinizer.yml :Ofilter: 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
![Page 33: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/33.jpg)
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”.
![Page 34: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/34.jpg)
Herramientas de QA e integración continua.
![Page 35: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/35.jpg)
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)
![Page 36: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/36.jpg)
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)
![Page 37: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/37.jpg)
PHPUnit
PHPUnit● Línea de comandos
○ Indicación del progreso de los test:
■ . test con éxito, F Falla una aserción, E Ocurre un error, S Test marcado como
omitido, 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).
![Page 38: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/38.jpg)
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 :)
![Page 39: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/39.jpg)
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.
![Page 40: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/40.jpg)
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/
![Page 41: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/41.jpg)
PHPUnit
PHPUnit Test Doubles
![Page 42: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/42.jpg)
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
![Page 43: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/43.jpg)
Basado en hechos reales
![Page 44: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/44.jpg)
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
![Page 45: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/45.jpg)
Repaso teoría
● Tipos de test (resumen simplificado):○ Unitarios (con test dobles).○ Integración.○ De punta a punta (End-to-end).
![Page 46: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/46.jpg)
Repaso teoría
![Page 47: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/47.jpg)
Repaso teoría
![Page 48: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/48.jpg)
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.
![Page 49: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/49.jpg)
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; [email protected] ;juan;[contabilidad,dirección]
maría; garcía garcía; [email protected] ;maria;[contabilidad]
sergio; fernández díez; [email protected] ;oigres;[TI,BBDD]
![Page 50: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/50.jpg)
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
![Page 51: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/51.jpg)
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
![Page 52: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/52.jpg)
Kata
“Queréis la fama, pero la fama cuesta y aquí es donde vais a empezar a pagar. Con sudor”
![Page 53: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/53.jpg)
Referencias
Enlaceshttps://github.com/juanignaciosl/ptd
http://aprendiendotdd.wordpress.com/
http://www.carlescliment.com/publications/calidad-e-integracion-continua-enero-2012
https://drupal.org/simpletest
http://pablasso.com/200905/unit-tests-en-php-con-simpletest/
http://www.programania.net/diseno-de-software/frameworks-de-tests-doubles-en-php-i/
http://eugeniabahit.blogspot.com.es/2011/09/enhance-php-acerca-de-los-test.html
![Page 54: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/54.jpg)
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/
![Page 55: Pucela testingdays testing_en_php](https://reader034.fdocumento.com/reader034/viewer/2022042516/55a2ca961a28ab266c8b473d/html5/thumbnails/55.jpg)
Referencias
LibrosCarlos Blé - Diseño Ágil con TDD http://www.dirigidoportests.com/el-libroEugenia Bahit - Scrum y eXtreme Programming para Programadores http://www.etnassoft.com/biblioteca/scrum-y-extreme-programming-para-programadores/
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