Upload
leandro-daniel
View
1.374
Download
0
Embed Size (px)
DESCRIPTION
Palestra realizada na 4ª Semana Integrada / Faculdade Impacta e na 2ª Semana de Tecnologia da IFSP.
Citation preview
Arquitetura (evolucionária) de Software e o Arquiteto
Leandro Daniel@leandronet
Leandro Daniel
Desenvolvimento de software
Autor de artigosSQL Server
Visual Studio
Editor Técnico
.net Magazine
.NET
Arquiteto de Sistemas
ClubeDelphi
Comunidade
Business Intelligence
@leandronet
Várias certificações...
Podcaster
http://voidpodcast.com
Objetivos
Refletir sobre o desenvolvimento
de software
Entender a importância da
arquitetura
Apresentar uma abordagem prática de
arquitetura
Refletindo sobre o desenvolvimento de software
Com o que o desenvolvimento de software se parece?
Engenharia... É tudo igual?
“-Ficou ótima a ponte! Dá pra mudar ela de lugar?”
É possível morar em um prédio inacabado?
É possível construir um avião em pleno voo?
Complicar a execução de tarefas simples parece
besteira?
Desenvolver software se parece mais com isso:
Escrever poemas. :)
by Fred Brooks–Mythical Man-Month, The: Essays on Software Engineering,
Anniversary Edition, Capítulo 1
@leandronet
Arquitetura existe, sempre! Mesmo que não seja pensada!
Mas... O que é arquitetura afinal?
@leandronet
Arquitetura Implementação Design
@leandronet
Arquitetura é aquela coisa que é difícil de mudar depois.
Por essa razão, deve existir o mínimo possível dessa coisa.
Conjunto das decisões mais importantes
Decisões com alto custo de reversão
Componentes – Papéis – Relacionamentos
Gentilmente copiado do @elemarjr =P
“organização fundamental de um sistema incorporada em
seus componentes, suas relações entre si e entre o ambiente e os princípios
guiando seu design e evolução”
IEEE
@leandronet
Existe diferença?
@leandronet
Enterprise Architect
Solution Architect
Software Architect
Business Architect
Papéis do Arquiteto
SOA Architect
Data Architect
<papel aqui> Architect
Preocupações relevantes durante o processo de definição de uma arquitetura
(segundo o TOGAF)
<Intermission>
Apresentando: Um código C#!
Assembly
Classe
Método
Essa é uma abstração do código (by NDepend)
c
</Intermission>
Qual abordagem você utilizaria para construir esse software?
Entendendo a importância da arquitetura de software
@leandronet
Espectro do Design
Waterfallclássico
BDUF
SomeDUF
DesignEmergente
Agile
XGH
Arquitetura Evolucionária e Design Emergente
@leandronet
#Simples
#Agile
#Flexível
#Foco do cliente
#Iterativa
#Adaptativa
#YAGNI
"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
Manter as coisas como estão, exige trabalho!
Sim, a entropia existe em software...
@leandronet
Quanto mais tempo você adiar suas decisões...
...Mais contextualizadas elas serão!
@leandronet
</Lembrando>
Qual abordagem você utilizaria para construir esse software?
<Lembrando>
Práxis da Arquitetura Evolucionária
Complexidade Essencial
Complexidade Acidental
@leandronet
“Obrigação que uma organização de software incorre quando escolhe um
design ou um tipo de construção que é prático no curto prazo mas que aumenta
a complexidade e é mais custoso no longo prazo.”
Ward Cunningham
@leandronet
Dívida Técnica
Dívida técnica sempre é uma vilã?
@leandronet
Depende!
Fuuuuuuu!!!
OMG!!
@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
Métrica 1 Métrica 2 Padrão Idiomático
Identificando padrões idiomáticos
@leandronet
Para fechar, algumas dicas importantes...
@leandronet
É necessário tomar essa decisão agora?
@leandronet
Posso adiar essa decisão com segurança?
O que posso fazer para tornar essa decisão reversível?
Toda e qualquer atividade dentro do desenvolvimento de software é importante.
@leandronet
Pense sempre em flexibilidade.
Não lute contra as “mudanças”.
Tenha ciência do seu conhecimento (e da sua ignorância, se possível...)
@leandronet
“A simplicidade consiste em subtrair o óbvio e acrescentar o significativo.”(John Maeda)
Quando em dúvida, erre pela simplicidade.
Referências
Pesquise no Google por:
• “Neal Ford” + “Evolutionary Architecture”• “Martin Fowler” + Design + Enterprise
http://reverb.leandrodaniel.com
http://voidpodcast.com