SlideShare uma empresa Scribd logo
1 de 62
Baixar para ler offline
Arquitetura de Software 101
Leandro Silva, JAN/22
O mínimo que você precisa saber
https://medium.com/pricefy-labs
https://www.youtube.com/watch?v=2IxX2f0ZckQ
https://www.youtube.com/watch?v=jOeuK2U8vI8
ProdOps ⎼ Engenharia e Produto com Leandro Silva
https://www.youtube.com/watch?v=DCT0IoRcrUo
ElvenWorks ⎼ Conhecendo a tecnologia por trás de uma
solução muito inteligente de Precificação
Estamos contratando para os
times de engenharia e
produtos.
vamos conversar?
O que é
arquitetura?
“Arquitetura de software é sobre fazer as escolhas estruturais fundamentais,
que são caras de mudar depois de implementadas.”
⎼ Software architecture,
Wikipédia
https://en.wikipedia.org/wiki/Software_architecture
2005 2009
Com os adventos microsserviços e devops, mudanças arquiteturais
já não são tão rígidas e custosas quanto costumavam ser; e ainda
podem ser feitas incrementalmente.
O ecossistema evolui e muda constantemente,
assim também o contexto no qual as decisões
são tomadas.
#1
Lição
Okay. Vejamos mais algumas definições então…
⎼ An Introduction to Software Architecture,
David Garlan & Mary Shaw
“Além dos algoritmos e estruturas
de dados de computação, projetar
e especificar a estrutura geral do
sistema surge como um novo tipo de
problema. As questões estruturais
incluem organização bruta e
estrutura de controle global;
protocolos para comunicação,
sincronização e acesso a dados;
atribuição de funcionalidade aos
elementos de design; distribuição
física; composição de elementos de
design; escalabilidade e
performance; e seleção entre
alternativas de projeto.”
https://userweb.cs.txstate.edu/~rp31/papers/intro_softarch.pdf
⎼ IEEE98 + RUP
“A concepção de mais alto nível
de um sistema em seu ambiente. A
arquitetura de um sistema de
software (em um determinado
momento) é sua organização ou
estrutura de componentes
importantes interagindo por meio
de interfaces; esses componentes
sendo composto de componentes
e interfaces sucessivamente
menores.”
⎼ Extreme Programming mailing list,
Ralph Johnson
“Na maioria dos projetos de software
bem-sucedidos, os desenvolvedores
especialistas que trabalham nesse projeto
têm um entendimento compartilhado do
projeto do sistema. Esse entendimento
compartilhado é chamado de
"arquitetura". Esse entendimento inclui
como o sistema é dividido em
componentes e como os componentes
interagem por meio de interfaces. Esses
componentes geralmente são compostos
por componentes menores, mas a
arquitetura inclui apenas os componentes
e interfaces que são compreendidos por
todos os desenvolvedores.”
https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
Sendo assim, a definição que vamos seguir daqui
em diante é…
“Arquitetura é sobre as coisas
importantes. Seja lá o que for.”
⎼ Ralph Johnson
Ser arquitet@ de
software
O que faz um arquitet@ de software?
Fundamentals of Software Architecture, Mark Richards & Neal Ford
Lida com “coisas
importantes”, ué…
As “coisas importantes” são as coisas que
são importantes para o time.
#2
Lição
Nem todas as coisas são importantes; e mesmo as que
são, não são o tempo todo.
Time? Oi?
“Arquitetura é uma construção social (bem,
software também é, mas arquitetura é
ainda mais), porque não depende apenas
do software, mas de qual parte do
software é considerada importante pelo
consenso do grupo.”
“Se algo faz parte da arquitetura
é inteiramente baseado em se os
desenvolvedores acham que é
importante.”
https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
⎼ Ralph Johnson
TIME
equipe
Thanks. Eu não preciso de arquitet@ no time.
“De muitas maneiras, a atividade mais importante do Architectus
Oryzus é orientar a equipe de desenvolvimento, elevar seu nível
para que possam lidar com questões mais complexas. Melhorar a
capacidade da equipe de desenvolvimento dá a um arquiteto uma
alavancagem muito maior do que ser o único tomador de decisões
e, portanto, correr o risco de ser um gargalo arquitetônico.”
“Mike Two veio com o melhor nome que ouvi até agora: guia, como em montanhismo. Um
guia é um membro da equipe mais experiente e habilidoso que ensina outros membros da
equipe a se defenderem melhor, mas está sempre lá para as coisas realmente complicadas.”
https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
“Esse tipo de arquiteto deve estar muito
atento ao que está acontecendo no
projeto, procurando por questões
importantes e abordando-as antes que se
tornem um problema sério. Quando vejo
um arquiteto assim, a parte mais
perceptível do trabalho é a intensa
colaboração.”
Oryzus
>
Reloadus
Fundamentals of Software Architecture, Mark Richards & Neal Ford
Arquitetura Desenvolvimento
Guiar + Cooperar > Ditar + Controlar.
#3
Lição
Melhor do que ter um único cérebro centralizando toda a
visão do sistema e tomando todas as decisões importantes
sozinho (Reloadus), de modo que o time não saiba nada além
do próximo passo imediato, é ter um guia (Oryzus), que
trabalha colaborativamente com o time para resolver as
questões mais importantes, cada qual a seu tempo.
Vão esperar que você, arquitet@…
1. Tome decisões de arquitetura e princípios de design, junto com
o time, apoiando-os conforme seu nível atual de maturidade;
2. Continuamente analise e revise a arquitetura em função do
estado atual da tecnologia e do problema de negócio que se
propõe a resolver;
3. Se mantenha atualizado com as últimas tendências de
tecnologia e engenharia de software;
4. Garanta a conformidade das decisões tomadas, tanto em nível
de arquitetura quanto de princípios de design;
Fundamentals of Software Architecture, Mark Richards & Neal Ford
5. Diversifique sua exposição e experiência com novas
tecnologias, plataformas, frameworks, para ter insumo na hora
de propor soluções e tomar decisões;
6. Tenha conhecimento do domínio de negócio que está lidando,
de modo que possa elaborar soluções coerentes com tal;
7. Cultive skills interpessoais, porque você vai ter que trabalhar
colaborando tanto com pessoal de negócio quando de
engenharia, facilitando reuniões e liderando soluções;
8. Compreenda e lide bem com questões políticas, sendo capaz
de navegar toda a organização, de cima a baixo.
Fundamentals of Software Architecture, Mark Richards & Neal Ford
Mas mais importante do que qualquer outra coisa…
(IMHO)
“Tudo em arquitetura de
software é um trade-off.”
Neal & Richards costumam dizer que “se
um arquiteto acha que descobriu
alguma coisa que não é um trade-off,
muito provavelmente, ele apenas não
descobriu o trade-off ainda”.
Por isso o “porque” é mais importante do que
o “como” ⎼ você pode olhar para um sistema e ver como foi
feito, mas não que parâmetros embasaram cada decisão que o
levou a ser como é.
The Laws of Software Architecture, Mark Richards & Neal Ford
Trade-offs. Conheça-os.
#4
Lição
“Programadores sabem os benefícios de todas as coisas e os trade-offs
de nenhuma delas. Arquitetos precisam saber ambos.” ⎼ Rich Hickey
Características de
arquitetura
“Uma solução de software é resultado da tradução de requisitos de domínio
para características de arquitetura e princípios de design.”
“Essas necessidades dos stakeholders
(funcionalidade, desempenho,
segurança, manutenibilidade etc.)
são justamente o que está
representado no modelo de
qualidade, que categoriza a
qualidade do produto em
características e subcaracterísticas.”
“A qualidade de um sistema é o grau
em que o sistema satisfaz as
necessidades declaradas e implícitas
de seus vários stakeholders e,
portanto, fornece valor.”
⎼ ISO/IEC 25010
https://iso25000.com/index.php/en/iso-25000-standards/iso-25010
https://iso25000.com/index.php/en/iso-25000-standards/iso-25010
Não dá para ter tudo.
Um arquiteto tem que trabalhar junto aos
stakeholders do projeto para determinar o
que realmente é importante para o negócio.
Preocupações de negócio
Requisitos de negócio
Domínio de negócio
Escalabilidade
Performance
Tolerância a falhas
Segurança
?
Preocupação de negócio Característica de arquitetura
Fusão e aquisição Interoperabilidade, escalabilidade,
adaptabilidade, extensibilidade
Time to market Agilidade, testabilidade,
deployabilidade
Satisfação do usuário Performance, disponibilidade,
tolerância a falhas, testabilidade,
deployabilidade, agilidade,
segurança
Competitividade Agilidade, testabilidade,
deployabilidade, escalabilidade,
disponibilidade, tolerância a falhas
Tempo e budget Simplicidade, viabilidade
Preocupações de negócio
Os requisitos de negócio dizem respeito, por
exemplo, a número de usuários, número de
transações simultâneas, volume de dados,
sazonalidade, etc.
Requisitos de negócio
Exemplos clássicos de sazonalidade,
com spike gigantesco de tráfego: envio
da declaração de IR, venda de
ingressos e Black Friday.
Tome cuidado com as predições
que surgem de tais requisitos.
Todo mundo tem uma ideia que
vai atrair milhões de usuários.
Domínio de negócio
Esteja alerta às características implícitas. Por
mais que o requisito segurança possa não surgir
como um requisito formal, ninguém quer usar um
sistema inseguro, onde há vazamento de dados.
Exemplo de domínio de negócio influenciando
implicitamente as características de uma arquitetura:
um sistema de imagens “médicas” vai precisar de
armazenamento e largura de banda muito maior de
um sistema de agendamento de consultas “médicas”.
Esforço necessário
Custo de implementação
Impacto organizacional
Uma arquitetura nunca muito
provavelmente não vai ter
todas as características que
vimos até agora. Não é viável.
Arquitetura
menos pior.
Trade-offs
Por exemplo: performance e
segurança se impactam
mutuamente.
Pilar da engenharia ágil: design
iterativo. Projete a arquitetura
boa o bastante e incremente.
“Uma das diferenças entre arquitetura de construção e arquitetura de software é que
muitas decisões sobre uma construção são difíceis de mudar. É difícil voltar e mudar seu
porão, embora seja possível.
Não há nenhuma razão teórica para que algo seja difícil de mudar em software. Se você
escolher qualquer aspecto do software, poderá facilitar a alteração, mas não sabemos
como facilitar a alteração de tudo. Tornar algo fácil de mudar torna o sistema geral um
pouco mais complexo, e tornar tudo fácil de mudar torna todo o sistema muito
complexo. Complexidade é o que torna o software difícil de mudar. Isso e duplicação.”
Ouçam o tio Ralph
Johnson, amiguinhos!
“O software não é limitado pela física, como os edifícios. É
limitado pela imaginação, pelo design, pela organização. Em
suma, é limitado pelos atributos das pessoas, não pelos
atributos do mundo. Encontramos o inimigo, e ele somos nós.”
#5
Lição
Trade-offs de ser
arquitet@ de
software
“Assim como um meteorologista e um pintor veem uma nuvem de
maneiras diferentes, assim um arquiteto em relação a outros
profissionais da engenharia de software.”
Hmm, okay. Mas por que isso é importante?
Linguagens, frameworks, bibliotecas, ferramental
de debugging, coisas que você usa no seu dia a dia
para fazer o seu trabalho de desenvolvimento de
software.
O que você conhece superficialmente ou pelo menos
já ouviu falar (ex.: Brainfucker, eu sei o que é, mas
nunca escrevi sequer um hello world).
É uma gigantesca quantidade de coisas que
poderiam solucionar perfeitamente o seu problema
à mão, mas que você sequer faz ideia de que elas
existem.
Fundamentals of Software Architecture, Mark Richards & Neal Ford
Um jovem desenvolvedor precisa
focar em “sujar as mãos” aqui,
para ganhar expertise.
Para um arquiteto, technical breath
é mais importante do que technical
depth. Porque um arquiteto precisa
tomar decisões que combinam “o
que é necessário” com “o que é
possível” (requisitos vs. restrições),
então ter conhecimento tecnológico
largo é mais importante do que ter
conhecimento profundo.
Fundamentals of Software Architecture, Mark Richards & Neal Ford
Não dá para ser expert em tudo.
Você tem que saber onde precisa
manter profundidade (áreas de
especialização) e onde pode
sacrificar profundidade para
ganhar largura.
Fundamentals of Software Architecture, Mark Richards & Neal Ford
Alargar o conhecimento
1
Se manter atualizado em relação às
tendências mais atuais de tecnologia
2
Estar bem consciente do contexto
atual
3
https://www.youtube.com/watch?v=yK9b1C97ct0
Frozen Caveman Anti-Pattern
“Eu tenho uma tonelada de experiência
usando SOA e ESBs em larga escala, por isso
estou propondo essa solução que incorpora
essas tecnologias”
“Eu nunca ouvi falar em ReactJS, então, para
essa solução, vamos ser conservadores e usar
frameworks bem estabelecidos: JSP e Struts.”
“Eu já me queimei muitas vezes no passados
com processamento assíncrono, usando
eventos e mensageria, então, para essa
solução vamos usar somente REST.”
https://www.youtube.com/watch?v=yK9b1C97ct0
Praticando
arquitetura
“Então, como podemos obter grandes
arquitetos de software, se eles só têm a
chance de arquitetar menos de meia
dúzia de vezes em sua carreira?”
⎼ Ted Neward
https://nealford.com/katas/
“Como conseguimos grandes designers
de software? Grandes designers de
software projetam, é claro.”
⎼ Fred Brooks
https://archkatas.herokuapp.com/
https://nealford.com/katas/
Se aprofundando
no assunto
Recomendações
● Software architecture ⎼ Wikipedia
https://en.wikipedia.org/wiki/Software_architecture
● An Introduction to Software Architecture ⎼ David Garlan & Mary Shaw
https://userweb.cs.txstate.edu/~rp31/papers/intro_softarch.pdf
● Who Needs an Architect? ⎼ Martin Fowler
https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
● ISO/IEC 25010
https://iso25000.com/index.php/en/iso-25000-standards/iso-25010
● Software Architecture Monday ⎼ Mark Richards
https://www.youtube.com/playlist?list=PLdsOZAx8I5umhnn5LLTNJbFgwA3xbycar
Recomendações
● The Mythical Man-Month ⎼ Fred Brooks
● Architecting for Scale ⎼ Lee Atchison
● Fundamentals of Software Architecture ⎼ Mark Richards & Neal Ford
● Software Architecture: The Hard Parts ⎼ Neal Ford, Mark Richards, Pramod Sadalage, Zhamak
Dehghani
● Release It ⎼ Michael T. Nygard
● The Art of Scalability ⎼ Martin L. Abbott
● Designing Data-Intensive Applications ⎼ Martin Kleppmann
● Patterns of Enterprise Application Architecture ⎼ Martin Fowler
Recomendações
● Enterprise Integration Patterns ⎼ Gregor Hohpe & Bobby Woolf
● Software Architecture Patterns ⎼ Mark Richards
● Handbook of Software Reliability Engineering ⎼ Michael R. Lyu
http://www.cse.cuhk.edu.hk/~lyu/book/reliability/
● Architectural Katas ⎼ Ted Neward
https://archkatas.herokuapp.com/
● Architectural Katas ⎼ Neal Ford
https://nealford.com/katas/
● The System Design Primer ⎼ Donne Martin
https://github.com/donnemartin/system-design-primer
Obrigado!
medium.com/pricefy-labs
github.com/leandrosilva
leandrosilva.com.br

Mais conteúdo relacionado

Mais procurados

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 SoftwareDaniel Cukier
 
Cinco motivos para você não adotar metodologias ágeis - Rafael Prikladnicki F...
Cinco motivos para você não adotar metodologias ágeis - Rafael Prikladnicki F...Cinco motivos para você não adotar metodologias ágeis - Rafael Prikladnicki F...
Cinco motivos para você não adotar metodologias ágeis - Rafael Prikladnicki F...Flávio Steffens
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de SoftwareClaudia Melo
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareUFPA
 
Engenharia de software aula 6 - Introdução ao Desenvolvimento Ágil
Engenharia de software aula 6 - Introdução ao Desenvolvimento ÁgilEngenharia de software aula 6 - Introdução ao Desenvolvimento Ágil
Engenharia de software aula 6 - Introdução ao Desenvolvimento ÁgilRebecca Betwel
 
1 engenharia de software
1   engenharia de software1   engenharia de software
1 engenharia de softwareFelipe Bugov
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalhoRuan Pozzebon
 
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À Demanda...
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À       Demanda...Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À       Demanda...
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À Demanda...Luiz Lemos
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De SoftwareCursoSENAC
 
Aula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWAREAula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWAREErnesto Bedrikow
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De SoftwareFelipe Goulart
 

Mais procurados (20)

Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento
 
Métodos Ágeis - Aula02
Métodos Ágeis - Aula02Métodos Ágeis - Aula02
Métodos Ágeis - Aula02
 
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
 
Cinco motivos para você não adotar metodologias ágeis - Rafael Prikladnicki F...
Cinco motivos para você não adotar metodologias ágeis - Rafael Prikladnicki F...Cinco motivos para você não adotar metodologias ágeis - Rafael Prikladnicki F...
Cinco motivos para você não adotar metodologias ágeis - Rafael Prikladnicki F...
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
 
Métodos Ágeis
Métodos ÁgeisMétodos Ágeis
Métodos Ágeis
 
Introducao a Arquitetura de Software
Introducao a Arquitetura de SoftwareIntroducao a Arquitetura de Software
Introducao a Arquitetura de Software
 
Engenharia de software aula 6 - Introdução ao Desenvolvimento Ágil
Engenharia de software aula 6 - Introdução ao Desenvolvimento ÁgilEngenharia de software aula 6 - Introdução ao Desenvolvimento Ágil
Engenharia de software aula 6 - Introdução ao Desenvolvimento Ágil
 
1 engenharia de software
1   engenharia de software1   engenharia de software
1 engenharia de software
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalho
 
Arquitetura de Software em Equipes Ágeis
Arquitetura de Software em Equipes ÁgeisArquitetura de Software em Equipes Ágeis
Arquitetura de Software em Equipes Ágeis
 
Caso de Sucesso Keyox e Siemens PLM
Caso de Sucesso Keyox e Siemens PLMCaso de Sucesso Keyox e Siemens PLM
Caso de Sucesso Keyox e Siemens PLM
 
Scrum
ScrumScrum
Scrum
 
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À Demanda...
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À       Demanda...Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À       Demanda...
Scrum: Uma Nova Abordagem No Desenvolvimento De Software Face À Demanda...
 
Quem Precisa De Um Arquiteto
Quem Precisa De Um ArquitetoQuem Precisa De Um Arquiteto
Quem Precisa De Um Arquiteto
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 
Scrum origens
Scrum origensScrum origens
Scrum origens
 
Aula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWAREAula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWARE
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 

Semelhante a Arquitetura de Software 101

Soujavarj 12 habitos de arquitetos altamente eficazes
Soujavarj 12 habitos de arquitetos altamente eficazesSoujavarj 12 habitos de arquitetos altamente eficazes
Soujavarj 12 habitos de arquitetos altamente eficazesRaphael Rodrigues
 
Arquitetura evolutiva - DNAD 2013
Arquitetura evolutiva - DNAD 2013Arquitetura evolutiva - DNAD 2013
Arquitetura evolutiva - DNAD 2013Denis Ferrari
 
O futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java EnterpriseO futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java EnterpriseGlobalcode
 
DevInCachu 2013: Arquitetura evolutiva
DevInCachu 2013: Arquitetura evolutivaDevInCachu 2013: Arquitetura evolutiva
DevInCachu 2013: Arquitetura evolutivaDenis Ferrari
 
Antecipando o sucesso de uma arquitetura de software emergente em times ágeis
Antecipando o sucesso de uma arquitetura de software emergente em times ágeisAntecipando o sucesso de uma arquitetura de software emergente em times ágeis
Antecipando o sucesso de uma arquitetura de software emergente em times ágeisSérgio Giraldo
 
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 arquitetoLeandro Daniel
 
Arquitetura Evolutiva - A retomada do ágil 18 anos depois
Arquitetura Evolutiva - A retomada do ágil 18 anos depoisArquitetura Evolutiva - A retomada do ágil 18 anos depois
Arquitetura Evolutiva - A retomada do ágil 18 anos depoisAndré Paulovich
 
Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Hudson Augusto
 
O Arquiteto da Informacao
O Arquiteto da Informacao O Arquiteto da Informacao
O Arquiteto da Informacao Carlos Franco
 
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
 
Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)
Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)
Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)André Paulovich
 
Reflexões sobre arquitetura de software
Reflexões sobre arquitetura de softwareReflexões sobre arquitetura de software
Reflexões sobre arquitetura de softwareTiago Sciencia
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Marcio Miyamoto
 
Digital Transformation: Como a nuvem da AWS pode ajudar o seu negócio
Digital Transformation: Como a nuvem da AWS pode ajudar o seu negócioDigital Transformation: Como a nuvem da AWS pode ajudar o seu negócio
Digital Transformation: Como a nuvem da AWS pode ajudar o seu negócioAmazon Web Services LATAM
 
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
 
Certificações em Arquitetura de TI
Certificações em Arquitetura de TICertificações em Arquitetura de TI
Certificações em Arquitetura de TIMarcelo Sávio
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaGraziella Bonizi
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de SoftwareJairo Junior
 

Semelhante a Arquitetura de Software 101 (20)

Soujavarj 12 habitos de arquitetos altamente eficazes
Soujavarj 12 habitos de arquitetos altamente eficazesSoujavarj 12 habitos de arquitetos altamente eficazes
Soujavarj 12 habitos de arquitetos altamente eficazes
 
Arquitetura evolutiva - DNAD 2013
Arquitetura evolutiva - DNAD 2013Arquitetura evolutiva - DNAD 2013
Arquitetura evolutiva - DNAD 2013
 
O futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java EnterpriseO futuro do arquiteto e das arquiteturas Java Enterprise
O futuro do arquiteto e das arquiteturas Java Enterprise
 
DevInCachu 2013: Arquitetura evolutiva
DevInCachu 2013: Arquitetura evolutivaDevInCachu 2013: Arquitetura evolutiva
DevInCachu 2013: Arquitetura evolutiva
 
Antecipando o sucesso de uma arquitetura de software emergente em times ágeis
Antecipando o sucesso de uma arquitetura de software emergente em times ágeisAntecipando o sucesso de uma arquitetura de software emergente em times ágeis
Antecipando o sucesso de uma arquitetura de software emergente em times ágeis
 
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
 
Agile User Experience
Agile User ExperienceAgile User Experience
Agile User Experience
 
Arquitetura Evolutiva - A retomada do ágil 18 anos depois
Arquitetura Evolutiva - A retomada do ágil 18 anos depoisArquitetura Evolutiva - A retomada do ágil 18 anos depois
Arquitetura Evolutiva - A retomada do ágil 18 anos depois
 
Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22
 
O Arquiteto da Informacao
O Arquiteto da Informacao O Arquiteto da Informacao
O Arquiteto da Informacao
 
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
 
Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)
Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)
Arquitetura evolutiva - Arquitetura ágil (TDC FLORIPA 2023)
 
Reflexões sobre arquitetura de software
Reflexões sobre arquitetura de softwareReflexões sobre arquitetura de software
Reflexões sobre arquitetura de software
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
 
Digital Transformation: Como a nuvem da AWS pode ajudar o seu negócio
Digital Transformation: Como a nuvem da AWS pode ajudar o seu negócioDigital Transformation: Como a nuvem da AWS pode ajudar o seu negócio
Digital Transformation: Como a nuvem da AWS pode ajudar o seu negócio
 
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
 
Certificações em Arquitetura de TI
Certificações em Arquitetura de TICertificações em Arquitetura de TI
Certificações em Arquitetura de TI
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
DDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquiteturaDDD e Microsservicos - do negócio à arquitetura
DDD e Microsservicos - do negócio à arquitetura
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 

Mais de Leandro Silva

Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#Leandro Silva
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao TerraformLeandro Silva
 
SRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégiaSRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégiaLeandro Silva
 
Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013Leandro Silva
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Leandro Silva
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo RealLeandro Silva
 
Gerenciando times autogerenciáveis
Gerenciando times autogerenciáveisGerenciando times autogerenciáveis
Gerenciando times autogerenciáveisLeandro Silva
 
Como vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresaComo vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresaLeandro Silva
 
Erlang/OTP - Caelum Tech Day 2009
Erlang/OTP - Caelum Tech Day 2009Erlang/OTP - Caelum Tech Day 2009
Erlang/OTP - Caelum Tech Day 2009Leandro Silva
 

Mais de Leandro Silva (9)

Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao Terraform
 
SRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégiaSRE - Esperança não é uma estratégia
SRE - Esperança não é uma estratégia
 
Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013Composição e Integração de Sistemas em 2013
Composição e Integração de Sistemas em 2013
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo Real
 
Gerenciando times autogerenciáveis
Gerenciando times autogerenciáveisGerenciando times autogerenciáveis
Gerenciando times autogerenciáveis
 
Como vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresaComo vi Scrum ser rechaçado em uma grande empresa
Como vi Scrum ser rechaçado em uma grande empresa
 
Erlang/OTP - Caelum Tech Day 2009
Erlang/OTP - Caelum Tech Day 2009Erlang/OTP - Caelum Tech Day 2009
Erlang/OTP - Caelum Tech Day 2009
 

Arquitetura de Software 101

  • 1. Arquitetura de Software 101 Leandro Silva, JAN/22 O mínimo que você precisa saber
  • 3. https://www.youtube.com/watch?v=2IxX2f0ZckQ https://www.youtube.com/watch?v=jOeuK2U8vI8 ProdOps ⎼ Engenharia e Produto com Leandro Silva https://www.youtube.com/watch?v=DCT0IoRcrUo ElvenWorks ⎼ Conhecendo a tecnologia por trás de uma solução muito inteligente de Precificação Estamos contratando para os times de engenharia e produtos. vamos conversar?
  • 5. “Arquitetura de software é sobre fazer as escolhas estruturais fundamentais, que são caras de mudar depois de implementadas.” ⎼ Software architecture, Wikipédia https://en.wikipedia.org/wiki/Software_architecture
  • 6.
  • 8. Com os adventos microsserviços e devops, mudanças arquiteturais já não são tão rígidas e custosas quanto costumavam ser; e ainda podem ser feitas incrementalmente. O ecossistema evolui e muda constantemente, assim também o contexto no qual as decisões são tomadas. #1 Lição
  • 9. Okay. Vejamos mais algumas definições então…
  • 10. ⎼ An Introduction to Software Architecture, David Garlan & Mary Shaw “Além dos algoritmos e estruturas de dados de computação, projetar e especificar a estrutura geral do sistema surge como um novo tipo de problema. As questões estruturais incluem organização bruta e estrutura de controle global; protocolos para comunicação, sincronização e acesso a dados; atribuição de funcionalidade aos elementos de design; distribuição física; composição de elementos de design; escalabilidade e performance; e seleção entre alternativas de projeto.” https://userweb.cs.txstate.edu/~rp31/papers/intro_softarch.pdf
  • 11. ⎼ IEEE98 + RUP “A concepção de mais alto nível de um sistema em seu ambiente. A arquitetura de um sistema de software (em um determinado momento) é sua organização ou estrutura de componentes importantes interagindo por meio de interfaces; esses componentes sendo composto de componentes e interfaces sucessivamente menores.”
  • 12. ⎼ Extreme Programming mailing list, Ralph Johnson “Na maioria dos projetos de software bem-sucedidos, os desenvolvedores especialistas que trabalham nesse projeto têm um entendimento compartilhado do projeto do sistema. Esse entendimento compartilhado é chamado de "arquitetura". Esse entendimento inclui como o sistema é dividido em componentes e como os componentes interagem por meio de interfaces. Esses componentes geralmente são compostos por componentes menores, mas a arquitetura inclui apenas os componentes e interfaces que são compreendidos por todos os desenvolvedores.” https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf
  • 13.
  • 14. Sendo assim, a definição que vamos seguir daqui em diante é…
  • 15. “Arquitetura é sobre as coisas importantes. Seja lá o que for.” ⎼ Ralph Johnson
  • 17. O que faz um arquitet@ de software?
  • 18. Fundamentals of Software Architecture, Mark Richards & Neal Ford Lida com “coisas importantes”, ué…
  • 19.
  • 20. As “coisas importantes” são as coisas que são importantes para o time. #2 Lição Nem todas as coisas são importantes; e mesmo as que são, não são o tempo todo.
  • 22. “Arquitetura é uma construção social (bem, software também é, mas arquitetura é ainda mais), porque não depende apenas do software, mas de qual parte do software é considerada importante pelo consenso do grupo.” “Se algo faz parte da arquitetura é inteiramente baseado em se os desenvolvedores acham que é importante.” https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf ⎼ Ralph Johnson TIME equipe
  • 23. Thanks. Eu não preciso de arquitet@ no time.
  • 24. “De muitas maneiras, a atividade mais importante do Architectus Oryzus é orientar a equipe de desenvolvimento, elevar seu nível para que possam lidar com questões mais complexas. Melhorar a capacidade da equipe de desenvolvimento dá a um arquiteto uma alavancagem muito maior do que ser o único tomador de decisões e, portanto, correr o risco de ser um gargalo arquitetônico.” “Mike Two veio com o melhor nome que ouvi até agora: guia, como em montanhismo. Um guia é um membro da equipe mais experiente e habilidoso que ensina outros membros da equipe a se defenderem melhor, mas está sempre lá para as coisas realmente complicadas.” https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf “Esse tipo de arquiteto deve estar muito atento ao que está acontecendo no projeto, procurando por questões importantes e abordando-as antes que se tornem um problema sério. Quando vejo um arquiteto assim, a parte mais perceptível do trabalho é a intensa colaboração.” Oryzus > Reloadus
  • 25. Fundamentals of Software Architecture, Mark Richards & Neal Ford Arquitetura Desenvolvimento
  • 26. Guiar + Cooperar > Ditar + Controlar. #3 Lição Melhor do que ter um único cérebro centralizando toda a visão do sistema e tomando todas as decisões importantes sozinho (Reloadus), de modo que o time não saiba nada além do próximo passo imediato, é ter um guia (Oryzus), que trabalha colaborativamente com o time para resolver as questões mais importantes, cada qual a seu tempo.
  • 27. Vão esperar que você, arquitet@…
  • 28. 1. Tome decisões de arquitetura e princípios de design, junto com o time, apoiando-os conforme seu nível atual de maturidade; 2. Continuamente analise e revise a arquitetura em função do estado atual da tecnologia e do problema de negócio que se propõe a resolver; 3. Se mantenha atualizado com as últimas tendências de tecnologia e engenharia de software; 4. Garanta a conformidade das decisões tomadas, tanto em nível de arquitetura quanto de princípios de design; Fundamentals of Software Architecture, Mark Richards & Neal Ford
  • 29. 5. Diversifique sua exposição e experiência com novas tecnologias, plataformas, frameworks, para ter insumo na hora de propor soluções e tomar decisões; 6. Tenha conhecimento do domínio de negócio que está lidando, de modo que possa elaborar soluções coerentes com tal; 7. Cultive skills interpessoais, porque você vai ter que trabalhar colaborando tanto com pessoal de negócio quando de engenharia, facilitando reuniões e liderando soluções; 8. Compreenda e lide bem com questões políticas, sendo capaz de navegar toda a organização, de cima a baixo. Fundamentals of Software Architecture, Mark Richards & Neal Ford
  • 30. Mas mais importante do que qualquer outra coisa… (IMHO)
  • 31.
  • 32. “Tudo em arquitetura de software é um trade-off.” Neal & Richards costumam dizer que “se um arquiteto acha que descobriu alguma coisa que não é um trade-off, muito provavelmente, ele apenas não descobriu o trade-off ainda”. Por isso o “porque” é mais importante do que o “como” ⎼ você pode olhar para um sistema e ver como foi feito, mas não que parâmetros embasaram cada decisão que o levou a ser como é. The Laws of Software Architecture, Mark Richards & Neal Ford
  • 33. Trade-offs. Conheça-os. #4 Lição “Programadores sabem os benefícios de todas as coisas e os trade-offs de nenhuma delas. Arquitetos precisam saber ambos.” ⎼ Rich Hickey
  • 35. “Uma solução de software é resultado da tradução de requisitos de domínio para características de arquitetura e princípios de design.”
  • 36. “Essas necessidades dos stakeholders (funcionalidade, desempenho, segurança, manutenibilidade etc.) são justamente o que está representado no modelo de qualidade, que categoriza a qualidade do produto em características e subcaracterísticas.” “A qualidade de um sistema é o grau em que o sistema satisfaz as necessidades declaradas e implícitas de seus vários stakeholders e, portanto, fornece valor.” ⎼ ISO/IEC 25010 https://iso25000.com/index.php/en/iso-25000-standards/iso-25010
  • 38.
  • 39. Não dá para ter tudo. Um arquiteto tem que trabalhar junto aos stakeholders do projeto para determinar o que realmente é importante para o negócio. Preocupações de negócio Requisitos de negócio Domínio de negócio Escalabilidade Performance Tolerância a falhas Segurança ?
  • 40. Preocupação de negócio Característica de arquitetura Fusão e aquisição Interoperabilidade, escalabilidade, adaptabilidade, extensibilidade Time to market Agilidade, testabilidade, deployabilidade Satisfação do usuário Performance, disponibilidade, tolerância a falhas, testabilidade, deployabilidade, agilidade, segurança Competitividade Agilidade, testabilidade, deployabilidade, escalabilidade, disponibilidade, tolerância a falhas Tempo e budget Simplicidade, viabilidade Preocupações de negócio
  • 41. Os requisitos de negócio dizem respeito, por exemplo, a número de usuários, número de transações simultâneas, volume de dados, sazonalidade, etc. Requisitos de negócio Exemplos clássicos de sazonalidade, com spike gigantesco de tráfego: envio da declaração de IR, venda de ingressos e Black Friday. Tome cuidado com as predições que surgem de tais requisitos. Todo mundo tem uma ideia que vai atrair milhões de usuários.
  • 42. Domínio de negócio Esteja alerta às características implícitas. Por mais que o requisito segurança possa não surgir como um requisito formal, ninguém quer usar um sistema inseguro, onde há vazamento de dados. Exemplo de domínio de negócio influenciando implicitamente as características de uma arquitetura: um sistema de imagens “médicas” vai precisar de armazenamento e largura de banda muito maior de um sistema de agendamento de consultas “médicas”.
  • 43. Esforço necessário Custo de implementação Impacto organizacional Uma arquitetura nunca muito provavelmente não vai ter todas as características que vimos até agora. Não é viável. Arquitetura menos pior. Trade-offs Por exemplo: performance e segurança se impactam mutuamente. Pilar da engenharia ágil: design iterativo. Projete a arquitetura boa o bastante e incremente.
  • 44. “Uma das diferenças entre arquitetura de construção e arquitetura de software é que muitas decisões sobre uma construção são difíceis de mudar. É difícil voltar e mudar seu porão, embora seja possível. Não há nenhuma razão teórica para que algo seja difícil de mudar em software. Se você escolher qualquer aspecto do software, poderá facilitar a alteração, mas não sabemos como facilitar a alteração de tudo. Tornar algo fácil de mudar torna o sistema geral um pouco mais complexo, e tornar tudo fácil de mudar torna todo o sistema muito complexo. Complexidade é o que torna o software difícil de mudar. Isso e duplicação.” Ouçam o tio Ralph Johnson, amiguinhos! “O software não é limitado pela física, como os edifícios. É limitado pela imaginação, pelo design, pela organização. Em suma, é limitado pelos atributos das pessoas, não pelos atributos do mundo. Encontramos o inimigo, e ele somos nós.” #5 Lição
  • 46. “Assim como um meteorologista e um pintor veem uma nuvem de maneiras diferentes, assim um arquiteto em relação a outros profissionais da engenharia de software.”
  • 47. Hmm, okay. Mas por que isso é importante?
  • 48. Linguagens, frameworks, bibliotecas, ferramental de debugging, coisas que você usa no seu dia a dia para fazer o seu trabalho de desenvolvimento de software. O que você conhece superficialmente ou pelo menos já ouviu falar (ex.: Brainfucker, eu sei o que é, mas nunca escrevi sequer um hello world). É uma gigantesca quantidade de coisas que poderiam solucionar perfeitamente o seu problema à mão, mas que você sequer faz ideia de que elas existem. Fundamentals of Software Architecture, Mark Richards & Neal Ford Um jovem desenvolvedor precisa focar em “sujar as mãos” aqui, para ganhar expertise.
  • 49. Para um arquiteto, technical breath é mais importante do que technical depth. Porque um arquiteto precisa tomar decisões que combinam “o que é necessário” com “o que é possível” (requisitos vs. restrições), então ter conhecimento tecnológico largo é mais importante do que ter conhecimento profundo. Fundamentals of Software Architecture, Mark Richards & Neal Ford
  • 50. Não dá para ser expert em tudo. Você tem que saber onde precisa manter profundidade (áreas de especialização) e onde pode sacrificar profundidade para ganhar largura. Fundamentals of Software Architecture, Mark Richards & Neal Ford
  • 51. Alargar o conhecimento 1 Se manter atualizado em relação às tendências mais atuais de tecnologia 2 Estar bem consciente do contexto atual 3
  • 52. https://www.youtube.com/watch?v=yK9b1C97ct0 Frozen Caveman Anti-Pattern “Eu tenho uma tonelada de experiência usando SOA e ESBs em larga escala, por isso estou propondo essa solução que incorpora essas tecnologias” “Eu nunca ouvi falar em ReactJS, então, para essa solução, vamos ser conservadores e usar frameworks bem estabelecidos: JSP e Struts.” “Eu já me queimei muitas vezes no passados com processamento assíncrono, usando eventos e mensageria, então, para essa solução vamos usar somente REST.”
  • 55. “Então, como podemos obter grandes arquitetos de software, se eles só têm a chance de arquitetar menos de meia dúzia de vezes em sua carreira?” ⎼ Ted Neward https://nealford.com/katas/ “Como conseguimos grandes designers de software? Grandes designers de software projetam, é claro.” ⎼ Fred Brooks
  • 59. Recomendações ● Software architecture ⎼ Wikipedia https://en.wikipedia.org/wiki/Software_architecture ● An Introduction to Software Architecture ⎼ David Garlan & Mary Shaw https://userweb.cs.txstate.edu/~rp31/papers/intro_softarch.pdf ● Who Needs an Architect? ⎼ Martin Fowler https://martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf ● ISO/IEC 25010 https://iso25000.com/index.php/en/iso-25000-standards/iso-25010 ● Software Architecture Monday ⎼ Mark Richards https://www.youtube.com/playlist?list=PLdsOZAx8I5umhnn5LLTNJbFgwA3xbycar
  • 60. Recomendações ● The Mythical Man-Month ⎼ Fred Brooks ● Architecting for Scale ⎼ Lee Atchison ● Fundamentals of Software Architecture ⎼ Mark Richards & Neal Ford ● Software Architecture: The Hard Parts ⎼ Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani ● Release It ⎼ Michael T. Nygard ● The Art of Scalability ⎼ Martin L. Abbott ● Designing Data-Intensive Applications ⎼ Martin Kleppmann ● Patterns of Enterprise Application Architecture ⎼ Martin Fowler
  • 61. Recomendações ● Enterprise Integration Patterns ⎼ Gregor Hohpe & Bobby Woolf ● Software Architecture Patterns ⎼ Mark Richards ● Handbook of Software Reliability Engineering ⎼ Michael R. Lyu http://www.cse.cuhk.edu.hk/~lyu/book/reliability/ ● Architectural Katas ⎼ Ted Neward https://archkatas.herokuapp.com/ ● Architectural Katas ⎼ Neal Ford https://nealford.com/katas/ ● The System Design Primer ⎼ Donne Martin https://github.com/donnemartin/system-design-primer