SlideShare uma empresa Scribd logo
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/

Mais conteúdo relacionado

Mais procurados

Scrum - Fundamentos, teorias e práticas!
Scrum - Fundamentos, teorias e práticas!Scrum - Fundamentos, teorias e práticas!
Scrum - Fundamentos, teorias e práticas!
Annelise Gripp
 
Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)
Rildo (@rildosan) Santos
 
Scrum
ScrumScrum
Metodologias de desenvolvimento - Waterfall vs Agile
Metodologias de desenvolvimento - Waterfall vs AgileMetodologias de desenvolvimento - Waterfall vs Agile
Metodologias de desenvolvimento - Waterfall vs Agile
Marcelo Murad
 
Curso completo COBIT 4.1
Curso completo COBIT 4.1Curso completo COBIT 4.1
Curso completo COBIT 4.1
Fernando Palma
 
Analise de Requisitos Software
Analise de Requisitos SoftwareAnalise de Requisitos Software
Analise de Requisitos Software
Rildo (@rildosan) Santos
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
Daniel Brandão
 
Modelagem de dados
Modelagem de dadosModelagem de dados
Modelagem de dados
Vinicius Buffolo
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3
Elaine Cecília Gatto
 
Fundamentos da Engenharia de Software
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
Álvaro Farias Pinheiro
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
Claudio Gamboa
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?
Priscila Ribeiro Chagas
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
Álvaro Farias Pinheiro
 
Internet das Coisas e a Indústria 4.0
Internet das Coisas e a Indústria 4.0Internet das Coisas e a Indústria 4.0
Internet das Coisas e a Indústria 4.0
Dalton Valadares
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
Daniel Brandão
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
Valmon Gaudencio
 
Virtualização - Máquinas Virtuais
Virtualização - Máquinas VirtuaisVirtualização - Máquinas Virtuais
Virtualização - Máquinas Virtuais
André Felipe Santos Martins
 
Aula 2. frameworks js
Aula 2. frameworks jsAula 2. frameworks js
Aula 2. frameworks js
andreluizlc
 
Virtualização
VirtualizaçãoVirtualização
Virtualização
Wellington Oliveira
 
Aula UML - Unified Modeling Language
Aula UML - Unified Modeling LanguageAula UML - Unified Modeling Language
Aula UML - Unified Modeling Language
Cloves da Rocha
 

Mais procurados (20)

Scrum - Fundamentos, teorias e práticas!
Scrum - Fundamentos, teorias e práticas!Scrum - Fundamentos, teorias e práticas!
Scrum - Fundamentos, teorias e práticas!
 
Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)Engenharia de Software Ágil (Scrum e FDD)
Engenharia de Software Ágil (Scrum e FDD)
 
Scrum
ScrumScrum
Scrum
 
Metodologias de desenvolvimento - Waterfall vs Agile
Metodologias de desenvolvimento - Waterfall vs AgileMetodologias de desenvolvimento - Waterfall vs Agile
Metodologias de desenvolvimento - Waterfall vs Agile
 
Curso completo COBIT 4.1
Curso completo COBIT 4.1Curso completo COBIT 4.1
Curso completo COBIT 4.1
 
Analise de Requisitos Software
Analise de Requisitos SoftwareAnalise de Requisitos Software
Analise de Requisitos Software
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
 
Modelagem de dados
Modelagem de dadosModelagem de dados
Modelagem de dados
 
Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3Modelos de Processo de Software Parte 3
Modelos de Processo de Software Parte 3
 
Fundamentos da Engenharia de Software
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?
 
Metodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de SoftwareMetodologias de Desenvolvimento de Software
Metodologias de Desenvolvimento de Software
 
Internet das Coisas e a Indústria 4.0
Internet das Coisas e a Indústria 4.0Internet das Coisas e a Indústria 4.0
Internet das Coisas e a Indústria 4.0
 
Aula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHPAula 02 - Introdução ao PHP
Aula 02 - Introdução ao PHP
 
Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.Paradigmas De Linguagem De Programação.
Paradigmas De Linguagem De Programação.
 
Virtualização - Máquinas Virtuais
Virtualização - Máquinas VirtuaisVirtualização - Máquinas Virtuais
Virtualização - Máquinas Virtuais
 
Aula 2. frameworks js
Aula 2. frameworks jsAula 2. frameworks js
Aula 2. frameworks js
 
Virtualização
VirtualizaçãoVirtualização
Virtualização
 
Aula UML - Unified Modeling Language
Aula UML - Unified Modeling LanguageAula UML - Unified Modeling Language
Aula UML - Unified Modeling Language
 

Semelhante a Praticas robustas e antifrageis de engenharia de software

Como desenvolver-software
Como desenvolver-softwareComo desenvolver-software
Como desenvolver-software
Fábio Nogueira de Lucena
 
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
Powerlogic Consultoria e Sistemas
 
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 software
tdc-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
 
DevOps
DevOpsDevOps
O ciclo da vida
O ciclo da vidaO ciclo da vida
O ciclo da vida
Luiz 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 Ágil
Rebecca Betwel
 
Por quê o software continua inseguro?
Por quê o software continua inseguro?Por quê o software continua inseguro?
Por quê o software continua inseguro?
Vinicius Oliveira Ferreira
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
Rodrigo Branas
 
Teste de software
Teste de software Teste de software
Teste de software
Allan Almeida de Araújo
 
Teste de software
Teste de softwareTeste de software
Teste de software
Rodrigo Cardoso Alves Fonte
 
Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22Technology Radar_ThoughtWorks_Vol_22
Technology Radar_ThoughtWorks_Vol_22
Hudson Augusto
 
Introdução à Engenharia de Software
Introdução à Engenharia de SoftwareIntrodução à Engenharia de Software
Introdução à Engenharia de Software
Claudia Melo
 
The Mythical Man-Month
The Mythical Man-MonthThe Mythical Man-Month
The Mythical Man-Month
pizzol
 
The Mythical Man-Month
The Mythical Man-MonthThe Mythical Man-Month
The Mythical Man-Month
pizzol
 
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
Agile Trends
 
Gerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2aGerenciando Testes Com Qualidade V2a
Gerenciando Testes Com Qualidade V2a
Leonardo 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 desenvolvimento
ledsifes
 

Semelhante a 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 software Teste de software
Teste de software
 
Teste de software
Teste de softwareTeste 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
 

Último

TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 

Último (6)

TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 

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/