SlideShare uma empresa Scribd logo
Arquitetura de Software
Uma visão crítica
Pedro Castilho
09/06/2021
/in/pcstl
@coproduto coproduto
Quem sou eu?
- Desenvolvedor há 12 anos
- Atualmente “Desenvolvedor Gerente”
- Compiladores
- Aplicativos
- Embarcados
- Um pouco de tudo
- Cozinheiro nas horas vagas
O que faço atualmente
- CTO - linkedin.com/company/comadre
- Arquiteto
- Líder técnico
- Pau pra toda obra
Sobre o que vamos falar hoje
- Por que uma visão crítica?
- O que é arquitetura de software?
- Por que aprender arquitetura de software?
- Para quem é a arquitetura de software?
- Arquitetando sem perder a agilidade
- Como desenvolver pensamento arquitetural?
Sobre o que NÃO vamos falar hoje
- Linguagens de programação
- Ferramentas
- UML
- Como montar um sistema que faz X
1: Por que uma visão crítica?
Por que uma visão crítica?
- Quem é responsável pela arquitetura?
- Quem é afetado pela arquitetura?
- Para que serve a arquitetura?
- O que, afinal, significa arquitetar um sistema?
Por que uma visão crítica?
- Quem é responsável pela arquitetura?
- Quem é afetado pela arquitetura?
- Para que serve a arquitetura?
- O que, afinal, significa arquitetar um sistema?
Quem é responsável pela arquitetura?
Arquiteto(a) Devs
Quem é responsável pela arquitetura?
Arquiteto(a) Devs
Quem é responsável pela arquitetura?
Arquiteto(a) Devs
Público-alvo
Por que uma visão crítica?
- Quem é responsável pela arquitetura?
- Quem é afetado pela arquitetura?
- Para que serve a arquitetura?
- O que, afinal, significa arquitetar um sistema?
Quem é afetado pela arquitetura?
Arquiteto(a) Devs
Quem é afetado pela arquitetura?
Arquiteto(a) Devs
Público-alvo
Por que uma visão crítica?
- Quem é responsável pela arquitetura?
- Quem é afetado pela arquitetura?
- Para que serve a arquitetura?
- O que, afinal, significa arquitetar um sistema?
Para que serve a arquitetura?
Arquiteto(a) Devs
No modelo tradicional,
a arquitetura é uma
forma de gerir o
trabalho dos devs.
Para que serve a arquitetura?
Queremos propor que
a arquitetura seja
pensada de forma
colaborativa.
Para que serve a arquitetura?
Para que serve a arquitetura?
- Quem é responsável pela arquitetura?
- Quem é afetado pela arquitetura?
- Para que serve a arquitetura?
- O que, afinal, significa arquitetar um sistema?
2: O que é arquitetura de software?
O que é arquitetura de software?
- Por que fazemos software?
- Para quem fazemos software?
- Onde vive o software?
- O que, afinal, é arquitetura?
O que é arquitetura de software?
- Por que fazemos software?
- Para quem fazemos software?
- Onde vive o software?
- O que, afinal, é arquitetura?
Fazemos software
para resolver
problemas.
Por que fazemos software?
Problemas sempre
surgem de um
contexto.
Por que fazemos software?
O que é arquitetura de software?
- Por que fazemos software?
- Para quem fazemos software?
- Onde vive o software?
- O que, afinal, é arquitetura?
Um produto de software
é consumido tanto por
seus usuários quanto por
seus produtores.
Para quem fazemos software?
O que é arquitetura de software?
- Por que fazemos software?
- Para quem fazemos software?
- Onde vive o software?
- O que, afinal, é arquitetura?
O que é arquitetura de software?
- Por que fazemos software?
- Para quem fazemos software?
- Onde vive o software?
- O que, afinal, é arquitetura?
O software é produzido e
consumido em um
contexto que estende o
contexto do problema.
Onde vive o software?
O problema é dos usuários. A solução estende o contexto.
O que é arquitetura de software?
- Por que fazemos software?
- Para quem fazemos software?
- Onde vive o software?
- O que, afinal, é arquitetura?
Arquitetura é o conjunto
de decisões técnicas que
influenciam como o
software afeta seu
contexto.
O que, afinal, é arquitetura?
3: Por que aprender arquitetura de software?
Por que aprender arquitetura de software?
- Características do software e promoção de qualidade
- Decisões conscientes e inconscientes
- Coordenação, comunicação e vocabulário
- O valor da arquitetura na carreira
Por que aprender arquitetura de software?
- Características do software e promoção de qualidades
- Decisões conscientes e inconscientes
- Coordenação, comunicação e vocabulário
- O valor da arquitetura na carreira
“Quero fazer um
aplicativo onde usuários
mandem mensagens
para outros usuários”
Implementação: 1 em
cada 5 mensagens
chega.
Além disso, cada
alteração leva 2
meses para ir ao ar.
Você não quer um
aplicativo de mensagens,
você quer um aplicativo
de mensagens confiável
e manutenível.
Qualidades (“requisitos não-funcionais”)
- Eficiência
- Escalabilidade
- Confiabilidade
- Baixo uso de memória
- Responsividade
- Manutenibilidade
- etc.
Por que aprender arquitetura de software?
- Características do software e promoção de qualidades
- Decisões conscientes e inconscientes
- Coordenação, comunicação e vocabulário
- O valor da arquitetura na carreira
Decisões conscientes e inconscientes
Arquiteto(a) Devs
Decisões
O problema é dos usuários. A solução estende o contexto.
Decisões conscientes e inconscientes
Arquiteto(a) Devs
Público-alvo
Tornar a arquitetura
colaborativa e ágil é uma
forma de entender,
visualizar e controlar o
impacto das decisões
Decisões conscientes e inconscientes
Por que aprender arquitetura de software?
- Características do software e promoção de qualidades
- Decisões conscientes e inconscientes
- Coordenação, comunicação e vocabulário
- O valor da arquitetura na carreira
Por que aprender arquitetura de software?
- Características do software e promoção de qualidades
- Decisões conscientes e inconscientes
- Coordenação, comunicação e vocabulário
- O valor da arquitetura na carreira
4: Para quem é a arquitetura de software?
Para quem é a arquitetura de software?
- Níveis de abstração e visões de sistema
- O modelo C4
- Contextos
- Containers
- Componentes
- Código
- Níveis de abstração, modularidade e coesão
Para quem é a arquitetura de software?
- Níveis de abstração e visões de sistema
- O modelo C4
- Contextos
- Containers
- Componentes
- Código
- Níveis de abstração, modularidade e coesão
Níveis de abstração: O Mapa e o Território
Níveis de abstração: O Mapa e o Território
Níveis de abstração: O mapa e o território
Para quem é a arquitetura de software?
- Níveis de abstração e visões de sistema
- O modelo C4
- Contextos
- Containers
- Componentes
- Código
Contextos: Situando o sistema
Preocupações no nível de contextos
- Quem são os stakeholders do sistema?
- Com quais outros sistemas o sistema interage?
- Quais os interesses de cada stakeholder?
- Quais são as necessidades de cada sistema?
- O que pode levar o contexto a mudar?
Containers: Descrevendo unidades de trabalho
Preocupações no nível dos containers
- Quem são os produtos que precisamos construir?
- Quais necessidades cada produto irá cumprir?
- Quem irá interagir com cada sistema?
- Quem irá construir cada sistema?
- Como o processo de produção dos sistemas irá interagir com a estrutura da
empresa?
- O que pode levar os containers a mudarem?
Componentes: Planejando implementações
Preocupações no nível dos componentes
- Qual a responsabilidade de cada componente? (1 por componente)
- Cada componente define uma unidade coesa?
- Cada componente define uma unidade desacoplada?
- As fronteiras entre os componentes são bem-definidas?
- O que pode levar os componentes a mudarem?
Código: Sujando as mãos
Preocupações no nível de código
- Qual a responsabilidade de cada classe/módulo/entidade? (1 por entidade)
- O código segue boas práticas?
- As fronteiras entre os componentes são bem-definidas?
- Aqui já estamos saindo da Arquitetura e entrando na Engenharia de
Software!
Coisas que mudam
juntas devem ser
arquitetadas juntas.
5: Arquitetando sem perder a agilidade
Arquitetando sem perder a agilidade
- Design é redesign
- Decisões são experimentos
- Fazer é aprender
- Padrões são fundamentos
- Quanto design é design demais?
Arquitetando sem perder a agilidade
- Design é redesign
- Decisões são experimentos
- Fazer é aprender
- Padrões são fundamentos
- Quanto design é design demais?
Alguém
provavelmente já
resolveu o seu
problema antes.
Design é redesign
Arquitetando sem perder a agilidade
- Design é redesign
- Decisões são experimentos
- Fazer é aprender
- Padrões são fundamentos
- Quanto design é design demais?
Você vai errar. Pense
em decisões de
arquitetura como
hipóteses.
Decisões são experimentos
Arquitetando sem perder a agilidade
- Design é redesign
- Decisões são experimentos
- Fazer é aprender
- Padrões são fundamentos
- Quanto design é design demais?
O seu contexto é único.
Apenas fazendo você vai
saber o que funciona
nele.
Fazer é aprender
Arquitetando sem perder a agilidade
- Design é redesign
- Decisões são experimentos
- Fazer é aprender
- Padrões são fundamentos
- Quanto design é design demais?
Padrões são fundamentos
Padrões são fundamentos
Padrões são bases.
Encaixe eles na sua
arquitetura, não encaixe
sua arquitetura nos
padrões.
Padrões são fundamentos
Arquitetando sem perder a agilidade
- Design é redesign
- Decisões são experimentos
- Fazer é aprender
- Padrões são fundamentos
- Quanto design é design demais?
Quanto design é design demais?
6: Como desenvolver pensamento
arquitetural?
Como desenvolver pensamento arquitetural?
- Empatia e investigação
- Divergência e convergência
- Desenvolva sua biblioteca de padrões
- Modelos mentais
Como desenvolver pensamento arquitetural?
- Empatia e investigação
- Divergência e convergência
- Desenvolva sua biblioteca de padrões
Como desenvolver pensamento arquitetural?
- Empatia e investigação
- Divergência e convergência
- Desenvolva sua biblioteca de padrões
Como desenvolver pensamento arquitetural?
- Empatia e investigação
- Divergência e convergência
- Desenvolva sua biblioteca de padrões
Em resumo
Em resumo
- Arquitetura existe em um contexto
- Arquitetura é feita para pessoas
- Arquitetura é sobre comunicação e decisões
- Pessoas diferentes precisam ver níveis diferentes do sistema
- Padrões são bases
- Arquitetura ágil é um processo de iteração
Em resumo
Dúvidas?
Muito obrigado!
/in/pcstl
@coproduto @coproduto

Mais conteúdo relacionado

Mais procurados

Prototipos de Baixa e Alta Fidelidade
Prototipos de Baixa e Alta FidelidadePrototipos de Baixa e Alta Fidelidade
Prototipos de Baixa e Alta Fidelidade
Erico Fileno
 
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
Waldemar Roberti
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
CursoSENAC
 
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
Renato Leal
 
Metodologias de Design de Interação
Metodologias de Design de InteraçãoMetodologias de Design de Interação
Metodologias de Design de Interação
UTFPR
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software Pressman
Simoneinfo
 
Cap1 introd-engenharia de software
Cap1 introd-engenharia de softwareCap1 introd-engenharia de software
Cap1 introd-engenharia de software
Adilson Nascimento
 
Engenharia de Software - Unimep/Pronatec - Aula 1
Engenharia de Software - Unimep/Pronatec - Aula 1Engenharia de Software - Unimep/Pronatec - Aula 1
Engenharia de Software - Unimep/Pronatec - Aula 1
André Phillip Bertoletti
 
Introdução ao Design de Interação
Introdução ao Design de InteraçãoIntrodução ao Design de Interação
Introdução ao Design de Interação
UTFPR
 
Protótipos em Papel
Protótipos em PapelProtótipos em Papel
Protótipos em Papel
elliando dias
 
Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Design de Interação - Capítulo 8 - Design, Prototipação e Construção - Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Pedro de Vasconcellos
 
O Diferencial e as Tendências do Design de Interação
O Diferencial e as Tendências do Design de InteraçãoO Diferencial e as Tendências do Design de Interação
O Diferencial e as Tendências do Design de Interação
UTFPR
 
Workshop - Design de Interfaces para Dispositivos Móveis
Workshop - Design de Interfaces para Dispositivos MóveisWorkshop - Design de Interfaces para Dispositivos Móveis
Workshop - Design de Interfaces para Dispositivos Móveis
Daniel Lugondi
 
Metodologias no design e na interação
Metodologias no design e na interaçãoMetodologias no design e na interação
Metodologias no design e na interação
Luiz Agner
 
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
 
Encontro Locaweb
Encontro  LocawebEncontro  Locaweb
Encontro Locaweb
Fabio Akita
 
Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento
Paulo Ricardo Dalmagro Vinck
 
IHC - Slide 2 - Usabilidade e Princípios de Design
IHC - Slide 2 - Usabilidade e Princípios de DesignIHC - Slide 2 - Usabilidade e Princípios de Design
IHC - Slide 2 - Usabilidade e Princípios de Design
Márcio Darlen Lopes Cavalcante
 
Analise e desenvolvimento
Analise e desenvolvimentoAnalise e desenvolvimento
Analise e desenvolvimento
Gabriel Moura
 
Arquitetura de Software em Equipes Ágeis
Arquitetura de Software em Equipes ÁgeisArquitetura de Software em Equipes Ágeis
Arquitetura de Software em Equipes Ágeis
Joao Paulo Oliveira dos Santos
 

Mais procurados (20)

Prototipos de Baixa e Alta Fidelidade
Prototipos de Baixa e Alta FidelidadePrototipos de Baixa e Alta Fidelidade
Prototipos de Baixa e Alta Fidelidade
 
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
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
Curso de Introdução a Engenharia de Software - CJR/UnB - Aula 1
 
Metodologias de Design de Interação
Metodologias de Design de InteraçãoMetodologias de Design de Interação
Metodologias de Design de Interação
 
Engenharia de Software Pressman
Engenharia de Software PressmanEngenharia de Software Pressman
Engenharia de Software Pressman
 
Cap1 introd-engenharia de software
Cap1 introd-engenharia de softwareCap1 introd-engenharia de software
Cap1 introd-engenharia de software
 
Engenharia de Software - Unimep/Pronatec - Aula 1
Engenharia de Software - Unimep/Pronatec - Aula 1Engenharia de Software - Unimep/Pronatec - Aula 1
Engenharia de Software - Unimep/Pronatec - Aula 1
 
Introdução ao Design de Interação
Introdução ao Design de InteraçãoIntrodução ao Design de Interação
Introdução ao Design de Interação
 
Protótipos em Papel
Protótipos em PapelProtótipos em Papel
Protótipos em Papel
 
Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Design de Interação - Capítulo 8 - Design, Prototipação e Construção - Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
Design de Interação - Capítulo 8 - Design, Prototipação e Construção -
 
O Diferencial e as Tendências do Design de Interação
O Diferencial e as Tendências do Design de InteraçãoO Diferencial e as Tendências do Design de Interação
O Diferencial e as Tendências do Design de Interação
 
Workshop - Design de Interfaces para Dispositivos Móveis
Workshop - Design de Interfaces para Dispositivos MóveisWorkshop - Design de Interfaces para Dispositivos Móveis
Workshop - Design de Interfaces para Dispositivos Móveis
 
Metodologias no design e na interação
Metodologias no design e na interaçãoMetodologias no design e na interação
Metodologias no design e na interação
 
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...
 
Encontro Locaweb
Encontro  LocawebEncontro  Locaweb
Encontro Locaweb
 
Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento
 
IHC - Slide 2 - Usabilidade e Princípios de Design
IHC - Slide 2 - Usabilidade e Princípios de DesignIHC - Slide 2 - Usabilidade e Princípios de Design
IHC - Slide 2 - Usabilidade e Princípios de Design
 
Analise e desenvolvimento
Analise e desenvolvimentoAnalise e desenvolvimento
Analise e desenvolvimento
 
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 Arquitetura de Software - Uma Visão Crítica

Codecon - Fundamentos da Arquitetura de Software: Estruturando Sistemas Sem P...
Codecon - Fundamentos da Arquitetura de Software: Estruturando Sistemas Sem P...Codecon - Fundamentos da Arquitetura de Software: Estruturando Sistemas Sem P...
Codecon - Fundamentos da Arquitetura de Software: Estruturando Sistemas Sem P...
Pedro Castilho
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a Modelagem
Rodrigo Branas
 
Seu código fonte é sustentável?
Seu código fonte é sustentável?Seu código fonte é sustentável?
Seu código fonte é sustentável?
Isaac de Souza
 
P2_Aula1-convertido.pptx
P2_Aula1-convertido.pptxP2_Aula1-convertido.pptx
P2_Aula1-convertido.pptx
MarcondesTiburcio
 
Aula1.pdf
Aula1.pdfAula1.pdf
Engenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - IntroEngenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - Intro
Rudson Kiyoshi Souza Carvalho
 
Aula1 dia 22 02 2022.pdf
Aula1  dia 22 02 2022.pdfAula1  dia 22 02 2022.pdf
Aula1 dia 22 02 2022.pdf
MarcondesTiburcio
 
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
Dalton Martins
 
TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre Arquitetura
Leandro Daniel
 
Introdução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareIntrodução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de Software
Daniel Cukier
 
Agile User Experience
Agile User ExperienceAgile User Experience
Agile User Experience
Lógica Digital
 
Fundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptxFundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptx
Roberto Nunes
 
Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9
Camilla Gomes
 
Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLID
Hélio Medeiros
 
A importancia de IHC no desenvolvimento de software
A importancia de IHC no desenvolvimento de softwareA importancia de IHC no desenvolvimento de software
A importancia de IHC no desenvolvimento de software
Flavia Negrao
 
Es aula01
Es   aula01Es   aula01
Es aula01
Itaú
 
Software fácil de usar não é difícil de programar
Software fácil de usar não é difícil de programarSoftware fácil de usar não é difícil de programar
Software fácil de usar não é difícil de programar
Harlley Oliveira
 
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoFIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
Leandro Daniel
 
Aula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de UsuárioAula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de Usuário
André Constantino da Silva
 
Design Centrado no usuário
Design Centrado no usuárioDesign Centrado no usuário
Design Centrado no usuário
Tatiana Tavares
 

Semelhante a Arquitetura de Software - Uma Visão Crítica (20)

Codecon - Fundamentos da Arquitetura de Software: Estruturando Sistemas Sem P...
Codecon - Fundamentos da Arquitetura de Software: Estruturando Sistemas Sem P...Codecon - Fundamentos da Arquitetura de Software: Estruturando Sistemas Sem P...
Codecon - Fundamentos da Arquitetura de Software: Estruturando Sistemas Sem P...
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a Modelagem
 
Seu código fonte é sustentável?
Seu código fonte é sustentável?Seu código fonte é sustentável?
Seu código fonte é sustentável?
 
P2_Aula1-convertido.pptx
P2_Aula1-convertido.pptxP2_Aula1-convertido.pptx
P2_Aula1-convertido.pptx
 
Aula1.pdf
Aula1.pdfAula1.pdf
Aula1.pdf
 
Engenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - IntroEngenharia de Software Aula 1 - Intro
Engenharia de Software Aula 1 - Intro
 
Aula1 dia 22 02 2022.pdf
Aula1  dia 22 02 2022.pdfAula1  dia 22 02 2022.pdf
Aula1 dia 22 02 2022.pdf
 
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
 
TDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre ArquiteturaTDC 2012 - Fishbowl conversation sobre Arquitetura
TDC 2012 - Fishbowl conversation sobre Arquitetura
 
Introdução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareIntrodução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de Software
 
Agile User Experience
Agile User ExperienceAgile User Experience
Agile User Experience
 
Fundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptxFundamentos Engenharia de Software.pptx
Fundamentos Engenharia de Software.pptx
 
Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9
 
Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLID
 
A importancia de IHC no desenvolvimento de software
A importancia de IHC no desenvolvimento de softwareA importancia de IHC no desenvolvimento de software
A importancia de IHC no desenvolvimento de software
 
Es aula01
Es   aula01Es   aula01
Es aula01
 
Software fácil de usar não é difícil de programar
Software fácil de usar não é difícil de programarSoftware fácil de usar não é difícil de programar
Software fácil de usar não é difícil de programar
 
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquitetoFIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
 
Aula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de UsuárioAula 6 - Design e Processo de Design de Interfaces de Usuário
Aula 6 - Design e Processo de Design de Interfaces de Usuário
 
Design Centrado no usuário
Design Centrado no usuárioDesign Centrado no usuário
Design Centrado no usuário
 

Último

Orientações para utilizar Drone no espaço Brasil
Orientações para utilizar Drone no espaço BrasilOrientações para utilizar Drone no espaço Brasil
Orientações para utilizar Drone no espaço Brasil
EliakimArajo2
 
PRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product ownerPRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product owner
anpproferick
 
Por que escolhi o Flutter - Campus Party Piauí.pdf
Por que escolhi o Flutter - Campus Party Piauí.pdfPor que escolhi o Flutter - Campus Party Piauí.pdf
Por que escolhi o Flutter - Campus Party Piauí.pdf
Ian Oliveira
 
Teoria de redes de computadores redes .doc
Teoria de redes de computadores redes .docTeoria de redes de computadores redes .doc
Teoria de redes de computadores redes .doc
anpproferick
 
Como fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptxComo fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptx
tnrlucas
 
Gestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefíciosGestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefícios
Rafael Santos
 
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Annelise Gripp
 

Último (7)

Orientações para utilizar Drone no espaço Brasil
Orientações para utilizar Drone no espaço BrasilOrientações para utilizar Drone no espaço Brasil
Orientações para utilizar Drone no espaço Brasil
 
PRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product ownerPRATICANDO O SCRUM Scrum team, product owner
PRATICANDO O SCRUM Scrum team, product owner
 
Por que escolhi o Flutter - Campus Party Piauí.pdf
Por que escolhi o Flutter - Campus Party Piauí.pdfPor que escolhi o Flutter - Campus Party Piauí.pdf
Por que escolhi o Flutter - Campus Party Piauí.pdf
 
Teoria de redes de computadores redes .doc
Teoria de redes de computadores redes .docTeoria de redes de computadores redes .doc
Teoria de redes de computadores redes .doc
 
Como fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptxComo fui de 0 a lead na gringa em 3 anos.pptx
Como fui de 0 a lead na gringa em 3 anos.pptx
 
Gestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefíciosGestão de dados: sua importância e benefícios
Gestão de dados: sua importância e benefícios
 
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
Ferramentas e Técnicas para aplicar no seu dia a dia numa Transformação Digital!
 

Arquitetura de Software - Uma Visão Crítica

  • 1. Arquitetura de Software Uma visão crítica Pedro Castilho 09/06/2021 /in/pcstl @coproduto coproduto
  • 2. Quem sou eu? - Desenvolvedor há 12 anos - Atualmente “Desenvolvedor Gerente” - Compiladores - Aplicativos - Embarcados - Um pouco de tudo - Cozinheiro nas horas vagas
  • 3. O que faço atualmente - CTO - linkedin.com/company/comadre - Arquiteto - Líder técnico - Pau pra toda obra
  • 4. Sobre o que vamos falar hoje - Por que uma visão crítica? - O que é arquitetura de software? - Por que aprender arquitetura de software? - Para quem é a arquitetura de software? - Arquitetando sem perder a agilidade - Como desenvolver pensamento arquitetural?
  • 5. Sobre o que NÃO vamos falar hoje - Linguagens de programação - Ferramentas - UML - Como montar um sistema que faz X
  • 6. 1: Por que uma visão crítica?
  • 7. Por que uma visão crítica? - Quem é responsável pela arquitetura? - Quem é afetado pela arquitetura? - Para que serve a arquitetura? - O que, afinal, significa arquitetar um sistema?
  • 8. Por que uma visão crítica? - Quem é responsável pela arquitetura? - Quem é afetado pela arquitetura? - Para que serve a arquitetura? - O que, afinal, significa arquitetar um sistema?
  • 9. Quem é responsável pela arquitetura? Arquiteto(a) Devs
  • 10. Quem é responsável pela arquitetura? Arquiteto(a) Devs
  • 11. Quem é responsável pela arquitetura? Arquiteto(a) Devs Público-alvo
  • 12. Por que uma visão crítica? - Quem é responsável pela arquitetura? - Quem é afetado pela arquitetura? - Para que serve a arquitetura? - O que, afinal, significa arquitetar um sistema?
  • 13. Quem é afetado pela arquitetura? Arquiteto(a) Devs
  • 14. Quem é afetado pela arquitetura? Arquiteto(a) Devs Público-alvo
  • 15. Por que uma visão crítica? - Quem é responsável pela arquitetura? - Quem é afetado pela arquitetura? - Para que serve a arquitetura? - O que, afinal, significa arquitetar um sistema?
  • 16. Para que serve a arquitetura? Arquiteto(a) Devs
  • 17. No modelo tradicional, a arquitetura é uma forma de gerir o trabalho dos devs. Para que serve a arquitetura?
  • 18. Queremos propor que a arquitetura seja pensada de forma colaborativa. Para que serve a arquitetura?
  • 19. Para que serve a arquitetura? - Quem é responsável pela arquitetura? - Quem é afetado pela arquitetura? - Para que serve a arquitetura? - O que, afinal, significa arquitetar um sistema?
  • 20. 2: O que é arquitetura de software?
  • 21. O que é arquitetura de software? - Por que fazemos software? - Para quem fazemos software? - Onde vive o software? - O que, afinal, é arquitetura?
  • 22. O que é arquitetura de software? - Por que fazemos software? - Para quem fazemos software? - Onde vive o software? - O que, afinal, é arquitetura?
  • 24. Problemas sempre surgem de um contexto. Por que fazemos software?
  • 25. O que é arquitetura de software? - Por que fazemos software? - Para quem fazemos software? - Onde vive o software? - O que, afinal, é arquitetura?
  • 26. Um produto de software é consumido tanto por seus usuários quanto por seus produtores. Para quem fazemos software?
  • 27. O que é arquitetura de software? - Por que fazemos software? - Para quem fazemos software? - Onde vive o software? - O que, afinal, é arquitetura?
  • 28. O que é arquitetura de software? - Por que fazemos software? - Para quem fazemos software? - Onde vive o software? - O que, afinal, é arquitetura?
  • 29. O software é produzido e consumido em um contexto que estende o contexto do problema. Onde vive o software?
  • 30. O problema é dos usuários. A solução estende o contexto.
  • 31. O que é arquitetura de software? - Por que fazemos software? - Para quem fazemos software? - Onde vive o software? - O que, afinal, é arquitetura?
  • 32. Arquitetura é o conjunto de decisões técnicas que influenciam como o software afeta seu contexto. O que, afinal, é arquitetura?
  • 33. 3: Por que aprender arquitetura de software?
  • 34. Por que aprender arquitetura de software? - Características do software e promoção de qualidade - Decisões conscientes e inconscientes - Coordenação, comunicação e vocabulário - O valor da arquitetura na carreira
  • 35. Por que aprender arquitetura de software? - Características do software e promoção de qualidades - Decisões conscientes e inconscientes - Coordenação, comunicação e vocabulário - O valor da arquitetura na carreira
  • 36. “Quero fazer um aplicativo onde usuários mandem mensagens para outros usuários”
  • 37. Implementação: 1 em cada 5 mensagens chega.
  • 38. Além disso, cada alteração leva 2 meses para ir ao ar.
  • 39. Você não quer um aplicativo de mensagens, você quer um aplicativo de mensagens confiável e manutenível.
  • 40. Qualidades (“requisitos não-funcionais”) - Eficiência - Escalabilidade - Confiabilidade - Baixo uso de memória - Responsividade - Manutenibilidade - etc.
  • 41. Por que aprender arquitetura de software? - Características do software e promoção de qualidades - Decisões conscientes e inconscientes - Coordenação, comunicação e vocabulário - O valor da arquitetura na carreira
  • 42. Decisões conscientes e inconscientes Arquiteto(a) Devs Decisões
  • 43. O problema é dos usuários. A solução estende o contexto.
  • 44. Decisões conscientes e inconscientes Arquiteto(a) Devs Público-alvo
  • 45. Tornar a arquitetura colaborativa e ágil é uma forma de entender, visualizar e controlar o impacto das decisões Decisões conscientes e inconscientes
  • 46. Por que aprender arquitetura de software? - Características do software e promoção de qualidades - Decisões conscientes e inconscientes - Coordenação, comunicação e vocabulário - O valor da arquitetura na carreira
  • 47. Por que aprender arquitetura de software? - Características do software e promoção de qualidades - Decisões conscientes e inconscientes - Coordenação, comunicação e vocabulário - O valor da arquitetura na carreira
  • 48. 4: Para quem é a arquitetura de software?
  • 49. Para quem é a arquitetura de software? - Níveis de abstração e visões de sistema - O modelo C4 - Contextos - Containers - Componentes - Código - Níveis de abstração, modularidade e coesão
  • 50. Para quem é a arquitetura de software? - Níveis de abstração e visões de sistema - O modelo C4 - Contextos - Containers - Componentes - Código - Níveis de abstração, modularidade e coesão
  • 51. Níveis de abstração: O Mapa e o Território
  • 52. Níveis de abstração: O Mapa e o Território
  • 53. Níveis de abstração: O mapa e o território
  • 54. Para quem é a arquitetura de software? - Níveis de abstração e visões de sistema - O modelo C4 - Contextos - Containers - Componentes - Código
  • 56. Preocupações no nível de contextos - Quem são os stakeholders do sistema? - Com quais outros sistemas o sistema interage? - Quais os interesses de cada stakeholder? - Quais são as necessidades de cada sistema? - O que pode levar o contexto a mudar?
  • 58. Preocupações no nível dos containers - Quem são os produtos que precisamos construir? - Quais necessidades cada produto irá cumprir? - Quem irá interagir com cada sistema? - Quem irá construir cada sistema? - Como o processo de produção dos sistemas irá interagir com a estrutura da empresa? - O que pode levar os containers a mudarem?
  • 60. Preocupações no nível dos componentes - Qual a responsabilidade de cada componente? (1 por componente) - Cada componente define uma unidade coesa? - Cada componente define uma unidade desacoplada? - As fronteiras entre os componentes são bem-definidas? - O que pode levar os componentes a mudarem?
  • 62. Preocupações no nível de código - Qual a responsabilidade de cada classe/módulo/entidade? (1 por entidade) - O código segue boas práticas? - As fronteiras entre os componentes são bem-definidas? - Aqui já estamos saindo da Arquitetura e entrando na Engenharia de Software!
  • 63. Coisas que mudam juntas devem ser arquitetadas juntas.
  • 64. 5: Arquitetando sem perder a agilidade
  • 65. Arquitetando sem perder a agilidade - Design é redesign - Decisões são experimentos - Fazer é aprender - Padrões são fundamentos - Quanto design é design demais?
  • 66. Arquitetando sem perder a agilidade - Design é redesign - Decisões são experimentos - Fazer é aprender - Padrões são fundamentos - Quanto design é design demais?
  • 67. Alguém provavelmente já resolveu o seu problema antes. Design é redesign
  • 68. Arquitetando sem perder a agilidade - Design é redesign - Decisões são experimentos - Fazer é aprender - Padrões são fundamentos - Quanto design é design demais?
  • 69. Você vai errar. Pense em decisões de arquitetura como hipóteses. Decisões são experimentos
  • 70. Arquitetando sem perder a agilidade - Design é redesign - Decisões são experimentos - Fazer é aprender - Padrões são fundamentos - Quanto design é design demais?
  • 71. O seu contexto é único. Apenas fazendo você vai saber o que funciona nele. Fazer é aprender
  • 72. Arquitetando sem perder a agilidade - Design é redesign - Decisões são experimentos - Fazer é aprender - Padrões são fundamentos - Quanto design é design demais?
  • 75. Padrões são bases. Encaixe eles na sua arquitetura, não encaixe sua arquitetura nos padrões. Padrões são fundamentos
  • 76. Arquitetando sem perder a agilidade - Design é redesign - Decisões são experimentos - Fazer é aprender - Padrões são fundamentos - Quanto design é design demais?
  • 77. Quanto design é design demais?
  • 78. 6: Como desenvolver pensamento arquitetural?
  • 79. Como desenvolver pensamento arquitetural? - Empatia e investigação - Divergência e convergência - Desenvolva sua biblioteca de padrões - Modelos mentais
  • 80. Como desenvolver pensamento arquitetural? - Empatia e investigação - Divergência e convergência - Desenvolva sua biblioteca de padrões
  • 81. Como desenvolver pensamento arquitetural? - Empatia e investigação - Divergência e convergência - Desenvolva sua biblioteca de padrões
  • 82. Como desenvolver pensamento arquitetural? - Empatia e investigação - Divergência e convergência - Desenvolva sua biblioteca de padrões
  • 84. Em resumo - Arquitetura existe em um contexto - Arquitetura é feita para pessoas - Arquitetura é sobre comunicação e decisões - Pessoas diferentes precisam ver níveis diferentes do sistema - Padrões são bases - Arquitetura ágil é um processo de iteração