FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto

Preview:

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

Obrigado! :)

http://reverb.leandrodaniel.com

@leandronet

contato@leandrodaniel.com