SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
TDD & PHPUnit
PHPSevilla
Sobre Nosotros
Sergio Elvira Perez
Maxfire
Senior Software Engineer
@Emergya
Roberto Becerra Jimenez
Roberb
Senior Software Engineer
@Emergya
Índice
● TDD
○ Qué es
○ Ciclo de desarrollo
○ Tests finales
○ FDD vs TDD
● PHPUnit
○ Qué es
○ Instalación
○ Uso
○ Ejemplos
Qué es TDD
● Desarrollo guiado por pruebas de software, o
Test-driven development (TDD) es una práctica
de ingeniería de software que involucra otras
dos prácticas:
○ Escribir las pruebas (Test First Development).
○ Refactorización (Refactoring).
Qué es TDD II
● El sistema que se
programa tiene que ser
muy Flexible.
● Cada prueba será
pequeña.
Qué es TDD III
Ciclo de desarrollo
1. Elegir un requisito.
2. Escribir una prueba
3. Verificar que la prueba falla
4. Escribir la implementación
5. Ejecutar las pruebas automatizadas
6. Eliminación de duplicación (Refactorizar)
7. Actualización de la lista de requisitos
Test finales
Testing via the xUnit Framework.
FDD
Es un enfoque de desarrollo ágil de software desarrollado por Jeff De
Luca y Peter Coad. Los desarrolladores se agrupan en dos tipos, "dueños
de clases" o "programadores jefe".
El proceso del diseño y construcción comprende cinco fases:
1. Desarrollar un modelo global;
2. Construir una lista de funcionalidades;
3. Planificar por funcionalidad;
4. Diseñar por funcionalidad;
5. Construir por funcionalidad.
TDD vs FDD (ventajas)
TDD FDD
1.- La minimización del número de defectos que llegan al
software en fase de producción.
1.- Rápida respuesta a cambios de
requisitos
2.- Optimización en ejecución de funciones 2.- Trabajo conjunto entre el cliente y el
equipo de desarrollo
3.- La producción de software modular 3.- Minimiza los costos frente a cambios.
TDD vs FDD (inconvenientes)
TDD FDD
Interfaces Gráfica de usuario (GUIs), solución parcial. Falta de documentación del diseño.
Ya que no todos miden los tiempos de proyecto Problemas derivados de la comunicación
oral
Bases de datos. Falta de reusabilidad.
Qué es PHPUnit
PHPUnit es un framework de testing para PHP
¿Por qué usar PHPUnit?
“Todos los programadores cometen errores, pero la diferencia entre los buenos
programadores y los malos programadores es que los buenos programadores
prueban su código para encontrar esos errores lo más pronto posible“
Sebastian Bergmann creador de PHPUnit
Instalación
wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
sudo mv phpunit.phar /usr/local/bin/phpunit
phpunit --version
Composer
"require-dev": {
"phpunit/phpunit": "5.6.*"
}
}
composer.json
composer install
Uso
<?php
class Money
{
private $amount;
public function __construct($amount)
{
$this->amount = $amount;
}
public function getAmount()
{
return $this->amount;
}
public function negate()
{
return new Money(-1 * $this->amount);
}
}
<?php
use PHPUnitFrameworkTestCase;
class MoneyTest extends TestCase
{
// ...
public function testCanBeNegated()
{
// Arrange
$a = new Money(1);
// Act
$b = $a->negate();
// Assert
$this->assertEquals(-1, $b->getAmount());
}
}
Uso
setUp()
Contiene el código que se va a ejecutar justo antes de los tests
tearDown()
Contiene el código que se va a ejecutar justo después de los tests
Uso
Assertions
Existe una gran cantidad de Assertions con los que podremos comprobar gran cantidad de
situaciones en nuestros tests.
Sólo veremos algunos ejemplos en esta presentación, aquí podemos encontrar todos los
existentes.
● assertEquals(mixed $expected, mixed $actual[, string $message = ''])
Se lanza un error con el mensaje $message en el caso de que $actual sea diferente a
$expected.
● assertFalse(bool $condition[, string $message = ''])
Se lanza un error con el mensaje $message en caso de que $condition no sea false.
● assertCount($expectedCount, $haystack[, string $message = ''])
Se lanza un error con el mensaje $message en caso de que el array $haystack no
contenga el número de elementos $expectedCount
Uso
<?php
use PHPUnitFrameworkTestCase;
class XTest extends TestCase
{
public function setUp(){
// defines initial state
}
public function tearDown(){
// defines final state
}
public function test1() {
// … assertions
}
public function testN() {
// … assertions
}
}
Uso
Ejecución
phpunit path/to/test/file
Test suite
phpunit path/to/test/file --filter test
Test concreto
Uso
Ejecución
$~ phpunit tests/NumberTest.php
PHPUnit 4.8.24 by Sebastian Bergmann and contributors.
.........................
Time: 208 ms, Memory: 14.00Mb
OK (25 tests, 175 assertions)
Resultados
Ejemplo usando PHPUnit
Gracias por su atención
Más información:
Sergio Elvira Perez <sergielviraperez@gmail.com>
Roberto becerra Jimenez<rbecerra@emergya.com>

Más contenido relacionado

La actualidad más candente

Ejemplo de proy ti.pdf
Ejemplo de proy ti.pdfEjemplo de proy ti.pdf
Ejemplo de proy ti.pdf
mariela2906
 
Estrategias de aplicaciones para las pruebas de integración
Estrategias  de aplicaciones para las pruebas de integraciónEstrategias  de aplicaciones para las pruebas de integración
Estrategias de aplicaciones para las pruebas de integración
Pablo Navarrete
 
2.2 relación de cmm con psp y tsp
2.2 relación de cmm con psp  y tsp2.2 relación de cmm con psp  y tsp
2.2 relación de cmm con psp y tsp
eeelllkkk
 

La actualidad más candente (20)

Metodos formales
Metodos formalesMetodos formales
Metodos formales
 
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEXProyecto de compiladores Sentencia While con Java CUP y JFLEX
Proyecto de compiladores Sentencia While con Java CUP y JFLEX
 
Ejemplo de proy ti.pdf
Ejemplo de proy ti.pdfEjemplo de proy ti.pdf
Ejemplo de proy ti.pdf
 
Arquitecturas de software - Parte 2
Arquitecturas de software - Parte 2Arquitecturas de software - Parte 2
Arquitecturas de software - Parte 2
 
Introducción
IntroducciónIntroducción
Introducción
 
Estrategias de aplicaciones para las pruebas de integración
Estrategias  de aplicaciones para las pruebas de integraciónEstrategias  de aplicaciones para las pruebas de integración
Estrategias de aplicaciones para las pruebas de integración
 
Conceptos basicos calidad software
Conceptos basicos calidad softwareConceptos basicos calidad software
Conceptos basicos calidad software
 
Metodología crmr
Metodología crmrMetodología crmr
Metodología crmr
 
Estructura de lenguaje ensamblador
Estructura de lenguaje ensambladorEstructura de lenguaje ensamblador
Estructura de lenguaje ensamblador
 
2.2 relación de cmm con psp y tsp
2.2 relación de cmm con psp  y tsp2.2 relación de cmm con psp  y tsp
2.2 relación de cmm con psp y tsp
 
Proyectos
ProyectosProyectos
Proyectos
 
Gestion de memoria en windows
Gestion de memoria en windowsGestion de memoria en windows
Gestion de memoria en windows
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Administración de memoria
Administración de memoriaAdministración de memoria
Administración de memoria
 
Código Limpio
Código LimpioCódigo Limpio
Código Limpio
 
Metodologia web
Metodologia webMetodologia web
Metodologia web
 
Pruebas Unitarias
Pruebas Unitarias Pruebas Unitarias
Pruebas Unitarias
 
Gestion Procesos, Sistemas Operativos
Gestion Procesos, Sistemas OperativosGestion Procesos, Sistemas Operativos
Gestion Procesos, Sistemas Operativos
 
Llamadas a subalgoritmos
Llamadas a subalgoritmosLlamadas a subalgoritmos
Llamadas a subalgoritmos
 
Metodologias Ágiles - Crystal Clear
Metodologias Ágiles - Crystal ClearMetodologias Ágiles - Crystal Clear
Metodologias Ágiles - Crystal Clear
 

Destacado

Unit Testing using PHPUnit
Unit Testing using  PHPUnitUnit Testing using  PHPUnit
Unit Testing using PHPUnit
varuntaliyan
 
Gestion de Proyectos de desarrollod de Software, haciendo uso de herramientas...
Gestion de Proyectos de desarrollod de Software, haciendo uso de herramientas...Gestion de Proyectos de desarrollod de Software, haciendo uso de herramientas...
Gestion de Proyectos de desarrollod de Software, haciendo uso de herramientas...
Esteban Saavedra
 

Destacado (18)

Metodologías ágiles, Scrum, Kanban y eXtreme Programming
Metodologías ágiles, Scrum, Kanban y eXtreme ProgrammingMetodologías ágiles, Scrum, Kanban y eXtreme Programming
Metodologías ágiles, Scrum, Kanban y eXtreme Programming
 
Redmine abr 2011
Redmine abr 2011Redmine abr 2011
Redmine abr 2011
 
chapters
chapterschapters
chapters
 
IPC 2013 - High Performance PHP with HipHop
IPC 2013 - High Performance PHP with HipHopIPC 2013 - High Performance PHP with HipHop
IPC 2013 - High Performance PHP with HipHop
 
PHPUnit
PHPUnitPHPUnit
PHPUnit
 
Automated php unit testing in drupal 8
Automated php unit testing in drupal 8Automated php unit testing in drupal 8
Automated php unit testing in drupal 8
 
Gestión de proyectos con redmine
Gestión de proyectos con redmine	Gestión de proyectos con redmine
Gestión de proyectos con redmine
 
PHPUnit with CakePHP and Yii
PHPUnit with CakePHP and YiiPHPUnit with CakePHP and Yii
PHPUnit with CakePHP and Yii
 
PHPUnit: from zero to hero
PHPUnit: from zero to heroPHPUnit: from zero to hero
PHPUnit: from zero to hero
 
Automated Testing in WordPress, Really?!
Automated Testing in WordPress, Really?!Automated Testing in WordPress, Really?!
Automated Testing in WordPress, Really?!
 
Tutorial basico redmine
Tutorial basico redmineTutorial basico redmine
Tutorial basico redmine
 
PhpUnit - The most unknown Parts
PhpUnit - The most unknown PartsPhpUnit - The most unknown Parts
PhpUnit - The most unknown Parts
 
Unit Testing in PHP
Unit Testing in PHPUnit Testing in PHP
Unit Testing in PHP
 
Introduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnitIntroduction to Unit Testing with PHPUnit
Introduction to Unit Testing with PHPUnit
 
Test Driven Development with PHPUnit
Test Driven Development with PHPUnitTest Driven Development with PHPUnit
Test Driven Development with PHPUnit
 
Unit Testing using PHPUnit
Unit Testing using  PHPUnitUnit Testing using  PHPUnit
Unit Testing using PHPUnit
 
Gestion de Proyectos de desarrollod de Software, haciendo uso de herramientas...
Gestion de Proyectos de desarrollod de Software, haciendo uso de herramientas...Gestion de Proyectos de desarrollod de Software, haciendo uso de herramientas...
Gestion de Proyectos de desarrollod de Software, haciendo uso de herramientas...
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit Testing
 

Similar a PHP Unit y TDD

Behavior1
Behavior1Behavior1
Behavior1
arajar
 
Introducción a PHPUnit
Introducción a PHPUnitIntroducción a PHPUnit
Introducción a PHPUnit
AlicantePHP
 

Similar a PHP Unit y TDD (20)

Test Unitarios y E2E front y Back
Test Unitarios y E2E front y BackTest Unitarios y E2E front y Back
Test Unitarios y E2E front y Back
 
Meetup Integración Continua y Jenkins
Meetup Integración Continua y Jenkins Meetup Integración Continua y Jenkins
Meetup Integración Continua y Jenkins
 
Behavior1
Behavior1Behavior1
Behavior1
 
Cobertura de pruebas unitarias - NetBaires
Cobertura de pruebas unitarias - NetBairesCobertura de pruebas unitarias - NetBaires
Cobertura de pruebas unitarias - NetBaires
 
Cobertura de pruebas unitarias en C#
Cobertura de pruebas unitarias en C#Cobertura de pruebas unitarias en C#
Cobertura de pruebas unitarias en C#
 
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
 
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
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnets
 
Presentación: xUnit y Junit
Presentación: xUnit y JunitPresentación: xUnit y Junit
Presentación: xUnit y Junit
 
Introducción a PHPUnit
Introducción a PHPUnitIntroducción a PHPUnit
Introducción a PHPUnit
 
Tdd
TddTdd
Tdd
 
Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1Elementos sobre Symfony 2.1
Elementos sobre Symfony 2.1
 
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
Magallanes, Herramienta de despliegue PHP sencilla y poderosa�Magallanes, Herramienta de despliegue PHP sencilla y poderosa�
Magallanes, Herramienta de despliegue PHP sencilla y poderosa
 
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7ReConnect 2015  - ASP.NET 5: MVC 6 y EF 7
ReConnect 2015 - ASP.NET 5: MVC 6 y EF 7
 
Pucela testingdays testing_en_php
Pucela testingdays testing_en_phpPucela testingdays testing_en_php
Pucela testingdays testing_en_php
 
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
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Pruebas unitarias
Pruebas unitariasPruebas unitarias
Pruebas unitarias
 
Metodologia XP fases y subfases
Metodologia  XP fases y subfasesMetodologia  XP fases y subfases
Metodologia XP fases y subfases
 
Concurrencia en Java
Concurrencia en Java Concurrencia en Java
Concurrencia en Java
 

Más de Emergya

Emergya company information
Emergya company informationEmergya company information
Emergya company information
Emergya
 
Casos de éxito portales-may2014
Casos de éxito portales-may2014Casos de éxito portales-may2014
Casos de éxito portales-may2014
Emergya
 
Casos de éxito GIS -may2014
Casos de éxito GIS -may2014Casos de éxito GIS -may2014
Casos de éxito GIS -may2014
Emergya
 

Más de Emergya (20)

Charla QA en SEO - Sevilla QA
Charla QA en SEO - Sevilla QACharla QA en SEO - Sevilla QA
Charla QA en SEO - Sevilla QA
 
Agile, José Antonio Dorado
Agile, José Antonio DoradoAgile, José Antonio Dorado
Agile, José Antonio Dorado
 
Continuous Integration of Mobile Apps with Docker and Appium
Continuous Integration of Mobile Apps with Docker and AppiumContinuous Integration of Mobile Apps with Docker and Appium
Continuous Integration of Mobile Apps with Docker and Appium
 
Moodle
MoodleMoodle
Moodle
 
Emergya company information
Emergya company informationEmergya company information
Emergya company information
 
Casos de éxito portales-may2014
Casos de éxito portales-may2014Casos de éxito portales-may2014
Casos de éxito portales-may2014
 
Casos de éxito GIS -may2014
Casos de éxito GIS -may2014Casos de éxito GIS -may2014
Casos de éxito GIS -may2014
 
Jornada de Sensibilización sobre el Uso y Manejo de las Redes Sociales en San...
Jornada de Sensibilización sobre el Uso y Manejo de las Redes Sociales en San...Jornada de Sensibilización sobre el Uso y Manejo de las Redes Sociales en San...
Jornada de Sensibilización sobre el Uso y Manejo de las Redes Sociales en San...
 
Planificando la actividad de contribución a Comunidades de Software Libre des...
Planificando la actividad de contribución a Comunidades de Software Libre des...Planificando la actividad de contribución a Comunidades de Software Libre des...
Planificando la actividad de contribución a Comunidades de Software Libre des...
 
SIG libre en aplicaciones de gestión de emergencias
SIG libre en aplicaciones de gestión de emergenciasSIG libre en aplicaciones de gestión de emergencias
SIG libre en aplicaciones de gestión de emergencias
 
Alcaldes 2.0
Alcaldes 2.0Alcaldes 2.0
Alcaldes 2.0
 
Open ls
Open lsOpen ls
Open ls
 
Planificación y optimización de rutas con Software Libre
Planificación y optimización de rutas con Software LibrePlanificación y optimización de rutas con Software Libre
Planificación y optimización de rutas con Software Libre
 
Jornada Estrategia Social Media - Sandetel
Jornada  Estrategia Social Media - SandetelJornada  Estrategia Social Media - Sandetel
Jornada Estrategia Social Media - Sandetel
 
Gnome y la empresa
Gnome y la empresaGnome y la empresa
Gnome y la empresa
 
Presentación Imaginática 2011
Presentación Imaginática 2011Presentación Imaginática 2011
Presentación Imaginática 2011
 
Interacción escritorio-web para la movilidad del autónomo
Interacción escritorio-web para la movilidad del autónomoInteracción escritorio-web para la movilidad del autónomo
Interacción escritorio-web para la movilidad del autónomo
 
Orca: A screen reader sailing into uncharted waters
Orca: A screen reader sailing into uncharted waters Orca: A screen reader sailing into uncharted waters
Orca: A screen reader sailing into uncharted waters
 
Gestión de Proyectos con TaskJuggler
Gestión de Proyectos con TaskJugglerGestión de Proyectos con TaskJuggler
Gestión de Proyectos con TaskJuggler
 
GIS y datos libres en aplicaciones sectoriales: gestión de emergencias
GIS y datos libres en aplicaciones sectoriales: gestión de emergenciasGIS y datos libres en aplicaciones sectoriales: gestión de emergencias
GIS y datos libres en aplicaciones sectoriales: gestión de emergencias
 

Último

INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
evercoyla
 

Último (20)

Matrices Matemáticos universitario pptx
Matrices  Matemáticos universitario pptxMatrices  Matemáticos universitario pptx
Matrices Matemáticos universitario pptx
 
Quimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdfQuimica Raymond Chang 12va Edicion___pdf
Quimica Raymond Chang 12va Edicion___pdf
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestaciones
 
Minería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptosMinería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptos
 
Six Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processSix Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo process
 
Control estadistico de procesos Primera parte.pdf
Control estadistico de procesos Primera parte.pdfControl estadistico de procesos Primera parte.pdf
Control estadistico de procesos Primera parte.pdf
 
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfCONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx
 
Presentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptxPresentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptx
 
Desigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdfDesigualdades e inecuaciones-convertido.pdf
Desigualdades e inecuaciones-convertido.pdf
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
 
QUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERU
QUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERUQUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERU
QUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERU
 
libro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacioneslibro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operaciones
 
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVOESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCD
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt
 
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptx
 

PHP Unit y TDD

  • 2. Sobre Nosotros Sergio Elvira Perez Maxfire Senior Software Engineer @Emergya Roberto Becerra Jimenez Roberb Senior Software Engineer @Emergya
  • 3. Índice ● TDD ○ Qué es ○ Ciclo de desarrollo ○ Tests finales ○ FDD vs TDD ● PHPUnit ○ Qué es ○ Instalación ○ Uso ○ Ejemplos
  • 4. Qué es TDD ● Desarrollo guiado por pruebas de software, o Test-driven development (TDD) es una práctica de ingeniería de software que involucra otras dos prácticas: ○ Escribir las pruebas (Test First Development). ○ Refactorización (Refactoring).
  • 5. Qué es TDD II ● El sistema que se programa tiene que ser muy Flexible. ● Cada prueba será pequeña.
  • 7. Ciclo de desarrollo 1. Elegir un requisito. 2. Escribir una prueba 3. Verificar que la prueba falla 4. Escribir la implementación 5. Ejecutar las pruebas automatizadas 6. Eliminación de duplicación (Refactorizar) 7. Actualización de la lista de requisitos
  • 8. Test finales Testing via the xUnit Framework.
  • 9. FDD Es un enfoque de desarrollo ágil de software desarrollado por Jeff De Luca y Peter Coad. Los desarrolladores se agrupan en dos tipos, "dueños de clases" o "programadores jefe". El proceso del diseño y construcción comprende cinco fases: 1. Desarrollar un modelo global; 2. Construir una lista de funcionalidades; 3. Planificar por funcionalidad; 4. Diseñar por funcionalidad; 5. Construir por funcionalidad.
  • 10. TDD vs FDD (ventajas) TDD FDD 1.- La minimización del número de defectos que llegan al software en fase de producción. 1.- Rápida respuesta a cambios de requisitos 2.- Optimización en ejecución de funciones 2.- Trabajo conjunto entre el cliente y el equipo de desarrollo 3.- La producción de software modular 3.- Minimiza los costos frente a cambios.
  • 11. TDD vs FDD (inconvenientes) TDD FDD Interfaces Gráfica de usuario (GUIs), solución parcial. Falta de documentación del diseño. Ya que no todos miden los tiempos de proyecto Problemas derivados de la comunicación oral Bases de datos. Falta de reusabilidad.
  • 12. Qué es PHPUnit PHPUnit es un framework de testing para PHP ¿Por qué usar PHPUnit? “Todos los programadores cometen errores, pero la diferencia entre los buenos programadores y los malos programadores es que los buenos programadores prueban su código para encontrar esos errores lo más pronto posible“ Sebastian Bergmann creador de PHPUnit
  • 13. Instalación wget https://phar.phpunit.de/phpunit.phar chmod +x phpunit.phar sudo mv phpunit.phar /usr/local/bin/phpunit phpunit --version Composer "require-dev": { "phpunit/phpunit": "5.6.*" } } composer.json composer install
  • 14. Uso <?php class Money { private $amount; public function __construct($amount) { $this->amount = $amount; } public function getAmount() { return $this->amount; } public function negate() { return new Money(-1 * $this->amount); } } <?php use PHPUnitFrameworkTestCase; class MoneyTest extends TestCase { // ... public function testCanBeNegated() { // Arrange $a = new Money(1); // Act $b = $a->negate(); // Assert $this->assertEquals(-1, $b->getAmount()); } }
  • 15. Uso setUp() Contiene el código que se va a ejecutar justo antes de los tests tearDown() Contiene el código que se va a ejecutar justo después de los tests
  • 16. Uso Assertions Existe una gran cantidad de Assertions con los que podremos comprobar gran cantidad de situaciones en nuestros tests. Sólo veremos algunos ejemplos en esta presentación, aquí podemos encontrar todos los existentes. ● assertEquals(mixed $expected, mixed $actual[, string $message = '']) Se lanza un error con el mensaje $message en el caso de que $actual sea diferente a $expected. ● assertFalse(bool $condition[, string $message = '']) Se lanza un error con el mensaje $message en caso de que $condition no sea false. ● assertCount($expectedCount, $haystack[, string $message = '']) Se lanza un error con el mensaje $message en caso de que el array $haystack no contenga el número de elementos $expectedCount
  • 17. Uso <?php use PHPUnitFrameworkTestCase; class XTest extends TestCase { public function setUp(){ // defines initial state } public function tearDown(){ // defines final state } public function test1() { // … assertions } public function testN() { // … assertions } }
  • 18. Uso Ejecución phpunit path/to/test/file Test suite phpunit path/to/test/file --filter test Test concreto
  • 19. Uso Ejecución $~ phpunit tests/NumberTest.php PHPUnit 4.8.24 by Sebastian Bergmann and contributors. ......................... Time: 208 ms, Memory: 14.00Mb OK (25 tests, 175 assertions) Resultados
  • 21. Gracias por su atención Más información: Sergio Elvira Perez <sergielviraperez@gmail.com> Roberto becerra Jimenez<rbecerra@emergya.com>