Buscar

Apostila - Módulo 3 - 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 32 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 32 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 32 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

Técnicas e Práticas Ágeis de Desenvolvimento de 
Software 
 
 
Bootcamp Engenheiro de Software Ágil 
 
 
 
 
Antonio Almeida 
 
 
 
 
 
2021 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 2 de 32 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software 
Bootcamp Engenheiro de Software Ágil 
Antonio Almeida 
© Copyright do Instituto de Gestão e Tecnologia da Informação. 
Todos os direitos reservados. 
 
 
 
 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 3 de 32 
Sumário 
Capítulo 1. Técnicas de Estimativa Ágil ................................................................ 5 
O que é Estimativa de Software? ............................................................................ 5 
O que é Estimativa Ágil? ......................................................................................... 6 
Planning Game ................................................................................................... 7 
Planning Poker .................................................................................................... 9 
T-shirt Sizes ...................................................................................................... 11 
Capítulo 2. Gerência de Configuração de Software ............................................ 13 
O que é Gerência de Configuração de Software .................................................. 13 
Gestão de Mudanças ........................................................................................ 15 
Introdução ao Jira Software .............................................................................. 16 
Controle de Versão ........................................................................................... 16 
Introdução e Instalação do GIT ......................................................................... 16 
Integração com o GITHUB ................................................................................ 17 
Introdução e Instalação do Visual Studio Code ................................................ 17 
Integração Continua .......................................................................................... 18 
Introdução e Instalação do Jenkins ................................................................... 18 
Criação de Pipeline no Jenkins ......................................................................... 19 
Capitulo 3. Refatoração de Código .......................................................................... 20 
Bad Smells ............................................................................................................ 20 
Capitulo 4. Programação em Par ............................................................................. 21 
Capitulo 5. Aprovisionamento e Gerenciamento de Infraestrutura Ágil .................... 23 
Breve Introdução ao DevOps ................................................................................ 23 
História da Cloud .................................................................................................. 24 
Introdução à AWS ................................................................................................. 26 
Capítulo 6. Infraestrutura como código .................................................................... 27 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 4 de 32 
IaC ........................................................................................................................ 27 
Terraform .............................................................................................................. 28 
Referências.............. ................................................................................................ 31 
 
 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 5 de 32 
Capítulo 1. Técnicas de Estimativa Ágil 
A estimativa de tempo é um dos indicadores de software mais comumente 
usados, pois a partir desta dimensão, a carga de trabalho, o tempo e o custo 
necessários para o desenvolvimento do software podem ser definidos. 
A enorme demanda por software de alta qualidade e desenvolvimento 
oportuno, desde o planejamento, gerenciamento até a entrega e manutenção, mudou 
o processo de criação de software. Atualmente, as empresas que são incapazes de 
se adaptar a grandes quantidades de informações, tanto estratégica quanto 
operacionalmente, muitas vezes não conseguem concluir as tarefas no prazo, 
reduzem a qualidade do produto e frequentemente não têm um bom relacionamento 
com os clientes. Para Tavares, Carvalho e Castro (2004), estes podem ser alguns 
dos maiores desafios para as organizações que desenvolvem software. 
 Existem várias técnicas que podem ser usadas para uma estimativa ágil de 
tempo e esforço. Normalmente, a equipe conduzirá vários sprints para padronizar 
seus métodos de estimativa. Mas, uma vez definido, existem várias maneiras 
importantes de usá-lo. 
A estimativa de tempo torna-se necessária desde o início do projeto, 
passando pela fase de desenvolvimento e testes. Este cenário tem exigido a adoção 
de técnicas para estimar tempo e esforço das atividades que envolvem a criação de 
sistemas, planejando-se produtividade, previsão e priorização (LEISHMAN, 2008). 
O que é Estimativa de Software? 
Segundo Pressman (2006), estimativa pode ser considerada como a tentativa 
de determinar quanto dinheiro, esforço, recursos e tempo serão necessários para 
construir um sistema ou produto. O valor estimado é um valor aproximado obtido 
através de algum cálculo ou não, é realizado sobre algo e pode ser usado como 
informação. Mesmo estimativas incompletas ou incertas podem ser usadas, porque 
ao usar estimativas, o tamanho do erro (independentemente do tamanho) deve ser 
considerado 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 6 de 32 
Estimar o software nunca foi uma tarefa fácil porque, na maioria dos casos, 
as equipes usam apenas informações qualitativas para fazer previsões quantitativas. 
No entanto, a estimativa não precisa ser aleatória, pois existem técnicas disponíveis 
na literatura que podem ser utilizadas. 
Segundo Pressman (2006): “Apesar de estimar ser tanto arte como ciência, 
essa importante atividade não precisa ser conduzida de modo aleatório. Já existem 
técnicas úteis para estimativa de tempo e esforço”. Existem vários fatores que 
impedem os desenvolvedores de estimar o software corretamente: 
 Requisitos incompletos e muito subjetivos; 
 Os desenvolvedores não têm conhecimento das métricas de software 
aplicáveis às suas tarefas; 
 Um gerente de projeto que espera obter uma estimativa repentina sem dar 
tempo para uma análise de demanda; 
 A função, projeto ou produto é muito diferente do produto desenvolvido 
anteriormente, portanto não pode ser estimado por analogia. 
Estimativas incorretas podem afetar a entrega de várias maneiras: 
eventualmente resultando em cronogramas imprecisos (o tempo é muito curto ou 
muito longo, deixando a equipe ociosa), os projetos incorrem em mais custos e horas 
extras são necessárias para entregar no prazo acordado pelo cliente e muitos mais. 
 
O que é Estimativa Ágil? 
Uma boa estimativa pode ser a base para um bom plano. Segundo Leishman 
(2008), existem três motivos para equipes ágeis estimarem: previsão, performance e 
priorização. Em outras palavras, preveja quanto tempo e esforço a equipe gastará, 
determine o ganho ou perda de desempenho no processo de desenvolvimento com 
base no histórico da equipe e relate o custo de implementação para que possam 
priorizar projetos que agreguem valor aos clientes. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 7 de 32 
A estimativa ágil visa atribuir fatores de custo a todas as transações na 
carteira. Essa ponderação de custo pode ser usada para medir a velocidade daequipe, tomar melhores decisões sobre a prioridade de recursos ou fazer previsões e 
roteiros. 
É desejável que tenha conhecimento prévio da técnica e uma visão macro do 
escopo do projeto, e quando possível uma base histórica onde seja possível consultar 
as estimativas em atividades semelhantes já finalizadas (SOMMERVILLE, 2003). 
Em muitos casos, existem problemas com o uso de estimativas. A primeira é 
organizar o rastreamento do tempo do aplicativo e comparar o tempo real aplicado à 
estória com o valor estimado. Mesmo que as estimativas sejam feitas em horas, é 
importante que a equipe avalie a entrega com base no compromisso e na capacidade 
de manter ou aumentar a velocidade, em vez de verificar as estimativas individuais. 
Em segundo lugar, quando os gerentes tentam usar estimativas para alocar 
recursos. Eles podem sugerir que uma pessoa da equipe pode fazer mais trabalho 
porque recebeu menos pontos em comparação com sprints anteriores. Essa lógica é 
seriamente falha, pois a equipe ágil não considerou a participação de todos os 
membros da equipe ao concluir o caso do usuário. Essa forma de gerenciamento de 
recursos é equivalente ao microgerenciamento, mas impede o sucesso de equipes 
ágeis, e equipes ágeis assumem compromissos honestos com base em equipes 
confiáveis. 
Planning Game 
No Planning Game, a equipe de desenvolvimento e a equipe do cliente 
planejam o software com eficácia. Nesta atividade, cada equipe tem um papel muito 
claro: a equipe do cliente é responsável por definir o escopo e a prioridade, e a equipe 
de desenvolvimento fornece as estimativas. 
Muitas vezes, é difícil concentrar a equipe apenas na função. Portanto, o 
coach da equipe de desenvolvimento deve alertar sobre possíveis desvios. É comum 
que os clientes esperem que a equipe de desenvolvimento faça estimativas. A frase 
"Eu quero essa funcionalidade pronta em tantos dias" é comum. Acontece que o 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 8 de 32 
cliente não possui o conhecimento técnico necessário para fornecer estimativas de 
desenvolvimento. 
Este é um ponto que deve estar sempre na cabeça da pessoa que está sendo 
coach naquele momento, ela deve guiar com segurança a sua equipe, por outro lado 
não deve aceitar tudo do cliente, para não prejudicar a credibilidade do projeto nas 
circunstâncias de atrasos constantes. Apenas colocar mais desenvolvedores no 
projeto, não significa que irão realizar muitas tarefas mais rapidamente. Com os 
papéis das duas equipes claros, é possível entender o que realmente está 
acontecendo no Planning Game. O cliente deve ter as estórias definidas, porque esta 
atividade é baseada nelas. 
Se uma estória for muito grande para ser iterada ou não puder ser estimada 
corretamente, isso significa que a story é muito complexa e deve ser dividida em 
stories menores. Por outro lado, se for muito pequena, deve ser adicionada a outras 
user stories para formar uma nova com o tamanho adequado. 
Normalmente, entende-se por adequadas, stories aquelas que podem ser 
desenvolvidas em dois ou até três dias de programação. A relação entre a função 
entregue e a função que o cliente requer para iteração é chamada de velocity 
(velocidade) da equipe de desenvolvimento. Neste cenário, o cliente deverá definir o 
escopo/atividades para a próxima iteração e então priorizar quais atividades deseja 
alcançar ao fim da iteração. Eles devem levar em consideração o seguinte princípio: 
devem primeiro, obter o que trará o maior retorno ou seja, mais valor para o negócio. 
Durante o processo de desenvolvimento, as perguntas dos desenvolvedores 
podem gerar novas stories. Além disso, podem existir requisitos muito técnicos como, 
a criação de uma nova tabela para o banco de dados, ou uma nova primary key que 
podem gerar tarefas de engenharia. Elas também devem ser levadas em 
consideração nas próximas iterações. 
Nas reuniões de planning game, essas informações também são passadas 
para o cliente: informações sobre o andamento da versão atual e quaisquer atrasos 
no andamento do desenvolvimento para que o cliente possa decidir quais recursos 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 9 de 32 
devem ser retidos para a próxima versão, ou para que os desenvolvedores possam 
fornecer novas estimativas para stories que ainda não foram implementadas. Este é 
um ponto importante: se você não pode entregar tudo prometido na data de entrega 
de cada iteração, você deve negociar com o cliente qual story deve ser usada para a 
próxima e não atrasar a data de entrega da iteração. 
Planning Poker 
O Planning Poker é uma técnica de avaliação que também se concentra em 
métodos ágeis, principalmente no Scrum. Grenning afirma que o Planning Poker ou, 
como também é comumente conhecido, Scrum Poker é a melhor ferramenta 
encontrada para se estimar tamanho de projetos em metodologias ágeis 
(GRENNING, 2002). 
Ele pode ser considerado uma combinação de três métodos de avaliação ágil 
menos usados: opinião de especialistas, analogia e desagregação. Inclui a obtenção 
de estimativas por meio de jogos de cartas. A ideia principal é permitir que todos os 
membros da equipe de desenvolvimento (programadores, testadores, designers, 
analistas, etc.) participem, expressem suas opiniões sobre a complexidade e levem 
em consideração o tempo e a energia gastos na pontuação da história e após chegar 
a um consenso. Cada membro tem doze cartas disponíveis para uso, e sua sequência 
de numeração é semelhante à sequência dos números de Fibonacci. A figura abaixo 
exemplifica um possível baralho para a utilização no Planning Poker, vale lembrar que 
existem vários outros tipos e que este é apenas uma representação de um deles. 
Figura 1 – Cartas de Planning Poker. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 10 de 32 
 
Fonte: DevMedia. 
Para começar, podemos dizer que valores maiores que 20 são considerados 
altos, outra opção é elaborar mais a história e dividi-la em partes menores para reduzir 
sua complexidade. Recomenda-se que, no final do Planning Poker, a estória iterativa 
possa ter um certo valor no intervalo de 1/2 a 13. No entanto, é necessário evitar outro 
problema que é, deixar que as estórias se tornarem muito pequenas, pois isso 
provavelmente tornará a equipe vítima do micro gerenciamento (KNIBERG, 2009). 
Algumas cartas do Planning Poker podem conter fins especiais. A carta "0" 
(zero) significa que a estória acabou ou é pequena demais e pode ser resolvida em 
alguns minutos. A carta com “?” (pergunta) indica que o participante não possui o 
conhecimento adequado para estimar o esforço necessário para a estória. 
Durante o Planning Poker, as rodadas devem ser feitas com base nesses 
valores para obter uma estimativa da estória. No Scrum, essa função é de 
responsabilidade do Scrum Master. Por sua vez, Product Owner será responsável por 
explicar as estórias, o que é muito importante para eliminar possíveis dúvidas. 
Segundo CTIC-UFPA (2011) e Cohn (2005), a equipe Scrum deve seguir as 
seguintes etapas ao avaliar a estória: 
 Pontuar a estória que mais se aproxima do valor “3” (três). 
https://www.devmedia.com.br/planning-poker-e-ideal-day-tecnicas-de-abordagem-de-estimativa-agil/31220
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 11 de 32 
 O Product Owner descreve para a equipe Scrum a estória e fornece 
informações a respeito do seu valor de negócio. A seguir, o facilitador vai 
perguntar o esforço necessário para concluir a estória aos membros da equipe. 
 Cada membro da equipe deve pensar a respeito do tempo e esforço necessário 
para se implementar a estória lida. Então, devem escolher uma carta no 
baralho correspondente ao valor desta estimativa e coloca-a virada para baixo. 
 Em seguida devem revelar as cartas escolhidas simultaneamente. 
 Todos avaliam os resultadose verificam se houve convergência entre as cartas 
mostradas. 
 Caso contrário, o Scrum Master solicita aos membros, que mostraram o menor 
e o maior valor estimado, que expliquem o motivo que os levaram a tal 
estimativa. Então, uma nova rodada é realizada até que as estimativas de 
esforço cheguem a uma convergência. 
 A estimativa final da estória será o valor que tiver maior ocorrência ou a média 
entre as estimativas informadas. Então começa uma nova rodada com a leitura 
da próxima estória pelo Product Owner. O processo se repete até que tenha 
sido concluída a estimativa das estórias dos itens do Product Backlog. 
As pesquisas de Fonseca (2008) mostram que ao usar essa técnica para 
atribuir pontuações, a eficiência da estimativa ponto a estória é melhorada. O autor 
acredita que o maior problema com a tecnologia não estruturada, é que as pessoas 
com personalidades mais fortes e pessoas que dizem ter um melhor entendimento da 
estória irão influenciar os outros participantes. 
 
T-shirt Sizes 
Uma forma de nos permitir desenvolver é medir nossas ações atuais para 
fornecer melhorias futuras. Em uma equipe ágil, uma das muitas maneiras de medir 
a carga de trabalho da equipe é usar o método T-shirt Sizes. Este método serve 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 12 de 32 
apenas para classificar o tamanho da demanda (como estória, atividades técnicas, 
UX, etc.) como P, M ou G, por exemplo. Onde, P - representa a necessidade de usar 
uma pequena quantidade de tempo, M - representa a demanda por horas médias de 
uso, G - indica a necessidade de gastar muito tempo. 
No entanto, antes de categorizar os requisitos em um período de tempo, é 
necessário que a equipe Scrum quantifique o número de horas que cada categoria 
representa. Exemplos de horas de classificação são P - significa 2 horas de trabalho, 
M - significa 4 horas de trabalho necessárias, G - significa 8 horas de trabalho 
necessárias. O tamanho e a carga horária devem ser definidos pela equipe e podem 
variar no dia a dia, o que importa é a clareza da classificação do público entre as 
equipes. 
A classificação pode ser diferente, incluindo novas medidas, PP - significa 
que o tempo necessário é inferior ao da categoria P, GG - indica a necessidade de 
usar mais tempo do que a classificação G. 
Nesta técnica, os membros do time também irão utilizar cartas de baralho, 
semelhantemente ao Planning Poker, mas ao invés das cartas terem os números da 
sequência de Fibonacci, elas terão os tamanhos propostos anteriormente. 
O fluxo segue o mesmo do Planning Poker. Após a descrição da estória a ser 
estimada, as pessoas membras do time já com as cartas do baralho em mãos, irão 
escolher o valor que acreditam ser necessário para a execução daquela estória e, 
caso haja divergência, as pessoas que estimaram para mais ou para menos, irão 
explicar seus motivos para que, novamente, seja feita outra rodada de estimativas até 
que se chegue a um senso comum. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 13 de 32 
Capítulo 2. Gerência de Configuração de Software 
Os sistemas de software estão em constante evolução. A manutenção de 
software, ou seja, a modificação de artefatos existentes, consome 75% do custo total 
do seu ciclo de vida. Devido às mudanças nos requisitos funcionais, regras de 
negócios e redesenho do aplicativo, cerca de 20% de todo o trabalho de manutenção 
é usado para corrigir erros de implementação e os 80% restantes são usados para 
ajustar o software. 
 
O que é Gerência de Configuração de Software 
Gerência de Configuração de Software é um conjunto de atividades de 
suporte que podem absorver mudanças inerentes ao desenvolvimento de software de 
maneira ordenada e manter a integridade e estabilidade durante o desenvolvimento 
do projeto. É uma disciplina que controla e informa as inúmeras correções, extensões 
e adaptações aplicadas no ciclo de vida do software para garantir um processo de 
desenvolvimento e evolução sistemático e rastreável, o que é essencial quando as 
equipes geralmente trabalham juntas em artefatos comuns. 
Desde o planejamento e levantamento de requisitos até a construção e 
entrega do produto, o uso de sistemas de gerenciamento de configuração é essencial 
para controlar os artefatos gerados e modificados por diferentes recursos. 
As atividades do GCS (Gerência de Configuração de Software) ou SCM do 
inglês, Software Configuration Management. As ferramentas de suporte 
correspondentes são: controlar e rastrear mudanças (controle de mudanças) e 
documentar a evolução do projeto (controle de versão), além da implementação mais 
recentemente da disciplina IC (integração contínua). 
 
 
Figura 2 – GCS. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 14 de 32 
 
Fonte: https://blog.pronus.io/posts/o-que-eh-gerencia-de-configuracao-de-software/. 
1. Controle de Acompanhamento de Mudanças 
As mudanças aparecerão ao longo do processo de desenvolvimento e devem 
ser registradas, avaliadas e agrupadas de acordo com sua prioridade. Conforme o 
desenvolvimento avança, você pode rastrear o status da solicitação de mudança até 
que ela seja implementada, ou não, e a versão de produção seja lançada. 
Existem várias ferramentas para realizar essas operações. Como, BitBucket, 
Bugzilla, Jira, Phabricator, Redmine e Trac. 
2. Registro da Evolução do Projeto 
Cada vez que uma solicitação de mudança é implementada, aumenta o 
desenvolvimento do projeto que deve ser registrado no histórico. Este incremento 
corresponde a uma configuração. 
O controle de versão tem outras responsabilidades importantes: permite a 
edição simultânea de arquivos e a criação de variantes no projeto. O controle de 
versão é a parte principal do GCS. É o elo universal entre o controle de mudanças e 
a integração do projeto. Algumas boas ferramentas de controle de versão são: Git e 
Mercurial. 
 
3. Verificação da Integridade do Sistema 
https://blog.pronus.io/posts/o-que-eh-gerencia-de-configuracao-de-software/
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 15 de 32 
O objetivo da integração é verificar o sucesso do sistema de construção do 
projeto registrado a partir da configuração. A integração é feita por meio de scripts, 
que podem executar automaticamente a construção, teste e coleta de indicadores de 
qualidade. Cada vez que uma nova configuração é registrada, o controle de versão e 
os scripts de gatilho vêm com ferramentas de integração contínua. 
Exemplos de ferramentas de integração contínua: BuildBot, CicleCI, Azure 
DevOps, CodeShip, Concourse, Drone.io, Jenkins, etc. 
4. GCS na Engenharia de Software 
O gerenciamento de configuração de software é a base de outras áreas da 
engenharia de software: portanto, parece ser um requisito de implementação no nível 
inicial de vários modelos de maturidade do processo de desenvolvimento (como 
CMMI-DEV, SPICE e MPS –Br). 
Do ponto de vista da ferramenta, a divisão entre as regiões não é muito clara. 
As ferramentas de controle de mudanças e integração contínua fornecem mais 
funções do que o GCS requer, e houve progresso no gerenciamento de projetos, 
testes e qualidade. 
5. Fluxo de Trabalho 
A solicitação de mudança é registrada no controle de mudanças. O 
desenvolvedor será, então, responsável por executar a solicitação e registrar a 
configuração resultante no controle de versão, o que acionará a integração contínua 
para a execução do build e teste automatizado, e coletará indicadores de qualidade 
do código. Os resultados serão apresentados a toda a equipe imediatamente e, caso 
haja problemas, eles deverão tomar as providências necessárias. 
 
 
Gestão de Mudanças 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 16 de 32 
O objetivo do gerenciamento de mudanças é garantir que os métodos e 
procedimentos padronizadosmais apropriados sejam usados para lidar com todas as 
mudanças com eficiência e rapidez. O objetivo é controlar a infraestrutura de TI para 
minimizar o impacto de qualquer incidente. As mudanças na infraestrutura de TI 
podem aparecer passivamente em resposta a questões ou solicitações externas, 
como mudanças legislativas. Por outro lado, buscar maior eficiência e eficácia em 
uma organização pode ser uma ação proativa. 
Introdução ao Jira Software 
Jira Software é parte de uma série de produtos projetados para ajudar vários 
tipos de equipes a gerenciar seu trabalho. Jira foi inicialmente desenvolvido como um 
rastreador de bug e projeto. Hoje, o Jira é uma ferramenta de gerenciamento 
poderosa adequada para todos os tipos de casos de uso, desde casos de teste e 
gerenciamento de requisitos até o desenvolvimento ágil de software. 
Controle de Versão 
Um sistema de controle de versão é uma ferramenta de software que pode 
ajudar as equipes de software a gerenciar mudanças no código-fonte ao longo do 
tempo. O software de controle de versão pode rastrear todas as alterações de código 
em um tipo especial de banco de dados. Se um erro for cometido, o desenvolvedor 
pode voltar no tempo e comparar a versão anterior do código para ajudar a corrigir o 
erro, enquanto reduz os danos a todos os membros da equipe. 
Introdução e Instalação do GIT 
O sistema de controle de versão moderno mais usado no mundo hoje é o Git. 
Git é um projeto de código aberto maduro e gerenciado ativamente. Foi desenvolvido 
em 2005 por Linus Torvalds, o famoso criador do kernel do sistema operacional Linux. 
Um número impressionante de projetos de software depende do Git para controle de 
versão, incluindo projetos comerciais e de código aberto. Os desenvolvedores que 
trabalharam com o Git estão bem representados no pool de talentos de 
desenvolvimento de software disponível e normalmente trabalham bem em uma 
ampla variedade de sistemas operacionais, ambientes de desenvolvimento integrado 
e editores de código fonte. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 17 de 32 
Dentro de uma arquitetura distribuída, Git é um exemplo de DVCS - 
Distributed Version Control System. Ao invés de ter um único local para o histórico 
completo da versão do software, como é comum em sistemas de controle de versão 
anteriormente populares como CVS ou Subversion (também conhecido como SVN), 
no Git, a cópia de trabalho de cada desenvolvedor em código também é um repositório 
que pode conter o histórico completo de todas as alterações. 
Além de ser distribuído, o Git foi projetado para ter alto desempenho, 
segurança e flexibilidade, esses ingredientes misturados caíram nas graças das mais 
diversas comunidades de desenvolvimento. 
Integração com o GITHUB 
GitHub é um sistema de gerenciamento de projeto e versão de código, bem 
como uma plataforma de mídia social desenvolvida para programadores. Mas para 
que é usado o GitHub? Entre outras coisas, você pode trabalhar em projetos 
colaborativos com desenvolvedores em todo o mundo, planejar seus projetos e 
acompanhar o trabalho. 
O GitHub também é um dos maiores repositórios de trabalho colaborativo on-
line do mundo. Atualmente, ele conta com mais de 36 milhões de usuários ativos que 
contribuem para negócios ou projetos pessoais. Hoje, o GitHub é o lar de mais de 100 
milhões de projetos, alguns dos quais são conhecidos em todo o mundo. Dentre eles 
podemos citar, WordPress, Atom, Electron e muitos outros. 
O GitHub também oferece suporte ao recurso de organização frequentemente 
usado por pessoas que desejam uma escala maior para seus projetos. Geralmente, 
o recurso é usado por empresas existentes como Google, Microsoft e WordPress. Em 
quatro de junho de 2018, a Microsoft anunciou a compra do GitHub por 7,5 bilhões de 
dólares. Esta notícia deixou a comunidade receosa com as possíveis mudanças nas 
políticas de utilização da ferramenta, mas, até então, não se tem grandes 
reclamações das alterações implementadas pela Microsoft. 
Introdução e Instalação do Visual Studio Code 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 18 de 32 
O Visual Studio Code ou apenas VSCode, é um editor de código-fonte 
desenvolvido pela Microsoft para Windows, Linux e macOS. Inclui suporte para 
depuração, controle de versão de código com Git integrado, realce de sintaxe, 
autocompletar de código inteligente, fragmentos de código e até mesmo a refatoração 
de código. Também é personalizável, permitindo aos usuários alterar o tema, as 
teclas de atalho e as preferências do editor. 
Além de ser totalmente gratuito, ainda no segundo semestre do ano de 
lançamento, durante o evento Connect, a editora de código fonte foi anunciada como 
open source, tendo o seu código disponibilizado no GitHub, o que permite à 
comunidade técnica uma ativa contribuição para o seu desenvolvimento e facilidade 
na criação de extensões e novos recursos. 
As extensões são poderosas funcionalidades que deixam esse editor de 
código com as atribuições necessárias para conseguir trabalhar nas mais diversas 
tecnologias e linguagens existentes até então. 
Integração Contínua 
A integração contínua é uma prática comum na criação de software, e os 
desenvolvedores geralmente combinam suas alterações de código em um repositório 
central. Depois disso, se executa a build e o teste. Em geral, integração contínua se 
refere ao estágio de criação ou integração do processo de lançamento do programa, 
além de iniciar componentes de automação (por exemplo, builds e testes 
automatizados) e componentes culturais, como práticas de DevOps. O principal 
objetivo da integração contínua é encontrar e explorar bugs mais rapidamente, 
melhorar a qualidade do programa e reduzir o tempo necessário para verificar e lançar 
novas atualizações de software em produção. 
 
Introdução e Instalação do Jenkins 
Jenkins é um servidor de automação de jobs, de código-fonte aberto e 
gratuito. Ele ajuda a automatizar as partes de design, teste e implantação do 
desenvolvimento de um software e permite a implantação de forma automatizada. É 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 19 de 32 
um sistema baseado em servidor que roda em contêineres de servlet como o Apache 
Tomcat. 
Ele se originou a partir de outra solução bem conhecida, o Hudson, que era 
originalmente uma ferramenta de código aberto, até ser comprada pela Oracle em 
2010. 
Neste ponto, alguns programadores da equipe concordaram em ir para a 
Oracle para dar continuidade ao projeto, mas em 2011 outros programadores 
decidiram pegar um caminho diferente e desenvolver a ferramenta de forma open 
source, usando então o nome Jenkins. 
Criação de Pipeline no Jenkins 
A palavra pipeline não possui uma tradução literal, mas pode se entender que 
uma pipeline é, de forma bem simplificada, uma sequência de passos que deve ser 
dada de maneira ordenada para alcançar um resultado esperado. 
No Jenkins, existem algumas formas possíveis de criação de Jobs, e o mais 
utilizado atualmente são os Pipeline Jobs. 
Através dos Pipeline Jobs, é possível configurar a sequência de passos que 
uma build deve ter, utilizando se apenas uma estrutura baseada em JSON e a partir 
disso poder integrar com outras ferramentas, como GitHub para obtenção da última 
versão do código fonte. 
Outra funcionalidade importante, na criação de Pipeline Jobs no Jenkins é a 
utilização de plugins. Através dos plugins, é possível integrar com mais ferramentas 
além do GitHub, pode se utilizar desses plugins para integrar com Slack, SonarQube, 
Junit, dentre muitas outras mais. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 20 de 32 
Capítulo 3. Refatoração de Código 
Refatoração é o processo de mudar o código-fonte do software de uma forma 
tal que não mude seu comportamento externo, com o único objetivo de melhorarsua 
estrutura interna. Ele é usado para manter um software bem projetado, mesmo com 
o passar do tempo e com as mudanças que ele sofre ao longo do seu ciclo de vida. 
Durante o processo de desenvolvimento de software, mais especificamente 
na fase de codificação, é comum que uma equipe de desenvolvedores cuide do 
trabalho de escrever o código, o que significa que várias pessoas irão escrever e 
compartilhar o código entre si até que o software seja concluído. 
Quanto maior for a equipe, menos contato entre os desenvolvedores e maior 
a probabilidade de pequenos erros, como: código repetitivo, classes nos pacotes 
errados, métodos nas classes erradas e outros erros que podem alterar a estrutura 
interna do software, deixando o mesmo um pouco caótico e muito confuso. 
 
Bad Smells 
Bad Smells (mau cheiros), é uma situação em que a estrutura do programa 
pode ser melhorada pela refatoração. Quando Martin Fowler estava escrevendo a 
primeira edição do livro (Refactoring, improving the design of existing code), ele foi 
visitar Kent Beck na sua casa em Zurick e naquela época Kent Beck começou a falar 
sobre os problemas de códigos como coisas relacionadas a odores. Martin Fowler 
imaginou que seu amigo poderia estar sendo influenciado pelos odores das fraldas 
da sua filha recém-nascida. Nesse momento, eles descreveram a ideia de quando 
deveria ser necessário refatorar, chamando isso de Bad Smells. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 21 de 32 
Capítulo 4. Programação em Par 
A programação em par é uma técnica ágil de desenvolvimento de software 
na qual dois programadores trabalham juntos em uma estação de trabalho. Um, o 
"controlador", escreve o código enquanto o outro, chamado de "observador", analisa 
cada linha de código. Os dois programadores frequentemente trocam de funções. 
A programação em pares é uma das práticas mais conhecidas e controversas 
usadas por aqueles que abraçam a programação extrema ou no inglês, extreme 
programming. 
À primeira vista, a programação em pares parece ser uma prática fadada ao 
fracasso e ao desperdício. Afinal, embora possa haver alguns benefícios, sentimos 
que consumirá mais recursos ou aumentará o tempo de desenvolvimento. No entanto, 
não é exatamente isso o que está acontecendo. 
A programação em par nos ajuda a manter o foco, afinal, há alguém sentado 
ao nosso lado que está interessado em resolver o problema. Mesmo se tentarmos, 
certamente evitaremos fazer qualquer coisa além de concentrar nossas energias na 
solução do problema em questão. 
Existem estudos que comprovam as vantagens da programação em par, 
desde que praticada corretamente. Abaixo, serão informados alguns aspectos que 
não devem ser aplicados quando se utiliza esta prática, os quais são: 
 Monopolização da estação de trabalho; 
 Divagar sobre discussões filosóficas; 
 Não fazer pausas para evitar o burn out; 
 Parear sempre com as mesmas pessoas; 
 Não estar disposto a aprender; 
 Não estar disposto a ensinar; 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 22 de 32 
 Faltar com empatia; 
 Dentre outras atitudes que aconselha-se não praticar quando estiver em uma 
cerimônia de programação em par. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 23 de 32 
Capítulo 5. Aprovisionamento e Gerenciamento de Infraestrutura Ágil 
O conceito “agile” nasceu na área de desenvolvimento de software por estar 
mais próximo da área de negócios que sempre pede novos recursos para atender à 
demanda do mercado. 
Para atender a área de negócios que sempre quer novidades, a área de 
desenvolvimento de software foi aprimorada para isso. Por outro lado, a área de 
operações de TI deseja o mínimo de mudança possível na infraestrutura, pois cada 
nova mudança no ambiente de produção cria um novo ponto de instabilidade e na 
maioria das vezes difícil de identificar. Se o desenvolvimento de software é ágil para 
atender à demanda de negócios, a infraestrutura também deve ser. 
Métodos ágeis têm levado a área de desenvolvimento de software a evoluir 
muito, por meio da utilização de iterações de forma incremental, juntamente com 
testes, sejam eles de unidade ou não, pipelines através de continuous integration e 
muitas outras práticas, garantindo entregas contínuas com qualidade. Da mesma 
forma que esse processo tem sido fundamental para essa área, é essencial 
estabelecer padrões que simplifiquem sua infraestrutura e permitam o 
desenvolvimento do SysAdmin para a era do DevOps. 
 
Breve Introdução ao DevOps 
DevOps é uma abordagem de design, automação e cultura de plataforma que 
visa agregar mais valor aos negócios e aumentar sua capacidade de responder às 
mudanças por meio da entrega de serviço rápida e de alta qualidade. Tudo isso é 
possível fornecendo serviços de TI rápidos e iterativos. Adotar o DevOps significa 
uma grande mudança de mindset, através da utilização de ferramentas, mas acima 
de tudo isso, uma mudança de cultura de trabalho. 
A palavra DevOps vem da combinação dos termos desenvolvimento e 
operações. No entanto, representa um conjunto de ideias e práticas que vão além do 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 24 de 32 
significado desses dois termos. DevOps cobre segurança, métodos de trabalho 
colaborativos, análise de dados e muitas outras práticas e conceitos. 
As práticas de DevOps descrevem abordagens que ajudam a acelerar os 
processos necessários para levar uma ideia do desenvolvimento à implementação 
em um ambiente de produção onde ela é capaz de gerar valor para o usuário. 
Essas ideias podem ser um novo recurso de software, uma solicitação de 
aprimoramento ou uma correção de bug, entre outros. Essas abordagens requerem 
comunicação frequente entre as equipes de desenvolvimento e operações, trabalho 
colaborativo e empatia com outros membros da equipe. 
Escalabilidade e implantação flexíveis também são necessárias. Com o 
DevOps, você pode conservar recursos por meio de autoatendimento e automação. 
Os desenvolvedores, que normalmente escrevem código em um ambiente de 
desenvolvimento integrado padrão, trabalham em conjunto com a equipe de 
operações de TI para ajudar a construir, testar e lançar aplicações mais rapidamente, 
sem comprometer a confiabilidade. 
Obviamente, isso significa mudanças de código mais frequentes e uso mais 
dinâmico da infraestrutura. As estratégias tradicionais de gestão não respondem a 
esse tipo de demanda. Mudanças são sempre necessárias para se alcançar as 
vantagens competitivas. 
 
História da Cloud 
Acredita-se que, em 1957, John McCarthy, o inventor da linguagem LISP, 
delineou o conceito atual de computação em nuvem. Claro, ele não conseguia 
imaginar como seria a internet ou mesmo o potencial da computação e 
armazenamento remotos, mas sua ideia de que a computação poderia ser vista como 
um serviço público no futuro estava notoriamente à frente de seu tempo. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 25 de 32 
Na década de 1970, a IBM lançou o primeiro sistema identificado como uma 
máquina virtual que permitia que a computação fosse compartilhada para trabalho 
simultâneo - a primeira forma comercial de compartilhamento de tempo. Nas duas 
décadas seguintes, a Internet como a conhecemos começou a se desenvolver e a 
combinação desses dois conceitos se tornou cada vez mais próxima. 
O termo nuvem não é novo na Internet, embora seja muito difícil definir a 
origem de seu uso específico. Alguns sugerem que a nuvem já era um símbolo 
popular que definia a Internet muito antes de seu novo significado, enquanto outros 
acreditam que a ideia de armazenamento abundante e rapidamente acessível 
inspirou o uso de um símbolo universal de leveza e de pureza. 
Qualquer que seja o significado real, o ponto é que o termo Cloud Computing, 
como a conhecemos, foi usadopela primeira vez em 1997 pelo professor Ramnath 
Chellappa. Desta vez, todo o conceito estava lá: uma estrutura de servidores 
conectados à Internet que poderia armazenar dados e fornecer poder de computação 
remotamente para seus clientes. 
Desde então, a nuvem se tornou um dos tópicos mais comentados pelos 
profissionais de TI em todo o mundo. O ambiente corporativo acabou sendo a área 
onde a nuvem causou e vem causando as mudanças mais profundas. 
Isso vem acontecendo desde 2006, quando a Amazon lançou o Elastic 
Compute Cloud, EC2 e abriu os Amazon Web Services (AWS). Desde então, Cloud 
Computing se tornou uma opção verdadeiramente viável para empresas de todos os 
tamanhos. Pouco depois, em 2009, o Google Apps se tornou o primeiro grande 
serviço de aplicativo baseado em nuvem e os conceitos de IaaS e SaaS estavam 
prontos para dominar o mercado. 
Hoje, a nuvem está presente em nossas vidas em vários níveis: desde o 
armazenamento de nossos arquivos pessoais no celular até as operações e 
infraestruturas de grandes empresas. 
 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 26 de 32 
Introdução à AWS 
Amazon Web Services, também conhecido como AWS, é uma plataforma 
para serviços de computação em nuvem, que constituem uma plataforma de 
computação em nuvem oferecida pela amazon.com. É o mais abrangente do mundo 
e oferece mais de 175 serviços de data center em todo o mundo. 
Milhões de clientes, incluindo as startups de crescimento mais rápido, 
grandes corporações e as maiores agências governamentais, usam a AWS para 
cortar custos, se tornarem mais ágil e inovar com mais rapidez. 
A AWS oferece muito mais serviços - e mais funcionalidade com esses 
serviços - do que qualquer outro provedor de nuvem: de tecnologias de infraestrutura, 
como computação, armazenamento e bancos de dados, a tecnologias emergentes, 
como aprendizado de máquina e inteligência artificial, obtenção de dados, análise e 
internet das coisas (IOT). Isso torna mais rápido, fácil e barato mover as aplicações 
para a nuvem e, a partir disto, criar uma grande gama de possibilidades no 
desenvolvimento de recursos de software e infraestrutura de hardware. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 27 de 32 
Capítulo 6. Infraestrutura como código 
Infrastructure as Code (IaC), ou Infraestrutura como Código, é uma 
metodologia de automação de infraestrutura de TI usada principalmente para que as 
equipes de DevOps possam gerenciar e provisionar infraestrutura por meio de código 
de uma forma automatizado, em vez de ter que o fazer através do acesso físico ao 
hardware ou mesmo através de portais ou ferramentas de configuração. 
Este método, que pode ser aplicado a recursos físicos, virtuais ou em nuvem, 
pode ser usado de forma extremamente estratégica no planejamento de recursos de 
tecnologia. Em suma, a abordagem IaC nada mais é do que fornecer uma 
infraestrutura ágil com codificação simples e objetiva, sem as múltiplas etapas e 
processos envolvidos na preparação de um ambiente, sem perder o controle, a 
segurança, qualidade e disponibilidade. 
Isso se deve, em grande parte, ao fato de que o uso de "código" para 
desenvolvedores de software significa que, em vez de administradores de sistema, 
um desenvolvedor pode fornecer e gerenciar os recursos de tecnologia das 
operações de tudo o que estão criando. 
 
IaC 
IaC é a sigla para Infrastructure as Code, que significa Infraestrutura como 
Código. Por muito tempo, era comum os processos serem monitorados manualmente, 
o que consumia muito tempo da equipe de Infraestrutura. 
Em geral, a IaC torna mais fácil gerenciar o ambiente operacional, já que você 
apenas desenvolve o código e ele fará o restante das operações necessárias para 
aplicar as alterações. A IaC é particularmente útil em ambientes DevOps para 
gerenciar vários recursos e processos. 
Em um momento em que não é incomum para uma empresa implantar 
centenas de aplicativos em produção todos os dias, e quando a infraestrutura está 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 28 de 32 
em constante crescimento, encolhendo e expandindo em resposta às demandas de 
desenvolvedores e usuários. 
É importante para uma empresa automatizar a infraestrutura para controlar 
custos, reduzir riscos e responder rapidamente às novas oportunidades de negócios 
e ameaças competitivas. 
Também é uma prática de DevOps essencial para um ciclo de vida de entrega 
de software. Ela permite que as equipes criem versões da infraestrutura da mesma 
forma que o código fonte da versão e rastreiem essas versões para evitar 
inconsistências entre os ambientes de TI que podem levar a sérios problemas durante 
a implantação. 
Existem vários benefícios como acelerar significativamente o processo de 
implantação de infraestrutura para desenvolvimento, teste e produção. Em IaC 
codifica-se tudo para automatizar o provisionamento da infraestrutura existente, que 
de outra forma poderia passar por processos demorados. Com uma consistência mais 
aperfeiçoada, a IaC evita desvios, proporcionando sempre o mesmo ambiente, 
simplifica o provisionamento e garantindo a estruturação da infraestrutura. Ela pode 
acelerar, com segurança, as fases do ciclo de vida do software que exigem o 
aprovisionamento de infraestrutura. 
O maior desafio para qualquer organização que adota IaC é, sem dúvida, 
mudar a cultura e a curva de aprendizado. Acredita-se que, em última análise, os 
benefícios da infraestrutura como código valem a pena. 
 
Terraform 
Terraform é uma ferramenta de aprovisionamento de infraestrutura de código 
aberto, criada pela HashiCorp, que nos permite definir nossa infraestrutura como 
código (IaC), usando uma linguagem simples e declarativa a Hashicorp Configuration 
Languague, também conhecida como HCL. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 29 de 32 
Com o Terraform, é possível gerenciar infraestruturas entre vários provedores 
de nuvem, sejam eles públicos ou até mesmo privados. 
Na versão 0.10, ele foi dividido em vários “plugins” baixados de acordo com 
a necessidade de seu código. Cada um permite a integração com um provedor 
diferente, tem suas próprias propriedades em recursos e varia ligeiramente na 
sintaxe. 
O formato de arquivo esperado pelo terraform é .tf. Ao contrário de outras 
ferramentas IaC, não há necessidade de se preocupar com a estrutura do arquivo, 
que difere de não organizar seu código, pois o terraform irá compilar todos os arquivos 
.tf no diretório atual e suas subpastas, antes de executá-lo. 
Com ele, podemos criar uma única máquina em serviços de nuvem como 
instâncias EC2 (Elastic Compute Cloud) na AWS (Amazon Web Services) que a 
ferramenta suporta, ou também podemos criar várias máquinas e, assim, criar todo o 
data center, e sempre configurar com poucas linhas de código e poucos arquivos. 
Outra característica importante da ferramenta é o plano de execução. Sempre 
podemos verificar a ordem de execução de uma infraestrutura para ver os passos que 
o terraform realizará para atingir o estado descrito nos arquivos de configuração. 
Para entender melhor o fluxo de criação da infraestrutura a partir da utilização 
do Terraform, serão apresentados a seguir os seus principais comandos e suas 
respectivas funcionalidades. 
 terraform init: é responsável por iniciar a pasta de trabalho e fazer o download 
de todos os plugins necessários para trabalhar com os providers especificados 
no arquivos de configuração .tf. 
 terraform plan: exibirá o plano de execução que será aplicado à infraestrutura. 
 terraform apply: este comando irá criar ou até mesmo atualizar ou destruir os 
recursos no provedor de cloud. 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 30 de 32 
 terraform destroy: deve ser utilizado com cautela, pois ele é o responsável por 
destruiros recursos existentes no provedor, ou provedores, que estiverem 
especificados no arquivo .tf, portanto, antes de utilizar o “terraform destroy” 
espera-se que a pessoa esteja segura da sua correta utilização. 
Existem muitos outros comandos existentes na ferramenta, mas os 
apresentados anteriormente são os principais e, a partir deles, será possível que o 
time consiga aprovisionar os seus primeiros recursos na cloud. 
 
 
 
 
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 31 de 32 
Referências 
BRIKMAN, Yevgeniy. Terraform: Up and running. O’Reilly Media Inc, 2017. 
CHACON, Scott; STRAUB, Ben. Pro Git. Apress, 2014. 
COHN, Mike. Agile Estimating and Planning. Prentice Hall, 2005. 
CTIC-UFPA. Procedimentos do Planning Poker, versão 1.3. Centro de Tecnologia da 
Informação e Comunicação da Universidade Federal do Pará, 2011. 
FERREIRA, Felix Soares; POCIVI, Viviane Carla Batista. Gestão Ágil de Projetos: 
Método para estimativa em projeto de software para fábrica de software acadêmica. 
In: Revista Ada Lovelace, v. 1, 2017. p. 05-17. Disponível em: 
<http://45.4.96.34/index.php/adalovelace/article/view/4120/2532>. Acesso em: 22 
dez. 2020. 
FONSECA, da S. W. D. Ferramenta para apoio à estimativa baseada em Planning 
Poker utilizando a metodologia Scrum. UFPE – Recife, 2008. Disponível em: 
<https://www.cin.ufpe.br/~tg/2012-1/dwas.pdf>. Acesso em: 22 dez. 2020. 
FOWLER, Martin. Refactoring, Improving the design of the existing code. Pearson 
Education Inc, 2019. 
GRENNING, J. Planning Poker or How to avoid analysis paralysis while release 
planning. 2002. 
KNIBERG, H.; SKARIN, M. Kanban and Scrum – Making the most of both. Estados 
Unidos da América, 2009. Disponível em: 
<https://www.infoq.com/br/minibooks/kanban-scrum-minibook/>. Acesso em: 22 dez. 
2020. 
LEISHMAN, C. The 3 Ps of Estimation: Why we estimate in Agile projects. Medium, 
2008. Disponível em: <https://medium.com/@cleishm/the-3-ps-of-estimation-
aee352cf9b16#.7sa58argz,Agosto>. Acesso em: 22 dez. 2020. 
http://45.4.96.34/index.php/adalovelace/article/view/4120/2532
https://www.cin.ufpe.br/~tg/2012-1/dwas.pdf
https://www.infoq.com/br/minibooks/kanban-scrum-minibook/
https://medium.com/@cleishm/the-3-ps-of-estimation-aee352cf9b16#.7sa58argz,Agosto
https://medium.com/@cleishm/the-3-ps-of-estimation-aee352cf9b16#.7sa58argz,Agosto
 
 
Técnicas e Práticas Ágeis de Desenvolvimento de Software – Página 32 de 32 
MARTIN, Robert C. Agile Software Development, Principles, Patterns and Practices. 
Pearson, 2014. 
MORRIS, Kief. Infrastructure as Code, Managing Servers in the Cloud. O’Reilly Media 
Inc, 2016. 
PRESSMAN, R.S. Engenharia de software. 6. ed. São Paulo: Mcgraw-hill, 2006. 
SOMMERVILLE, I. Engenharia de software. 6° ed. Tradução Maurício de Andrade. 
São Paulo: Ed Addison-Wesley, 2003. 
SUTHERLAND, Jeff. Scrum: A arte de fazer o dobro do trabalho na metade do tempo. 
São Paulo: Sextante, 2019.

Continue navegando