QConSP 2011 - Praticando a arquitetura evolucionária

Preview:

Citation preview

Praticando aArquitetura Evolucionária

Leandro Daniel@leandronet

2011

Leandro Daniel

Desenvolvimento de software Autor de artigos

SQL Server

ConsultoriaEditor Técnico Easy .net Magazine

.net Magazine

.NET

Arquitetura de Software

ClubeDelphi

Comunidade

Business Intelligence

@leandronet

Várias certificações...

http://voidpodcast.com

Agenda

Contextualizar• Diferenças entre papéis e funções• Diferenciando Arquitetura x Design

Entender• Espectro do Design de Software e Entropia • O que é arquitetura evolucionária

Praticar• Débito técnico• Métricas e outras dicas importantes!

Existe diferença?

@leandronet#qconsp

Arquitetura Implementação Design

@leandronet#qconsp

Arquitetura é aquela coisa que é difícil de mudar depois.

Por essa razão, deve existir o mínimo possível dessa coisa.

c<Intermission>

c

Apresentando: Um código C#!

c

Assembly

Classe

Método

Essa é uma abstração do código (by NDepend)

c

c

cc

</Intermission>

Qual abordagem você utilizaria para fazer esse software?

Arquitetura e o desenvolvimento de Software

#qconsp @leandronet

Espectro do Design

Waterfallclássico

BDUF

SomeDUF

DesignEmergente

Agile

XGH

Arquitetura Evolucionária e Design Emergente

#Simples

#Agile

#Flexível

#Foco do cliente

#Iterativa

#Adaptativa

#YAGNI

#qconsp @leandronet

"Não existe nenhum design no início. Você começa

codificando uma pequena quantidade de funcionalidades, e vai acrescentando outras

gradativamente, deixando que o design tome forma!”

Martin Fowler

@leandronet

Design Emergente

#qconsp

Manter as coisas como estão, exige trabalho!

Sim, a entropia existe em software...

#qconsp @leandronet

Quanto mais tempo você adiar suas decisões...

...Mais contextualizadas elas serão!

@leandronet#qconsp

Complexidade Essencial

Complexidade Acidental

#qconsp @leandronet

Práxis da Arquitetura Evolucionária

Dívida técnica sempre é uma vilã?

#qconsp @leandronet

Depende!

Fuuuuuuu!!!

OMG!!

#qconsp @leandronet

Quadrante da dívida técnica

“Nós não temos tempo para

design”

“Nós vamos lidar com as

consequências”

“O que são camadas?”

“Agora nós sabemos que

deveríamos ter feito isso”

Irresponsávele

De propósito

Irresponsávele

Sem querer

Prudentee

De propósito

Prudentee

Sem querer

#qconsp @leandronet

Métrica 1 Métrica 2 Padrão Idiomático

Identificando padrões idiomáticos

Possibilidades no Visual Studio 2010

#qconsp @leandronet

Possibilidades no NDepend (1 de 2)

Possibilidades no NDepend (2 de 2)

Outras abstrações para visualização de métricas: CodeCity

#qconsp @leandronet

CodeCity by CodeCity

#qconsp @leandronet

JDK visto no CodeCity

#qconsp @leandronet

Existem várias métricas e combinações de uso...

#qconsp @leandronet

LOC

Vamos começar do básico! :)

ILCCLOCM NOC

ABC ...

Usando a matriz de dependência do NDepend

Design Emergente pelas métricas (1 de 5)

#qconsp @leandronet

Design Emergente pelas métricas (2 de 5)

#qconsp @leandronet

Design Emergente pelas métricas (3 de 5)

#qconsp @leandronet

Design Emergente pelas métricas (4 de 5)

#qconsp @leandronet

Design Emergente pelas métricas (5 de 5)

#qconsp @leandronet

Para fechar, algumas dicas importantes...

É necessário tomar essa decisão agora?

Posso adiar essa decisão com segurança?

O que posso fazer para tornar essa decisão reversível?

@leandronet

Toda e qualquer atividade dentro do desenvolvimento de software é importante.

Pense sempre em flexibilidade.

Não lute contra as “mudanças”.

@leandronet

Tenha ciência do seu conhecimento (e da sua ignorância, se possível...)

“A simplicidade consiste em subtrair o óbvio e acrescentar o significativo.”(John Maeda)

Quando em dúvida, erre pela simplicidade.

@leandronet

Referências

Pesquise no Google por:• “Neal Ford” + “Evolutionary Architecture”• “Martin Fowler” + Design + Enterprise• Software metrics + NDepend

http://reverb.leandrodaniel.com

http://voidpodcast.com

http://www.ndepend.com

Lembrete:

Keynote sobre Evolutionary Architecture

Obrigado! :)

http://reverb.leandrodaniel.com

@leandronet

contato@leandrodaniel.com