SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
Práticas de Engenharia de Software
Robustas e Antifrágeis para
Ambientes Complexos
Marco Mendes
Apresentado no Agile Brazil 2019
Belo Horizonte, MG, Brasil
Na década de 1960, o problema era
que os projetos estavam excedendo
o orçamento ou nunca eram
entregues.
A primeira crise na indústria de software
O nascimento da engenharia de software em 1968
nas históricas conferências da OTAN
“[A principal causa da crise do software é] que as
máquinas se tornaram várias ordens de magnitude
mais poderosas!
Para ser franco: enquanto não existiam máquinas,
a programação não era problema; quando
tínhamos alguns computadores fracos a
programação se tornou um problema moderado.
E agora temos computadores gigantes e a
programação se tornou um problema igualmente
gigantesco.”
E. Dijkstra, 1972
Em 2001, surge o Agile Manifesto como
mais uma resposta a mais uma crise na
engenharia de software.
“Temos um grande número de pessoas fazendo
ágil flácido, uma tentativa tímida de seguir
mal algumas práticas de desenvolvimento de
software selecionadas”, Andy Hunt
“Uma equipe Agile será ágil, não importa como
o projeto seja gerenciado. Por outro lado, uma
equipe que não é ágil não se tornará ágil
simplesmente em virtude de uma nova e
sofisticada estratégia de gerenciamento de
projetos. ”, Robert Martin
“O ágil foi corrompido pela complexo industrial
do Agile”, Martin Fowler
A crise do ágil ganha força em 2015
Precisamos investigar os
nossos modelos mentais
de como criar e manter
sistemas de software.
Sistemas de software e a
engenharia de software
tem sido desenhados de
forma mecanicista.
Os efeitos práticos
tem sido a criação
de processos, sistemas
e resultados frágeis.
Cuidado
Frágil
Processos frágeis (Dados do Standish Group)
Fonte: https://pmworldlibrary.net/wp-content/uploads/2018/05/pmwj70-May2018-Rosato-go-small-for-project-success-student-paper.pdf
•O foguete da Ariane 5
•O sistema de navegação do Boeing 737
•O bot da Knight Capital e perdas de
centenas de milhões de dólares
Sistemas de software frágeis
Cisnes negros
Cuidado
Frágil
Robusto
Me agite
Antifrágil
Arquitetura de
antifragilidade do
BitTorrent
x
f(x)
Ganhos e perdas
Você está aqui
Perdas
Ganhos
O frágil O antifrágil
x
f(x)
Ganhos e perdas
Você está aqui
Perdas
Ganhos
Perdas assimétricas. Qualquer coisa
que tem mais perdas que ganhos de
eventos aleatórios (variabilidade)
Ganhos assimétricos. Qualquer coisa
que tem mais ganhos que perdas de
eventos aleatórios (variabilidade)
Propriedades de práticas frágeis de
engenharia de software
• Transferência de riscos
– Práticas que transferem riscos de um local
para outro. Ausência da pele em jogo.
• Ilusão do ordenado
– Práticas que tomam cenários complexos
como se fossem ordenados
• Iatrogenia
– Efeitos colaterais de processos de software
muito prescritivos
Práticas frágeis (Transferência de Risco)
Dicotomia entre desenvolvimento e testes
Modelo em V de qualidade sem automação de testes
Devs Testers
Práticas frágeis (Transferência de Risco)
Sistemas de incentivos divergentes
Fonte: Lean Enterprise, Jez Humble at al.
Práticas frágeis (Transferência de Risco)
Times de TI com sistemas de incentivos divergentes
Espirais da morte
• Mais código incorreto -> Menos disposição das pessoas em implantá-lo
• Implantações menos frequentes -> Mais códigos (ruins) devem ser implantados a cada vez
• Aumento na complexidade da implantação -> Aumenta a probabilidade de interrupções
• Mais interrupções -> Mais relutância em implantar coisas novas
Portões das
burocracias.
Derruba-los-ei!
Aqui não
passarás!
Práticas frágeis (Ilusão do Ordenado)
Comportamento
(incapacidade de prever)
Arquitetura
(dificuldade
de
entender)
Ordenado Complexo Caótico
Simples
Complicado
Fonte: Management 3.0, Jurgen Appelo
(Extraído do livro The Interaction Between Complexity and Management de Ralph Stacey)
Práticas frágeis (Ilusão do Ordenado)
Grandes projetos
• Apenas 1/5 dos grandes projetos ágeis
são entregues dentro das suas premissas
gerenciais. (valor, custo e prazo)
Fonte: Standish Group
• Megaprojetos são deseconômicos com a escala.
Fonte: Megaprojects and Risk: An Anatomy of
Ambition - Bent Flyvbjerg
Práticas frágeis (Ilusão do Ordenado)
Grandes sistemas (Big Ball of Mud)
Grandes sistemas tem muito
mais fragilidade inerente.
Exemplo: Base pública de
projetos medidos pelo
SonarQube
Práticas frágeis (Iatrogenia)
Processos de software prescritivos e definidos top down
ritos
processos
Metodologias
ferramentas
papéis
métodos
tecnologias
cadências estruturas
Algumas propriedades de práticas antifrágeis
de engenharia de software
• Estresse contínuo
– Introduza volatilidade
– Aceite muitos (e pequenos) erros
• Redundância
• Sem transferência de risco
(skin in the game)
• Descentralização e regras locais
• Emergence
“Antifragile system becomes better and stronger under
continuous attacks and errors”, Nicholas Taleb
Uma agenda de antifragilidade na
engenharia de software
Monperrus, Martin. "Principles of antifragile software." Companion to the first International
Conference on the Art, Science and Engineering of Programming. ACM, 2017.
Jones, Kennie H. "Engineering antifragile systems: A change in design
philosophy." Procedia computer science 32 (2014): 870-875.
Russo, Daniel, and Paolo Ciancarini. "A proposal for an antifragile software
manifesto." Procedia Computer Science 83 (2016): 982-987.
Fitzgerald, Brian, and Klaas-Jan Stol. "Continuous software engineering: A
roadmap and agenda." Journal of Systems and Software 123 (2017): 176-189.
Allspaw, John. "Fault injection in production." Communications of the ACM 55.10 (2012):
48-52.
Práticas de antifragilidade
• Injeção de falhas em produção (Netflix)
• Exercício dos dias de jogos (Etsy)
• Engenharia do Caos
Chaos Engineering is the discipline of experimenting on a
system in order to build confidence in the system’s
capability to withstand turbulent conditions in production.
http://principlesofchaos.org
Práticas de antifragilidade
• Programação em grupos
(Mob programming)
• Revisões por pares (PR)
“If a programmer is indispensable, get rid of
him as quickly as possible”, Gerald
Weinberg – Bus Factor
Práticas de antifragilidade
Equipes multifuncionais, produtos (e não projetos), serviços pequenos e regras locais com o comando da missão
Fonte: Lean Enterprise, Jez Humble at al.
Práticas de antifragilidade
Automação de testes de unidade, Shift Left Testing, TDD e
práticas similares que incentivem a incerteza e a volatilidade
Fonte: Test Pyramid, Martin Fowler
"If we're not making any
mistakes, it means we're
not moving quickly
enough.”, Netflix
Práticas de antifragilidade
Adotar o princípio Safety II
• Uma abordagem de Safety I pressupõe que as coisas dão
errado por causa de falhas identificáveis ou mau
funcionamento de componentes específicos: tecnologia,
procedimentos, trabalhadores humanos e organizações nas
quais eles estão inseridos.
• Uma abordagem Safety-II pressupõe que a variabilidade do
desempenho diário fornece as adaptações necessárias para
responder a condições variáveis e, portanto, é a razão pela
qual as coisas dão certo. Os seres humanos são
consequentemente vistos como essenciais para a
flexibilidade e melhorias do sistema.
Práticas de antifragilidade
Integração Contínua
• Exposição diária a volatilidade através da
automação da compilação e builds, execução
de testes automatizados e publicação em
ambientes intermediários.
Práticas de antifragilidade
Comunidades de aplicações para self-healing de servidores
“Nossas experiências mostram que os ACs são práticos e
viáveis para aplicações atuais: um AC de 15.000 membros
pode monitorar colaborativamente o Apache em busca de
novas falhas e imunizar todos os membros contra eles
com apenas uma degradação de desempenho de 6% para
cada membro.”,
Self Healing with Application Communities, Michael E. Locasto et al.
Práticas de antifragilidade
OODA, MVP, Design Sprints e Lean Change Management
Fonte: RICHARDS, Chet. Boyd’s OODA Loop: It’s Not What You Think.
Práticas de antifragilidade
50% dos produtos do Google se originaram de pesquisas não estruturadas e não planejadas
nos tempos livres dos funcionários (20% do tempo semanal). Adsense, sozinho, foi
responsável por 25% da renda da Google
O princípio da opcionalidade, de Taleb
Práticas de robustez e antifragilidade
Continuous-*
Continuous Software Engineering: A Roadmap and Agenda, Brian Fitzgerald e Klass JanStol
Práticas de antifragilidade
Práticas de processo do SEMAT
SEMAT
Alphas
Kernel
Essence
The Essence of Software Engineering: The SEMAT Kernel, Ivar Jacobson
Em busca de uma agenda que reconheça
a complexidade em sistemas de software
Estamos iniciando a descoberta de
ideias, princípios e práticas que
reconheçam e tratem a natureza
orgânica de softwares e da
engenharia de software.
Por mais divulgação e conhecimento de práticas que atendam a
propriedades de sistemas complexos e de antifragilidade
Estresse contínuo Redundância
Sem transferência
de risco
(skin in the game)
Descentralização
e regras locais
Emergence
(de baixo para
cima)
Práticas de Engenharia de Software Robustas e Antifrágeis
para Ambientes Complexos
Marco Mendes
Obrigado!
https://www.linkedin.com/in/marcomendes/

Weitere ähnliche Inhalte

Was ist angesagt?

Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareCloves da Rocha
 
Processos de Desenvolvimento de Software - teoria e prática
Processos de Desenvolvimento de Software - teoria e práticaProcessos de Desenvolvimento de Software - teoria e prática
Processos de Desenvolvimento de Software - teoria e práticaRalph Rassweiler
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetosNécio de Lima Veras
 
Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)
Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)
Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)Gustavo Zimmermann
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De SoftwareFelipe Goulart
 
07 diagrama de classes de análise
07  diagrama de classes de análise07  diagrama de classes de análise
07 diagrama de classes de análiseFilipe Soares
 
Áreas de Conhecimento da Engenharia de Software
Áreas de Conhecimento da Engenharia de SoftwareÁreas de Conhecimento da Engenharia de Software
Áreas de Conhecimento da Engenharia de SoftwareElaine Cecília Gatto
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareÁlvaro Farias Pinheiro
 
Introdução a engenharia de software aula 01
Introdução a engenharia de software   aula 01Introdução a engenharia de software   aula 01
Introdução a engenharia de software aula 01Franklin Matos Correia
 
Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágilClaudia Melo
 
Classes abstratas
Classes abstratasClasses abstratas
Classes abstratasPedro Neto
 
EDII14 [2012.1] Árvores B e B+
EDII14 [2012.1]   Árvores B e B+EDII14 [2012.1]   Árvores B e B+
EDII14 [2012.1] Árvores B e B+KianeLedok
 
Metodologia ágil das Desenvolvimento Adaptativo Software
Metodologia ágil das   Desenvolvimento Adaptativo SoftwareMetodologia ágil das   Desenvolvimento Adaptativo Software
Metodologia ágil das Desenvolvimento Adaptativo SoftwareMarilainny Martins da Silva
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceArthur Emanuel
 
As aula 1 - introdução a análise de sistemas
As   aula 1 - introdução a análise de sistemasAs   aula 1 - introdução a análise de sistemas
As aula 1 - introdução a análise de sistemastontotsilva
 

Was ist angesagt? (20)

Aula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de SoftwareAula - Introdução a Engenharia de Software
Aula - Introdução a Engenharia de Software
 
Modelos de Engenharia de Software
Modelos de Engenharia de SoftwareModelos de Engenharia de Software
Modelos de Engenharia de Software
 
Processos de Desenvolvimento de Software - teoria e prática
Processos de Desenvolvimento de Software - teoria e práticaProcessos de Desenvolvimento de Software - teoria e prática
Processos de Desenvolvimento de Software - teoria e prática
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)
Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)
Banco de Dados II: Conversão do Modelo Conceitual para o Modelo Lógico (aula 6)
 
Engenharia De Software
Engenharia De SoftwareEngenharia De Software
Engenharia De Software
 
Aula 4 - Introducão a algoritmos
Aula 4 - Introducão a algoritmosAula 4 - Introducão a algoritmos
Aula 4 - Introducão a algoritmos
 
Engenharia de software
Engenharia de softwareEngenharia de software
Engenharia de software
 
07 diagrama de classes de análise
07  diagrama de classes de análise07  diagrama de classes de análise
07 diagrama de classes de análise
 
Áreas de Conhecimento da Engenharia de Software
Áreas de Conhecimento da Engenharia de SoftwareÁreas de Conhecimento da Engenharia de Software
Áreas de Conhecimento da Engenharia de Software
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Introdução a engenharia de software aula 01
Introdução a engenharia de software   aula 01Introdução a engenharia de software   aula 01
Introdução a engenharia de software aula 01
 
Gerência de configuração ágil
Gerência de configuração ágilGerência de configuração ágil
Gerência de configuração ágil
 
Classes abstratas
Classes abstratasClasses abstratas
Classes abstratas
 
Apresentação da UML
Apresentação da UMLApresentação da UML
Apresentação da UML
 
EDII14 [2012.1] Árvores B e B+
EDII14 [2012.1]   Árvores B e B+EDII14 [2012.1]   Árvores B e B+
EDII14 [2012.1] Árvores B e B+
 
Metodologia ágil das Desenvolvimento Adaptativo Software
Metodologia ágil das   Desenvolvimento Adaptativo SoftwareMetodologia ágil das   Desenvolvimento Adaptativo Software
Metodologia ágil das Desenvolvimento Adaptativo Software
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, Interface
 
Modelo em Espiral
Modelo em EspiralModelo em Espiral
Modelo em Espiral
 
As aula 1 - introdução a análise de sistemas
As   aula 1 - introdução a análise de sistemasAs   aula 1 - introdução a análise de sistemas
As aula 1 - introdução a análise de sistemas
 

Ähnlich wie Praticas robustas e antifrageis de engenharia de software

Rio Agile - O Poder da Visualização: atacando a Dívida Técnica e promovendo o...
Rio Agile - O Poder da Visualização: atacando a Dívida Técnica e promovendo o...Rio Agile - O Poder da Visualização: atacando a Dívida Técnica e promovendo o...
Rio Agile - O Poder da Visualização: atacando a Dívida Técnica e promovendo o...Amanda Varella
 
TDC2017 | POA Trilha Arquitetura - Antifragilidade e desenvolvimento de software
TDC2017 | POA Trilha Arquitetura - Antifragilidade e desenvolvimento de softwareTDC2017 | POA Trilha Arquitetura - Antifragilidade e desenvolvimento de software
TDC2017 | POA Trilha Arquitetura - Antifragilidade e desenvolvimento de softwaretdc-globalcode
 
O que é Middleware? E o que isso tem a ver com SOA?
O que é Middleware? E o que isso tem a ver com SOA?O que é Middleware? E o que isso tem a ver com SOA?
O que é Middleware? E o que isso tem a ver com SOA?paxtecnologia
 
O ciclo da vida
O ciclo da vidaO ciclo da vida
O ciclo da vidaLuiz Borba
 
Por quê o software continua inseguro (versão extendida)?
Por quê o software continua inseguro (versão extendida)?Por quê o software continua inseguro (versão extendida)?
Por quê o software continua inseguro (versão extendida)?Vinicius Oliveira Ferreira
 
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
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Hudson Augusto
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de SoftwareClaudia Melo
 
The Mythical Man-Month
The Mythical Man-MonthThe Mythical Man-Month
The Mythical Man-Monthpizzol
 
The Mythical Man-Month
The Mythical Man-MonthThe Mythical Man-Month
The Mythical Man-Monthpizzol
 
Boris Kuszka (Red Hat) - Tecnologias para diminuir o time-to-market
Boris Kuszka (Red Hat) - Tecnologias para diminuir o time-to-marketBoris Kuszka (Red Hat) - Tecnologias para diminuir o time-to-market
Boris Kuszka (Red Hat) - Tecnologias para diminuir o time-to-marketAgile Trends
 
Gerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aGerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aLeonardo Molinari
 
Leds zeppellin infraestrutura de apoio ao desenvolvimento
Leds zeppellin   infraestrutura de apoio ao desenvolvimentoLeds zeppellin   infraestrutura de apoio ao desenvolvimento
Leds zeppellin infraestrutura de apoio ao desenvolvimentoledsifes
 

Ähnlich wie Praticas robustas e antifrageis de engenharia de software (20)

Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
 
Palestra Gerenciamento de Projetos com Scrum e MPS.Br
Palestra Gerenciamento de Projetos com Scrum e MPS.BrPalestra Gerenciamento de Projetos com Scrum e MPS.Br
Palestra Gerenciamento de Projetos com Scrum e MPS.Br
 
Rio Agile - O Poder da Visualização: atacando a Dívida Técnica e promovendo o...
Rio Agile - O Poder da Visualização: atacando a Dívida Técnica e promovendo o...Rio Agile - O Poder da Visualização: atacando a Dívida Técnica e promovendo o...
Rio Agile - O Poder da Visualização: atacando a Dívida Técnica e promovendo o...
 
TDC2017 | POA Trilha Arquitetura - Antifragilidade e desenvolvimento de software
TDC2017 | POA Trilha Arquitetura - Antifragilidade e desenvolvimento de softwareTDC2017 | POA Trilha Arquitetura - Antifragilidade e desenvolvimento de software
TDC2017 | POA Trilha Arquitetura - Antifragilidade e desenvolvimento de software
 
O que é Middleware? E o que isso tem a ver com SOA?
O que é Middleware? E o que isso tem a ver com SOA?O que é Middleware? E o que isso tem a ver com SOA?
O que é Middleware? E o que isso tem a ver com SOA?
 
DevOps
DevOpsDevOps
DevOps
 
O ciclo da vida
O ciclo da vidaO ciclo da vida
O ciclo da vida
 
Por quê o software continua inseguro (versão extendida)?
Por quê o software continua inseguro (versão extendida)?Por quê o software continua inseguro (versão extendida)?
Por quê o software continua inseguro (versão extendida)?
 
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
 
Por quê o software continua inseguro?
Por quê o software continua inseguro?Por quê o software continua inseguro?
Por quê o software continua inseguro?
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
Teste de software
Teste de software Teste de software
Teste de software
 
Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
 
The Mythical Man-Month
The Mythical Man-MonthThe Mythical Man-Month
The Mythical Man-Month
 
The Mythical Man-Month
The Mythical Man-MonthThe Mythical Man-Month
The Mythical Man-Month
 
Boris Kuszka (Red Hat) - Tecnologias para diminuir o time-to-market
Boris Kuszka (Red Hat) - Tecnologias para diminuir o time-to-marketBoris Kuszka (Red Hat) - Tecnologias para diminuir o time-to-market
Boris Kuszka (Red Hat) - Tecnologias para diminuir o time-to-market
 
Gerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aGerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2a
 
Leds zeppellin infraestrutura de apoio ao desenvolvimento
Leds zeppellin   infraestrutura de apoio ao desenvolvimentoLeds zeppellin   infraestrutura de apoio ao desenvolvimento
Leds zeppellin infraestrutura de apoio ao desenvolvimento
 

Kürzlich hochgeladen

Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 

Kürzlich hochgeladen (8)

Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

Praticas robustas e antifrageis de engenharia de software

  • 1. Práticas de Engenharia de Software Robustas e Antifrágeis para Ambientes Complexos Marco Mendes Apresentado no Agile Brazil 2019 Belo Horizonte, MG, Brasil
  • 2. Na década de 1960, o problema era que os projetos estavam excedendo o orçamento ou nunca eram entregues. A primeira crise na indústria de software
  • 3. O nascimento da engenharia de software em 1968 nas históricas conferências da OTAN
  • 4. “[A principal causa da crise do software é] que as máquinas se tornaram várias ordens de magnitude mais poderosas! Para ser franco: enquanto não existiam máquinas, a programação não era problema; quando tínhamos alguns computadores fracos a programação se tornou um problema moderado. E agora temos computadores gigantes e a programação se tornou um problema igualmente gigantesco.” E. Dijkstra, 1972
  • 5. Em 2001, surge o Agile Manifesto como mais uma resposta a mais uma crise na engenharia de software.
  • 6. “Temos um grande número de pessoas fazendo ágil flácido, uma tentativa tímida de seguir mal algumas práticas de desenvolvimento de software selecionadas”, Andy Hunt “Uma equipe Agile será ágil, não importa como o projeto seja gerenciado. Por outro lado, uma equipe que não é ágil não se tornará ágil simplesmente em virtude de uma nova e sofisticada estratégia de gerenciamento de projetos. ”, Robert Martin “O ágil foi corrompido pela complexo industrial do Agile”, Martin Fowler A crise do ágil ganha força em 2015
  • 7. Precisamos investigar os nossos modelos mentais de como criar e manter sistemas de software.
  • 8. Sistemas de software e a engenharia de software tem sido desenhados de forma mecanicista.
  • 9. Os efeitos práticos tem sido a criação de processos, sistemas e resultados frágeis. Cuidado Frágil
  • 10. Processos frágeis (Dados do Standish Group) Fonte: https://pmworldlibrary.net/wp-content/uploads/2018/05/pmwj70-May2018-Rosato-go-small-for-project-success-student-paper.pdf
  • 11. •O foguete da Ariane 5 •O sistema de navegação do Boeing 737 •O bot da Knight Capital e perdas de centenas de milhões de dólares Sistemas de software frágeis Cisnes negros
  • 14. x f(x) Ganhos e perdas Você está aqui Perdas Ganhos O frágil O antifrágil x f(x) Ganhos e perdas Você está aqui Perdas Ganhos Perdas assimétricas. Qualquer coisa que tem mais perdas que ganhos de eventos aleatórios (variabilidade) Ganhos assimétricos. Qualquer coisa que tem mais ganhos que perdas de eventos aleatórios (variabilidade)
  • 15.
  • 16. Propriedades de práticas frágeis de engenharia de software • Transferência de riscos – Práticas que transferem riscos de um local para outro. Ausência da pele em jogo. • Ilusão do ordenado – Práticas que tomam cenários complexos como se fossem ordenados • Iatrogenia – Efeitos colaterais de processos de software muito prescritivos
  • 17. Práticas frágeis (Transferência de Risco) Dicotomia entre desenvolvimento e testes Modelo em V de qualidade sem automação de testes Devs Testers
  • 18. Práticas frágeis (Transferência de Risco) Sistemas de incentivos divergentes Fonte: Lean Enterprise, Jez Humble at al.
  • 19. Práticas frágeis (Transferência de Risco) Times de TI com sistemas de incentivos divergentes Espirais da morte • Mais código incorreto -> Menos disposição das pessoas em implantá-lo • Implantações menos frequentes -> Mais códigos (ruins) devem ser implantados a cada vez • Aumento na complexidade da implantação -> Aumenta a probabilidade de interrupções • Mais interrupções -> Mais relutância em implantar coisas novas Portões das burocracias. Derruba-los-ei! Aqui não passarás!
  • 20. Práticas frágeis (Ilusão do Ordenado) Comportamento (incapacidade de prever) Arquitetura (dificuldade de entender) Ordenado Complexo Caótico Simples Complicado Fonte: Management 3.0, Jurgen Appelo (Extraído do livro The Interaction Between Complexity and Management de Ralph Stacey)
  • 21. Práticas frágeis (Ilusão do Ordenado) Grandes projetos • Apenas 1/5 dos grandes projetos ágeis são entregues dentro das suas premissas gerenciais. (valor, custo e prazo) Fonte: Standish Group • Megaprojetos são deseconômicos com a escala. Fonte: Megaprojects and Risk: An Anatomy of Ambition - Bent Flyvbjerg
  • 22. Práticas frágeis (Ilusão do Ordenado) Grandes sistemas (Big Ball of Mud) Grandes sistemas tem muito mais fragilidade inerente. Exemplo: Base pública de projetos medidos pelo SonarQube
  • 23. Práticas frágeis (Iatrogenia) Processos de software prescritivos e definidos top down ritos processos Metodologias ferramentas papéis métodos tecnologias cadências estruturas
  • 24. Algumas propriedades de práticas antifrágeis de engenharia de software • Estresse contínuo – Introduza volatilidade – Aceite muitos (e pequenos) erros • Redundância • Sem transferência de risco (skin in the game) • Descentralização e regras locais • Emergence “Antifragile system becomes better and stronger under continuous attacks and errors”, Nicholas Taleb
  • 25. Uma agenda de antifragilidade na engenharia de software Monperrus, Martin. "Principles of antifragile software." Companion to the first International Conference on the Art, Science and Engineering of Programming. ACM, 2017. Jones, Kennie H. "Engineering antifragile systems: A change in design philosophy." Procedia computer science 32 (2014): 870-875. Russo, Daniel, and Paolo Ciancarini. "A proposal for an antifragile software manifesto." Procedia Computer Science 83 (2016): 982-987. Fitzgerald, Brian, and Klaas-Jan Stol. "Continuous software engineering: A roadmap and agenda." Journal of Systems and Software 123 (2017): 176-189. Allspaw, John. "Fault injection in production." Communications of the ACM 55.10 (2012): 48-52.
  • 26. Práticas de antifragilidade • Injeção de falhas em produção (Netflix) • Exercício dos dias de jogos (Etsy) • Engenharia do Caos Chaos Engineering is the discipline of experimenting on a system in order to build confidence in the system’s capability to withstand turbulent conditions in production. http://principlesofchaos.org
  • 27. Práticas de antifragilidade • Programação em grupos (Mob programming) • Revisões por pares (PR) “If a programmer is indispensable, get rid of him as quickly as possible”, Gerald Weinberg – Bus Factor
  • 28. Práticas de antifragilidade Equipes multifuncionais, produtos (e não projetos), serviços pequenos e regras locais com o comando da missão Fonte: Lean Enterprise, Jez Humble at al.
  • 29. Práticas de antifragilidade Automação de testes de unidade, Shift Left Testing, TDD e práticas similares que incentivem a incerteza e a volatilidade Fonte: Test Pyramid, Martin Fowler "If we're not making any mistakes, it means we're not moving quickly enough.”, Netflix
  • 30. Práticas de antifragilidade Adotar o princípio Safety II • Uma abordagem de Safety I pressupõe que as coisas dão errado por causa de falhas identificáveis ou mau funcionamento de componentes específicos: tecnologia, procedimentos, trabalhadores humanos e organizações nas quais eles estão inseridos. • Uma abordagem Safety-II pressupõe que a variabilidade do desempenho diário fornece as adaptações necessárias para responder a condições variáveis e, portanto, é a razão pela qual as coisas dão certo. Os seres humanos são consequentemente vistos como essenciais para a flexibilidade e melhorias do sistema.
  • 31. Práticas de antifragilidade Integração Contínua • Exposição diária a volatilidade através da automação da compilação e builds, execução de testes automatizados e publicação em ambientes intermediários.
  • 32. Práticas de antifragilidade Comunidades de aplicações para self-healing de servidores “Nossas experiências mostram que os ACs são práticos e viáveis para aplicações atuais: um AC de 15.000 membros pode monitorar colaborativamente o Apache em busca de novas falhas e imunizar todos os membros contra eles com apenas uma degradação de desempenho de 6% para cada membro.”, Self Healing with Application Communities, Michael E. Locasto et al.
  • 33. Práticas de antifragilidade OODA, MVP, Design Sprints e Lean Change Management Fonte: RICHARDS, Chet. Boyd’s OODA Loop: It’s Not What You Think.
  • 34. Práticas de antifragilidade 50% dos produtos do Google se originaram de pesquisas não estruturadas e não planejadas nos tempos livres dos funcionários (20% do tempo semanal). Adsense, sozinho, foi responsável por 25% da renda da Google O princípio da opcionalidade, de Taleb
  • 35. Práticas de robustez e antifragilidade Continuous-* Continuous Software Engineering: A Roadmap and Agenda, Brian Fitzgerald e Klass JanStol
  • 36. Práticas de antifragilidade Práticas de processo do SEMAT SEMAT Alphas Kernel Essence The Essence of Software Engineering: The SEMAT Kernel, Ivar Jacobson
  • 37. Em busca de uma agenda que reconheça a complexidade em sistemas de software Estamos iniciando a descoberta de ideias, princípios e práticas que reconheçam e tratem a natureza orgânica de softwares e da engenharia de software.
  • 38. Por mais divulgação e conhecimento de práticas que atendam a propriedades de sistemas complexos e de antifragilidade Estresse contínuo Redundância Sem transferência de risco (skin in the game) Descentralização e regras locais Emergence (de baixo para cima)
  • 39. Práticas de Engenharia de Software Robustas e Antifrágeis para Ambientes Complexos Marco Mendes Obrigado! https://www.linkedin.com/in/marcomendes/