architecture in agile projects

23
Arquitectura de Software en un ciclo de vida ágil Leonardo Rosales

Upload: leonardo-rosales

Post on 19-Jun-2015

215 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Architecture in agile projects

Arquitectura de Software en un ciclo de vida ágil

Leonardo Rosales

Page 2: Architecture in agile projects

Agenda

Arquitectura de softwareProblemasArquitectura emergente

Patterns & PracticesSashimiBDDOnion Architecture

Validación de la arquitecturaAtributos de calidadHerramientas

Recursos

Page 3: Architecture in agile projects

Arquitectura de software

“Es la estructura o estructuras de un sistema, que comprende los componentes de software, las

propiedades externas visibles de estos elementos y las relaciones entre ellos.” [1]

“Es la organización de un sistema, que está formado por componentes, las relaciones entre ellos, las

relaciones con el entorno y los principios que guían su diseño y su evolución.” [IEEE 1471]

Page 4: Architecture in agile projects

Arquitectura de software

Sobre-especificación inicial Se intenta minimizar la incertidumbre inicial Minimiza el rol del equipo de desarrollo a un

autómata sin creatividad Produce límites inflexibles y software rígido Agrega restricciones inapropiadas

Sub-especificación Sin límites ni arquitectura definida, un diseño

está destinado a ser implementado en base a decisiones no optimas

Page 5: Architecture in agile projects

Arquitectura de software

El balance se logra mediante compromiso y encapsulación

Arquitectura emergente

Page 6: Architecture in agile projects

Arquitectura de software

“Las mejores arquitecturas, requisitos y diseños emergen de equipos auto-organizados.”

Los 12 principios del manifiesto ágil

Page 7: Architecture in agile projects

Arquitectura de software

Arquitectura emergente

Responsabilidad compartida Arquitecto define diseño de alto nivel de la solución El equipo entiende el diseño, las consecuencias de

la alternativa seleccionada y evalúa constantemente

Se busca consenso

Se debe definir una API desacoplada que permita que las implementaciones puedan ser refactorizadas a medida que el proyecto evoluciona

Page 8: Architecture in agile projects

Patterns & Practices

SashimiSe construye lo mínimo necesario para conectar todas las piezas y comenzar a construir la funcionalidad. End to end Foco en las API’s y no en sus implementaciones

Behaviour driven developmentBBD = TDD + Test de aceptación en lenguaje natural Foco en lo que debe ser creado y no en cuestiones

tecnicas

Page 9: Architecture in agile projects

Patterns & Practices

BDD is a second-generation, outside-in, pull-based, multiple-stakeholder, multiple-scale, high-

automation, agile methodology. It describes a cycle of interactions with well-defined outputs, resulting in

the delivery of working, tested software that matters.

Page 10: Architecture in agile projects
Page 11: Architecture in agile projects
Page 12: Architecture in agile projects
Page 13: Architecture in agile projects
Page 14: Architecture in agile projects

Patterns & Practices

Diseñar par a el cambio

Arquitectura en capas viola el principio de la inversión de dependencias.

Page 15: Architecture in agile projects

Patterns & Practices

Diseñar par a el cambio

Arquitectura cebolla: dominio al centro, las capas con interfaces para permitir inyección de dependencias, capas que mas cambian afuera.

Page 16: Architecture in agile projects

Validación de la arquitecturaAtributos de calidad

Deben ser considerados desde el inicio Son especificados como requerimientos en el

backlog Con criterios de aceptación Implementados incrementalmente Ejemplos de estos requerimientos:

flexibilidad (complejidad, dependencias, acoplamientos, separación en capas)

performance (tiempo de respuesta, uso de recursos) escalabilidad (carga del sistema)

Page 17: Architecture in agile projects

Validación de la arquitectura

Atributos de calidad

Page 18: Architecture in agile projects

Validación de la arquitectura

Herramientas comunes de testing

Unit test: xUnit (jUnit, nUnit, cppUnit, MS Test)

BDD: RSpec, xUnit.Net, JBehave, Cucumber

Análisis funcional: Fitnesse, Selenium, Watir

Performance and stress testing

Page 19: Architecture in agile projects

Validación de la arquitectura

Herramientas con foco en los atributos de calidad (líneas de código por método, code coverage, análisis estático, complejidad ciclomática, acoplamiento, dependencias)

Net: FXCop, StyleCop, NDepend y herramientas integradas en VS

Java: Findbugs, JDepend, Checkstyle, Lattix y herramientas integradas en Intellij IDEA.

Page 20: Architecture in agile projects

Validación de la arquitectura

Page 21: Architecture in agile projects

Validación de la arquitectura

Page 22: Architecture in agile projects

Muchas gracias!!!

Page 23: Architecture in agile projects

The Architecture Journal. MSDN Architecture Center. Issue 23.http://msdn.microsoft.com/en-us/architecture/ff476933

Onion Architecturehttp://jeffreypalermo.com/blog/the-onion-architecture-part-1/

[1] Bass, Clements, and Kazman. Software Architecture in Practice 2nd ed, Addison-Wesley 2003.

[2] Fowler, Martin, et al. “Principles Behind the Agile Manifesto.” Manifesto for Agile Software Development Web site, 2001.

Recursos