Buscar

Apostila Módulo 1 Bootcamp Engenheiro de Software Ágil

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 71 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 71 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 71 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Fundamentos de Engenharia de Software 
 
 
 
 
Analia Irigoyen 
 
 
 
 
 
2020 
 
 
Fundamentos de Engenharia de Software – Página 2 de 71 
 
 
Fundamentos 
Engenharia de Software 
Analia Irigoyen 
© Copyright do Instituto de Gestão e Tecnologia da Informação. 
Todos os direitos reservados. 
 
 
 
 
 
 
Fundamentos de Engenharia de Software – Página 3 de 71 
Sumário 
Capítulo 1. Introdução à Engenharia de Software ................................................. 6 
Cenário atual do Desenvolvimento de Software ................................................. 6 
Definições clássicas de Engenharia de Software:............................................... 7 
Tipos de aplicações ............................................................................................ 7 
Capítulo 2. Ciclos de Desenvolvimento de Software ........................................... 10 
Tipos de Ciclo de Vida .......................................................................................... 10 
Sequencial (Cascata) ........................................................................................ 10 
Iterativo (Incremental) ....................................................................................... 11 
Ciclo de Vida – RAD ......................................................................................... 12 
Ciclo de vida evolutivo ...................................................................................... 12 
Ciclo de vida espiral .......................................................................................... 14 
RUP - Rational Unified Process ........................................................................ 15 
Capítulo 3. Metodologias Ágeis ........................................................................... 18 
Contexto e motivação ........................................................................................... 18 
Principais mitos ..................................................................................................... 19 
Manifesto ágil - Valores e princípios ágeis ............................................................ 20 
Scrum ................................................................................................................... 23 
Times de Scrum ................................................................................................ 24 
O fluxo do Scrum .................................................................................................. 25 
Kanban ................................................................................................................. 26 
Os papéis e características do Kanban ............................................................. 27 
O fluxo do Kanban ............................................................................................ 27 
Planejamento .................................................................................................... 28 
Autogerenciamento e execução ........................................................................ 30 
 
 
Fundamentos de Engenharia de Software – Página 4 de 71 
Identificação de classes de serviços ................................................................. 32 
Melhoria contínua .............................................................................................. 32 
ScrumBAN ............................................................................................................ 33 
Planejamento .................................................................................................... 34 
Monitoração ...................................................................................................... 34 
Melhoria contínua .............................................................................................. 34 
XP ......................................................................................................................... 34 
Os valores do XP .............................................................................................. 35 
Capítulo 4. Principais ferramentas usadas para o ciclo de desenvolvimento de 
software Ágil e DevOps ............................................................................................ 38 
Azure DevOps ....................................................................................................... 39 
Jira ........................................................................................................................ 41 
Capítulo 5. Introdução ao DevOps ...................................................................... 46 
Overview de DevOps ............................................................................................ 47 
CALMS ................................................................................................................. 48 
DevOps – Primeira Maneira .............................................................................. 49 
Infraestrutura como código (IaC)....................................................................... 50 
IaaS, SaaS e PaaS ........................................................................................... 51 
Vantagens do PaaS .......................................................................................... 52 
Estratégia de Branching .................................................................................... 56 
Categorias de liberação (Release) .................................................................... 57 
Arquitetura de baixo risco ................................................................................. 59 
DevOps - Segunda Maneira .................................................................................. 59 
DevOps - Terceira Maneira ................................................................................... 62 
Motivação .......................................................................................................... 63 
 
 
Fundamentos de Engenharia de Software – Página 5 de 71 
A importância da Terceira Maneira ....................................................................... 65 
A Terceira Maneira e o Profissional DevOps do tipo T-shaped ............................ 66 
Conceitos da Arquitetura Lean .............................................................................. 68 
Referências………. .................................................................................................. 70 
 
 
 
 
 
Fundamentos de Engenharia de Software – Página 6 de 71 
Capítulo 1. Introdução à Engenharia de Software 
A grande reflexão que fazemos quando pensamos em desenvolvimento de 
software é: por que se leva tanto tempo para concluir um software? 
Segundo o dicionário Aurélio, Engenharia de Software é: 
“Arte de aplicar conhecimentos científicos e empíricos e certas 
habilitações específicas à criação de estruturas, dispositivos e 
processos que se utilizam para converter recursos naturais em 
formas adequadas ao atendimento das necessidades humanas.” 
Atualmente o termo Engenharia de Software é mais comumente usado para 
referir-se a: 
 Modelos de ciclo de vida. 
 Métodos e ferramentas. 
 Técnicas para estimativa de custos. 
 Documentação. 
 Técnicas para controle da qualidade. 
Entretanto, o desenvolvimento de software é um problema de Engenharia. 
 Busca-se: 
‒ A criação de soluções econômicas para problemas práticos. 
‒ Construir objetos a serviço da sociedade. 
 
Cenário atual do Desenvolvimento de Software 
Temos um cenário de desenvolvimento de software na maioria das 
organizações, onde: 
 
 
Fundamentos de Engenharia de Software – Página 7 de 71 
 Há uma pressão constante por parte do cliente pela entrega rápida. 
 Cliente acha que em uma única reunião de 30 min já somos capazes de 
desenvolver um software. 
 Desenvolvedores são orientados à solução: desejam começar logoa 
programar, sem ter um entendimento claro do que é necessário. 
 
Definições clássicas de Engenharia de Software: 
 
Pela IEEE Glossary of Software Terminology, enfoque sistemático para o 
desenvolvimento, operação, manutenção e descontinuação do software. 
Por Barry Boehm, “aplicação prática do conhecimento científico no projeto e 
construção de programas e da documentação requerida para desenvolver, operar e 
manter esses programas”. 
Por Fritz Bauer, “criação é a utilização de sólidos princípios de engenharia, a 
fim de obter softwares econômicos que sejam confiáveis e que trabalhem 
eficientemente em máquinas reais”. 
 
Tipos de aplicações 
Os seguintes tipos de aplicações são os mais comuns na Engenharia de 
Software: 
Software de Sistema: 
 Software que serve a outro software, hardware, processos, pessoas etc. 
 Windows, Linux, Ios, Android e MACos. 
 
 
 
Fundamentos de Engenharia de Software – Página 8 de 71 
Software de Aplicação: 
 Programas isolados que resolvem uma necessidade específica do negócio. 
 Suite Office, Jogos, Browsers, Banco de Dados etc. 
Sistemas de Tempo Real: 
 Sistema que deve responder com suficiente rapidez (milissegundos) ou o 
ambiente ficará fora de controle. 
 Ex.: ATMs (caixa eletrônico), orientação aérea, monitoração de pacientes e 
validadores de transporte público. 
Software Científico e de Engenharia: 
 Processamento de grandes cálculos (astronomia, biologia molecular, 
vulcanologia etc.). 
Software Embutido ou Embarcado: 
 Reside dentro de um produto ou sistema (controle de aparelhos domésticos 
(microondas, geladeira, cofres), automóveis (controle de combustíveis, 
dashboard de avaliação dos sistemas automotivos etc.). 
Aplicações Web: 
 Dados são introduzidos remotamente. 
 Interação com o computador através de terminais. 
 Dados armazenados são rapidamente acessados. 
Software de linha de produto: 
 Software que provê capacidade específica a ser usada por muitos clientes. 
 Editores de texto, planilhas eletrônicas, apresentação etc. 
 
 
Fundamentos de Engenharia de Software – Página 9 de 71 
Software baseado em conhecimento (inteligência artificial): 
 Aplicações que utilizam algoritmos para resolver problemas complexos, que 
não são passíveis de computação ou análise direta, exigindo interpretação. 
 Sistemas especialistas, processamento de padrões de imagem e voz, sistemas 
de jogos inteligentes, redes neurais etc. 
Computação Ubíqua: 
 Tornar a interação pessoa-máquina invisível, ou seja, integrar a informática 
com as ações e comportamentos naturais das pessoas. 
Software Legado – Desenvolvidos há um longo tempo e algumas vezes: 
 Têm projetos não extensíveis. 
 Código complicado. 
 Documentação pobre ou inexistente. 
 Casos de testes não documentados. 
 Histórico de modificações mal geridas. 
 
 
 
 
Fundamentos de Engenharia de Software – Página 10 de 71 
Capítulo 2. Ciclos de Desenvolvimento de Software 
O ciclo de vida de um projeto consiste em fases e atividades que são definidas 
de acordo com o escopo, recursos e a natureza (características) do projeto, visando 
oferecer maior controle gerencial. 
A cada fase do ciclo de vida do projeto são gerados produtos de trabalho 
necessários para o desenvolvimento das fases posteriores. 
Essa organização em fases permite planejar o projeto, incluindo os marcos 
importantes para controle do projeto. Os marcos do projeto precisam ser previamente 
definidos ao se realizar o planejamento do projeto. 
É possível adotar as técnicas de fast-tracking e collision, sem afetar os ciclos 
de vida. A técnica fast-tracking permite que atividades sejam iniciadas antes de outra, 
mesmo tendo dependências, desde que o risco seja tratado. A técnica collision 
permite que mais pessoas sejam alocadas em uma determinada tarefa para garantir 
a data de entrega, desde que o risco seja tratado. 
A seguir foram detalhados os ciclos de vida mais comuns. 
 
Tipos de Ciclo de Vida 
 Sequencial (Cascata) 
Neste ciclo ocorre uma abordagem sequencial ao decorrer do projeto, ou seja, 
as fases do ciclo de desenvolvimento são executadas em uma sequência ordenada. 
Desta forma, a passagem para determinada atividade exige como critério a finalização 
da atividade imediatamente anterior. 
Um dos pontos fortes do modelo sequencial está na ênfase dada a uma 
abordagem disciplinada e na recomendação de que todos os produtos de cada fase 
sejam formalmente revisados. 
Normalmente, as fases deste modelo de ciclo de vida são: 
 
 
Fundamentos de Engenharia de Software – Página 11 de 71 
 Iniciação (Não iterativo). 
 Planejamento (Não iterativo). 
 Análise dos Requisitos (Não iterativo). 
 Encerramento do Planejamento e Requisitos (Não iterativo). 
 Desenvolvimento (Não iterativo). 
 Entrega (Não iterativo). 
 
Iterativo (Incremental) 
Neste ciclo, a construção do produto ocorre em pequenos passos (iterações), 
que evoluem para o produto final. 
A abordagem prevê a organização em fases que possuem objetivos distintos. 
Em cada fase são realizadas atividades em uma ordem sequencial. 
Para cada fase ocorrerão tipicamente múltiplas iterações. O número de 
iterações pode variar, dependendo dos requisitos especiais do projeto. Normalmente, 
a fase de “Iniciação” e a fase de “Planejamento” possuem uma única iteração. 
Normalmente, as fases deste modelo de ciclo de vida são: 
 Iniciação (não iterativo). 
 Planejamento (iterativo). 
 Análise dos requisitos (iterativo). 
 Encerramento do planejamento e requisitos (iterativo). 
 Desenvolvimento (iterativo). 
 Entrega (iterativo). 
 
 
Fundamentos de Engenharia de Software – Página 12 de 71 
Ciclo de Vida – RAD 
O ciclo de vida Desenvolvimento Rápido de Aplicações (Rapid Application 
Development) tem como objetivos: a adaptação de “alta velocidade” do modelo 
Cascata e exige requisitos bem compreendidos e escopo fechado. 
Características deste ciclo de vida: 
 Sistema plenamente funcional entre 60 e 90 dias. 
 Incremental (ciclos curtos). 
 Baseado em componentes. 
 Modularidade (equipes distintas). 
 Requisitos precisam estar bem definidos e o escopo deve ser restrito. 
As principais desvantagens: 
 Requer recursos humanos suficientes para criar um número adequado de 
equipes. 
 Requer um comprometimento entre desenvolvedores e clientes, para que as 
atividades possam ser realizadas rapidamente e o sistema seja concluído em 
um tempo abreviado. Se o comprometimento for abandonado por qualquer 
uma das partes, o projeto falhará. 
 Não é apropriado quando os riscos são grandes. 
 
Ciclo de vida evolutivo 
Os ciclos de vida do tipo “evolutivo” têm as seguintes características: 
 Software evolui com o tempo e o uso das versões iniciais. 
 Também é um modelo Iterativo. 
 
 
Fundamentos de Engenharia de Software – Página 13 de 71 
 Requisitos são parcialmente definidos e depois são refinados. 
 Desenvolve-se uma versão parcial que atinge requisitos conhecidos. 
 A partir do conhecimento adquirido com o uso, evolui-se o produto 
 
Estes ciclos de vida têm os seguintes problemas: 
 Cliente não sabe que o software que ele vê não considerou, durante o 
desenvolvimento, a qualidade global e a manutenibilidade a longo prazo. Força 
a utilização do protótipo como produto final. 
 Desenvolvedor frequentemente faz uma implementação comprometida, com o 
objetivo de produzir rapidamente um protótipo. Depois de um tempo ele se 
familiariza com essas escolhas. 
É importante ressaltar que apesar dos problemas, existem alguns 
comentários importantes: 
 Ainda que possam ocorrer problemas, prototipação é um modo de vida 
eficiente. 
 Deve-se definir as regras do jogo logo no início 
 O cliente e o desenvolvedor devem ambos concordar que o protótipo seja 
construído para servir como um mecanismo a fim de definir os requisitos 
 
 
Fundamentos de Engenharia de Software – Página 14 de71 
Ciclo de vida espiral 
Os ciclos de vida do tipo “espiral” têm as seguintes características: 
 Combina a iteração da Prototipagem com aspectos do Cascata. 
 Software desenvolvido em versões evolucionárias. 
 Primeiras versões (ciclos) podem ser modelo de papel, seguindo um protótipo 
etc. 
 Modelo guiado por riscos. 
 Abordagem cíclica. 
 Aumentar incrementalmente o grau de definição e implementação de um 
sistema, enquanto seu grau de risco diminui. 
 Marcos de ancoragem: ajudam a estabelecer quando um ciclo é completado 
em torno da espiral e fornecem marcos de decisão antes do projeto de software 
prosseguir. Ex.: objetivos do ciclo de vida, arquitetura do ciclo de vida, 
capacidade inicial de operação. 
 Garantir o comprometimento dos interessados. 
 Usa uma abordagem que capacita o desenvolvedor e o cliente a entender e 
reagir aos riscos em cada etapa evolutiva. 
 Pode ser difícil convencer os clientes que uma abordagem “evolutiva” é 
controlável. 
 Exige considerável experiência na determinação de riscos e depende dessa 
experiência para ter sucesso. 
 
 
 
Fundamentos de Engenharia de Software – Página 15 de 71 
RUP - Rational Unified Process 
Os ciclos de vida do tipo “RUP” têm as seguintes características: 
 Processo de desenvolvimento de SW criado e mantido pela Rational/IBM. 
 Baseado no ciclo de vida em espiral (refinamentos sucessivos). 
 Baseada em disciplinas: 
‒ Tarefas. 
‒ Responsabilidades. 
 Guia para a utilização de UML: 
‒ Desenvolvimento dirigido por casos de uso. 
 Processo configurável (customizável). 
 Avaliação contínua dos riscos do projeto. 
 Geração de produtos interdependentes em todas as interações. 
 Desenvolvimento iterativo-incremental: 
‒ Iteração: 
 Conjunto de atividades de modelagem de negócios, requisitos, 
análise e projeto, implementação, teste e implantação, em várias 
proporções, dependendo do local em que ela está localizada no 
ciclo de desenvolvimento. 
‒ Disciplina: 
 Conjunto de atividades relacionadas a uma 'área de interesse' 
importante em todo o projeto. 
‒ Papéis: 
 
 
Fundamentos de Engenharia de Software – Página 16 de 71 
 O comportamento e as responsabilidades de um indivíduo ou de 
um conjunto de indivíduos. 
As fases estão definidas de acordo com a figura abaixo: 
 
A tabela abaixo detalha as principais saídas de cada fase: 
 
 
 
 
Fundamentos de Engenharia de Software – Página 17 de 71 
Vantagens deste ciclo: 
 Design inicial contém falhas. 
 Descoberta tardia de defeitos de design tem grande impacto. 
 Todos os projetos têm riscos. 
 Quanto mais cedo analisar os riscos mais chance de mitigar. 
 
 
 
Fundamentos de Engenharia de Software – Página 18 de 71 
Capítulo 3. Metodologias Ágeis 
Contexto e motivação 
Com o aumento da maturidade organizacional em desenvolvimento de 
processos e a busca pela alta competitividade e qualidade, as organizações estão 
cada vez mais adotando abordagens ágeis com o principal objetivo de aumentar o 
valor de negócio para a organização. Atualmente, as organizações não têm tempo a 
perder com projetos de escopo fechado que duram mais de 6 meses. 
Neste sentido, muitas dúvidas surgem no mercado a respeito dos modelos 
ágeis, dentre elas: 
 É possível usar uma combinação de modelos tradicionais (PMBOK, por 
exemplo) e agilidade? 
 As duas abordagens são compatíveis (tradicional e ágil) ou complementares?. 
Entendendo que os modelos tradicionais de gestão e os métodos ágeis têm 
o mesmo objetivo: o sucesso do projeto, como adaptar as práticas ágeis ao contexto 
organizacional? Qual abordagem ágil é a melhor para minha empresa? 
Iniciaremos com um histórico das metodologias ágeis que surgiram 
inicialmente na área de TI (Tecnologia da Informação) e hoje são amplamente 
utilizados por outros domínios, como oficinas mecânicas, hospitais, comércios, 
advogados e até para o uso pessoal. 
1. Anos 90: apareceram algumas metodologias ágeis, tais como XP (Kent Beck 
e Ron Jeffries), 5 valores, 14 princípios e TDD, Scrum (Sutherland, Schwaber, 
Beedle), Crystal (AlistairCockBurn) e Lean (manufatura). 
2. A partir do ano 2000: existe ampla divulgação do Scrum e algumas 
experiências são relatadas. 
3. Em 2001: divulgação do Agile Manifesto e a criação da Agile Alliance. 
 
 
Fundamentos de Engenharia de Software – Página 19 de 71 
4. Em 2008: modelos tradicionais de referências como CMMI, MPS.BR e 
PMBOK, lançam guias para utilização dos seus modelos com práticas ágeis. 
5. A partir de 2010: aparecem relatos de empresas essencialmente ágeis, que 
obtiveram com sucesso certificações de modelos tradicionais, como CMMi, 
MPS.BR e ISO. 
 
Principais mitos 
Existem alguns mitos relacionados a agilidade que ao longo dos anos foram 
desmistificados e/ou esclarecidos, são eles: 
 Ambientes ágeis são ad hoc, caóticos e indisciplinados. 
 Agilidade significa nenhuma documentação. 
 Processos ágeis são imaturos e não são rigorosamente seguidos. 
 Não funcionam para equipes geograficamente distribuídas. 
 Não funcionam com equipes grandes. 
 Não funcionam em empresas que não são de software. 
Neste sentido, é um mito não adotar uma gestão ágil e adotar um processo 
sem documentação. Se existem documentos que devem ser gerados eles devem ser 
previstos como tarefas e sua revisão nos critérios de “done”. Os valores e princípios 
da agilidade se remetem a agregar valor ao cliente; se para o cliente estes 
documentos são importantes, eles serão gerados. 
Os ambientes ágeis, por promoverem um senso comum e espírito de equipe, 
costumam ser bem mais silenciosos e disciplinados que as equipes tradicionais. 
Alguns times possuem regras claras quanto ao uso de celular e conversas paralelas 
fixadas no quadro. 
 
 
Fundamentos de Engenharia de Software – Página 20 de 71 
Normalmente, equipes ágeis são mais maduras e, por isso, sabem da 
importância que deve ser dada as cerimônias e aos indicadores e acompanhamento 
do projeto. 
Equipes geograficamente distribuídas e/ou grandes são um desafio para 
qualquer tipo de abordagem, seja ela tradicional ou ágil. Existem técnicas de 
facilitação e/ou coaching que estão sendo amplamente usadas em projetos que 
facilitam o team building e encurtam distâncias. 
Os congressos ágeis possuem trilhas específicas para áreas que não são de 
TI comentarem e relatarem suas experiências, é possível notar a presença de 
médicos, advogados e até empresas de seguros nestas trilhas. 
 
 Manifesto ágil - Valores e princípios ágeis 
O manifesto ágil divulgado a partir do ano 2000, é amplamente discutido e 
utilizado pelos agilistas. É simples, direto e claro. Abaixo na sua íntegra: 
 Indivíduos e interações mais que processos e ferramentas. 
 Trabalhar no software mais que documentação abrangente. 
 Colaboração do cliente mais que negociação contratual. 
 Responder às mudanças mais que seguir um plano. 
Existem interpretações a respeito deste manifesto, onde traduzem o advérbio 
de intensidade “mais que” por não ter. O manifesto estabelece uma priorização a 
respeito de questões comuns em projetos, inserindo um pensamento de colaboração, 
simplificação e ação. Nesta linha, os princípios ágeis, listados abaixo, detalham este 
pensamento. Estes princípios podem ser resumidos em (aprendizado, feedback e 
desenvolvimento iterativo): 
1. Nossa maior prioridade é satisfazer o cliente por meio da entrega cedo e 
frequente de software com valor. 
 
 
Fundamentos de Engenharia de Software – Página 21 de 71 
O foco no desenvolvimento do produto ou serviço está em prover entregas de 
valor ao cliente, ou seja, a preocupação maior está na satisfação do cliente. Mudar 
sempre que necessário, seja o escopo e/ou o planejamento realizado anteriormente, 
é prioritário, já que entregar algo de valor é mais importante que seguir um 
planejamento inicial. 
2. Mudanças de requisitos são bem-vindas, mesmo em fases tardiasdo 
desenvolvimento. Os processos Ágeis utilizam a mudança em favor da 
vantagem competitiva para o cliente. 
Aceitar a mudança como algo que sempre vai existir e se preparar para lidar 
com ela é fundamental. Quando definimos ciclos curtos de feedback, permite-se essa 
evolução do conhecimento da equipe e do cliente. Um processo de mudança 
burocrático desencoraja e muitas vezes impede uma mudança que é extremamente 
necessária para o sucesso do projeto. 
3. Entregar software em funcionamento com frequência, desde a cada duas 
semanas até a cada dois meses, com uma preferência por prazos mais curtos. 
Entregar de forma frequente partes do produto e/ou serviço, que tenham valor 
para o usuário e/ou cliente. Assim é possível dar um feedback rápido ao cliente, 
reduzindo diversos riscos do projeto (sejam eles de escopo, prazo ou tecnologia). 
Esse princípio se opõe a realizar poucas ou, no limite, uma entrega de valor única, 
apenas ao final do projeto (o ciclo de vida cascata tradicional). 
4. As pessoas do negócio e os desenvolvedores devem trabalhar em conjunto 
diariamente, ao longo do projeto. 
O trabalho em equipe e a constante comunicação é motivada e incentivada a 
ser frequente, objetiva e diária. Esse princípio se opõe a falta de comunicação entre 
usuários e o time, entre o próprio time e entre o time e seus líderes. Pessoas não 
trabalham de forma obscura e individual. 
5. Construa projetos em torno de indivíduos motivados. Dê-lhes o ambiente e o 
suporte que precisam e confie neles para realizarem o trabalho. 
 
 
Fundamentos de Engenharia de Software – Página 22 de 71 
Dar valor as pessoas e a necessidade de motivação diária com o aumento da 
visibilidade e das regras do jogo. Confiança é a chave de um trabalho em equipe. 
6. O método mais eficiente e efetivo de se transmitir informação para e entre uma 
equipe de desenvolvimento é a conversa face a face. 
A melhor forma de comunicação entre membros do time que desenvolve o 
produto e/ou serviço, e entre esse time e o mundo externo, é a comunicação face a 
face. É possível a utilização de ferramentas e técnicas de team building para construir 
algo bem próximo a sinergia existente no face-face. 
7. Software em funcionamento é a principal medida de progresso. 
Ter o principal objetivo de gerar produto ou serviço que possui algum valor ao 
cliente, do que algo que não vai ser utilizado. A documentação deve ser útil e com o 
objetivo de aumentar o valor agregado ao cliente traduzido em partes de produtos 
e/ou serviços. 
8. Os processos Ágeis promovem o desenvolvimento sustentável. Os 
patrocinadores, desenvolvedores e usuários devem ser capazes de manter 
indefinidamente um ritmo constante. 
Deve ser definido um ritmo constante e sustentável para o trabalho do time, 
que desenvolve o produto e/ou serviço, o que se torna possível quando esse ritmo é 
apoiado por toda a cadeia, incluindo a alta direção e os clientes. Horas extras trazem 
desmotivação e falta de qualidade de vida, o que prejudica a produtividade e 
consequentemente o alcance dos objetivos do projeto. 
9. A atenção contínua à excelência técnica e a um bom projeto aumentam a 
agilidade. 
A preocupação com a qualidade deve ser única e constante. A qualidade deve 
ser mais prioritária que o prazo e a produtividade. 
10. Simplicidade, a arte de se maximizar a quantidade de trabalho não feito, é 
essencial. 
 
 
Fundamentos de Engenharia de Software – Página 23 de 71 
Evita-se o desperdício no desenvolvimento do produto e/ou serviço ao não se 
realizar trabalho que não é necessário. Elaborar documentação útil que vai ser 
utilizada e planejar com os detalhes que se conhece são os objetivos deste princípio. 
11. As melhores arquiteturas, requisitos e projetos emergem de equipes que se 
auto-organizam. 
Equipes com maior autonomia e auto-organizadas são mais eficientes. 
Equipes que não estão esperando um comando têm a responsabilidade e liberdade 
de decidir qual a melhor forma de realizar esse trabalho. 
12. Em intervalos de tempo regulares, a equipe reflete sobre como se tornar mais 
efetiva e então refina e ajusta seu comportamento de acordo. 
Para se tornar cada vez mais efetiva, a equipe regularmente inspeciona suas 
formas de trabalho e adapta quando oportunidades de melhoria são identificadas, 
promovendo a melhoria incremental contínua. 
Nesta unidade vamos tentar desvendar aos poucos a sopa de letrinhas ágil 
que já invadiu o mercado e tem sido cada vez mais difundida e utilizada para gestão 
de projetos. Quem nunca ouviu falar de algumas destas siglas? Scrum, Kanban e 
ScrumBAN. 
 
Scrum 
É um processo iterativo e incremental para o desenvolvimento de qualquer 
produto e gerenciamento de qualquer projeto. 
O Scrum resumidamente tem como características: 
 Não é metodologia. 
 É um framework. 
 É adaptável. 
 
 
Fundamentos de Engenharia de Software – Página 24 de 71 
 Promete alta qualidade. 
 Promete alta produtividade. 
 É atitude! 
 O Scrum tem como pilares: 
 Transparência – Tudo que afeta o resultado final deve ser visível para aqueles 
que gerenciam os resultados. 
 Inspeção – O processo deve ser inspecionado com uma frequência suficiente 
para identificar variações inaceitáveis. É importante ressaltar que inspeções 
demais podem atrapalhar dependendo do contexto. 
 Adaptação – O processo deve ser inspecionado com uma frequência suficiente 
para identificar variações inaceitáveis. 
O Scrum é baseado em: 
 Times de Scrum (Papéis) – Product Owner (PO), Scrum Master (SM) e Team 
(Time). 
 Time-Boxes (Eventos) – As cerimônias devem ter um time-box de no máximo 
4 horas (no caso de planejamento de sprints de 4 semanas). 
 Artefatos – Os artefatos User Story, Task Board, Product e Sprint Backlog e 
BurnDown Chart, são utilizados ao longo de todo o ciclo do Scrum. 
 Regras – As regras como critérios de done, aceitação e regras de time são 
estabelecidas e seguidas ao longo do ciclo Scrum (seja de 2 ou 4 semanas). 
 
Times de Scrum 
O Product Owner tem o papel de garantir o ROI, conhecer as necessidades 
do cliente, manter os itens do backlog atualizados e priorizados, aceitar ou rejeitar o 
 
 
Fundamentos de Engenharia de Software – Página 25 de 71 
que foi produzido, ter alta participação no início e no fim do sprint, gerenciar os 
requisitos e planejar entregas (releases), além de estar disponível para esclarecer 
dúvidas. Já o Scrum Master tem responsabilidade de remover os impedimentos do 
time, garantir o uso do Scrum, proteger o time de interferências externas, ensinar a 
maximização do valor agregado, melhorar o dia a dia dos membros do time, combater 
a ilusão do comando-controle, priorizar os impedimentos e removê-los e facilitar as 
reuniões. Finalmente, o time deve ser multidisciplinar, autogerenciado, produzir com 
qualidade e valor para o cliente e ter no máximo nove integrantes — comprometidos, 
comunicativos e responsáveis pelo alcance do objetivo e resolução de conflitos. 
 
O fluxo do Scrum 
O Fluxo do Scrum (Figura 1) é caracterizado por ciclos regulares de 2 ou 4 
semanas no máximo, chamados Sprints. O ciclo de vida pode ser considerado 
evolutivo (o conhecimento sobre os requisitos evolui à medida que os incrementos 
vão sendo executados). 
Os requisitos a serem produzidos em um projeto são mantidos em uma lista 
nomeada Product Backlog. No início de cada Sprint, faz-se um Sprint Planning 
Meeting 1 e 2, ou seja, uma reunião de planejamento na qual o Product Owner prioriza 
os itens que estão no Product Backlog (Sprint Planning 1) e a equipe define e estima 
as tarefas, que ela será capaz de implementar durante o Sprint que está iniciando. As 
tarefas alocadas em um Sprint são incluídas, então, no Sprint Backlog. 
Diariamente, ao longo da Sprint, a equipe faz uma breve reunião 
(normalmente de manhã) chamada Daily Scrum. O objetivo desta reunião é tornar 
visível o andamento das tarefase identificar impedimentos e priorizar o trabalho do 
dia que se inicia. 
Ao final de um Sprint, a equipe apresenta o que foi produzido ao Product 
Owner em uma cerimônia chamada de Sprint Review Meeting. Finalmente, faz-se 
uma Sprint Retrospective, onde são discutidos os pontos de melhoria e ações para a 
 
 
Fundamentos de Engenharia de Software – Página 26 de 71 
próxima Sprint (melhoria contínua). Em seguida, a equipe parte para o planejamento 
do próximo Sprint e então reinicia-se o ciclo. 
Figura 1 – O Fluxo do Scrum. 
 
 
Kanban 
Da mesma forma que o Scrum, a abordagem Kanban também tem seus mitos 
e verdades, sendo eles: 
 O Kanban e Scrum são opostos, na verdade, o Scrum usa um quadro Kanban 
com as opções To-Do , Doing e Done. Logo a utilização das duas abordagens 
já acontece e pode ser maximizada com a utilização de outros conceitos do 
Kanban. 
 O Kanban é vítima da Lei de Parkinson (o trabalho se expande) – É uma 
preocupação válida, mas como estamos sempre medindo (cycle time, 
 
 
Fundamentos de Engenharia de Software – Página 27 de 71 
feedback curto, entregas contínuas), o foco no controle é mantido, evitando 
que o time seja improdutivo. 
 Não existe o time box – Não existe esta exigência, mas deve ser utilizado 
sempre que o fluxo for otimizado. 
 Não existe estimativa – Não existe esta exigência, mas deve ser utilizada 
sempre que apropriado e fizer sentido. 
 O Kanban substitui outras metodologias (Kanban, Crystal, XP, FDD) – O 
Kanban pode ser utilizado com todas estas tecnologias e não substitui o 
Scrum, por exemplo. 
 
Os papéis e características do Kanban 
 Não existem papéis definidos, defina os seus papéis. 
 Respeite o processo atual, seus papéis, responsabilidades e cargos. 
 O Kanban utiliza o conceito Kaizen (melhoria contínua). 
 Mude devagar e sempre. 
 
O fluxo do Kanban 
O Fluxo no Kanban (Figura 2) deve: mapear todo o fluxo de trabalho para 
realizar a entrega de um serviço ou projeto – ciclo de vida, mapear a cadeia de valor, 
focar no “todo”, gerar transparência e possibilitar a identificação de desperdícios. 
 
 
 
 
 
Fundamentos de Engenharia de Software – Página 28 de 71 
Figura 2 – O fluxo do Kanban. 
 
Fonte: site da AdaptWorks 
 
Planejamento 
No fluxo do Kanban, é importante limitar o trabalho em progresso e 
estabelecer em cada raia o WIP (Work in Progress), o Lead Time – Desde a chegada 
do cartão até a entrega e o Tempo de Ciclo, desde a seleção do cartão até a entrega 
(Figura 3). 
Na definição do WIP, quanto menor o número maior a motivação do sistema 
puxado. O sistema “puxado” define que a equipe deve terminar mais do que começar, 
ou seja, realizar as tarefas que estão mais perto do lado direito do que do lado 
esquerdo. Na ordem de prioridade de cima para baixo, o desconforto é dado por 
impedimento de mover para frente os cartões. Para que tenhamos mais trabalhos 
finalizados, os cartões devem ser quebrados em tarefas menores, de no máximo 8 
horas. 
 
 
 
 
Fundamentos de Engenharia de Software – Página 29 de 71 
Figura 3 – Representação do WIP ( Work in Profress) no Fluxo do Kanban. 
 
Antes de iniciar a utilização do Kanban, deve ser estabelecida uma política 
de qualidade, o Poka Yoke (Pocá ioquê) – a automação de fluxos e regras, 
estabelecer padrões e checklists antes de completar as tarefas e prever a análise de 
cada defeito quando este ocorre (stop the line – conceito lean para prevenir novos 
defeitos) (Figura 4). É imprescindível que seja obtido o comprometimento com a 
política e melhoria contínua do processo, todos devem conhecer e se conscientizar 
da importância da qualidade no fluxo. 
Figura 4 – Representação da política de qualidade e checklists. 
 
 
 
Fundamentos de Engenharia de Software – Página 30 de 71 
Autogerenciamento e execução 
Durante a execução do fluxo no Kanban, devem ser ajustadas as cadências 
(sequência, ritmo e sucessão regular), os custos associados a entregas de um 
produto ou serviço e os custos de espera (espera da aprovação, planejamento, 
qualidade, verificação por exemplo). Estes custos de espera prejudicam o feedback 
e o conceito do sistema “puxado”. 
O Fluxo deve ser medido através de indicadores como: Diagrama de Fluxo 
Cumulativo (DFC), Tempo de Ciclo, Índice de Defeitos e Itens Bloqueados. 
O Diagrama de Fluxo Cumulativo (Figura 5) deve ser interpretado das formas 
abaixo: 
 Se a distância entre duas linhas em progresso aumentar, é um sinal de gargalo. 
 Se a linha de backlog estiver mais inclinada que a linha do “Done” significa que 
está entrando mais coisas que podemos entregar. 
É possível utilizar o DFC para medir tempo médio de ciclo e a quantidade de 
itens na fila. 
Figura 5 – Diagrama de Fluxo Cumulativo (DFC). 
 
Ao analisar o Tempo de Ciclo individual, devem ser feitas os seguintes 
questionamentos: “os números indicam consistência?”, “como está a tendência?”, ”É 
 
 
Fundamentos de Engenharia de Software – Página 31 de 71 
possível analisar Outliers ?”, “a data de entrega está aceitável (90% entregues em 1 
semana)?”. 
Já com relação ao indicador “Índice de defeito”, devemos fazer os seguintes 
questionamentos (Figura 6): “por que o número de novos defeitos tem aumentado?” 
e “como o índice alto de defeitos afetou o tempo do ciclo?”. É importante definir metas 
para o índice de defeitos, considerando os objetivos estratégicos e objetivos 
estabelecidos ou não em contrato com os clientes. 
Figura 6 – Gráfico de taxa de defeitos. 
 
Os itens bloqueantes, sua média, devem ser observados ao longo do tempo. 
Podem ser analisados outliers e a causa de médias maiores do que estabelecido na 
meta. 
Diariamente deve ser revista a priorização dos cartões, considerando o custo 
do atraso (a maior prioridade deve ser o item com mais alto item de atraso ou mais 
complexo). Além disso, o item mais prioritário deve estar mais acima no quadro. É 
importante também levar em consideração itens de: maior risco e incerteza, 
necessidades básicas (infraestrutura), tamanho equilibrado, tipo de estória 
equilibrado e dependências. 
 
 
 
Fundamentos de Engenharia de Software – Página 32 de 71 
Identificação de classes de serviços 
Ao definir os cartões deve existir uma em definir os tipos de trabalho, tais 
como: histórias, defeitos, relatórios manuais, tarefas de suporte e instalação. Uma 
outra definição tão importante quanto são as classes de serviço, que podem ser 
agrupadas em: 
 Classe Padrão: defeitos cosméticos e estórias. 
 Classe Prioritária: defeitos críticos e estórias de alta prioridade. 
 Classe de Prazo Fixo: estórias com prioridade se o prazo estiver próximo. 
 Classe Urgente: defeito impeditivos que rompem limites do wip . 
O fluxo deve ser gerenciado com o chamado filtro de decisões Agile, seguindo 
no mínimo estes questionamentos: “Estamos obtendo progresso?”, “Estamos 
encorajando a cultura baseada em confiança?”, “Estamos tratando o WIP como risco 
e não como um ativo?”. 
Também deve se gerenciar o fluxo com o chamado filtro de decisões Lean, 
seguindo no mínimo estes direcionamentos: o valor é mais importante que o fluxo, o 
fluxo é mais importante que eliminação de desperdícios, elimine desperdícios para 
melhorar a eficiência, alivie gargalos e introduza os buffers. É importante estabelecer 
SLAs considerando a base histórica, e deixar bem visível para que todos possam 
conhecer e se comprometer. 
Após realizar essas análises, a equipe deve planejar entregas, otimizar o fluxo 
e experimentar sempre. 
 
Melhoria contínua 
Sempre que necessário a equipe deve fazer melhoria contínua no fluxo e nas 
regras: mude, experimente, ajuste os WIPS, ajuste o quadro e aumente a visibilidade. 
 
 
 
Fundamentos de Engenharia de Software – Página 33 de 71 
ScrumBAN 
A utilização das duas abordagens juntas está cada vez mais sendo adotado 
pelo mercado. É possível perceber que ao adotar o ScrumBAN,os progressos andam 
mais rápidos. Alguns autores classificam o Kanban como sendo uma evolução e o 
Scrum como uma evolução, mais ainda é possível identificar as seguintes vantagens: 
o aumento da qualidade, a inserção das inspeções, a inclusão da análise de causas 
de problemas/defeitos e a diminuição do desperdício. 
A Figura 7 exemplifica graficamente as principais diferenças entre o Scrum, 
Kanban e o ScrumBAN . 
Figura 7 – As três abordagens ágeis e suas características. 
 
Fonte: https://agilewheel.com/tag/scrumban. 
 
 
https://agilewheel.com/tag/scrumban
 
 
Fundamentos de Engenharia de Software – Página 34 de 71 
Planejamento 
Para efetuar um planejamento usando a abordagem ScrumBan, realize os 
seguintes itens: use os papéis do Scrum, planeje considerando que mudanças fazem 
parte do escopo, defina regras de sistema puxado, planeje pequenas iterações de 
planejamento (todos os dias) e crie outros papéis. 
Além destas preocupações, são boas práticas desta abordagem: aumentar o 
quadro, incluir raias de atividades e buffer, não indicar o nome das pessoas nos 
cartões, utilizar o limite o Backlog (WIP) e usar as regras de priorização. 
 
Monitoração 
Durante as reuniões diárias, além dos questionamentos do Scrum, inclua as 
seguintes análises: ache os bloqueadores do fluxo, analise os WIPs, crie o Diagrama 
de Fluxo Cumulativo e analise suas tendências, utilize métricas de Tempo de Ciclo e 
re-priorize. Além disso, faça reuniões do tipo Short Kaizen: Stop the line, follow-up e 
planning. 
 
Melhoria contínua 
No final de cada ciclo Scrum (sprint), faça a retrospectiva e as Reviews, se 
necessário. Inclua nas Reviews a análise das causas dos defeitos. A análise das 
causas dos defeitos pode também ser feita ao longo do Sprint. 
 
XP 
De acordo com o Livro Jornada Ágil e Digital (MUNIZ, ANTONIO e 
IRIGOYEN, ANALIA): 
“O XP foi criado em 1997 por Beck, Ward, Cunningham e Jeffries em 
um contexto empresarial (e não acadêmico). O método consiste, 
resumidamente, em codificar com menor ênfase nos processos 
 
 
Fundamentos de Engenharia de Software – Página 35 de 71 
formais de desenvolvimento e com maior ênfase na engenharia ágil 
de software, além de valorizar a automatização de testes e ser 
flexível para mudanças de requisitos, valorizando o feedback do 
usuário e a qualidade do código. O objetivo principal do XP é a 
criação de software de alta qualidade, eliminando desperdícios e 
orientado a pessoas (WILDT et al., 2015). É composto por um 
conjunto reduzido de práticas de desenvolvimento que se organizam 
em torno de quatro valores básicos inter-relacionados: feedback, 
comunicação, simplicidade e coragem.” 
 
Os valores do XP 
Comunicação: 
 Usa-se o melhor meio possível para comunicação, formal ou não. 
 Preferência à comunicação mais ágil 
 Telefonema é melhor do que e-mail. 
 Presença física é melhor do que remota. 
 Utiliza a comunicação com as respostas mais rápidas possíveis. 
Simplicidade: 
 Incentivo a práticas que reduzam a complexidade do sistema. 
 Solução deve ser sempre a mais simples para se alcançar os objetivos 
esperados: 
‒ Tecnologias, design, algoritmos e técnicas mais simples. 
 Design, processo e código podem ser simplificados a qualquer momento. 
 Não pensar em iterações futuras. 
 
 
 
Fundamentos de Engenharia de Software – Página 36 de 71 
Feedback: 
 Feedback sobre qualidade do código. 
 Testes de unidade, programação em pares e posse coletiva. 
 Feedback sobre estado do desenvolvimento. 
 estórias do usuário final, integração contínua e jogo do planejamento. 
 Permite maior agilidade. 
 Erros detectados e corrigidos imediatamente. 
 Requisitos e prazos reavaliados mais cedo. 
 Permite estimativas mais precisas 
 Maior segurança e menos riscos para investidores. 
Coragem: 
Práticas do XP aumentam a confiança do programador para: 
 Melhorar o design de código que está funcionando para torná-lo mais simples. 
 Jogar fora o código desnecessário. 
 Investir tempo no desenvolvimento de testes. 
 Mexer no design em estágio avançado do projeto. 
 Pedir ajudar aos que sabem mais. 
 Dizer ao cliente que um requisito não vai ser implementado no prazo 
prometido. 
 Abandonar processos formais e fazer design e documentação em forma de 
código. 
 
 
Fundamentos de Engenharia de Software – Página 37 de 71 
As principais práticas de codificação definidas pelo XP são: 
 Revisão permanente do código. 
 Testes automatizados e frequentes. 
 Participação do usuário final. 
 Refatoramento contínuo. 
 Integração contínua. 
 Planejamento, design e redesign a qualquer hora. 
 
 
 
 
 
 
Fundamentos de Engenharia de Software – Página 38 de 71 
Capítulo 4. Principais ferramentas usadas para o ciclo de desenvolvimento de 
software Ágil e DevOps 
Á área de engenharia de software tem buscado, nas últimas décadas, 
ferramentas que apoiem e acelerem a tarefa de desenvolvimento de software. Um 
ponto importante a ser considerado é que, no cenário atual, o software está cada vez 
mais complexo e altamente integrado. Atualmente, os softwares corporativos 
comumente se integram com diversas outras plataformas internas e externas de 
software. Para lidar com essa complexidade, torna-se obrigatória a utilização de 
ferramentas de automação e de apoio ao ganho da produtividade no planejamento, 
construção do software e implantação do software. 
Em 2017 (Little & Herschmann), a partir da consolidação das práticas de 
Devops no mercado corporativo, o Gartner reconsiderou novamente a classificação, 
chegando à conclusão que apenas uma ferramenta isolada não é suficiente para 
incorporar todas as práticas do Devops. Assim, chegou-se a uma extensão da 
classificação de ALM: 
 Devops Toolchain: para engenharia de software, um toolchain é um conjunto 
de ferramentas encadeadas cujo resultado de uma ferramenta se torna entrada 
para a execução de outra ferramenta. Pela definição, não existe estritamente 
a necessidade dessa execução sequencial. Como nenhuma ferramenta 
consegue encadear todas as práticas, deve ser considerado em qual (is) fase 
(s) do Devops é abordado por determinada ferramenta. 
Algumas das ferramentas mais utilizadas para gerenciar o ciclo de vida do 
software Agile e DevOps, são o Jira e o Azure DevOps. O Trello também é muito 
usado, mas não possui todas as características importantes para o ciclo DevOps, a 
saber: 
 Create: armazenamento de repositórios de código, integração contínua e 
configuração de máquinas. 
 Plan: definição de tarefas, planejamento e monitoramento de tarefas com uma 
visão ágil do processo. 
 
 
Fundamentos de Engenharia de Software – Página 39 de 71 
 Monitor: monitoramento das aplicações englobando infraestrutura, 
gerenciamento e análise de APIs e gerenciamento de logs. 
 Configuração: configuração automática de infraestrutura (Infrastructure as 
Code). 
 Release: criação de pipelines de release, implantação e orquestração das 
releases. 
 Preprod: orquestração de ambientes de produção. 
 Verify: automação de testes, análise estática de código, ambientes virtuais de 
testes e práticas de DevSecOps. 
 
Azure DevOps 
O Azure Devops é um produto desenvolvido pela Microsoft para ser uma 
ferramenta que atenda todo o ciclo de vida de desenvolvimento, desde o 
planejamento ágil das demandas, o desenvolvimento do software e a implantação 
automática. Possui integração com diversas ferramentas do mercado através de plug-
ins existentes no marketplace do Azure Devops. Alguns plug-ins são desenvolvidos 
pela Microsoft e outros são fornecidos por terceiros, como o plug-in implantação de 
artefatos de software gerados pelo Azure Devops e publicados na nuvem AWS. Essa 
integração foi desenvolvida pela AWS e disponibilizada no marketplace do Azure 
Devops (Marketplace, 2020). 
Em linhas gerais, o produto inclui como principais características: 
 Ferramentaságeis cobrindo metodologias de projetos como Scrum/Kaban. 
 Gestão e controle de tarefas. 
 Repositórios Git/TFVC para controle de código-fonte. 
 Pipelines de Build/Release para integração contínua/implantação contínua. 
 
 
Fundamentos de Engenharia de Software – Página 40 de 71 
 Arquitetura de agentes distribuídos para build e implantação do código. 
 Tarefas para implantação de qualquer tipo de plataforma de software. 
 Dashboards customizáveis. 
 Módulo Analtyics com geração de diversas visões dos dados integrados a 
ferramenta de BI da Microsoft. 
A tabela abaixo descreve as partes desta solução: 
Azure DevOps 
(antigo Visual 
Studio Team 
Services - 
VSTS) 
Ambiente de desenvolvimento integrado, que permite a 
utilização de conceitos ágeis, integração contínua e 
práticas de DevOps. Possui criação de itens de trabalho, 
bugs, requisitos, tarefas etc. Possui quadros e priorização 
de tarefas. Quadros e métricas ágeis (planejamento de 
sprint, Kanban board etc.). Repositórios GIT ilimitados. 
Integração com IDEs (Eclipse, Visual Studio, Android 
Studio etc.). Integração contínua e implantação. 
Gerenciamento de pacotes. Testes exploratórios. 
 
https://azure.microsoft.com/pt-
br/services/devops/compare-features/ 
https://azure.microsoft.com/pt-
br/pricing/details/devops/azure-devops-services/ 
Test Manager 
Ferramenta de gerenciamento de testes integrados, 
incluindo planejamento, execução e monitoração dos 
testes. Definição de critérios de aceitação e métricas de 
qualidade. 
https://azure.microsoft.com/pt-br/services/devops/compare-features/
https://azure.microsoft.com/pt-br/services/devops/compare-features/
https://azure.microsoft.com/pt-br/pricing/details/devops/azure-devops-services/
https://azure.microsoft.com/pt-br/pricing/details/devops/azure-devops-services/
 
 
Fundamentos de Engenharia de Software – Página 41 de 71 
https://marketplace.visualstudio.com/items? 
itemName=ms.vss-testmanager-web 
Microsoft 
Teams 
Solução de chat e reuniões on-line com recursos para 
hospedar áudio, vídeo e webconferências, e conversar 
com qualquer pessoa dentro ou fora da organização. 
https://products.office.com/pt-br/compare-all-microsoft-
office-products?tab=2 
Wiki 
Wiki do Azure DevOps. 
 
Jira 
A solução ALM Jira é da empresa Atlassian. O relatório do Gartner identificou 
as seguintes observações com relação ao ALM da Atlassian: 
 Adequado para projetos ágeis e tradicionais. 
 Adequado para empresas que não precisam de muitas funcionalidades em 
nível de portfólio. 
 Existem parceiros Atlassian oficiais brasileiros, que podem fornecer suporte e 
instalação das ferramentas. 
 Foco em gerenciamento de tarefas, gerenciamento de defeitos e colaboração. 
 Investimento pesado em integração de funcionalidades. 
 Instalação on-premises ou nuvem. Algumas funcionalidades são exclusivas 
para on-premises. 
 Grande base de clientes. 
 Simples de adotar e altamente flexível e customizável. 
https://marketplace.visualstudio.com/items?%20itemName=ms.vss-testmanager-web
https://marketplace.visualstudio.com/items?%20itemName=ms.vss-testmanager-web
https://products.office.com/pt-br/compare-all-microsoft-office-products?tab=2
https://products.office.com/pt-br/compare-all-microsoft-office-products?tab=2
 
 
Fundamentos de Engenharia de Software – Página 42 de 71 
 Mais de 2000 addons no Marketplace oficial da Atlassian. 
 Ferramentas de colaboração como Hipchat, Confluence e Trello (adquirido 
pela Atlassian em 2017). 
 Bom suporte ao Git e integração contínua com o uso do Bitbucket, permitem 
que empresas implementem práticas do DevOps com a Atlassian. 
 Licenças e política de preços pouco flexível. 
 Complexo de configurar os fluxos de trabalho e relatórios nas ferramentas. 
 Linguagem própria permite filtros e customizações (JIRA Query Language) 
 Atualização de versão on-premises é difícil. 
Esta ferramenta atende às seguintes necessidades: 
 Gestão de Requisitos. 
 Gestão de Testes. 
 Gestão de Documentos. 
 Gestão de Tarefas. 
 Gestão de Fatos técnicos. 
 Gestão de Mudanças. 
 Gestão de Configuração. 
 Geração de Relatórios. 
 Geração de Relatórios de Progresso. 
 Gestão do Ciclo de Vida de Configuração da Ferramenta. 
 
 
 
Fundamentos de Engenharia de Software – Página 43 de 71 
A tabela abaixo descreve cada uma das partes desta solução. 
Atlassian Jira 
Software (Server 
License). 
Viabiliza a execução e gerenciamento do projeto utilizando 
de metodologia Ágil (Scrum ou Kanban). Onde o gestor ou 
chefe de desenvolvimento pode criar e acompanhar, em 
forma de mapa, o andamento das atividades da equipe. 
Permite que a equipe faça envio do código para o software 
de versionamento Atlassian Bitbucket, além de manter a 
equipe sincronizada com as atividades de cada um. 
Ademais, o gestor pode marcar as atividades que tem 
interesse em monitorar o andamento e receber e-mails sobre 
mudanças do estado do mapa, quando é alterado alguma 
atividade que está ocorrendo concomitantemente no projeto. 
https://br.atlassian.com/software/jira/pricing 
Atlassian 
Confluence 
(Server License). 
Software que mantém toda base de conhecimento e 
documentação dos projetos, ou de atividades do suporte 
técnico das equipes, em um único local de fácil localização 
e atualização, integrado com todas as ferramentas da 
Atlassian. 
https://br.atlassian.com/software/confluence/pricing 
Atlassian 
Bitbucket (Server 
License). 
Software para controle de versionamento local, totalmente 
integrado com os projetos de desenvolvimento no Atlassian 
Jira, onde podemos comentar dentro do código fonte 
informando sobre alguma mudança ou melhoramento, 
acompanhamento do gestor sobre novos envios de código 
para o repositório do projeto e visualização do andamento da 
equipe de desenvolvimento. Mudanças no código são 
notificadas em tempo real por e-mail para o gestor do projeto 
e da equipe. 
https://br.atlassian.com/software/jira/pricing
https://br.atlassian.com/software/confluence/pricing
 
 
Fundamentos de Engenharia de Software – Página 44 de 71 
https://br.atlassian.com/software/bitbucket/pricing?tab=clou
d 
Atlassian Bamboo 
(Server License). 
Controla a construção dos softwares, além de manter a 
integridade dele, garantindo à equipe de desenvolvimento 
que o software está disponível para execução e que todas 
as funcionalidades deles estão dentro da normalidade. O 
Bamboo é integrado com o sistema de controle de chamadas 
Atlassian Jira e com o envio de código comentado, além de 
estar de acordo com a plataforma de teste de construção da 
aplicação. 
https://br.atlassian.com/software/bamboo/pricing 
Atlassian Crowd 
(Server License). 
Autentica em um único ponto todos os softwares 
relacionados acima, ademais, podemos melhorar a 
administração e centralizar todas as aplicações atuais em 
um único ponto e utilizando o sistema de autenticação de 
usuários atual, além de possuir um melhor controle das 
permissões de todos os usuários. 
https://www.atlassian.com/software/crowd/pricing 
Atlassian Jira 
Portfólio (Server 
License). 
Mantém toda a equipe informada e atualizada do estado do 
Projeto, de mudanças de escopo ou planejamento, e ajuda 
a prever com precisão qualquer alteração no ambiente de 
trabalho da equipe. Geralmente esses ambientes mudam 
constantemente e, por meio de um poderoso agendador de 
recursos, podemos adaptar a equipe para novas mudanças. 
https://www.atlassian.com/software/jira/portfolio/pricing 
https://br.atlassian.com/software/bitbucket/pricing?tab=cloud
https://br.atlassian.com/software/bitbucket/pricing?tab=cloud
https://br.atlassian.com/software/bamboo/pricing
https://www.atlassian.com/software/crowd/pricing
https://www.atlassian.com/software/jira/portfolio/pricing
 
 
Fundamentos de Engenharia de Software – Página 45 de 71 
Atlassian Jira 
Service Desk 
Ferramenta de gestão de solicitações de demandasde 
serviços de TI. Possui templates pré-configurados de 
processos aos processos de gestão de serviços de TI. 
Integrado ao Jira Software. 
https://br.atlassian.com/software/jira/service-desk/pricing 
Alguns plugin utilizados no Jira e seus principais objetivos: 
 Xray para gestão de testes. 
 Confluence (parte da suíte Atlassian) para gestão de conteúdo. 
 Rmsis para gestão de requisitos. 
 Xporter para geração de relatórios em PDF e suíte office. 
 Structure para gestão de portfólio. 
https://br.atlassian.com/software/jira/service-desk/pricing
 
 
Fundamentos de Engenharia de Software – Página 46 de 71 
Capítulo 5. Introdução ao DevOps 
Nos últimos anos, o valor agregado de garantir a qualidade do produto ao 
longo do ciclo de vida do projeto (as famosas atividades de remoção de defeitos) é 
primordial para o alcance da qualidade e da redução de desperdícios, necessária para 
entregar nossas features ou releases no tempo adequado ao negócio. 
Muitas organizações pensam que a qualidade tem custo alto e bloqueia a 
entrega para o cliente. Estes discursos podem ser rebatidos de diversas formas, mas 
os principais são: “O custo do retrabalho é muito maior do que fazer certo de primeira”; 
“A qualidade e revisões de código evitam que erros ocorram lá na frente, que o custo 
de remoção de defeito é sempre muito maior”. 
Ultimamente estamos percebendo que o mundo mudou, e como o próprio 
Gartner declarou no seu último relatório, as tarefas repetitivas serão feitas por 
serviços inteligentes, as empresas terão em seu quadro de funcionários os decisores 
e os especialistas em algoritmos. 
Só sobreviverão as empresas que souberem escolher tecnologias, 
abordagens e processos que absorvam as constantes mudanças, onde a informação 
parece transformar a cada segundo e um erro pode se transformar em negócios e 
milhões perdidos. 
Como então conseguimos alta qualidade em um prazo competitivo? O 
triângulo de prazo, escopo e qualidade, tão conhecido por todos, parece fazer cada 
vez mais sentido nos dias atuais. Temos que reduzir o prazo e não abrir mão da 
qualidade. O que nos sobra para aumentar a qualidade do produto é priorizar o 
escopo, cuidar das pessoas e automatizar o máximo possível; com o apoio de 
ferramentas especializadas, as tarefas repetitivas e/ou essenciais. 
Estes três pilares (Pessoas, Ferramentas e Cultura) estão no DevOps: deriva 
da junção das palavras “desenvolvimento” e “operações”, como sendo uma prática de 
engenharia de software que possui o intuito de unificar o desenvolvimento e a 
operação de software, através da transparência e colaboração entre pessoas. 
 
 
Fundamentos de Engenharia de Software – Página 47 de 71 
Overview de DevOps 
O objetivo do DevOps, conforme a Figura 8, é tornar os processos mais 
simples, integrar desenvolvedores e profissionais de infraestruturas, unir as equipes 
e aumentar as entregas aos clientes, agregando velocidade e qualidade a elas. 
Figura 8 – Overview do DevOps. 
 
A harmonização das duas equipes e um conglomerado de ferramentas e 
tecnologias, permitem às equipes criar uma cultura de colaboração para fugir dos 
desperdícios e impedimentos, automatizando processos repetitivos. 
O termo DevOps vem da junção das palavras em inglês Development e 
Operations, que significam “desenvolvimento” e “operações”, respectivamente. É uma 
prática de construção de softwares que buscam, portanto, unir essas duas áreas, 
automatizando os processos operacionais em todas as fases da engenharia do 
software. 
 
 
Fundamentos de Engenharia de Software – Página 48 de 71 
Conforme Pressman (2011), qualquer processo de software pode ser 
aplicado a agilidade, seja o processo projetado da forma que a equipe do projeto 
possa adaptar tarefas e melhorar, guiar o planejamento e reduzir tudo, com exceção 
do trabalho mais essencial, mantendo a simplicidade e enfatizando a estratégia da 
entrega incremental. 
O desafio de implementar DevOps não é somente selecionar uma tecnologia, 
mas motivar o setor de tecnologia a se reinventar nos termos de mudança cultural, 
mudar o mindset com apoio motivacional das equipes envolvidas, com respostas 
claras e comprometimento de todos. 
Como afirma Dweck (2017), mindset é uma palavra inglesa que significa 
“pensamento”, “atitude mental”, “moldes mentais”. A forma de pensar, a mente, está 
organizada como o pensamento se organiza e encara as situações da vivência diária. 
A palavra ágil faz sentido ao que se é eficaz e rápido, diligente, trabalhador, aquele 
que acha solução rápida, que consegue se resolver com facilidade. 
A fim de ajudar na implantação do DevOps, existe um princípio chamado de 
“O Princípio das Três Maneiras”. Vamos falar superficialmente deles apenas para 
embasamento do que está por vir adiante nesta apostila. Para mais detalhes neste 
assunto, sugerimos fortemente a leitura do livro Jornada Colaborativa DevOps 
(MUNIZ, 2019), onde cada maneira deste princípio é abordada profundamente. 
 
CALMS 
O termo CALMS foi criado se baseando nas seguintes palavras: Colaboração, 
Automação, Lean, Medição e Compartilhamento. É frequentemente usado para 
realização de uma análise da organização e, em paralelo, sua utilização em diversas 
aplicações. A estrutura do CALMS abrange todas as partes interessadas no DevOps, 
incluindo negócios, operações, qualidade, segurança, equipes de desenvolvimento 
etc., e coletivamente realizam a entrega, implantação e integração dos processos 
automatizados que fazem sentido para os clientes. 
 
 
Fundamentos de Engenharia de Software – Página 49 de 71 
Segundo o livro Jornada Devops, o acrônimo CALMS é muito conhecido para 
representar a cultura DevOps. Foi criado em 2010 como CAMS por John Willis e 
Damon Edwards. Posteriormente, esse termo foi aperfeiçoado por Jez Humble, com 
a inclusão do L para destacar a importância do Lean para melhoria contínua e 
processos enxutos. 
Como será que devemos aplicar CALMS nas organizações? Existem algumas 
maneiras aos quais o CALMS pode ser aplicado ao DevOps para empresas, 
pensando na melhora ou na mudança estrutural, visando a melhoria de práticas 
DevOps ou até mesmo sua implantação. 
 Cultura: integrando as equipes, melhorando a comunicação e relacionamento. 
Sem segregação. 
 Automação: automatização de processos manuais. 
 Lean: produção em lotes pequenos com grande valor para o cliente. 
 Medição: monitoramento, melhoria e telemetria para análise dos andamentos 
dos processos. 
 Sharing: boa comunicação, feedback, relacionamento entre a equipe e o 
cliente. 
 
 DevOps – Primeira Maneira 
A primeira maneira tem como objetivo acelerar o fluxo do Desenvolvimento 
(esquerda) para Operações e Clientes (direita), como mostra a Figura 9 abaixo. 
 
 
 
 
 
 
Fundamentos de Engenharia de Software – Página 50 de 71 
Figura 9 – Primeira Maneira. 
 
Fonte: adaptado de (MUNIZ, 2019). 
Aqui, o objetivo está na entrega rápida de valor para o cliente, levando em 
consideração toda organização e não em departamentos apartados. Desde a 
concepção até o valor ser entregue ao cliente. E como alcançar esse objetivo? 
Através de feedback rápido. O quanto antes termos um feedback, seja negativo ou 
positivo, melhor! Aqui listamos alguns princípios e práticas que ajudam a alcançar 
esse objetivo, como: 
 Limitar o trabalho em execução (WIP - Work in Progress): 
‒ Com essa prática é possível focar no que realmente importa, garantindo 
assim mais qualidade, pois o time está mais focado em uma única 
tarefa/projeto, do que em diversas(os). 
 Tornar o trabalho visível. 
 
Infraestrutura como código (IaC). 
 Código e configurações dentro do controle de versão. 
 Criação automatizada e sob demanda (self-service) em todos os ambientes, 
evitando trabalho manual. 
 
 
Fundamentos de Engenharia de Software – Página 51 de 71 
 Todos os estágios do fluxo de valor com ambientes iguais ou semelhantes aode produção. 
 Infraestrutura imutável: foco em recriar todo o ambiente de produção de forma 
rápida, em vez de realizar alterações. 
 
IaaS, SaaS e PaaS 
 IaaS é a mais simples: 
‒ Oferece infraestrutura de TI automatizada e escalonável – 
armazenamento, hospedagem e redes – de seus próprios servidores 
globais, cobrando apenas pelo o que o usuário consome. 
‒ Não precisa adquirir licença de software ou servidores e alocar recursos 
conforme a necessidade. 
‒ Dominado pela Amazon (AWS – 38% do mercado), Microsoft (18%), 
Google (9%) e Alibaba (6%). 
 PaaS é mais difícil de ser definido: 
‒ Oferece os conceitos básicos de IaaS. 
‒ Além disso, oferecem ferramentas e recursos para desenvolver e 
gerenciar aplicativos com segurança, sem precisar se preocupar com a 
infraestrutura: Sistema Operacional, Compilação testes. 
‒ Exemplo: Os servidores que hospedam sites são exemplos de PaaS. 
‒ A solução Azure para desenvolvimento de software: Azure DevOps + 
Azure Services. 
 SaaS é mais fácil: 
 
 
Fundamentos de Engenharia de Software – Página 52 de 71 
‒ O Software como Serviço (SaaS) é o local onde um software é 
hospedado por terceiros e pode ser acessado pela web, geralmente 
bastando um login. 
‒ Plano de assinatura e utiliza os programas necessários para os 
negócios. 
‒ É interessante para o uso de aplicativos específicos. 
 
 
 
 
 
 
Fonte: https://azure.microsoft.com/. 
 
Vantagens do PaaS 
 Ao fornecer infraestrutura como serviço, PaaS oferece as mesmas vantagens 
que o IaaS. Seus recursos adicionais – middleware, ferramentas de 
desenvolvimento e outras ferramentas de negócios – dão ainda mais 
vantagens. 
 Reduza o tempo de codificação. As ferramentas de desenvolvimento PaaS 
podem reduzir o tempo levado para codificar novos aplicativos com 
componentes de aplicativos pré-codificados inseridos na plataforma, como 
fluxo de trabalho, serviços de diretório, recursos de segurança, pesquisa etc. 
Apps/aplicativos 
hospedados 
Ferramentas de 
desenvolvimento, 
gerenciamento de 
banco de dados, 
análise de negócios 
Sistemas 
operacionais 
Servidores e 
armazenamento 
Seguran
ça/firewalls de 
rede 
Construção/
planta física do 
datacenter 
Segurança
/firewalls 
de rede 
Construção/planta 
física do datacenter 
https://azure.microsoft.com/
 
 
Fundamentos de Engenharia de Software – Página 53 de 71 
 Adicione funcionalidades de desenvolvimento sem adicionar 
funcionários. Componentes da Plataforma como Serviço dão à sua equipe de 
desenvolvimento novas funcionalidades sem precisar adicionar funcionários 
com as habilidades necessárias. 
 Desenvolvimento simplificado para diversas plataformas, incluindo 
móveis. Alguns provedores fornecem opções de desenvolvimento para 
diversas plataformas, como computadores, dispositivos móveis e 
navegadores, tornando aplicativos de plataforma cruzada mais rápidos e fáceis 
de serem desenvolvidos. 
 Use ferramentas sofisticadas de forma acessível. Um modelo pago conforme 
o uso, permite que pessoas ou organizações usem software de 
desenvolvimento sofisticado e ferramentas de análise e business intelligence 
que não poderiam comprar por completo. 
 Suporte a equipes de desenvolvimento distribuído geograficamente. Como o 
ambiente de desenvolvimento é acessado pela Internet, equipes de 
desenvolvimento podem trabalhar em conjunto em problemas, mesmo quando 
os membros da equipe estiverem em locais remotos. 
 Gerencie com eficácia o ciclo de vida do aplicativo. PaaS fornece todas as 
funcionalidades que você precisa para dar suporte ao ciclo de vida 
completo do aplicativo Web: compilação, teste, implantação, gerenciamento e 
atualização, no mesmo ambiente integrado. 
Serverless 
 Ainda existem servidores apesar do nome.  
 O desenvolvedor não se preocupa em configurar os outros aspectos de infra 
onde a sua aplicação vai rodar. 
 Podem ser divididos em: Backend as a Service (BaaS) e Function as a Service 
(FaaS). 
 
 
Fundamentos de Engenharia de Software – Página 54 de 71 
 Você paga pelo uso (cada vez que a função é executada). 
 Frameworks Serverless. 
Os principais frameworks do mercado são: 
1) Serverless é um framework web e open-source – Node.js. 
‒ Incialmente era destinado exclusivamente para a criação de aplicações 
para o AWS Lambda, a plataforma da Amazon Web Services de 
serverless cloud computing. 
‒ Agora está compatibilizado com outros fornecedores de Cloud: 
Microsoft Azure, IBM BlueMix, Google Cloud, Oracle Cloud, entre 
outros. 
‒ Cuidado: ao usar não se esqueça de que é diferente de um 
desenvolvimento para Cloud Tradicional. 
2) Up também é um framework open source. 
‒ Não tem funcionalidades. 
‒ Adapta seu código para rodar na arquitetura serverless. 
‒ Cuidado: seu código não poderá utilizar as funcionalidades especiais 
dos provedores serverless. 
Quando você está usando FaaS, compartilha o tempo de execução com 
outras pessoas. Por exemplo: quando sua “função” é escrita em JavaScript, esta parte 
do código será executada no mesmo servidor node.js que as “funções” de outros 
usuários deste FaaS (isso pode ser diferente para alguns fornecedores). Ao usar o 
BaaS, você compartilha o mesmo BaaS. 
 
 
Fundamentos de Engenharia de Software – Página 55 de 71 
 
 
 
Fonte: https://specify.io/concepts/serverless-baas-faas. 
 
 
https://specify.io/concepts/serverless-baas-faas
 
 
Fundamentos de Engenharia de Software – Página 56 de 71 
 
Fonte: Livro Jornada DevOps (MUNIZ et al., 2019). 
Devemos priorizar os testes unitários por terem a execução mais rápida do 
que os testes de aceite e integração. Além de economizar tempo, outro grande 
benefício é que os desenvolvedores recebem feedback de imediato no teste unitário 
e fica mais eficiente a correção na origem. 
 
Estratégia de Branching 
 
Fonte: Livro Jornada DevOps (MUNIZ et al., 2019). 
 
 
 
Fundamentos de Engenharia de Software – Página 57 de 71 
Categorias de liberação (Release) 
É importante que o time planeje a release ou a implantação de um pacote, e 
defina, junto com a operação, formas de reversão do deploy em caso de algum 
problema detectado. Alguns exemplos de reversão são: release canário (implantar a 
versão anterior) ou alternância de recursos/feature toggle (incluir na aplicação uma 
função de ligar/desligar a funcionalidade sem precisar voltar a versão anterior à 
implantação). Em caso de maturidade em testes automatizados com alta cobertura, é 
possível seguir com o Fix Forward, consertar o código imediatamente e implantar 
seguindo as regras da pipeline para entrega contínua. 
Podem ser de duas formas: 
 Baseado no Ambiente: 
Há dois ou mais ambientes e apenas um fica ativo para os clientes (Ex.: 
balanceadores) - Azul verde (Blue-green) e Canário (Canary). 
Figura 10 – Release Azul Verde e Canário. 
 
 
 
Fundamentos de Engenharia de Software – Página 58 de 71 
 
Fonte: Livro Jornada DevOps (MUNIZ et al., 2019). 
 Baseado no aplicativo: 
‒ Novas funcionalidades de forma seletiva, usando configurações simples 
(não precisa fazer deploy). 
‒ Alternância de recursos (Feature toogles) e Lançamento escuro. 
Alternância de Recursos: 
 Habilita e desabilita recursos da aplicação de acordo com critérios definidos 
(Ex.: funcionário, localidade). 
 Usa instrução condicional através de parâmetro ou configuração, sem 
necessidade de deploy. 
 Permite o lançamento escuro: 
‒ Implantação de recursos na produção, para avaliar resultados sem 
usuário perceber. 
 
 
 
 
Fundamentos de Engenharia de Software – Página 59 de 71 
Arquitetura de baixo risco 
Figura 11 – Vantagens e desvantagens de cada tipo de arquitetura. 
 
Fonte: Livro Jornada DevOps (MUNIZ et al., 2019). 
 
DevOps - Segunda Maneira 
Como mostra na Figura 12 abaixo, a segunda maneira tem como objetivo o 
rápido feedback em todos os estágios do fluxo de um produto. Quanto mais rápido o 
feedback,mais rápido sabemos se acertamos e erramos, e mais rápido ainda 
podemos ajustar problemas e erros. Trazer o conhecimento e o aprendizado de 
segurança, desenvolvimento da operação e qualidade encontrado por telemetria, 
experiência do cliente, criação de ambiente de forma automatizada e rápida, vão ser 
insumos fundamentais para que o fluxo seja cada vez mais contínuo e automatizado. 
 
 
 
Fundamentos de Engenharia de Software – Página 60 de 71 
Figura 12 – Segunda Maneira. 
 
Fonte: adaptado de (MUNIZ, 2019). 
Aqui listamos e detalhamos um pouco mais, alguns princípios e práticas que 
ajudam alcançar esse objetivo, como: 
 Telemetria: a telemetria se apoia principalmente na análise do risco de 
liberação de versões com o feedback de eventos, métricas e registros em toda 
a cadeia do fluxo. Monitoramento proativo, onde são detectadas 
vulnerabilidades em diversos ambientes como feedback para o 
desenvolvimento. É importante que tenhamos o conceito telemetria self-
service, ou seja, indicadores disponíveis para todos os envolvidos no fluxo: 
democratizando este tipo de feedback. O framework de monitoramento possui 
métricas de diversos tipos: aplicativo, atividades de negócio e sistema 
operacional. 
 Visão clara do fluxo e o trabalho diário de desenvolvedores e operação, juntos, 
todos são responsáveis pela melhoria contínua e condução proativa de 
verificações. 
 Gemba: ir e ver com os seus próprios olhos o que está acontecendo para 
propor melhorias e/ou ajustes. Por exemplo: se o problema é na utilização do 
aplicativo do cliente, gere empatia e vá até o cliente para entender qual é a 
dificuldade real. 
 
 
Fundamentos de Engenharia de Software – Página 61 de 71 
 Corda de Andon: sempre que um problema é detectado ao longo do fluxo, 
todos se juntam para resolver o problema. 
 Plantão 24x7 compartilhado: mesmo que tenhamos uma boa cobertura de 
testes automatizados, isso não garante zero erros em produção. Mesmo que 
vejamos somente a sustentação envolvida quando acontece a implantação em 
produção, é importante que todos os participantes do fluxo de valor 
compartilhem as responsabilidades para resolver os incidentes em produção. 
Esta prática gera empatia e aprendizado. 
 Listas de revisão de segurança (SRE Google): uma prática bastante popular e 
implementada pela Google e o papel do SRE é o seu checklist de revisão de 
segurança (LRR: Launch Readiness Review e o HRR: Handoff Readiness 
Review), onde se avalia a prontidão de um software que foi implantado em 
produção, para ser direcionada à equipe de sustentação/manutenção. 
 Testes A/B: os testes A/B podem ser aplicados através de formulários, 
pesquisas, entrevistas ou qualquer outro meio que permita coletar os dados de 
feedback do cliente sobre uma funcionalidade ou futura funcionalidade de um 
aplicativo. O Teste A/B é bastante útil quando desejamos experimentar novos 
recursos e tomar decisões com base em fatos e dados. 
 Desenvolvimento por hipóteses: o uso de hipóteses é bastante importante para 
confirmar se novas funcionalidades serão realmente adotadas pelos clientes. 
 Revisão de código: uma das formas mais comuns de revisão de código é o Pull 
Request, onde o desenvolvedor solicita revisão de forma colaborativa após 
concluir mudança no código, esse processo é muito usado no GitHub. 
 
 
 
 
Fundamentos de Engenharia de Software – Página 62 de 71 
DevOps - Terceira Maneira 
A terceira maneira tem como objetivo principal criar uma cultura de confiança 
para que seja possível errar e aprender com os erros. É importante correr riscos para 
potencializar um aprendizado contínuo. A terceira maneira é fundamental para que a 
cultura DevOps esteja presente e sempre acesa nos times. Sem ela, a cultura de 
automação e colaboração vai se enfraquecendo ao longo do tempo. Temos que nos 
habituar e, consequentemente, habituar os times em que trabalhamos a melhorar 
continuamente até a perfeição. Como a perfeição não existe, a melhoria contínua não 
terá fim. 
Figura 13 – Terceira Maneira. 
 
Fonte: adaptado de (MUNIZ, 2019). 
Conforme figura acima, alguns dos principais princípios e práticas da terceira 
maneira são: 
 Aprendizado com falhas: o foco é desenvolver aprendizado contínuo nas 
equipes e evitar a cultura de culpa e punição. A Netflix criou um processo de 
injeção de falhas chamado Chaos Monkey, que aumenta a resiliência (MUNIZ, 
2019). 
 Cultura justa: existem algumas importantes dicas para promover esta cultura 
justa, são elas: nunca nomear ou envergonhar quem é o culpado da falha; 
 
 
Fundamentos de Engenharia de Software – Página 63 de 71 
incentivar quem compartilha problemas do sistema; criar confiança para que a 
equipe aprenda com problemas; lições aprendidas sem culpa e injeção 
controlada de falhas em produção. 
 Reunião post-mortem: após a solução de incidentes, o objetivo é entender e 
divulgar ações que deram certo, ações que podem ser aprimoradas, erros e 
medidas para evitar recorrência. É muito importante publicar e divulgar o 
resultado da reunião. 
 Dias de Jogos: esse conceito vem da engenharia da resiliência, cujo objetivo 
é criar exercícios programados para aumentar a resiliência através da injeção 
de falhas de grande escala em sistemas críticos. 
 Divulgar e compartilhar aprendizados (descobertas) entre os times: empresas 
de alto desempenho obtém os mesmos resultados (ou melhores), refinando as 
operações diárias, introduzindo tensão continuamente para aumentar o 
desempenho e, assim, gerando mais resiliência nos seus sistemas. 
 
Motivação 
Segundo o Livro Jornada Ágil e Digital (MUNIZ; IRIGOYEN, 2020), em 1970, 
Paul McLean (1990), psiquiatra e neurocientista americano, apresentou uma teoria 
chamada: Teoria do Cérebro Trino, que mostra pela primeira vez nosso cérebro como 
uma estrutura dividida em 3 (três) partes distintas: Neocórtex, Sistema Límbico e 
Cérebro Reptiliano (Figura 14). 
 
 
 
Fundamentos de Engenharia de Software – Página 64 de 71 
Figura 14 – Representação do Cérebro Trino. 
 
Fonte: Livro Jornada Ágil e Digital (MUNIZ; IRIGOYEN, 2019). 
O sistema Neocórtex tem como principal responsabilidade o raciocínio lógico 
e, por isso, somos capazes de ler, escrever e nos comunicar. 
O sistema límbico, que é conhecido como cérebro emocional, é o responsável 
por nossas emoções, pelo aprendizado, pela memória e pelo nosso comportamento 
social. 
Como é possível observar pela figura, o nosso sistema reptiliano é o primeiro 
a agir, é o nosso instinto, quando estamos em alguma situação de perigo ou sob 
pressão, nossa primeira reação é a defensiva: agir sem pensar somente para nos 
defender. 
Isso significa que, pela nossa natureza humana e por primeira reação: 
 Somos, por natureza, avessos às mudanças. 
 Aprendizado gera desconforto no início, sair da zona de conforto é sempre um 
desafio. 
 O seu cérebro vai criar mil razões para impedi-lo de mudar os hábitos. 
 
 
Fundamentos de Engenharia de Software – Página 65 de 71 
 A sensação de prazer ao conseguir melhorar, com fatos e dados, não tem 
preço: pare, reflita e mude; use mais o límbico e o néocortex para “treinar” o 
cérebro a aprender. 
 
A importância da Terceira Maneira 
Para que seja possível criar aprendizado e implantar o loop de feedback 
contínuo, as práticas da Terceira Maneira são imprescindíveis para a manutenção da 
colaboração e da automação. Sem tempo para melhoria contínua e aprendizado, os 
times acabam não evoluindo na primeira e na segunda maneira. 
Para que este aprendizado seja possível, precisamos correr riscos, ter uma 
cultura justa e buscar fatos e dados para tomar qualquer tipo de decisão. 
Para que possamos correr riscos, aprender e não ativar nosso lado 
“reptiliano”, precisamos de segurança psicológica. Conforme ilustrado na Figura 15, 
para que o aprendizado aconteça, segurança psicológica e responsabilidades 
precisam andar

Outros materiais