Post on 08-Jul-2015
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
picture by -bast-
Q & A
Muito obrigado!
[]’s