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

Post on 08-Jul-2015

1.210 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Agilidade de Ponta-a-Pontacom Arquiteturas Evolucionárias

Breno Barrosbrenobarros@gmail.com

@brenoobarros

www.brenobarros.net

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

Hoje, vamos falar sobre…

ArquiteturaEvolucionária

Design Emergente

Códigos

Pausa. O que está acontecendo no mundo?

www. thoughtworks.com/radar

Janeiro 2011

www. thoughtworks.com/radar

Julho 2011

Agilidade de Ponta-a-Ponta

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

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

Arquitetura Planejada versus Evolucionária

Arquitetura Planejada versus Evolucionária

100 metros

Para não dizer impossível…

… isso será muito difícil.

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

O desconhecido…

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?

Olha o tamanho do problema quepodemos arrumar…

Implementação

Design

Arquitetura

“Time que está ganhando

não se mexe”.

Aumento da Entropia

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.

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

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

(Architecture Notebook)

• Objetivos

• Necessidades e Dependências

• Requisitos Significantes

• Decisões, Restrições e Justificativas

• Camadas

• Mecanismos Arquiteturais

• Visões

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

E como fica o Arquiteto?

Arquiteto Ágil X Arquiteto Tradicional

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

Alguns Conceitos

Padrões Idiomáticos

Apenas como curiosidade ;-)

Como descobrí-los?

Padrões Idiomáticos

Técnicas

Métrica2

Métrica1

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

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%

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.

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

DSL Interna com Fluent Interfaces

new EmailMessage().from(”brenobarros@gmail.com").to(”contato@agilevale.com.br").withSubject(”Palestra").withBody(”…Descrição da Palestra").send();

EmailMessage mail = new EmailMessage();mail.setSender(”brenobarros@gmail.com");mail.setDestination(”contato@agilevale.com.br");mail.setSubject(”Palestra");mail.setContent(”…Descrição da Palestra");mail.send();

Test-Driven Development (TDD)

picture By klaus Laube

Quando começar?

AGORA!!!

Mas como?

O Raio X para o Time de Desenvolvimento

Sonar (www.sonarsource.org)

Acoplamento Aferente

Dependências Cíclicas

Dívida Técnica

A evolução do seu Design

Uma pequena demo…

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

Outras Referências

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

Muito obrigado!

[]’s

top related