agilidade de ponta-a-ponta com arquiteturas evolucionárias

47
Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias Breno Barros [email protected] @brenoobarros www.brenobarros.net

Upload: breno-barros

Post on 08-Jul-2015

1.210 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Agilidade de Ponta-a-Pontacom Arquiteturas Evolucionárias

Breno [email protected]

@brenoobarros

www.brenobarros.net

Page 2: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Um pouco sobre mim…

• Breno Barros– Líder do Escritório de Arquitetura e Métodos Ágeis

da Stefanini

– Membro Técnico da Revista MundoJ

– Natural de Belém/PA

– Morando a 6 anos em Belo Horizonte/MG

• Horas Vagas– Video Game (XBox 360)

– Fotografia

– Empreendimentos próprios

Page 3: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Hoje, vamos falar sobre…

ArquiteturaEvolucionária

Design Emergente

Códigos

Page 4: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Pausa. O que está acontecendo no mundo?

Page 5: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

www. thoughtworks.com/radar

Janeiro 2011

Page 6: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

www. thoughtworks.com/radar

Julho 2011

Page 7: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Agilidade de Ponta-a-Ponta

Page 8: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Estratégia

Release

Iteração

Diário

Contínua

Agilidade é

Delivery

Adaptabilidade

Transparência

Simplicidade

Unitariedade

Burndown

Velocidade

burnup

Testes

Charter

TDD Build

Colaboração

Refactoring

IntegraçãoArquitetura

Page 9: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Arquitetura Evolucionária -Origem Lean Thinking

1. Elimine o Despedício2. Amplifique o aprendizado

3. Decida o mais tarde possível

4. Entregue o mais rápido possível

5. Dê autonomia à equipe

6. Construa com integridade7. Visualize o todo

Page 10: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Arquitetura Planejada versus Evolucionária

Page 11: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Arquitetura Planejada versus Evolucionária

100 metros

Para não dizer impossível…

… isso será muito difícil.

Page 12: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

E com software? Temos que teressa preocupação toda no início?

Page 13: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

O desconhecido…

Page 14: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

O desconhecido…

• Se manifesta de duas formas:

– Aquilo que sabemos que desconhecemos

– Aquilo que NÃO sabemos que desconhecemos

Se não sabemos tantas coisas, porque

definir tudo antes?

Page 15: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Olha o tamanho do problema quepodemos arrumar…

Implementação

Design

Arquitetura

Page 16: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

“Time que está ganhando

não se mexe”.

Aumento da Entropia

Page 17: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

A essência da Arquitetura Evolucionáriaconsiste na…

… Tomada de Decisões no momento certo.

Quanto mais tempo você adiar suasdecisões…

…mais contextualizadas elas serão.

Page 18: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Checklist Arquitetural

É necessário tomar essa decisão agora?

Posso adiar essa decisão com segurança?

Como posso tornar essa decisão reversível?

V

V

V

Page 19: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Arquitetura dentro de um processoÁgil

Sprint 1

Sprint 2

Sprint N

Iteration Model Design(horas)

Design Model Storm(minutos)

Test-Driven Development(dias)

Product Backlog

Architecture Notebook Inicial

Inception

ArchitectureNotebook

criação

incremento

retroalimentação

Page 20: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

(Architecture Notebook)

• Objetivos

• Necessidades e Dependências

• Requisitos Significantes

• Decisões, Restrições e Justificativas

• Camadas

• Mecanismos Arquiteturais

• Visões

Page 21: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Arquitetura dentro de um processoÁgil

Iteration Model Design

DesignModelStorm

Iteration Model Design

Design ModelStorm

Iteration Model Design

Design ModelStorm

Giovanni Gomes – Sprint Phases AuthorBreno Barros – Architect & Design Increments Author

Page 22: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

E como fica o Arquiteto?

Page 23: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Arquiteto Ágil X Arquiteto Tradicional

Page 24: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Arquiteto Ágil X Arquiteto Tradicional

Arquitetos Tradicionais Arquitetos Ágeis

São seres “diferenciados” São humildes e buscam soluçõesconjuntas

Estão sempre “muito ocupados” paracolocar as mãos no desenvolvimento

São membros ativos do time de desenvolvimento

Gostam de prever o futuro para não teremproblemas

Sabem que não podem prever o futuro, mas podem estar preparados

Investem muito tempo para criaremmodelos arquiteturais com “todas” as informações

Sem desperdícios. Focam em relatar o queé útil e importante

Page 25: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Alguns Conceitos

Page 26: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Padrões Idiomáticos

Page 27: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Apenas como curiosidade ;-)

Page 28: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Como descobrí-los?

Padrões Idiomáticos

Técnicas

Métrica2

Métrica1

Page 29: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Como descobrí-los?

• Algumas Métricas

– Complexidade Ciclomática

– Acoplamento Aferente

– % de Duplicação de Código

• Algumas Práticas

– Domain Specific Languages (DSL)

– Test-Driven Development (TDD)

– Monitorar a Dívida Técnica

Page 30: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Complexidade Ciclomática

public boolean realizarSaque(Conta conta, Double valor) throws SaldoInsuficienteException{ // +1

if(conta.getSaldo() >= valor){ // +1conta.setSaldo(conta.getSaldo() - valor);

} else{ // +1throw new SaldoInsuficienteException(); // +1

}return true; // +1

}

Complexidade = 11 -> Menor propabilidade de falhas (cerca de 28%)Complexidade = 38 -> Propabilidade de falhas em cerca de 50%Complexidade >= 74 -> Propabilidade de falhas em cerca de 90%

Page 31: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Acoplamento

• Acoplamento Aferente

– Representa a contagem de quantas classes diferentes usam a classe corrente (aquela que está sendo analisada).

• Acoplamento Eferente

– Constitui a contagem de quantas classes diferentes são usadas pela classes corrente.

Page 32: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

DSL – Domain Specific Language

• Escrever códigos que se pareçam menos com o código de origem. Mas sim, com o problemaa ser resolvido.

• Facilidade de comunição e manutenção.

• Podemos fazer isso com:– DSL’s externas: Com o uso de ANTLR, por exemplo

– DSL’s internas: Com Fluent Interfaces

Page 33: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

DSL Interna com Fluent Interfaces

new EmailMessage().from(”[email protected]").to(”[email protected]").withSubject(”Palestra").withBody(”…Descrição da Palestra").send();

EmailMessage mail = new EmailMessage();mail.setSender(”[email protected]");mail.setDestination(”[email protected]");mail.setSubject(”Palestra");mail.setContent(”…Descrição da Palestra");mail.send();

Page 34: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Test-Driven Development (TDD)

picture By klaus Laube

Page 35: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Quando começar?

Page 36: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

AGORA!!!

Mas como?

Page 37: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

O Raio X para o Time de Desenvolvimento

Page 38: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Sonar (www.sonarsource.org)

Page 39: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Acoplamento Aferente

Page 40: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Dependências Cíclicas

Page 41: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Dívida Técnica

Page 42: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

A evolução do seu Design

Page 43: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Uma pequena demo…

Page 44: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Premissas

• Ser descentralizado

• Possuir um time auto-organizado

• Ser transparente

• Não lute contra mudanças

• Foco em simplicidade

• Foco em flexibilidade

• Promover a inspeção e adaptação

• Promover a presença da língua de negócio

Page 45: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Outras Referências

Neal Ford: http://www.ibm.com/developerworks/java/library/j-eaed1/index.html

Page 47: Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionárias

Muito obrigado!

[]’s