agilidade de ponta-a-ponta com arquiteturas evolucionrias

Download Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionrias

Post on 08-Jul-2015

1.209 views

Category:

Technology

3 download

Embed Size (px)

TRANSCRIPT

Agilidade de Ponta-a-Ponta com Arquiteturas Evolucionrias

Agilidade de Ponta-a-Pontacom Arquiteturas EvolucionriasBreno Barrosbrenobarros@gmail.com@brenoobarroswww.brenobarros.netUm pouco sobre mimBreno BarrosLder do Escritrio de Arquitetura e Mtodos geis da StefaniniMembro Tcnico da Revista MundoJNatural de Belm/PAMorando a 6 anos em Belo Horizonte/MGHoras VagasVideo Game (XBox 360)FotografiaEmpreendimentos prprios Hoje, vamos falar sobre

Pausa. O que est acontecendo no mundo?

www. thoughtworks.com/radarJaneiro 2011

www. thoughtworks.com/radarJulho 2011

Agilidade de Ponta-a-PontaValoresVisibilidadeEstratgiaReleaseIteraoDirioContnuaAgilidade DeliveryAdaptabilidadeTransparnciaSimplicidadeUnitariedadeBurndownVelocidadeburnupTestesVisoMetaBacklogEstimativaPlanoReleasestandupTesteAceitaoRevisoPlanoIteraoRetrospectivaCharterFundingTDDBuildColaboraoRefactoringIntegraoArquitetura8Arquitetura Evolucionria -Origem Lean Thinking1. Elimine o Despedcio2. Amplifique o aprendizado3. Decida o mais tarde possvel4. Entregue o mais rpido possvel5. D autonomia equipe6. Construa com integridade7. Visualize o todoArquitetura Planejada versus Evolucionria

Arquitetura Planejada versus Evolucionria

100 metrosPara no dizer impossvel

isso ser muito difcil.E com software? Temos que ter essa preocupao toda no incio?O desconhecido?O desconhecidoSe manifesta de duas formas:Aquilo que sabemos que desconhecemosAquilo que NO sabemos que desconhecemosSe no sabemos tantas coisas, porquedefinir tudo antes?Olha o tamanho do problema que podemos arrumar

ImplementaoDesignArquitetura

Time que est ganhando no se mexe.Aumento da EntropiaA essncia da Arquitetura Evolucionria consiste na

Tomada de Decises no momento certo.Quanto mais tempo voc adiar suas decises

mais contextualizadas elas sero.17Checklist Arquitetural necessrio tomar essa deciso agora?Posso adiar essa deciso com segurana?Como posso tornar essa deciso reversvel?VVVArquitetura dentro de um processo gilSprint 1Sprint 2Sprint NIteration Model Design(horas)Design Model Storm(minutos)Test-Driven Development(dias)Product BacklogArchitecture Notebook InicialInception

ArchitectureNotebookcriaoincrementoretroalimentao(Architecture Notebook)ObjetivosNecessidades e DependnciasRequisitos SignificantesDecises, Restries e JustificativasCamadasMecanismos ArquiteturaisVises

Arquitetura dentro de um processo gil

Iteration Model DesignDesignModelStormIteration Model DesignDesign ModelStormIteration Model DesignDesign ModelStormGiovanni Gomes Sprint Phases AuthorBreno Barros Architect & Design Increments Author E como fica o Arquiteto?

Arquiteto gil X Arquiteto TradicionalArquiteto gil X Arquiteto TradicionalArquitetos TradicionaisArquitetos geisSo seres diferenciadosSo humildes e buscam solues conjuntasEsto sempre muito ocupados para colocar as mos no desenvolvimentoSo membros ativos do time de desenvolvimentoGostam de prever o futuro para no terem problemasSabem que no podem prever o futuro, mas podem estar preparadosInvestem muito tempo para criarem modelos arquiteturais com todas as informaesSem desperdcios. Focam em relatar o que til e importante 24

Alguns ConceitosPadres Idiomticos

Apenas como curiosidade ;-)Como descobr-los?Como descobr-los?Algumas MtricasComplexidade CiclomticaAcoplamento Aferente% de Duplicao de CdigoAlgumas PrticasDomain Specific Languages (DSL)Test-Driven Development (TDD)Monitorar a Dvida Tcnica- Tentam eliminar a sintaxe dissonante por meio da criacao de encapsulamentos contextuais em torno de elementos relacionados. 29Complexidade Ciclomticapublic boolean realizarSaque(Conta conta, Double valor) throws SaldoInsuficienteException{// +1if(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%AcoplamentoAcoplamento AferenteRepresenta a contagem de quantas classes diferentes usam a classe corrente (aquela que est sendo analisada). Acoplamento Eferente Constitui a contagem de quantas classes diferentes so usadas pela classes corrente.

DSL Domain Specific LanguageEscrever cdigos que se paream menos com o cdigo de origem. Mas sim, com o problema a ser resolvido.

Facilidade de comunio e manuteno.

Podemos fazer isso com:DSLs externas: Com o uso de ANTLR, por exemploDSLs internas: Com Fluent InterfacesDSL Interna com Fluent Interfacesnew EmailMessage() .from(brenobarros@gmail.com") .to(contato@agilevale.com.br") .withSubject(Palestra") .withBody(Descrio da Palestra") .send();EmailMessage mail = new EmailMessage();mail.setSender(brenobarros@gmail.com");mail.setDestination(contato@agilevale.com.br");mail.setSubject(Palestra");mail.setContent(Descrio da Palestra");mail.send();Test-Driven Development (TDD)

picture By klaus Laube

Quando comear?AGORA!!!Mas como?

O Raio X para o Time de DesenvolvimentoSonar (www.sonarsource.org)

Acoplamento Aferente

Dependncias Cclicas

Dvida Tcnica

A evoluo do seu Design

Uma pequena demo

PremissasSer descentralizadoPossuir um time auto-organizadoSer transparenteNo lute contra mudanasFoco em simplicidadeFoco em flexibilidadePromover a inspeo e adaptaoPromover a presena da lngua de negcio44Outras Referncias

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

picture by -bast-Q & A46Muito obrigado![]s