SlideShare une entreprise Scribd logo
1  sur  17
Télécharger pour lire hors ligne
Apuntes de la #XPWeek 2011

                      Cursos básico y avanzado

                  Complemento al libro de TDD:
                     www.dirigidoPorTests.com/el-libro
Participantes: @carlosble, @eamodeorubio, @AlfredoCasado, @alberto_vilches, @jsayar, @R_Climent,
@istepaniuk, @vicentgodella, @josmasflores, @david_vi11a, @magmax9, @ArturoHerrero, @skirmish84,
              @antoniojrossi, @earroyoron, @farroyocastro, @losalamero, @bitness_es


                     Aviso: Usaremos indistintamente los términos TDD y BDD.
Hagas o no hagas TDD/BDD
Lo más importante:
● Que no haya código duplicado

● Que los nombres sean adecuados
  ●   No dejar literales en el código: reemplazar números mágicos y cadenas por
      constantes con semántica.
  ●   Con palabras del dominio de negocio
  ●   Sin información técnica
  ●   No vale “utils”, “tools”, “Helper”, “Impl”, “I”, “Abstract”, etc

Lo segundo más importante:
● S.O.L.I.D

http://www.carlosble.com/2011/07/ultra-simplifying-solid/
http://eamodeorubio.wordpress.com/2011/03/07/diseno-software-agil-4-solid-1-%c2%bftus-clases-son-bomberotorero/


Están resumidos en español en el libro de TDD: www.dirigidoPorTests.com/el-libro.
El algoritmo TDD

Rojo: usa toda tu experiencia y conocimiento para
expresar el comportamiento que te gustaria que
tu código tuviese, con la mejor API posible.

Verde: No pienses, actúa rápido

Refactor: No vale añadir funcionalidad. Aplica las
reglas del código limpio vistas en la diapositiva
anterior
Malinterpretaciones del algoritmo

Algunos compañeros pensaron que para obtener
verde rápido podían escribir en el test, una API
temporal de su código de producción, que luego
podrían cambiar.

Error: El código del test no se puede cambiar una
vez está en verde. El refactor de los tests no
admite cambios en la API publica del SUT (código
de producción).
Aclarandonos con el diseño
Lo primero es saber qué quieres diseñar/probar.
Si no está totalmente claro el comportamiento a
especificar, no puedes lanzarte a tirar código.

El SUT (objeto a prueba) nunca puede ser un
doble, sino, ¡no estamos ejecutando nuestro
código!

¿Quién es el SUT? ¿Quíenes son los
colaboradores? ¿Qué responsabilidades tiene
cada elemento?
De lo fácil a lo difícil

TDD no está bien hecho sin la TODO-List. Y la
TODO-List está bien gestionada cuando los
casos más sencillos se atacan primero.

Tanto con TDD como haciendo sólo refactoring,
hay que ir de lo más evidente a lo más ofuscado.

¡Lo más fácil primero, siempre y cuando ayude a
triangular!
Dos enfoques
Outside-in (tambien top-down): Empezamos a
diseñar clases a las que de antemano les
creamos dependencias. Estas aparecen en el test
en forma de doble (stub, spy o mock).

Inside-out (también bottom-up): Empezamos a
diseñar clases pequeñas sin dependencias
aparentes.

En ambos casos, pueden emerger nuevos
artefactos a base de refactoring.
Algunos asocian BDD con el primer enfoque y TDD con el segundo.
Unit Vs Integration


Maximiza el número de tests unitarios y minimiza
el de integración. Los tests unitarios siguen las
reglas F.I.R.S.T

Los test de integración dependen de plataforma y
no hay reglas universales para escribirlos. Son un
dolor y hay que escribir el mínimo suficiente.
Mantenimiento de los tests
El código de los tests es igual de importante que el de
producción por eso su mantenimiento es clave. Aplicamos la no-
duplicidad y sobre todo los nombres adecuados.
Setup/Teardown adecuados y comunes para todos los tests de
su clase.

AssertEqual y assertTrue son poco informativos y
poco legibles. Hamcrest nos da más expresividad. Propuesta de
formato para Junit:

@Test public void
nombre_separado_por_underscores() throws Exception 
{     …
      assertThat(result, containsString(“esperado”));
}

http://weblogs.javahispano.org/artesanodeprimera/entry/escribiendo_mejores_te
st_ii
Test Doubles
Nunca doblamos clases que no son nuestras.

Usamos stubs para doblar métodos de consulta.
Usamos espias y mocks para doblar acciones.

Un espía y un mock pueden simular una consulta igual
que un stub.

El mock es un policía estricto. Un espía es un stub que
además recuerda todo lo ocurrido y nos lo puede decir.
http://weblogs.javahispano.org/artesanodeprimera/entry/escribiendo_mejores_te
st_iii_mocking
No te olvides de la arquitectura

Las características horizontales deben ser
estudiadas y diseñadas al comienzo del proyecto:
http://www.carlosble.com/2011/01/tddbdd-architecture-and-frameworks/


Las características verticales (requisitos de
negocio), emergen en nuestro BDD. A veces
aplicamos patrones de diseño expresando los
tests de la manera adecuada, sin que sea YAGNI
(innecesario).
MVC no es orientado a objetos
El patrón MVC no es orientado a objetos.              No
importa que en Grails un Controller sea una clase con métodos
y en Django sea un módulo con métodos. Ciertamente atacar a los
controllers con pruebas es mucho mas sencillo con Grails   . El MVC es un
patrón arquitectónico.

Cuanto más nos acoplamos a un framework
MVC, menos margen tenemos para modelar
comportamiento con objetos.

Acoplate al framework para hacer CRUD pero
evitalo para permitir que TDD te ayude a modelar
el negocio de manera emergente.
Controller: responsabilidades
El controller gestiona entrada y salida. Su misión
es conectar con negocio/dominio sin que éste
tenga que conocer elementos como HttpRequest.

Podemos diseñar la casuistica del controller
aplicando TDD, con espías y stubs para los
objetos de negocio.

El paso de parámetros de controller a negocio se
debe hacer con DTOs (Data Transfer Objects, objetos tipo struct
inicialmente) cuando son más de dos parámetros
Controller = N, Negocio = N - 1

Los objetos de dominio/negocio no deben saber
nada del controller.

El controller debe hacer el menor número posible
de llamadas al dominio.
Ej/Test: El usuario logueado puede enviar un mensaje al usuario registrado con
nickname 'paco'.
Implementación: El controller necesita obtener el usuario logueado de la sesión.
Puede por tanto pedir el usuario al servio de sesion, porque necesitamos
quitarnos la capa HTTP antes de pasar a dominio (no pasamos un Request a
dominio) pero NO obtendrá el usuario con nickname 'paco', simplemente pasará
el nickname al dominio. Dominio sabrá qué debe hacer con el nickname.
XP son mas cósas
Pair Programming (PP):
● 2 Teclados y 2 ratones en un mismo ordenador con una
gran pantalla.
● El navegador no interrumpe, apunta y aporta.

● Navegador y piloto se intercambian frecuentemente.

● Empatía, respeto, y no más de 5 horas al día.




Integración contínua (CI):
No tiene por qué ser automática pero es aconsejable. La
idea es unir del código de todos todo el tiempo y llevarlo
a UAT (user acceptance testing).

El código es de todos: Code reviews + PP
XP son valores

● Pragmatismo
● Sentido común

● Mejora contínua

● Autosuperación

● Reconocer los errores propios

● Trabajo en equipo

● No basta con hacerlo funcionar, hay que hacerlo

bien.
Artesanía del software


● Lo principal es maximizar el valor para el cliente.
● Trabaja con plena atención en lo que se hace.

● El artesano no se hace en dos días.

● Es responsabilidad del que aprende el

aprovechar la ayuda del que enseña.
    http://www.etnassoft.com/biblioteca/apprenticeship-patterns/
●   Aprende de los demás y comparte lo que sabe

Contenu connexe

Tendances

Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Agustin Ramos
 
TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por PruebasTDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por PruebasOrlando Bustos Mateluna
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Compendio de clean code (robert c. martin)
Compendio de clean code (robert c. martin)Compendio de clean code (robert c. martin)
Compendio de clean code (robert c. martin)Nombre Apellidos
 
TDD y Python
TDD y PythonTDD y Python
TDD y PythonJavier_J
 
ATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónPaulo Clavijo
 
Td dvs bdd
Td dvs bddTd dvs bdd
Td dvs bddlsajrf
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Alfredo Chavez
 
Clean Code Chapter 17: Smells and Heuristics (Spanish)
Clean Code Chapter 17: Smells and Heuristics (Spanish)Clean Code Chapter 17: Smells and Heuristics (Spanish)
Clean Code Chapter 17: Smells and Heuristics (Spanish)mariaadelayda
 
Refactorización
RefactorizaciónRefactorización
RefactorizaciónDavid Santa
 
Clean code cap 12 -emergence
Clean code  cap 12 -emergenceClean code  cap 12 -emergence
Clean code cap 12 -emergenceMateo Ortiz
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmockkaolong
 

Tendances (20)

Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.Workshop: Testeando nuestra aplicaciones.
Workshop: Testeando nuestra aplicaciones.
 
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
Desarrollo Dirigido por Comportamiento (con Cucumber y Groovy)
 
TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por PruebasTDD 101 - Introducción al Desarrollo Dirigido por Pruebas
TDD 101 - Introducción al Desarrollo Dirigido por Pruebas
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Compendio de clean code (robert c. martin)
Compendio de clean code (robert c. martin)Compendio de clean code (robert c. martin)
Compendio de clean code (robert c. martin)
 
Testing, tipos y otros flamewars
Testing, tipos y otros flamewarsTesting, tipos y otros flamewars
Testing, tipos y otros flamewars
 
TDD y Python
TDD y PythonTDD y Python
TDD y Python
 
Emergence
EmergenceEmergence
Emergence
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
ATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de AceptaciónATDD - Desarrollo Dirigido por Test de Aceptación
ATDD - Desarrollo Dirigido por Test de Aceptación
 
Td dvs bdd
Td dvs bddTd dvs bdd
Td dvs bdd
 
Clean code
Clean codeClean code
Clean code
 
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012Retos en la Adopción del Refactoring -  Junta General del MexALN 28/06/2012
Retos en la Adopción del Refactoring - Junta General del MexALN 28/06/2012
 
Clean Code Chapter 17: Smells and Heuristics (Spanish)
Clean Code Chapter 17: Smells and Heuristics (Spanish)Clean Code Chapter 17: Smells and Heuristics (Spanish)
Clean Code Chapter 17: Smells and Heuristics (Spanish)
 
Test driven development
Test driven developmentTest driven development
Test driven development
 
7iSF-4 test driver development
7iSF-4   test driver development7iSF-4   test driver development
7iSF-4 test driver development
 
Refactorización
RefactorizaciónRefactorización
Refactorización
 
Clean code cap 12 -emergence
Clean code  cap 12 -emergenceClean code  cap 12 -emergence
Clean code cap 12 -emergence
 
Junit y Jmock
Junit y JmockJunit y Jmock
Junit y Jmock
 
Unidad ii. tdd
Unidad ii. tddUnidad ii. tdd
Unidad ii. tdd
 

En vedette

Patrones arquitectónicos layers
Patrones arquitectónicos layersPatrones arquitectónicos layers
Patrones arquitectónicos layersMatias Yima
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)josecuartas
 
Arquitectura de software orientada a patrones
Arquitectura de software orientada a patronesArquitectura de software orientada a patrones
Arquitectura de software orientada a patronesGustavo De la Cruz Tovar
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014Ryan Cuprak
 
2 2 estilos arquitectonicos
2 2 estilos arquitectonicos2 2 estilos arquitectonicos
2 2 estilos arquitectonicoslandeta_p
 

En vedette (6)

Patrones arquitectónicos layers
Patrones arquitectónicos layersPatrones arquitectónicos layers
Patrones arquitectónicos layers
 
L15 Data Source Layer
L15 Data Source LayerL15 Data Source Layer
L15 Data Source Layer
 
Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)Patrones de arquitectura Software(Capa de Datos)
Patrones de arquitectura Software(Capa de Datos)
 
Arquitectura de software orientada a patrones
Arquitectura de software orientada a patronesArquitectura de software orientada a patrones
Arquitectura de software orientada a patrones
 
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 201450 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
50 EJB 3 Best Practices in 50 Minutes - JavaOne 2014
 
2 2 estilos arquitectonicos
2 2 estilos arquitectonicos2 2 estilos arquitectonicos
2 2 estilos arquitectonicos
 

Similaire à Apuntes #XPweek

Behavior1
Behavior1Behavior1
Behavior1arajar
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetseusonlito
 
Unidad 2.2 Escribiendo El Programa
Unidad 2.2 Escribiendo El ProgramaUnidad 2.2 Escribiendo El Programa
Unidad 2.2 Escribiendo El ProgramaSergio Sanchez
 
Meetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderMeetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderEduardo Riol
 
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
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoFinizens
 
Cómo hacer Test Driven Development
Cómo hacer Test Driven DevelopmentCómo hacer Test Driven Development
Cómo hacer Test Driven DevelopmentJavier Novoa Cataño
 
Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)Martín Machuca
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberSoftware Guru
 
Bdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamientoBdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamientoRoberto Andres Remonda
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...Miguel Ángel Sánchez Chordi
 
Cypress en un mundo lleno de Selenium
Cypress en un mundo lleno de SeleniumCypress en un mundo lleno de Selenium
Cypress en un mundo lleno de SeleniumSoftware Guru
 

Similaire à Apuntes #XPweek (20)

Cuida tu código: Clean Code
Cuida tu código: Clean CodeCuida tu código: Clean Code
Cuida tu código: Clean Code
 
Behavior1
Behavior1Behavior1
Behavior1
 
Testing & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnetsTesting & Pizza by Lito & nitsnets
Testing & Pizza by Lito & nitsnets
 
Unidad 2.2 Escribiendo El Programa
Unidad 2.2 Escribiendo El ProgramaUnidad 2.2 Escribiendo El Programa
Unidad 2.2 Escribiendo El Programa
 
Introduccion a XP
Introduccion a XPIntroduccion a XP
Introduccion a XP
 
Meetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poderMeetup bdd & tdd: aprovecha_su_poder
Meetup bdd & tdd: aprovecha_su_poder
 
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
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológico
 
Buenasprcticas
BuenasprcticasBuenasprcticas
Buenasprcticas
 
Cómo hacer Test Driven Development
Cómo hacer Test Driven DevelopmentCómo hacer Test Driven Development
Cómo hacer Test Driven Development
 
Introducción a tdd
Introducción a tddIntroducción a tdd
Introducción a tdd
 
El coste de no usar integración continua
El coste de no usar integración continuaEl coste de no usar integración continua
El coste de no usar integración continua
 
Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)Metodologías Aágiles: TDD (Test Driven development)
Metodologías Aágiles: TDD (Test Driven development)
 
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & CucumberAutomatización de pruebas con Selenium, Typescript, Protractor & Cucumber
Automatización de pruebas con Selenium, Typescript, Protractor & Cucumber
 
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#
 
Developing for Android (The movie)
Developing for Android (The movie)Developing for Android (The movie)
Developing for Android (The movie)
 
Bdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamientoBdd, cucumber y gherkin. desarrollo dirigido por comportamiento
Bdd, cucumber y gherkin. desarrollo dirigido por comportamiento
 
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
Cypress en un mundo lleno de Selenium
Cypress en un mundo lleno de SeleniumCypress en un mundo lleno de Selenium
Cypress en un mundo lleno de Selenium
 

Plus de Carlos Ble

Gestión de proyectos
Gestión de proyectosGestión de proyectos
Gestión de proyectosCarlos Ble
 
Maintainable software
Maintainable softwareMaintainable software
Maintainable softwareCarlos Ble
 
Carbon offsetting
Carbon offsettingCarbon offsetting
Carbon offsettingCarlos Ble
 
BDD - Test Academy Barcelona 2017
BDD - Test Academy Barcelona 2017BDD - Test Academy Barcelona 2017
BDD - Test Academy Barcelona 2017Carlos Ble
 
Distinguir entre Problema y Solución
Distinguir entre Problema y SoluciónDistinguir entre Problema y Solución
Distinguir entre Problema y SoluciónCarlos Ble
 
ES6 Simplified
ES6 SimplifiedES6 Simplified
ES6 SimplifiedCarlos Ble
 
Behavior Driven Development - Material de clase PMA
Behavior Driven Development - Material de clase PMABehavior Driven Development - Material de clase PMA
Behavior Driven Development - Material de clase PMACarlos Ble
 
TDD in the Web with Python and Django
TDD in the Web with Python and DjangoTDD in the Web with Python and Django
TDD in the Web with Python and DjangoCarlos Ble
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010Carlos Ble
 

Plus de Carlos Ble (9)

Gestión de proyectos
Gestión de proyectosGestión de proyectos
Gestión de proyectos
 
Maintainable software
Maintainable softwareMaintainable software
Maintainable software
 
Carbon offsetting
Carbon offsettingCarbon offsetting
Carbon offsetting
 
BDD - Test Academy Barcelona 2017
BDD - Test Academy Barcelona 2017BDD - Test Academy Barcelona 2017
BDD - Test Academy Barcelona 2017
 
Distinguir entre Problema y Solución
Distinguir entre Problema y SoluciónDistinguir entre Problema y Solución
Distinguir entre Problema y Solución
 
ES6 Simplified
ES6 SimplifiedES6 Simplified
ES6 Simplified
 
Behavior Driven Development - Material de clase PMA
Behavior Driven Development - Material de clase PMABehavior Driven Development - Material de clase PMA
Behavior Driven Development - Material de clase PMA
 
TDD in the Web with Python and Django
TDD in the Web with Python and DjangoTDD in the Web with Python and Django
TDD in the Web with Python and Django
 
Charla Tdd Uji 032010
Charla Tdd Uji 032010Charla Tdd Uji 032010
Charla Tdd Uji 032010
 

Dernier

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 

Dernier (11)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

Apuntes #XPweek

  • 1. Apuntes de la #XPWeek 2011 Cursos básico y avanzado Complemento al libro de TDD: www.dirigidoPorTests.com/el-libro Participantes: @carlosble, @eamodeorubio, @AlfredoCasado, @alberto_vilches, @jsayar, @R_Climent, @istepaniuk, @vicentgodella, @josmasflores, @david_vi11a, @magmax9, @ArturoHerrero, @skirmish84, @antoniojrossi, @earroyoron, @farroyocastro, @losalamero, @bitness_es Aviso: Usaremos indistintamente los términos TDD y BDD.
  • 2. Hagas o no hagas TDD/BDD Lo más importante: ● Que no haya código duplicado ● Que los nombres sean adecuados ● No dejar literales en el código: reemplazar números mágicos y cadenas por constantes con semántica. ● Con palabras del dominio de negocio ● Sin información técnica ● No vale “utils”, “tools”, “Helper”, “Impl”, “I”, “Abstract”, etc Lo segundo más importante: ● S.O.L.I.D http://www.carlosble.com/2011/07/ultra-simplifying-solid/ http://eamodeorubio.wordpress.com/2011/03/07/diseno-software-agil-4-solid-1-%c2%bftus-clases-son-bomberotorero/ Están resumidos en español en el libro de TDD: www.dirigidoPorTests.com/el-libro.
  • 3. El algoritmo TDD Rojo: usa toda tu experiencia y conocimiento para expresar el comportamiento que te gustaria que tu código tuviese, con la mejor API posible. Verde: No pienses, actúa rápido Refactor: No vale añadir funcionalidad. Aplica las reglas del código limpio vistas en la diapositiva anterior
  • 4. Malinterpretaciones del algoritmo Algunos compañeros pensaron que para obtener verde rápido podían escribir en el test, una API temporal de su código de producción, que luego podrían cambiar. Error: El código del test no se puede cambiar una vez está en verde. El refactor de los tests no admite cambios en la API publica del SUT (código de producción).
  • 5. Aclarandonos con el diseño Lo primero es saber qué quieres diseñar/probar. Si no está totalmente claro el comportamiento a especificar, no puedes lanzarte a tirar código. El SUT (objeto a prueba) nunca puede ser un doble, sino, ¡no estamos ejecutando nuestro código! ¿Quién es el SUT? ¿Quíenes son los colaboradores? ¿Qué responsabilidades tiene cada elemento?
  • 6. De lo fácil a lo difícil TDD no está bien hecho sin la TODO-List. Y la TODO-List está bien gestionada cuando los casos más sencillos se atacan primero. Tanto con TDD como haciendo sólo refactoring, hay que ir de lo más evidente a lo más ofuscado. ¡Lo más fácil primero, siempre y cuando ayude a triangular!
  • 7. Dos enfoques Outside-in (tambien top-down): Empezamos a diseñar clases a las que de antemano les creamos dependencias. Estas aparecen en el test en forma de doble (stub, spy o mock). Inside-out (también bottom-up): Empezamos a diseñar clases pequeñas sin dependencias aparentes. En ambos casos, pueden emerger nuevos artefactos a base de refactoring. Algunos asocian BDD con el primer enfoque y TDD con el segundo.
  • 8. Unit Vs Integration Maximiza el número de tests unitarios y minimiza el de integración. Los tests unitarios siguen las reglas F.I.R.S.T Los test de integración dependen de plataforma y no hay reglas universales para escribirlos. Son un dolor y hay que escribir el mínimo suficiente.
  • 9. Mantenimiento de los tests El código de los tests es igual de importante que el de producción por eso su mantenimiento es clave. Aplicamos la no- duplicidad y sobre todo los nombres adecuados. Setup/Teardown adecuados y comunes para todos los tests de su clase. AssertEqual y assertTrue son poco informativos y poco legibles. Hamcrest nos da más expresividad. Propuesta de formato para Junit: @Test public void nombre_separado_por_underscores() throws Exception  {     …       assertThat(result, containsString(“esperado”)); } http://weblogs.javahispano.org/artesanodeprimera/entry/escribiendo_mejores_te st_ii
  • 10. Test Doubles Nunca doblamos clases que no son nuestras. Usamos stubs para doblar métodos de consulta. Usamos espias y mocks para doblar acciones. Un espía y un mock pueden simular una consulta igual que un stub. El mock es un policía estricto. Un espía es un stub que además recuerda todo lo ocurrido y nos lo puede decir. http://weblogs.javahispano.org/artesanodeprimera/entry/escribiendo_mejores_te st_iii_mocking
  • 11. No te olvides de la arquitectura Las características horizontales deben ser estudiadas y diseñadas al comienzo del proyecto: http://www.carlosble.com/2011/01/tddbdd-architecture-and-frameworks/ Las características verticales (requisitos de negocio), emergen en nuestro BDD. A veces aplicamos patrones de diseño expresando los tests de la manera adecuada, sin que sea YAGNI (innecesario).
  • 12. MVC no es orientado a objetos El patrón MVC no es orientado a objetos. No importa que en Grails un Controller sea una clase con métodos y en Django sea un módulo con métodos. Ciertamente atacar a los controllers con pruebas es mucho mas sencillo con Grails . El MVC es un patrón arquitectónico. Cuanto más nos acoplamos a un framework MVC, menos margen tenemos para modelar comportamiento con objetos. Acoplate al framework para hacer CRUD pero evitalo para permitir que TDD te ayude a modelar el negocio de manera emergente.
  • 13. Controller: responsabilidades El controller gestiona entrada y salida. Su misión es conectar con negocio/dominio sin que éste tenga que conocer elementos como HttpRequest. Podemos diseñar la casuistica del controller aplicando TDD, con espías y stubs para los objetos de negocio. El paso de parámetros de controller a negocio se debe hacer con DTOs (Data Transfer Objects, objetos tipo struct inicialmente) cuando son más de dos parámetros
  • 14. Controller = N, Negocio = N - 1 Los objetos de dominio/negocio no deben saber nada del controller. El controller debe hacer el menor número posible de llamadas al dominio. Ej/Test: El usuario logueado puede enviar un mensaje al usuario registrado con nickname 'paco'. Implementación: El controller necesita obtener el usuario logueado de la sesión. Puede por tanto pedir el usuario al servio de sesion, porque necesitamos quitarnos la capa HTTP antes de pasar a dominio (no pasamos un Request a dominio) pero NO obtendrá el usuario con nickname 'paco', simplemente pasará el nickname al dominio. Dominio sabrá qué debe hacer con el nickname.
  • 15. XP son mas cósas Pair Programming (PP): ● 2 Teclados y 2 ratones en un mismo ordenador con una gran pantalla. ● El navegador no interrumpe, apunta y aporta. ● Navegador y piloto se intercambian frecuentemente. ● Empatía, respeto, y no más de 5 horas al día. Integración contínua (CI): No tiene por qué ser automática pero es aconsejable. La idea es unir del código de todos todo el tiempo y llevarlo a UAT (user acceptance testing). El código es de todos: Code reviews + PP
  • 16. XP son valores ● Pragmatismo ● Sentido común ● Mejora contínua ● Autosuperación ● Reconocer los errores propios ● Trabajo en equipo ● No basta con hacerlo funcionar, hay que hacerlo bien.
  • 17. Artesanía del software ● Lo principal es maximizar el valor para el cliente. ● Trabaja con plena atención en lo que se hace. ● El artesano no se hace en dos días. ● Es responsabilidad del que aprende el aprovechar la ayuda del que enseña. http://www.etnassoft.com/biblioteca/apprenticeship-patterns/ ● Aprende de los demás y comparte lo que sabe