SlideShare uma empresa Scribd logo
1 de 77
Desarrollo Ágil de ProductosUna Perspectiva Técnica Juan Carlos Vergara
Agenda ,[object Object]
Adopción de Agile para creación de productos
Desarrollo incremental/evolutivo
Funcionalidad mínima útil
Diseño guiado por pruebas
Algunas heurísticas útiles,[object Object]
Introducción Se uso un estilo TDD iniciado en Londres a comienzos de los 2000 (Steve Freeman & Nat Pryce) caracterizada por el enfoque end-to-end y por el énfasis especial en la comunicación entre objetos.
Por qué adoptamos agile? “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software”
Por qué adoptamos agile? ,[object Object]
No permite entregas incrementales de funcionalidad con periodos que van desde un par de semanas hasta un par de meses.,[object Object]
Desarrollo del Producto ,[object Object]
Visión del Producto
Plan de Negocio
Los Ingresos
Road Map
Release Plan
Product Backlog,[object Object]
Desarrollo Incremental/Evolutivo Dividir el trabajo en periodos fijos, en cada uno de los cuales se diseña, implementa, prueba y despliega funcionalidad. El desarrollo incremental construye el sistema característica por característica. El desarrollo iterativo progresivamente refina la implementación hasta que sea lo suficientemente buena en respuesta a retroalimentación constante..
Retroalimentación Agile nos permite aplicar ciclos de retroalimentación organizando nuestros proyectos en ciclos anidados que duran desde segundos a meses.
Retroalimentación
Retroalimentación ,[object Object]
Cuanto más efectiva es la implementación estos problemas se solucionan más rápidamente.,[object Object]
Los ciclos más externos están enfocados en la organización y el equipo.El proceso de pruebas ya no es una actividad final de verificación sino que va a la par con las tareas de desarrollo.
División Funcional Una técnica fundamental del desarrollo incremental es dividir la funcionalidad de tal manera que se pueda construir característica por característica.
División Funcional Cada característica a implementar se denominada un “slice” y debe involucrar todas las partes relevantes del sistema.
Slices Cada “slice” debe ser significativo y lo suficientemente concreto para determinar cuando estará terminado Y lo suficientemente pequeño para estar enfocado en un único concepto y sea implementado rápidamente.
Automatización ,[object Object],Debemos automatizar para reducir costo y tiempo en construir, modificar, desplegar y probar end-to-end versiones del sistema.
Niveles de Pruebas Aceptación: Trabaja el sistema en su conjunto? Integración: Nuestro código trabaja contra código que no podemos cambiar? Unitario: Nuestros objetos hacen lo correcto, son convenientes para trabajar?
Niveles de Pruebas Separar las pruebas que miden progreso de aquellas que capturan regresiones.
Pruebas End-to-End Ejercitan al sistema desde el exterior a través de sus interfaces externas. Esto puede significar bastante esfuerzo en lograrse, pero se tiene que hacer de todas maneras durante el ciclo de vida del software. Con una combinación adecuada de automatización y pruebas end-to-end nuestro producto puede estar siempre integrado y listo para el despliegue.
¿Como iniciamos la Implementación?
Walking Skeleton  Es la implementación de la funcionalidad mínima útil que pueda ser construida, desplegada y probada end-to-end. Luego construiremos incrementalmente el producto slice por slice.
Walking Skeleton  El primer test end-to-end ayuda a visualizar el contexto del proyecto para trazar el panorama de su solución y a tomar decisiones esenciales antes de escribir algún código. Pasos para identificar una característica mínima útil: http://blog.jbrains.ca/permalink/three-steps-to-a-useful-minimal-feature
¿Cómo aseguramos la calidad de la implementación a medida que construimos incrementalmente?
Diseño Guiado por Pruebas
Diseño Guiado por Pruebas Como usamos las pruebas como guía para obtener sistemas orientados a objetos? The big idea is “messaging” […] The key in making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be. —Alan Key
Una red de objetos Que colaboran entre si…
Diseño Guiado por Pruebas El sistema es construido creando y ensamblando objetos de tal manera que puedan enviarse mensajes entre sí. El comportamiento del sistema es resultado de ésta composición. Esto permite cambiar el comportamiento agregando y removiendo instancias o ensamblando diversas combinaciones.
Si escribimos pruebas durante todo el proceso de desarrollo podemos crear un red de seguridad que nos dará confianza para realizar cambios.
Test Driven Development ,[object Object]
Escribir código a fin de hacerlo funcionar.
Refactorizar el código a fin de que sea únicamente una implementación de la característica probada.
Repita.,[object Object]
Cuando detenernos.
Como estructuramos el código.,[object Object]
Acceptance Test Driven Development Están dirigidas por las historias de usuario y el diseño conceptual, es todo muy sistemático. Se puede saber con precisión cuando se han terminado de implementar correctamente.
Acceptance Test Driven Development
Acceptance Test Driven Development Empezamos construyendo una prueba de aceptación que ejercite la funcionalidad que necesitamos implementar. Mientras no pase la prueba de aceptación se asume que el sistema todavía no implementa esa característica.
Acceptance Test Driven Development El ciclo externo es una medida demostrable de progreso y el conjunto de pruebas nos protege contra fallas de regresión cuando cambiemos el sistema.
Cómolaspruebas de aceptaciónpuedenguiar el desarrollo?
Outside-In Development from the Inputs to the Outputs
http://www.natpryce.com/articles/000772.html
Se inicia con un evento externo que ejercite el comportamiento que queremos implementar, éste se propaga a través del código objeto por objeto, hasta alcanzar un efecto visible. En los límites de nuestro sistema, necesitamos escribir uno o más objetos para manejar esos eventos.  A medida que vamos avanzando con la implementación descubriremos que esos objetos necesitan servicios de soporte de otros objetos del sistema para cumplir sus responsabilidades.
De esta manera trazamos nuestro camino a través del sistema: ,[object Object]
A las capas intermedias, pasando por el modelo del dominio central
Y luego propagándose hacía otros objetos limite que generen alguna respuesta externamente visible.,[object Object]
Objetos se relacionan a través de roles
Relaciones entre objetos En este esquema basado en la comunicación debemos diseñar la interface de un colaborador basándonos en su uso pretendido antes que en su implementación. Esto lleva a un proceso de descubrimiento donde las interfaces de los objetos colaboradores son traídas a la existencia basadas en los requerimientos inmediatos dirigidos por necesidad.
Representaciones de Relaciones En lenguajes modernos como Java se representan las relaciones como interfaces. Esto nos permite modelar las interacciones entre objetos sin necesidad de contar con una implementación concreta.
Si no existen implementaciones concretas, como validamos en nuestras pruebas las interacciones entre los objetos?
Mock Objects Las pruebas usando mock objects definen un conjunto de restricciones que especifican que mensajes los objetos pueden enviar y la forma en que los mensajes deben ser enviados.
Mock Objects Verifican interacciones entre objetos: ,[object Object]
Cuantas veces fueron llamados
En que orden fueron llamados.
Cuales son los parámetros correctos?,[object Object]
Protocolos de Comunicación Una interface define si dos componentes pueden relacionarse entre sí Un protocolo describe si dos objetos pueden trabajar juntos.
Protocolos de Comunicación Los mock objects nos permiten visualizar éstos protocolos. Son una herramienta tanto para descubrir los roles que desempeñan los objetos así como para describir sus interacciones cuando revisamos el código.
Importancia de los diagnósticos Siempre debemos verificar que el test falle “correctamente” revisando los mensajes de falla. Si la prueba falla de una manera inesperada podemos concluir que hemos malentendido algo o el código no está correctamente terminado.
Cuando tengamos la falla “correcta” verificaremos que el diagnostico será útil si el código falla posteriormente.
Algunas Heurísticas que nos ayudarán a empezar a aplicar este enfoque
Implementación Cuando iniciamos una nueva área de codificación podemos suspender temporalmente nuestro sentido de diseño y escribir código sin imponerse mucha estructura.  Luego cuando encontremos que nuestro código se vuelve bastante complejo de entender debemos empezar a mejorarlo.
Refactoring El objetivo es mejorar el código de tal manera que represente mejor las características que implementa haciéndolo más mantenible y para facilitar la adición de nueva funcionalidad.

Mais conteúdo relacionado

Mais procurados

Cascada vs Agile Scrum v2.0
Cascada vs Agile Scrum v2.0Cascada vs Agile Scrum v2.0
Cascada vs Agile Scrum v2.0
TestingBaires
 
Introduccion a metodologias de desarrollo de software
Introduccion  a metodologias de desarrollo de softwareIntroduccion  a metodologias de desarrollo de software
Introduccion a metodologias de desarrollo de software
JuanCarlos1937
 
Qué metodología será más adecuada para mi proyecto software
Qué metodología será más adecuada para mi proyecto softwareQué metodología será más adecuada para mi proyecto software
Qué metodología será más adecuada para mi proyecto software
LeanSight Consulting
 
Elmanifiestoylosprincipiosgiles 131007145716-phpapp01
Elmanifiestoylosprincipiosgiles 131007145716-phpapp01Elmanifiestoylosprincipiosgiles 131007145716-phpapp01
Elmanifiestoylosprincipiosgiles 131007145716-phpapp01
esgar1989
 

Mais procurados (19)

Cascada vs Agile Scrum v2.0
Cascada vs Agile Scrum v2.0Cascada vs Agile Scrum v2.0
Cascada vs Agile Scrum v2.0
 
Grupo82018
Grupo82018Grupo82018
Grupo82018
 
ALM09 - Scrum, Visual Studio y Buenas Prácticas
ALM09 - Scrum, Visual Studio y Buenas PrácticasALM09 - Scrum, Visual Studio y Buenas Prácticas
ALM09 - Scrum, Visual Studio y Buenas Prácticas
 
Programacion extrema_WR
Programacion extrema_WRProgramacion extrema_WR
Programacion extrema_WR
 
Introduccion a metodologias de desarrollo de software
Introduccion  a metodologias de desarrollo de softwareIntroduccion  a metodologias de desarrollo de software
Introduccion a metodologias de desarrollo de software
 
Presentacion grupo8
Presentacion grupo8Presentacion grupo8
Presentacion grupo8
 
Qué metodología será más adecuada para mi proyecto software
Qué metodología será más adecuada para mi proyecto softwareQué metodología será más adecuada para mi proyecto software
Qué metodología será más adecuada para mi proyecto software
 
METODOLOGIAS XP
METODOLOGIAS XPMETODOLOGIAS XP
METODOLOGIAS XP
 
Monografia de xp
Monografia de xpMonografia de xp
Monografia de xp
 
El proceso de software
El proceso  de softwareEl proceso  de software
El proceso de software
 
Luis
LuisLuis
Luis
 
Diapositivas xp
Diapositivas xpDiapositivas xp
Diapositivas xp
 
Elmanifiestoylosprincipiosgiles 131007145716-phpapp01
Elmanifiestoylosprincipiosgiles 131007145716-phpapp01Elmanifiestoylosprincipiosgiles 131007145716-phpapp01
Elmanifiestoylosprincipiosgiles 131007145716-phpapp01
 
Metodologias xp
Metodologias xpMetodologias xp
Metodologias xp
 
Caminando hacia la agilidad con Visual Studio 2010
Caminando hacia la agilidad con Visual Studio 2010Caminando hacia la agilidad con Visual Studio 2010
Caminando hacia la agilidad con Visual Studio 2010
 
Programación Extrema (Extream Programming XP)
Programación Extrema (Extream Programming XP)Programación Extrema (Extream Programming XP)
Programación Extrema (Extream Programming XP)
 
Xp
XpXp
Xp
 
Programación extrema
Programación extremaProgramación extrema
Programación extrema
 
Is clase 13_metodos_y_procesos
Is clase 13_metodos_y_procesosIs clase 13_metodos_y_procesos
Is clase 13_metodos_y_procesos
 

Destaque

Especificaciones técnicas generales para la conservación de carretras mtc (...
Especificaciones técnicas generales para la conservación de carretras   mtc (...Especificaciones técnicas generales para la conservación de carretras   mtc (...
Especificaciones técnicas generales para la conservación de carretras mtc (...
Olmer Lazarte
 
Zahartzaroa zineman
Zahartzaroa zinemanZahartzaroa zineman
Zahartzaroa zineman
Kulturate
 
Tarea Grupal mandarin
Tarea Grupal mandarin Tarea Grupal mandarin
Tarea Grupal mandarin
Thesos
 

Destaque (16)

resume-hulon-4
resume-hulon-4resume-hulon-4
resume-hulon-4
 
A smart way to solve potential floods due to climate change
A smart way to solve potential floods due to climate change A smart way to solve potential floods due to climate change
A smart way to solve potential floods due to climate change
 
Especificaciones técnicas generales para la conservación de carretras mtc (...
Especificaciones técnicas generales para la conservación de carretras   mtc (...Especificaciones técnicas generales para la conservación de carretras   mtc (...
Especificaciones técnicas generales para la conservación de carretras mtc (...
 
Osakidetzaren 2015eko jarduera-balantzea eta itxaronzerrendak
Osakidetzaren 2015eko jarduera-balantzea eta itxaronzerrendakOsakidetzaren 2015eko jarduera-balantzea eta itxaronzerrendak
Osakidetzaren 2015eko jarduera-balantzea eta itxaronzerrendak
 
Flickr
FlickrFlickr
Flickr
 
Marcial Guerrero's Professional Persona
Marcial Guerrero's Professional PersonaMarcial Guerrero's Professional Persona
Marcial Guerrero's Professional Persona
 
Zahartzaroa zineman
Zahartzaroa zinemanZahartzaroa zineman
Zahartzaroa zineman
 
EDU 305 Entire Course 2015 version
EDU 305 Entire Course 2015 versionEDU 305 Entire Course 2015 version
EDU 305 Entire Course 2015 version
 
ARLab | Historia del grupo de investigación
ARLab | Historia del grupo de investigaciónARLab | Historia del grupo de investigación
ARLab | Historia del grupo de investigación
 
Apostila para Concurso INSS - Técnico do seguro social
Apostila para Concurso INSS  - Técnico do seguro socialApostila para Concurso INSS  - Técnico do seguro social
Apostila para Concurso INSS - Técnico do seguro social
 
Tarea Grupal mandarin
Tarea Grupal mandarin Tarea Grupal mandarin
Tarea Grupal mandarin
 
отчет
отчетотчет
отчет
 
Nutrición
NutriciónNutrición
Nutrición
 
Clasificación de los seres vivos
Clasificación de los seres vivosClasificación de los seres vivos
Clasificación de los seres vivos
 
Rubrica del Proyecto 8. Leer y escribir poemas (Español - Bloque III)
Rubrica del Proyecto 8. Leer y escribir poemas (Español - Bloque III)Rubrica del Proyecto 8. Leer y escribir poemas (Español - Bloque III)
Rubrica del Proyecto 8. Leer y escribir poemas (Español - Bloque III)
 
Social Media Impact - Ursprünge und Auswirkungen
Social Media Impact - Ursprünge und AuswirkungenSocial Media Impact - Ursprünge und Auswirkungen
Social Media Impact - Ursprünge und Auswirkungen
 

Semelhante a Aw agiles2010 - dppt 1.1

Definición de ingeniería del software
Definición de ingeniería del softwareDefinición de ingeniería del software
Definición de ingeniería del software
hdfkjshdkf
 
Especial ingenieria de software
Especial ingenieria de softwareEspecial ingenieria de software
Especial ingenieria de software
alejandor reyes
 
Proceso de desarrollo de si
Proceso de desarrollo de siProceso de desarrollo de si
Proceso de desarrollo de si
Didier Alexander
 
Ces cacic07-automatizacion y-gestion_pruebas_funcionales
Ces cacic07-automatizacion y-gestion_pruebas_funcionalesCes cacic07-automatizacion y-gestion_pruebas_funcionales
Ces cacic07-automatizacion y-gestion_pruebas_funcionales
ginacris
 
Implementacion de software
Implementacion de softwareImplementacion de software
Implementacion de software
Tom Rodriguez
 
FACCI METODOLOGIAS AGILES
FACCI METODOLOGIAS AGILESFACCI METODOLOGIAS AGILES
FACCI METODOLOGIAS AGILES
afrancoing
 

Semelhante a Aw agiles2010 - dppt 1.1 (20)

Pruebas
PruebasPruebas
Pruebas
 
ASD.pptx
ASD.pptxASD.pptx
ASD.pptx
 
Modelos de Procesos de Software
Modelos de Procesos de SoftwareModelos de Procesos de Software
Modelos de Procesos de Software
 
PROCESO DE DESARROLLO DE SOFTWARE.pptx
PROCESO DE DESARROLLO DE SOFTWARE.pptxPROCESO DE DESARROLLO DE SOFTWARE.pptx
PROCESO DE DESARROLLO DE SOFTWARE.pptx
 
Proceso unificado de desarrollo de software
Proceso unificado de desarrollo de softwareProceso unificado de desarrollo de software
Proceso unificado de desarrollo de software
 
AMSI
AMSIAMSI
AMSI
 
Definición de ingeniería del software
Definición de ingeniería del softwareDefinición de ingeniería del software
Definición de ingeniería del software
 
Conferencia Gestión de Proyectos de TI
Conferencia Gestión de Proyectos de TIConferencia Gestión de Proyectos de TI
Conferencia Gestión de Proyectos de TI
 
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)
 
Especial ingenieria de software
Especial ingenieria de softwareEspecial ingenieria de software
Especial ingenieria de software
 
Especial ingenieria de software
Especial ingenieria de softwareEspecial ingenieria de software
Especial ingenieria de software
 
Presentacion Metodos de software
Presentacion Metodos de softwarePresentacion Metodos de software
Presentacion Metodos de software
 
Proceso de desarrollo de si
Proceso de desarrollo de siProceso de desarrollo de si
Proceso de desarrollo de si
 
Estrategias prueba de software
Estrategias prueba de softwareEstrategias prueba de software
Estrategias prueba de software
 
prueva
pruevaprueva
prueva
 
Ces cacic07-automatizacion y-gestion_pruebas_funcionales
Ces cacic07-automatizacion y-gestion_pruebas_funcionalesCes cacic07-automatizacion y-gestion_pruebas_funcionales
Ces cacic07-automatizacion y-gestion_pruebas_funcionales
 
S9-DAW-2022S1.pptx
S9-DAW-2022S1.pptxS9-DAW-2022S1.pptx
S9-DAW-2022S1.pptx
 
Implementacion de software
Implementacion de softwareImplementacion de software
Implementacion de software
 
FACCI METODOLOGIAS AGILES
FACCI METODOLOGIAS AGILESFACCI METODOLOGIAS AGILES
FACCI METODOLOGIAS AGILES
 
Proceso del Software
Proceso del Software Proceso del Software
Proceso del Software
 

Aw agiles2010 - dppt 1.1

  • 1. Desarrollo Ágil de ProductosUna Perspectiva Técnica Juan Carlos Vergara
  • 2.
  • 3. Adopción de Agile para creación de productos
  • 7.
  • 8. Introducción Se uso un estilo TDD iniciado en Londres a comienzos de los 2000 (Steve Freeman & Nat Pryce) caracterizada por el enfoque end-to-end y por el énfasis especial en la comunicación entre objetos.
  • 9. Por qué adoptamos agile? “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software”
  • 10.
  • 11.
  • 12.
  • 18.
  • 19. Desarrollo Incremental/Evolutivo Dividir el trabajo en periodos fijos, en cada uno de los cuales se diseña, implementa, prueba y despliega funcionalidad. El desarrollo incremental construye el sistema característica por característica. El desarrollo iterativo progresivamente refina la implementación hasta que sea lo suficientemente buena en respuesta a retroalimentación constante..
  • 20. Retroalimentación Agile nos permite aplicar ciclos de retroalimentación organizando nuestros proyectos en ciclos anidados que duran desde segundos a meses.
  • 22.
  • 23.
  • 24. Los ciclos más externos están enfocados en la organización y el equipo.El proceso de pruebas ya no es una actividad final de verificación sino que va a la par con las tareas de desarrollo.
  • 25. División Funcional Una técnica fundamental del desarrollo incremental es dividir la funcionalidad de tal manera que se pueda construir característica por característica.
  • 26. División Funcional Cada característica a implementar se denominada un “slice” y debe involucrar todas las partes relevantes del sistema.
  • 27. Slices Cada “slice” debe ser significativo y lo suficientemente concreto para determinar cuando estará terminado Y lo suficientemente pequeño para estar enfocado en un único concepto y sea implementado rápidamente.
  • 28.
  • 29. Niveles de Pruebas Aceptación: Trabaja el sistema en su conjunto? Integración: Nuestro código trabaja contra código que no podemos cambiar? Unitario: Nuestros objetos hacen lo correcto, son convenientes para trabajar?
  • 30. Niveles de Pruebas Separar las pruebas que miden progreso de aquellas que capturan regresiones.
  • 31. Pruebas End-to-End Ejercitan al sistema desde el exterior a través de sus interfaces externas. Esto puede significar bastante esfuerzo en lograrse, pero se tiene que hacer de todas maneras durante el ciclo de vida del software. Con una combinación adecuada de automatización y pruebas end-to-end nuestro producto puede estar siempre integrado y listo para el despliegue.
  • 32. ¿Como iniciamos la Implementación?
  • 33. Walking Skeleton Es la implementación de la funcionalidad mínima útil que pueda ser construida, desplegada y probada end-to-end. Luego construiremos incrementalmente el producto slice por slice.
  • 34. Walking Skeleton El primer test end-to-end ayuda a visualizar el contexto del proyecto para trazar el panorama de su solución y a tomar decisiones esenciales antes de escribir algún código. Pasos para identificar una característica mínima útil: http://blog.jbrains.ca/permalink/three-steps-to-a-useful-minimal-feature
  • 35. ¿Cómo aseguramos la calidad de la implementación a medida que construimos incrementalmente?
  • 37. Diseño Guiado por Pruebas Como usamos las pruebas como guía para obtener sistemas orientados a objetos? The big idea is “messaging” […] The key in making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be. —Alan Key
  • 38. Una red de objetos Que colaboran entre si…
  • 39. Diseño Guiado por Pruebas El sistema es construido creando y ensamblando objetos de tal manera que puedan enviarse mensajes entre sí. El comportamiento del sistema es resultado de ésta composición. Esto permite cambiar el comportamiento agregando y removiendo instancias o ensamblando diversas combinaciones.
  • 40. Si escribimos pruebas durante todo el proceso de desarrollo podemos crear un red de seguridad que nos dará confianza para realizar cambios.
  • 41.
  • 42. Escribir código a fin de hacerlo funcionar.
  • 43. Refactorizar el código a fin de que sea únicamente una implementación de la característica probada.
  • 44.
  • 46.
  • 47. Acceptance Test Driven Development Están dirigidas por las historias de usuario y el diseño conceptual, es todo muy sistemático. Se puede saber con precisión cuando se han terminado de implementar correctamente.
  • 48. Acceptance Test Driven Development
  • 49. Acceptance Test Driven Development Empezamos construyendo una prueba de aceptación que ejercite la funcionalidad que necesitamos implementar. Mientras no pase la prueba de aceptación se asume que el sistema todavía no implementa esa característica.
  • 50. Acceptance Test Driven Development El ciclo externo es una medida demostrable de progreso y el conjunto de pruebas nos protege contra fallas de regresión cuando cambiemos el sistema.
  • 52. Outside-In Development from the Inputs to the Outputs
  • 54. Se inicia con un evento externo que ejercite el comportamiento que queremos implementar, éste se propaga a través del código objeto por objeto, hasta alcanzar un efecto visible. En los límites de nuestro sistema, necesitamos escribir uno o más objetos para manejar esos eventos. A medida que vamos avanzando con la implementación descubriremos que esos objetos necesitan servicios de soporte de otros objetos del sistema para cumplir sus responsabilidades.
  • 55.
  • 56.
  • 57. A las capas intermedias, pasando por el modelo del dominio central
  • 58.
  • 59. Objetos se relacionan a través de roles
  • 60. Relaciones entre objetos En este esquema basado en la comunicación debemos diseñar la interface de un colaborador basándonos en su uso pretendido antes que en su implementación. Esto lleva a un proceso de descubrimiento donde las interfaces de los objetos colaboradores son traídas a la existencia basadas en los requerimientos inmediatos dirigidos por necesidad.
  • 61. Representaciones de Relaciones En lenguajes modernos como Java se representan las relaciones como interfaces. Esto nos permite modelar las interacciones entre objetos sin necesidad de contar con una implementación concreta.
  • 62. Si no existen implementaciones concretas, como validamos en nuestras pruebas las interacciones entre los objetos?
  • 63.
  • 64. Mock Objects Las pruebas usando mock objects definen un conjunto de restricciones que especifican que mensajes los objetos pueden enviar y la forma en que los mensajes deben ser enviados.
  • 65.
  • 67. En que orden fueron llamados.
  • 68.
  • 69. Protocolos de Comunicación Una interface define si dos componentes pueden relacionarse entre sí Un protocolo describe si dos objetos pueden trabajar juntos.
  • 70. Protocolos de Comunicación Los mock objects nos permiten visualizar éstos protocolos. Son una herramienta tanto para descubrir los roles que desempeñan los objetos así como para describir sus interacciones cuando revisamos el código.
  • 71.
  • 72. Importancia de los diagnósticos Siempre debemos verificar que el test falle “correctamente” revisando los mensajes de falla. Si la prueba falla de una manera inesperada podemos concluir que hemos malentendido algo o el código no está correctamente terminado.
  • 73. Cuando tengamos la falla “correcta” verificaremos que el diagnostico será útil si el código falla posteriormente.
  • 74. Algunas Heurísticas que nos ayudarán a empezar a aplicar este enfoque
  • 75.
  • 76. Implementación Cuando iniciamos una nueva área de codificación podemos suspender temporalmente nuestro sentido de diseño y escribir código sin imponerse mucha estructura. Luego cuando encontremos que nuestro código se vuelve bastante complejo de entender debemos empezar a mejorarlo.
  • 77. Refactoring El objetivo es mejorar el código de tal manera que represente mejor las características que implementa haciéndolo más mantenible y para facilitar la adición de nueva funcionalidad.
  • 78. SRP Cada objeto debe tener una sola responsabilidad claramente definida. Nuestra heurística espoder describir lo que hace elobjeto sin usar conjunciones (y / o). Cuando agregamos comportamiento a un sistema este principio nos ayuda a decidir si debemos extender un objeto existente o si debemos crear un nuevo servicio a ser llamado.
  • 79. Descubriendo Roles Una vez detectada una violación a SRP se debe descubrir algún colaborador que lleve a cabo el rol necesitado moviendo la implementación si el código ya existe.
  • 80.
  • 82.
  • 83. Internals vs. Peers Si exponemos lo interno de un objeto a través de su API, sus clientes pueden terminar haciendo parte de su trabajo. Podemos tener comportamiento repartido en demasiados objetos (que estarían acoplados) incrementando el costo de mantenimiento debido a los cambios ahora estarán repartidos en el código.
  • 84.
  • 86.
  • 87.
  • 88.
  • 90. Arquitectura Emergente Como identificar diseño oculto en código existente Composed Method & SLAP http://www.ibm.com/developerworks/java/library/j-eaed4.html Métricas y visualizaciones ayudan a identificar partes importantes de nuestro código permitiendo extraerlos como elementos de diseño de primera clase. Recolección de Patrones Idiomáticos http://www.ibm.com/developerworks/java/library/j-eaed9/index.html
  • 92.
  • 94.