O documento discute práticas de engenharia de software frágeis e antifrágeis. Apresenta como práticas frágeis transferem riscos e iludem a complexidade, enquanto práticas antifrágeis promovem estresse contínuo, redundância e descentralização para lidar melhor com ambientes complexos. Defende uma agenda de engenharia de software que reconheça a natureza orgânica de softwares.
Trata sobre a necessidade de envolvimento do time de desenvolvimento na segurança da aplicação. De que forma implementar e aferir a segurança do produto e faz um overview sobre testes de segurança e a importância da modelagem de riscos a ameaças
Slide da disciplina de linguagem de programação para a web do curso técnico em informática do IFPE - Campus Garanhuns. Apresenta como é realizada a criação de tabelas utilizando HTML
Este documento apresenta o plano de ensino para a disciplina de Programação para Web I. O curso irá ensinar HTML, CSS e JavaScript para desenvolvimento de sites web. O conteúdo inclui tags HTML, formulários, tabelas, links, listas e folhas de estilo. As atividades serão realizadas em laboratório e incluem exercícios e projetos. A avaliação será baseada em trabalhos individuais e em grupo, apresentações e provas.
O documento apresenta um treinamento sobre Scrum, um framework ágil para gestão de projetos. Explica o que é Scrum, por que é usado e que não é uma solução mágica. Apresenta os papéis, cerimônias e práticas de Scrum como planejamento, daily meetings, retrospectivas e a importância de um product backlog bem gerenciado. Também discute desafios comuns e como Scrum ajuda a lidar com mudanças frequentes de requisitos.
O documento discute técnicas de resolução de problemas por meio de busca com informação, como heurística, busca A*, busca gulosa e minimax. Especificamente, apresenta: 1) Uma descrição geral dessas técnicas; 2) Um exemplo de aplicação da heurística com A* para resolver o problema do metrô de Paris, representando estados como estações, linhas e informações de baldeação.
Trata sobre a necessidade de envolvimento do time de desenvolvimento na segurança da aplicação. De que forma implementar e aferir a segurança do produto e faz um overview sobre testes de segurança e a importância da modelagem de riscos a ameaças
Slide da disciplina de linguagem de programação para a web do curso técnico em informática do IFPE - Campus Garanhuns. Apresenta como é realizada a criação de tabelas utilizando HTML
Este documento apresenta o plano de ensino para a disciplina de Programação para Web I. O curso irá ensinar HTML, CSS e JavaScript para desenvolvimento de sites web. O conteúdo inclui tags HTML, formulários, tabelas, links, listas e folhas de estilo. As atividades serão realizadas em laboratório e incluem exercícios e projetos. A avaliação será baseada em trabalhos individuais e em grupo, apresentações e provas.
O documento apresenta um treinamento sobre Scrum, um framework ágil para gestão de projetos. Explica o que é Scrum, por que é usado e que não é uma solução mágica. Apresenta os papéis, cerimônias e práticas de Scrum como planejamento, daily meetings, retrospectivas e a importância de um product backlog bem gerenciado. Também discute desafios comuns e como Scrum ajuda a lidar com mudanças frequentes de requisitos.
O documento discute técnicas de resolução de problemas por meio de busca com informação, como heurística, busca A*, busca gulosa e minimax. Especificamente, apresenta: 1) Uma descrição geral dessas técnicas; 2) Um exemplo de aplicação da heurística com A* para resolver o problema do metrô de Paris, representando estados como estações, linhas e informações de baldeação.
O documento discute os fundamentos do framework ágil Scrum, incluindo sua origem no rugby, como surgiu a partir da indústria automobilística japonesa e o que define Scrum em oposição a outras metodologias. Também descreve os papéis, artefatos e cerimônias do Scrum como Product Owner, Scrum Master, Time Scrum, Product Backlog, Sprint Backlog, User Stories e as reuniões diárias, de planejamento, revisão e retrospectiva.
SCRUM e o FDD são Métodos Ágeis que são utilizados para desenvolvimento de software Fizemos uma pequena demonstração de como utilizar o SCRUM e FDD (Featured Driven Development – Desenvolvimento Guiada por Funcionalidade) juntos.
O SCRUM é utilizado para o Gerenciamento e o FDD como parte das práticas de Engenharia de Software. Ambos se complementam.
Scrum é um framework ágil para gestão e desenvolvimento de projetos. Origem no rugby, utiliza sprints, reuniões diárias e artefatos como product backlog para entregar valor de forma incremental. Equipes self-organized constroem software funcionando em colaboração estreita com clientes.
Este documento apresenta um módulo de um curso sobre COBIT 4.1. Ele introduz o curso, discute sua estrutura e conteúdo, que inclui módulos sobre governança de TI, COBIT e processos. O documento também fornece detalhes sobre o instrutor e como acessar os recursos do curso.
O documento discute a análise de requisitos de software, incluindo: (1) a importância da elicitação correta de requisitos, (2) as definições de requisitos e os stakeholders envolvidos, (3) os desafios da elicitação de requisitos e as técnicas recomendadas para superá-los.
Primeira aula da disciplina Programação Dinâmica para Web. Primeiros conceitos sobre Arquitetura de Aplicações web e informações gerais sobre a disciplina.
O documento discute conceitos fundamentais de modelagem de dados, incluindo entidades, atributos, dicionário de dados, classificação de atributos, características de chaves primárias e relacionamentos. Ele define entidades como qualquer coisa do mundo real sobre a qual se deseja armazenar informações, e atributos como propriedades relacionadas a entidades. O documento também descreve tipos de cardinalidade em relacionamentos, como um-para-um, um-para-muitos e muitos-para-muitos.
O documento apresenta diferentes modelos de processos de produção de software, incluindo:
1) Modelo de Prototipação, que utiliza protótipos para melhor compreender os requisitos do cliente;
2) Modelo Espiral, que aborda os principais riscos do projeto através de ciclos iterativos de prototipagem e teste;
3) Modelo de Entrega em Estágios, que planeja a entrega do software em partes ao longo do tempo para que funcionalidades úteis sejam disponibilizadas ao cliente antes da conclusão total do projet
O documento discute engenharia de software, metodologias e processos. As principais informações são: 1) Metodologias ágeis incentivam mudanças nos requisitos para entregar o que o cliente precisa; 2) O Manifesto Ágil estabeleceu princípios como indivíduos e interações, software funcionando e resposta rápida a mudanças; 3) O RUP é um framework de processo centrado em arquitetura baseado em UML e casos de uso.
1) O documento introduz conceitos básicos de JavaScript, incluindo variáveis, tipos, operadores e estruturas de controlo. 2) É explicado que JavaScript permite a criação e manipulação de objetos, sendo estas as estruturas de dados fundamentais da linguagem. 3) O documento descreve também funções e scopes em JavaScript, esclarecendo que cada função define o seu próprio escopo.
Nesta apresentação, realizada no TDC (The Developer's Conference) São Paulo 2018, abordo pontos importantes na descoberta de uma história de usuário e como chegar ao pequeno pedaço a ser desenvolvido.
O documento discute metodologias de desenvolvimento de software, enfatizando que deve ser realizado em equipe, seguir um processo e usar metodologias como a cascata, prototipação, ciclo de vida ou incremental. Também menciona modelos ágeis como Scrum e eXtreme Programming e a importância de seguir um processo para garantir qualidade e reduzir custos.
1. A aula introduz o PHP, abordando sua história, características e estrutura básica.
2. Variáveis, constantes, tipos de dados e operadores são explicados. Exemplos ilustram o uso de variáveis, operações matemáticas e lógicas.
3. O documento fornece os conceitos fundamentais da linguagem PHP para iniciantes.
O documento discute diferentes paradigmas de programação, incluindo imperativo, orientado a objetos, funcional, lógico e paralelo/distribuído. Ele define cada paradigma, lista suas vantagens e desvantagens, e exemplos de linguagens para cada um.
A virtualização permite simular plataformas de hardware, sistemas operacionais e recursos de rede em uma única máquina. Isso cria máquinas virtuais que podem executar sistemas operacionais e aplicativos como se fossem computadores reais. A virtualização oferece vantagens como economia de hardware, teste e desenvolvimento de software, e consolidação de servidores.
- O documento discute vários frameworks JavaScript, incluindo frameworks para back-end, front-end e fullstack. Também discute a importância da linguagem JavaScript e sua história.
O documento discute os conceitos de virtualização, máquinas virtuais e seus benefícios. A virtualização oferece uma camada de abstração dos recursos reais de hardware e permite executar múltiplos sistemas operacionais simultaneamente. Isso proporciona recursos como reaproveitamento de recursos, portabilidade e segurança.
Requisitos
Funcionais
Não-funcionais
Problemas
Possíveis Soluções
UML
Diagrama de Casos de Uso
Diagrama de Atividades
Diagramas de Caso de Uso no Rose
Diagramas de Atividades no Rose
O documento discute os processos, métodos e ferramentas para desenvolvimento de software, enfatizando a importância de se seguir um processo estruturado e contínuo de melhoria. Aborda os modelos tradicionais como Waterfall e os mais modernos como ágeis, além de questões como gerência de requisitos, configuração e planejamento para garantir o sucesso dos projetos.
O documento discute a jornada da Powerlogic em alcançar certificações MPS.BR utilizando metodologias ágeis como Scrum. Apresenta a história da empresa com o uso de métodos tradicionais e ágeis ao longo dos anos, culminando na certificação nível C em 2010 utilizando Scrum.
O documento discute os fundamentos do framework ágil Scrum, incluindo sua origem no rugby, como surgiu a partir da indústria automobilística japonesa e o que define Scrum em oposição a outras metodologias. Também descreve os papéis, artefatos e cerimônias do Scrum como Product Owner, Scrum Master, Time Scrum, Product Backlog, Sprint Backlog, User Stories e as reuniões diárias, de planejamento, revisão e retrospectiva.
SCRUM e o FDD são Métodos Ágeis que são utilizados para desenvolvimento de software Fizemos uma pequena demonstração de como utilizar o SCRUM e FDD (Featured Driven Development – Desenvolvimento Guiada por Funcionalidade) juntos.
O SCRUM é utilizado para o Gerenciamento e o FDD como parte das práticas de Engenharia de Software. Ambos se complementam.
Scrum é um framework ágil para gestão e desenvolvimento de projetos. Origem no rugby, utiliza sprints, reuniões diárias e artefatos como product backlog para entregar valor de forma incremental. Equipes self-organized constroem software funcionando em colaboração estreita com clientes.
Este documento apresenta um módulo de um curso sobre COBIT 4.1. Ele introduz o curso, discute sua estrutura e conteúdo, que inclui módulos sobre governança de TI, COBIT e processos. O documento também fornece detalhes sobre o instrutor e como acessar os recursos do curso.
O documento discute a análise de requisitos de software, incluindo: (1) a importância da elicitação correta de requisitos, (2) as definições de requisitos e os stakeholders envolvidos, (3) os desafios da elicitação de requisitos e as técnicas recomendadas para superá-los.
Primeira aula da disciplina Programação Dinâmica para Web. Primeiros conceitos sobre Arquitetura de Aplicações web e informações gerais sobre a disciplina.
O documento discute conceitos fundamentais de modelagem de dados, incluindo entidades, atributos, dicionário de dados, classificação de atributos, características de chaves primárias e relacionamentos. Ele define entidades como qualquer coisa do mundo real sobre a qual se deseja armazenar informações, e atributos como propriedades relacionadas a entidades. O documento também descreve tipos de cardinalidade em relacionamentos, como um-para-um, um-para-muitos e muitos-para-muitos.
O documento apresenta diferentes modelos de processos de produção de software, incluindo:
1) Modelo de Prototipação, que utiliza protótipos para melhor compreender os requisitos do cliente;
2) Modelo Espiral, que aborda os principais riscos do projeto através de ciclos iterativos de prototipagem e teste;
3) Modelo de Entrega em Estágios, que planeja a entrega do software em partes ao longo do tempo para que funcionalidades úteis sejam disponibilizadas ao cliente antes da conclusão total do projet
O documento discute engenharia de software, metodologias e processos. As principais informações são: 1) Metodologias ágeis incentivam mudanças nos requisitos para entregar o que o cliente precisa; 2) O Manifesto Ágil estabeleceu princípios como indivíduos e interações, software funcionando e resposta rápida a mudanças; 3) O RUP é um framework de processo centrado em arquitetura baseado em UML e casos de uso.
1) O documento introduz conceitos básicos de JavaScript, incluindo variáveis, tipos, operadores e estruturas de controlo. 2) É explicado que JavaScript permite a criação e manipulação de objetos, sendo estas as estruturas de dados fundamentais da linguagem. 3) O documento descreve também funções e scopes em JavaScript, esclarecendo que cada função define o seu próprio escopo.
Nesta apresentação, realizada no TDC (The Developer's Conference) São Paulo 2018, abordo pontos importantes na descoberta de uma história de usuário e como chegar ao pequeno pedaço a ser desenvolvido.
O documento discute metodologias de desenvolvimento de software, enfatizando que deve ser realizado em equipe, seguir um processo e usar metodologias como a cascata, prototipação, ciclo de vida ou incremental. Também menciona modelos ágeis como Scrum e eXtreme Programming e a importância de seguir um processo para garantir qualidade e reduzir custos.
1. A aula introduz o PHP, abordando sua história, características e estrutura básica.
2. Variáveis, constantes, tipos de dados e operadores são explicados. Exemplos ilustram o uso de variáveis, operações matemáticas e lógicas.
3. O documento fornece os conceitos fundamentais da linguagem PHP para iniciantes.
O documento discute diferentes paradigmas de programação, incluindo imperativo, orientado a objetos, funcional, lógico e paralelo/distribuído. Ele define cada paradigma, lista suas vantagens e desvantagens, e exemplos de linguagens para cada um.
A virtualização permite simular plataformas de hardware, sistemas operacionais e recursos de rede em uma única máquina. Isso cria máquinas virtuais que podem executar sistemas operacionais e aplicativos como se fossem computadores reais. A virtualização oferece vantagens como economia de hardware, teste e desenvolvimento de software, e consolidação de servidores.
- O documento discute vários frameworks JavaScript, incluindo frameworks para back-end, front-end e fullstack. Também discute a importância da linguagem JavaScript e sua história.
O documento discute os conceitos de virtualização, máquinas virtuais e seus benefícios. A virtualização oferece uma camada de abstração dos recursos reais de hardware e permite executar múltiplos sistemas operacionais simultaneamente. Isso proporciona recursos como reaproveitamento de recursos, portabilidade e segurança.
Requisitos
Funcionais
Não-funcionais
Problemas
Possíveis Soluções
UML
Diagrama de Casos de Uso
Diagrama de Atividades
Diagramas de Caso de Uso no Rose
Diagramas de Atividades no Rose
O documento discute os processos, métodos e ferramentas para desenvolvimento de software, enfatizando a importância de se seguir um processo estruturado e contínuo de melhoria. Aborda os modelos tradicionais como Waterfall e os mais modernos como ágeis, além de questões como gerência de requisitos, configuração e planejamento para garantir o sucesso dos projetos.
O documento discute a jornada da Powerlogic em alcançar certificações MPS.BR utilizando metodologias ágeis como Scrum. Apresenta a história da empresa com o uso de métodos tradicionais e ágeis ao longo dos anos, culminando na certificação nível C em 2010 utilizando Scrum.
Rio Agile - O Poder da Visualização: atacando a Dívida Técnica e promovendo o...Amanda Varella
O documento descreve como um grupo de 4 pessoas usou visualização e métricas para reduzir a dívida técnica em cerca de 30 times de desenvolvimento de software. Eles criaram um quadro Kanban para mapear o progresso de cada time em várias categorias relacionadas à qualidade do código. Isso ajudou a promover discussões e melhorias graduais ao longo do tempo, resultando em uma redução de 30% na dívida técnica em um ano.
TDC2017 | POA Trilha Arquitetura - Antifragilidade e desenvolvimento de softwaretdc-globalcode
1) O documento discute o conceito de antifragilidade em desenvolvimento de software e como criar sistemas que se beneficiam da mudança ao invés de quebrarem.
2) É sugerido que arquiteturas baseadas em eventos, como microservices e design orientado a eventos, ajudem a criar sistemas antifrágeis que podem lidar melhor com mudanças.
3) Simplicidade é apontada como essencial para compreensão humana e capacidade de lidar com mudanças, e arquiteturas mais simples como micro
O que é Middleware? E o que isso tem a ver com SOA?paxtecnologia
O documento discute sobre arquitetura orientada a serviços (SOA) e middleware. Ele explica que middleware é uma plataforma que permite a comunicação entre aplicações e sistemas, facilitando a integração e reuso de funcionalidades. Também apresenta uma breve história do middleware, desde sua primeira menção em 1968 até seu crescimento na década de 1980 para integrar sistemas legados a novas aplicações. Por fim, lista alguns exemplos de servidores de aplicação e plataformas de middleware.
O documento discute práticas de DevOps adotadas por empresas como Amazon, Google e Netflix que levam a deployments frequentes, menor tempo de implantação e maior estabilidade. Ele também apresenta métricas para medir o desempenho de TI e práticas correlacionadas como controle de versão e entrega contínua. Finalmente, discute práticas técnicas e organizacionais como equipes multidisciplinares e cultura organizacional para permitir a colaboração entre Dev e Ops.
O documento discute os principais conceitos do Ciclo de Vida de Desenvolvimento de Software, incluindo:
1. A importância da Visão e Objetivos do projeto para orientar o time.
2. Exemplos de como problemas podem surgir quando os requisitos não são claros ou a tecnologia é desconhecida.
3. A necessidade de evoluir os sistemas incrementalmente através de iterações e deployes frequentes para lidar com mudanças e imprevistos.
O documento discute porque o software continua inseguro, identificando vários problemas como a complexidade do desenvolvimento de software, falta de capacitação em segurança, mercado crescente de vulnerabilidades e incentivos conflitantes entre segurança e desenvolvimento. Propõe que a segurança deve ser integrada ao longo de todo o ciclo de vida do software, desde a especificação de requisitos até a manutenção, para que o software seja mais robusto.
Engenharia de software aula 6 - Introdução ao Desenvolvimento ÁgilRebecca Betwel
Com intuito de esclarecer sobre como surgiu o manifesto ágil e discutir as metodologias ágeis mais utilizadas. Esse material é parte de um conjunto de materiais sobre Engenharia de Software
Software Engineering - Agil Development.
Anos e anos de esforços no desenvolvimento de software, mas nossa
percepção sobre a insegurança dos sistemas tem aumentado dia após dia.
Será que há fundamento para esta percepção? O software continua mesmo
inseguro? Por mais que o software seja complexo por si só, e muitos
usam isso como justificativa para o grande número de falhas encontradas,
a questão vai muito além disso. Os problemas envolvendo o
desenvolvimento de software se estendem desde a falta de capacitação das
equipes de desenvolvimento, passa pela péssima integração entre as
equipes de segurança e desenvolvimento e culmina com a falta de
investimento por parte dos diretores, além de outras questões. Do outro
lado vemos a ascensão do mercado de vulnerabilidades acompanhado de um
crescente uso de armas cibernéticas na resolução de questões
geopolíticas, tudo isso contribuindo para a criação de um ecossistema
ainda mais inseguro para os sistemas. Esta palestra tem como objetivo
trazer luz sobre estas e outras questões em torno da problemática da
segurança (ou falta de) nos sistemas de software. Pretende-se discutir o
cenário atual e possíveis caminhos para um futuro melhor e mais seguro
para o software.
Rodrigo Branas tem experiência em desenvolvimento Java, certificações em programação e gerenciamento de projetos. Ele ministra treinamentos em diversas tecnologias e métodos ágeis como Extreme Programming.
Este documento fornece um resumo sobre qualidade e teste de software. Ele discute a importância do teste, as técnicas de teste como caixa preta e caixa branca, e automação de testes. Também aborda carreiras em teste de software e exemplos históricos de falhas de software.
Este documento fornece um resumo sobre qualidade e teste de software. Ele discute a importância do teste, as técnicas de teste como caixa preta e caixa branca, automação de testes, BDD, e carreiras em teste de software.
Este documento fornece um guia de opiniões sobre as fronteiras da tecnologia, apresentando várias tecnologias em diferentes estágios de adoção. O Conselho Consultivo de Tecnologia da ThoughtWorks, composto por especialistas seniores, se reúne regularmente para discutir tendências e criar este relatório.
O documento descreve a carreira e obra de Frederick P. Brooks, autor do livro "The Mythical Man-Month". O livro analisa os problemas de gerenciamento de projetos de software e propõe técnicas para melhor estimativa de tempo e controle de cronograma para evitar atrasos.
O documento descreve a carreira e obra de Frederick P. Brooks, autor do livro "The Mythical Man-Month". Brooks desenvolveu o sistema operacional OS/360 na IBM e observou que adicionar mais desenvolvedores a um projeto atrasado tende a atrasá-lo ainda mais. O livro discute técnicas de gerenciamento de projetos de software.
Boris Kuszka (Red Hat) - Tecnologias para diminuir o time-to-marketAgile Trends
No mercado atual, para se manter relevantes e competitivos, é necessário a criação de novos serviços e canais, com um time-to-market extremamente reduzido. Para isso abordagens como DevOps e ferramentas de desenvolvimento ágil, infraestrutura de cloud e grande automação é imprescindível para conseguir se destacar e sair do lugar comum. Essa infraestrutura que é comum nas Startups também precisa estar disponível nas grandes instituições governamentais e empresas privadas. Por terem um grande legado tecnológico, o desafio é a modernização e integração desse legado com uma segunda plataforma: moderna, ágil, autoescalável e sem lock-in.
1) O documento discute técnicas e práticas para gerenciar o processo de testes de software com foco em qualidade.
2) São apresentados desafios comuns no desenvolvimento de software e formas de aplicar testes em diferentes momentos do ciclo de desenvolvimento.
3) Novas abordagens para testes são propostas, como o "Matrix Test" e o "Infinite Test", assim como uma estrutura para planejar e estimar testes levando em conta o contexto do projeto.
Leds zeppellin infraestrutura de apoio ao desenvolvimentoledsifes
No Laboratório de Extensão em Desenvolvimento de Software (LEDS) utilizamos algumas das práticas recomendadas pelas metodologias Extreme Programming, SCRUM e prevemos a implantação de outras ainda em estudo. Para apoiar essas práticas um conjunto de ferramentas são necessárias e com isso a necessidade de um ambiente onde pudesse integrar tais tecnologias.
Para isso foi desenvolvido o LedsZeppellin. O LedsZeppellin integra ao todo 11 tecnologias dentre elas o Jenkins (para integração continua), Sonar (Análise Estática de Código), Gitlab (Sistema de Versionamento de Códigos), Taiga (Gerenciamento de Projetos – SCRUM) e Nexus (Sistema de Gerenciamento de Artefatos) dentre outras.
Semelhante a Praticas robustas e antifrageis de engenharia de software (20)
As classes de modelagem podem ser comparadas a moldes ou
formas que definem as características e os comportamentos dos
objetos criados a partir delas. Vale traçar um paralelo com o projeto de
um automóvel. Os engenheiros definem as medidas, a quantidade de
portas, a potência do motor, a localização do estepe, dentre outras
descrições necessárias para a fabricação de um veículo
A linguagem C# aproveita conceitos de muitas outras linguagens,
mas especialmente de C++ e Java. Sua sintaxe é relativamente fácil, o que
diminui o tempo de aprendizado. Todos os programas desenvolvidos devem
ser compilados, gerando um arquivo com a extensão DLL ou EXE. Isso torna a
execução dos programas mais rápida se comparados com as linguagens de
script (VBScript , JavaScript) que atualmente utilizamos na internet
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
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
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/