SlideShare uma empresa Scribd logo
1 de 79
Baixar para ler offline
Reflexões sobre
Arquitetura de Software
DevinSantos 2015
10 sacadas sobre
Arquitetura de Software
DevinSantos 2015
Tiago Sciência
@_caco
tiagosciencia.com
Projetos
cupong.me comunidadeconteúdo
Arquitetura de Software
SP.
Como pensar sobre
arquitetura de software
no mundo real?
Arquitetura de software de um sistema
consiste na definição dos componentes
de software, suas propriedades
externas, e seus relacionamentos com
outros softwares.
A documentação da arquitetura do
software facilita: a comunicação entre
os stakeholders, registra as decisões
iniciais acerca do projeto de alto-nível,
e permite o reuso do projeto dos
componentes e padrões entre projetos.
Arquitetura de software de um sistema
consiste na definição dos componentes
de software, suas propriedades
externas, e seus relacionamentos com
outros softwares.
A documentação da arquitetura do
software facilita: a comunicação entre
os stakeholders, registra as decisões
iniciais acerca do projeto de alto-nível,
e permite o reuso do projeto dos
componentes e padrões entre projetos.
componentes
propriedades
relacionamentos
comunicação
decisões
reuso
padrões
“Principais elementos
do sistema - as peças
difíceis de mudar. Uma
fundação no qual o resto
precisa ser construído”
- Martin Fowler
Implementação
Design
Arquitetura
Mudanças na arquitetura são caras e são
difíceis de mudar
Modelo Cascata
Como pensar sobre
arquitetura de software
no mundo real?
Pense de forma
pragmática e orientada
ao negócio!
#01
Qual devemos escolher?
Orientado a
interfaces
90% de cobertura de
teste
Domínio rico
Orientado a Serviço
Muito acoplado
Sem testes
Sem divisão em
camadas
Sem API
Depende.
Contexto é tudo!
#02
Metáforas para escolher
arquitetura
Tempo de configuração?
Treinamentos?
Ferramentas necessárias?
Justifica o tempo de configuração e o custo?
Mais efetivo?
Mais eficaz?
Mais barato?
Mais flexível?
Mais escalável?
Leve?
Rápido de usar?
Barato?
Mais perigoso?
Mais rápido?
Exige treinamento?
Qual é o tamanho do projeto?
É um projeto temporário?
Quanto mais tempo você
adiar as suas decisões, mais
contextualizadas elas serão!
A complexidade deve
ser justificada!
#03
simplicidade
x
complexidade
Complexidade importa!
Coding to an
interface
Automated
Testing
Domain
Driven Design
Custom DAL
Layered
architecture
SOA
somos pagos por soluções não por código
“Consider all solutions to your task that could
possible work. Implement the simplest solution.
Refactor from there if and when needed… you
will always wind up with a system that is just
right for what it does so far… That it just where
you want to be. Everything just right, nothing
added that isn’t needed.”
- Ron Jeffries
Simplicidade: a arte de
maximizar a quantidade de
trabalho que não precisou
ser realizado
Princípios por trás do Manifesto Ágil
#04
Teste aquilo que é
mais importante!
#05
Seja eficaz!
Mínimo produto viável
(MPV)
• Escalabilidade
• Custo de manutenção
• Bonito
• Código limpo
• Todas as funcionalidades
• Performance
• Segurança
• (Mas precisa funcionar)
O que você
não precisa
se preocupar
"Para uma prática ser considerada boa,
precisa colaborar com a eficácia. Seja
através da maior assertividade nas
entregas (entregar aquilo que resolve o
problema do cliente). Seja através da redução
do custo total da propriedade ou reduzindo o
custo de desenvolvimento."
- Elemar Jr.
#06
Escolha tecnologias
apropriadas ao
negócio!
Camadas da aplicação
Persistência
Domínio
Serviço
Apresentação Web Forms, MVC, WPF, WinForms, Silverlight
Web API, WCF, ServiceStack
C#, VB.NET, F#, Javascript
EF, NHibernate, Dapper, ADO.NET
Alguns padrões
Transaction
Script
Table
Module
Domain
Model
Active
Record
Níveis de arquitetura
N1 N3
• MVP
• Time pequeno
• Time com menos experiência
• Domínio simples
• Prazos curtos
• Curta duração
• Sem preocupação com segurança
• Produto
• Time grande
• Time com mais experiência
• Domínio complexo
• Prazos flexíveis
• Longa duração
• Segurança é importante
#07
Faça DevOps desde o
começo!
#08
Dividir pra
conquistar!
philcalcado.com/2015/09/08/
how_we_ended_up_with_microservices.html
Micro serviços
#09
Combine coisas!
criatividade
=
combinatividade
Exercício:
Faça a engenharia reversa
das coisas
#10
Tenha um bom
repertório e boas
referências!
Referências
Mais Referências
resumindo…
O que é uma boa
arquitetura?
É aquela que atende!
que resolve!
que …
#01 Pense de forma pragmática e orientada ao negócio!
#02 Contexto é tudo!
#03 A complexidade deve ser justificada!
#04 Teste aquilo que é mais importante!
#05 Seja eficaz!
#06 Escolha tecnologias apropriadas ao negócio!
#07 Faça DevOps desde o começo!
#08 Dividir pra conquistar!
#09 Combine coisas. Use a *criatividade*!
#10 Tenha um bom repertório e boas referências!
Obrigado!
Tiago Sciencia
@_caco
tiagosciencia.com

Mais conteúdo relacionado

Mais procurados

Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasVagner Santana
 
Arquitetura de Software Na Pratica
Arquitetura de Software Na PraticaArquitetura de Software Na Pratica
Arquitetura de Software Na PraticaAlessandro Kieras
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de softwareAdriano Tavares
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareUFPA
 
02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentais02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentaisWaldemar Roberti
 
Introdução a engenharia de software aula 02
Introdução a engenharia de software   aula 02Introdução a engenharia de software   aula 02
Introdução a engenharia de software aula 02Franklin Matos Correia
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareCamilo de Melo
 
Engenharia De Software Baseada Em Componentes
Engenharia De Software Baseada Em ComponentesEngenharia De Software Baseada Em Componentes
Engenharia De Software Baseada Em Componentesigordsm
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De SoftwareFelipe Goulart
 
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...Natanael Simões
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de SoftwareNécio de Lima Veras
 
Desenvolvimento Iterativo-Incremental
Desenvolvimento Iterativo-IncrementalDesenvolvimento Iterativo-Incremental
Desenvolvimento Iterativo-IncrementalRuan Carvalho
 
Aula11 TEES UFS Ferramentas CASE
Aula11  TEES  UFS   Ferramentas  CASEAula11  TEES  UFS   Ferramentas  CASE
Aula11 TEES UFS Ferramentas CASEguest8ae21d
 

Mais procurados (20)

Padrões Arquiteturais de Sistemas
Padrões Arquiteturais de SistemasPadrões Arquiteturais de Sistemas
Padrões Arquiteturais de Sistemas
 
Arquitetura de Software Na Pratica
Arquitetura de Software Na PraticaArquitetura de Software Na Pratica
Arquitetura de Software Na Pratica
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de software
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentais02 Introdução à engenharia de software - conceitos fundamentais
02 Introdução à engenharia de software - conceitos fundamentais
 
Introdução a engenharia de software aula 02
Introdução a engenharia de software   aula 02Introdução a engenharia de software   aula 02
Introdução a engenharia de software aula 02
 
O Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de SoftwareO Processo de Desenvolvimento de Software
O Processo de Desenvolvimento de Software
 
Engenharia De Software Baseada Em Componentes
Engenharia De Software Baseada Em ComponentesEngenharia De Software Baseada Em Componentes
Engenharia De Software Baseada Em Componentes
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 
ArquiteturaSoftware
ArquiteturaSoftwareArquiteturaSoftware
ArquiteturaSoftware
 
Ferramentas case
Ferramentas caseFerramentas case
Ferramentas case
 
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
Processo de Desenvolvimento de Software - Design de Software, Interface, Arqu...
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
 
Desenvolvimento Iterativo-Incremental
Desenvolvimento Iterativo-IncrementalDesenvolvimento Iterativo-Incremental
Desenvolvimento Iterativo-Incremental
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Aula 2 - Processos de Software
Aula 2 - Processos de SoftwareAula 2 - Processos de Software
Aula 2 - Processos de Software
 
Aula11 TEES UFS Ferramentas CASE
Aula11  TEES  UFS   Ferramentas  CASEAula11  TEES  UFS   Ferramentas  CASE
Aula11 TEES UFS Ferramentas CASE
 
Rastreabilidade de Requisitos
Rastreabilidade de RequisitosRastreabilidade de Requisitos
Rastreabilidade de Requisitos
 
Capitulo 02 sommerville
Capitulo 02 sommervilleCapitulo 02 sommerville
Capitulo 02 sommerville
 
Arquitetura de Software em Equipes Ágeis
Arquitetura de Software em Equipes ÁgeisArquitetura de Software em Equipes Ágeis
Arquitetura de Software em Equipes Ágeis
 

Semelhante a Reflexões sobre arquitetura de software

Aula Teste Fatec Engenharia de Software III
Aula Teste  Fatec Engenharia de Software IIIAula Teste  Fatec Engenharia de Software III
Aula Teste Fatec Engenharia de Software IIIDalton Martins
 
Desenvolvimento Ágil e Pontos de Função gerenciando o projeto de maneira ági...
Desenvolvimento Ágil e Pontos de Função  gerenciando o projeto de maneira ági...Desenvolvimento Ágil e Pontos de Função  gerenciando o projeto de maneira ági...
Desenvolvimento Ágil e Pontos de Função gerenciando o projeto de maneira ági...Dextra
 
Desenvolvimento ágil e pontos de função: gerenciando o projeto de maneira ági...
Desenvolvimento ágil e pontos de função: gerenciando o projeto de maneira ági...Desenvolvimento ágil e pontos de função: gerenciando o projeto de maneira ági...
Desenvolvimento ágil e pontos de função: gerenciando o projeto de maneira ági...Vanessa Campos
 
Aula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWAREAula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWAREErnesto Bedrikow
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software PressmanSimoneinfo
 
1 Qss
1 Qss1 Qss
1 Qsslcbj
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Fundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptxFundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptxRoberto Nunes
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013André Borgonovo
 
Engenharia de Software introdução
Engenharia de Software    introduçãoEngenharia de Software    introdução
Engenharia de Software introduçãomiroslayer
 
TechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test ManagerTechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test ManagerAlan Carlos
 
Arquitetura de Software 101
Arquitetura de Software 101Arquitetura de Software 101
Arquitetura de Software 101Leandro Silva
 

Semelhante a Reflexões sobre arquitetura de software (20)

Aula Teste Fatec Engenharia de Software III
Aula Teste  Fatec Engenharia de Software IIIAula Teste  Fatec Engenharia de Software III
Aula Teste Fatec Engenharia de Software III
 
eXtreme Programming (XP)
eXtreme Programming (XP)eXtreme Programming (XP)
eXtreme Programming (XP)
 
Desenvolvimento Ágil e Pontos de Função gerenciando o projeto de maneira ági...
Desenvolvimento Ágil e Pontos de Função  gerenciando o projeto de maneira ági...Desenvolvimento Ágil e Pontos de Função  gerenciando o projeto de maneira ági...
Desenvolvimento Ágil e Pontos de Função gerenciando o projeto de maneira ági...
 
Desenvolvimento ágil e pontos de função: gerenciando o projeto de maneira ági...
Desenvolvimento ágil e pontos de função: gerenciando o projeto de maneira ági...Desenvolvimento ágil e pontos de função: gerenciando o projeto de maneira ági...
Desenvolvimento ágil e pontos de função: gerenciando o projeto de maneira ági...
 
Engenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - IntroEngenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - Intro
 
Agilidade em projetos de software
Agilidade em projetos de softwareAgilidade em projetos de software
Agilidade em projetos de software
 
Aula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWAREAula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWARE
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software Pressman
 
1 Qss
1 Qss1 Qss
1 Qss
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Fundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptxFundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptx
 
DevOps e App Insights
DevOps e App InsightsDevOps e App Insights
DevOps e App Insights
 
Métodos Ágeis - Aula 01
Métodos Ágeis - Aula 01Métodos Ágeis - Aula 01
Métodos Ágeis - Aula 01
 
Analise de Requisitos Software
Analise de Requisitos SoftwareAnalise de Requisitos Software
Analise de Requisitos Software
 
Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013Arquitetura de Software e o DNAD2013
Arquitetura de Software e o DNAD2013
 
Engenharia de Software introdução
Engenharia de Software    introduçãoEngenharia de Software    introdução
Engenharia de Software introdução
 
TechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test ManagerTechNet - e-Book- Artigos sobre Test Manager
TechNet - e-Book- Artigos sobre Test Manager
 
Engenharia de software
Engenharia de software Engenharia de software
Engenharia de software
 
Arquitetura de Software 101
Arquitetura de Software 101Arquitetura de Software 101
Arquitetura de Software 101
 

Reflexões sobre arquitetura de software