Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Inserir Título Aqui 
Inserir Título Aqui
Modelagem de Sistemas 
Orientada a Objetos
Introdução às Estimativas Ágeis e aos Padrões de Projeto
Responsável pelo Conteúdo:
Prof. Me. Artur Ubaldo Marques Júnior
Revisão Textual:
Prof.ª Me. Sandra Regina F. Moreira
Nesta unidade, trabalharemos os seguintes tópicos:
• Introdução às Estimativas Ágeis e aos Padrões de Projeto;
• Planning Poker;
• Estratégias de Organização de Código. Fonte: iStock/Getty Im
ages
Objetivos
• Introduzir a técnica de estimativa ágil baseada no método planning poker;
• Apresentar a necessidade da entrega contínua ágil em projetos de sistemas OO.
Caro Aluno(a)!
Normalmente, com a correria do dia a dia, não nos organizamos e deixamos para o 
último momento o acesso ao estudo, o que implicará o não aprofundamento no material 
trabalhado ou, ainda, a perda dos prazos para o lançamento das atividades solicitadas.
Assim, organize seus estudos de maneira que entrem na sua rotina. Por exemplo, você 
poderá escolher um dia ao longo da semana ou um determinado horário todos ou alguns 
dias e determinar como o seu “momento do estudo”.
No material de cada Unidade, há videoaulas e leituras indicadas, assim como sugestões 
de materiais complementares, elementos didáticos que ampliarão sua interpretação e 
auxiliarão o pleno entendimento dos temas abordados.
Após o contato com o conteúdo proposto, participe dos debates mediados em fóruns de 
discussão, pois estes ajudarão a verificar o quanto você absorveu do conteúdo, além de 
propiciar o contato com seus colegas e tutores, o que se apresenta como rico espaço de 
troca de ideias e aprendizagem.
Bons Estudos!
Introdução às Estimativas Ágeis 
e aos Padrões de Projeto
UNIDADE 
Introdução às Estimativas Ágeis e aos Padrões de Projeto
Contextualização
Se há uma coisa que deixa todo mundo que desenvolve sistemas meio irritado é a 
necessidade de se passar ao gerente de projetos e partes interessadas a estimativa de 
esforço de uma funcionalidade, baseada em uma ou mais estórias e/ou requisitos levan-
tados a partir de conversas com usuários.
Isso acontece porque todos os sistemas são diferentes e há desafios não tão aparentes 
assim para levar em consideração, além disso, a estimativa normalmente é uma jornada 
solitária, bem como sua culpa pelo atraso.
Dessa maneira, o pessoal que trabalha com desenvolvimento e modelagem de siste-
mas ágeis pensou bastante e criou uma forma de estimativa em grupo, extremamente 
funcional e prática, baseada em consenso. Assim, ela é muito mais coesa e leva em 
conta a opinião do grupo e não do indivíduo.
Trata-se do planning poker. 
Sim, isso mesmo, um jogo com cartas e tudo o mais que revolucionou a forma de esti-
mar rapidamente em nível geral uma funcionalidade, ou até mesmo um backlog inteiro, 
quebrando-o em partes atômicas, mais fáceis de estimar.
É isso que vamos ver nesta unidade!
Vamos conhecer esse método?!
6
7
Introdução às Estimativas 
Ágeis e aos Padrões de Projeto
Métodos ou processos ágeis referem-se a um conjunto de metodologias de criação 
de software baseadas no desenvolvimento Iterativo em que os requisitos e as soluções 
evoluem por meio da colaboração entre equipes multifuncionais auto organizadas. 
Eles normalmente promovem um processo disciplinado de gerenciamento e desenvol-
vimento de projetos de software que incentiva a inspeção de código e adaptações frequen-
tes baseadas na mudança, uma filosofia de liderança que incentiva o trabalho em equipe, 
a auto-organização e responsabilidade. Além disso, um conjunto de melhores práticas de 
engenharia destinadas a permitir a entrega rápida (ágil) de software de alta qualidade. 
Também, trata de uma abordagem de negócios (que busca participação do cliente, 
alinhamento de ideias e entendimento de necessidades) que deixa em sinergia o 
desenvolvimento dirigido às necessidades do cliente e aos objetivos da empresa. Por 
fim, o projeto e o desenvolvimento ágil referem-se a qualquer processo de confecção de 
software que esteja alinhado com as considerações do Manifesto Ágil. 
Esse Manifesto foi criado e escrito por 14 importantes membros da indústria de desen-
volvimento de software na década de 90 do século XX, e seu foco é fazer frente à crise de 
desenvolvimento de software e mostrar o que funciona para criar software com qualidade.
Nós vamos explorar exatamente os métodos ágeis de modelagem de software 
orientados a objetos e , para tanto, vamos conhecer UML como linguagem para 
modelagem e SCRUM/XP com técnicas de gestão e desenvolvimento de software.
Durante nossa jornada, vamos nos deparar com alguns termos relacionados a 
SCRUM, Sprint e Backlog.
Nesse momento, devemos apenas entender, básica e conceitualmente, o que eles 
representam na modelagem, porque utilizaremos um pouco desses conceitos para 
estimar o esforço das histórias dos usuários, bem como dos requisitos funcionais e regras 
de negócios associadas a eles.
Assim, definimos SCRUM como pertencente a um subconjunto dos Métodos e Pro-
cessos Ágeis. Além de representar uma estrutura de processo leve para o desenvolvi-
mento, é atualmente a mais utilizada em todo o mundo.
Uma “estrutura de processo” é um conjunto particular de práticas que devem ser 
seguidas para que suas etapas sejam consistentes com a estrutura proposta.
Nesse caso, a estrutura do processo Scrum requer o uso de ciclos de desenvolvimento 
chamados Sprints, a estrutura do XP requer programação em pares, por exemplo.
Quando usamos expressões como “leve” ou “ágil”, queremos dizer que a sobrecarga do 
processo é mantida tão pequena quanto possível (por exemplo: o esforço de desenvolver 
não ultrapasse 16h por programador por item), para maximizar a quantidade de tempo 
produtivo disponível para a realização do que os métodos ágeis chamam de trabalhos 
úteis. O Scrum é mais usado para gerenciar softwares complexos e desenvolvimento de 
produtos, usando práticas iterativas e incrementais de desenvolvimento. 
7
UNIDADE 
Introdução às Estimativas Ágeis e aos Padrões de Projeto
O SCRUM é muito organizado, de tal forma que todo o trabalho a ser desenvolvido 
de programação, por exemplo, é acondicionado num artefato chamado de BACKLOG. E 
devemos entender backlog conforme a definição da própria Agile Alliance, como sendo: 
Um backlog é uma lista de recursos ou tarefas técnicas que a equipe 
mantém e que, em determinado momento, são necessários e suficientes 
para concluir um projeto ou uma liberação:
• se um item no backlog não contribuir para o objetivo do projeto, 
ele deve ser removido;
• por outro lado, se a qualquer momento uma tarefa ou recurso 
tornar-se conhecido e considerado necessário para o projeto, ele 
deverá ser adicionado ao backlog.
Essas propriedades “necessárias e suficientes” são avaliadas em rela-
ção ao estado de conhecimento da equipe em um determinado mo-
mento. Espera-se que o backlog mude ao longo da duração do projeto 
à medida que a equipe ganha conhecimento.
O backlog é o principal ponto de entrada para o conhecimento sobre 
os requisitos e a única fonte autorizada que define o trabalho a ser 
executado. (AGILE ALLIANCE, 2018)
Portanto, não confunda BACKLOG com uma simples lista ou documento de requi-
sitos, pois não é isso!
Além do mais, há no SCRUM uma série de backlogs (Sprint, Equipe, Fluxo de Valor, 
Portfólio, entre outros), não apenas esse (Backlog de Produto), mas, nesse caso, ele é o 
mais importante porque contém tudo o que precisa ser feito.
Os Backlogs são quebrados em unidades de desenvolvimento menores chamados de 
SPRINTS. Ele é um período de tempo definido durante o qual o trabalho específico deve 
ser concluído e preparado para revisão.
Figura 1– Representação de um BACKLOG, dividido em SPRINTS (itens em cada chave).
Fonte: scrum.org
8
9
As cores azul escuro e azul claro servem apenas para designar requisitos ou fun-
cionalidades de alta prioridade e de grande valor comercial para serem entregues, 
sendo que as azuis claras têm prioridade meno
Independentementede utilizarmos metodologias ágeis para desenvolvimento, análise 
ou modelagem de sistemas, não percamos de vista que a estimativa de esforço ainda é 
uma prática muito valiosa. 
As equipes de desenvolvimento tendem a ser excessivamente otimistas em suas estimativas. 
Elas não reavaliam quando algo muda, e as estimativas pontuais são feitas e perma-
necem estáticas, sendo que deveriam ser revistas de tempos em tempos e informadas.
Existem várias práticas recomendadas que as partes interessadas podem usar para 
colocar seus processos de estimativa de software no caminho certo para agregar valor 
as suas organizações.
A estimativa de software não precisa ser difícil, onerosa ou ineficaz. Feita corretamente, 
pode ser uma ferramenta altamente eficaz que pode ajudar os gerentes de projeto, scrum 
master, product owner, entre tantos outros, a fornecer valor as suas organizações.
Dessa maneira, propomos a utilização de uma técnica muito difundida no mundo 
atualmente, chamada Planning Poker, que se adapta perfeitamente a um gerenciamento 
ágil, por exemplo, utilizando Scrum como gerenciamento e XP como desenvolvimento.
Todavia, lembre-se que estimativa é apenas isso: uma estimativa. Não é um juramento 
de sangue.
Planning Poker
No desenvolvimento ágil, o proprietário do produto é encarregado de priorizar o 
backlog (lista ordenada de trabalho que contém descrições curtas de todos os recursos 
e correções desejadas para um produto). Os proprietários de produtos capturam os 
requisitos dos negócios, mas nem sempre entendem os detalhes da implementação.
Quando a equipe de engenharia inicia seu processo de estimativa, geralmente surgem 
questões sobre requisitos e histórias de usuários.
Para os proprietários de produtos, especificamente, dividir os itens de trabalho em 
peças e estimativas granulares ajuda a priorizar todas as áreas de trabalho.
Envolver todos (desenvolvedores, designers, testadores, implantadores) é fundamental 
para elaborar as estimativas. Cada um traz uma perspectiva diferente sobre o produto e 
o trabalho necessário para entregar uma história do usuário.
RADIGAN comenta que, da mesma forma, as mudanças no design exigem não 
apenas a entrada da equipe de projeto, mas também o desenvolvimento e o controle de 
qualidade. Deixar parte da equipe fora do processo gerará estimativas de baixa qualidade, 
reduzirá o moral, porque, às vezes, os principais contribuintes não se sentem incluídos e 
comprometerão a qualidade do software.
9
UNIDADE 
Introdução às Estimativas Ágeis e aos Padrões de Projeto
As equipes de software tradicionais fornecem estimativas em um formato de horas, 
dias, semanas ou meses. Os times ágeis, porém, usam pontos de história!
Eles são classificados de forma relativa ao esforço para realizar o trabalho. Para isso, 
podemos recorrer aos mais diversos formatos, ainda que, aparentemente, o preferido 
do pessoal ágil é Fibonacci, ainda que com algumas modificações.
Veja essa classificação:
• 0; • 13;
• 1; • 20;
• 2; • 40;
• 3; • 70;
• 5; • 100.
• 8;
Se fôssemos seguir à risca Fibonacci, teríamos 0, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 
144, porém, geraria uma complexidade numérica desnecessária.
RADIGAN enumera algumas razões para que adotemos pontos de história, a saber:
• As datas não explicam o trabalho não relacionado ao projeto que 
inevitavelmente se insinua em nossos dias: e-mails, reuniões e 
entrevistas em que um membro da equipe pode estar envolvido.
• As datas têm uma ligação emocional com elas. A estimativa 
relativa remove o apego emocional.
• Cada equipe estimará o trabalho em uma escala ligeiramente 
diferente, o que significa que sua velocidade (medida em pontos) 
será naturalmente diferente. Isso, por sua vez, torna impossível 
jogar política usando a velocidade como arma. 
É aí que entra nosso amigo, o Planning Poker. De maneira simples, a equipe pegará 
um item do backlog, discutirá brevemente e cada membro fará uma estimativa mental-
mente. Todos pegam uma carta com o número da sua estimativa (0, 1, 2, 3, 5, 8, 13, 
20, 40, 100). Se todos estiverem de acordo, OK, vá para o próximo item. Caso con-
trário, verifique as lógicas por trás dos números que as pessoas deram e reestime. Não 
perca de vista que a estimativa deve ser uma atividade de alto nível.
Há algumas dicas que o gerenciamento de projeto ágil segue como boas práticas 
de estimativa:
• Nenhuma tarefa individual deve ter mais do que 16 horas de trabalho.
Você precisa escolher qual a carta que representará esse limite. Vamos supor, no 
nosso exemplo, que essa carta seja a que possui o número 40.
Portanto, qualquer coisa que ultrapasse 40, no nosso exemplo, precisa ser dividida 
em 2 ou mais, dependendo de sua complexidade. Claro, você deverá, junto ao seu time 
de desenvolvimento, reestimar após a divisão.
Uma base de estimativas realizadas anteriormente para outros sistemas é muito útil e 
deve ser utilizada sem pudor. Conhecimento e vivência são importantes nesse momento.
10
11
KOUZINA (2014) coloca uma opinião bastante interessante sobre estimativas em 
softwares ágeis, incluindo a máxima de que é difícil estimar o que nunca se fez, mas, 
apesar disso, a maior parte dos sistemas desenvolvidos comercialmente hoje em dia se 
baseia em coisas já feitas e isso facilita nossa vida, porque estimamos sobre algo que 
alguém já fez. Vejamos o que ela nos escreve para reflexão:
Algumas pessoas, que provavelmente não são instruídas em teoria 
ágil, consideram ágil a próxima melhor solução para concluir projetos 
a tempo e podem erroneamente considerar as estimativas como uma 
promessa disso. 
Acreditam genuinamente que as estimativas ágeis lhes darão um ponto 
de referência confiável sobre o tempo de conclusão. Vamos chamá-las 
de primeiro grupo.
O segundo grupo de pessoas aceita conscientemente que a estimativa 
é uma discussão de chances, uma previsão de probabilidade. 
O gráfico burndown fornece essa previsão com base na velocidade. 
Vamos atualizar a definição clássica de velocidade em nossa memó-
ria, citando que: “A ideia principal por trás da velocidade é ajudar as 
equipes a estimar quanto trabalho elas podem completar em um de-
terminado período de tempo, com base na rapidez com que o trabalho 
semelhante foi concluído anteriormente “”
Porém, se você não precisar do recurso que desenvolveu antes, nova-
mente, por que a previsão baseada em velocidade deve ser confiada? 
“Em geral, isso vale para todas as técnicas de previsão baseadas em de-
sempenho passado, incluindo modelos de previsão. (KOUZINA, 2014)
Esse excerto traz à tona um contraponto importante para jogarmos planning poker 
de maneira correta para estimarmos, ou se preferir, darmos um bom palpite com um 
desvio decente, mais ou menos uns 20%. Sim, isso numa estimativa é bastante decente.
A dica para evitar constrangimentos da natureza acima escrita é usar gente de 
desenvolvimento para estimar. Evite gerentes estimando, ou gente que nunca escreveu 
uma linha de código na vida, pois eles não saberão de verdade as armadilhas escondidas 
num requisito aparentemente inocente.
E isso não é um demérito, apenas a máxima “cada um tem a sua especialidade”.
Quando uma equipe de desenvolvedores lê uma história, eles formam conclusões 
independentes do esforço e da complexidade envolvidos.
Quando as estimativas estão distantes, ou seja, os membros do time colocam cartas 
com uma variação muito grande, isso sinaliza que a equipe entende o problema de 
maneira diferente. 
Um desenvolvedor com uma estimativa baixa pode conhecer uma biblioteca ou uma 
ferramenta que pode acelerar as coisas. 
Um desenvolvedor com uma estimativa alta pode saber de uma armadilha que os 
outros esqueceram.
11
UNIDADE 
Introdução às Estimativas Ágeis e aos Padrões de Projeto
Quando todo o time estima que uma história seja grande, isso define complexidade alta.
O que aconselha dividir a história em outras menores ou também sinalizar que mais 
pesquisas e levantamentos são necessários. 
Por outro lado, quando temos a equipecolocando cartas com números baixos e 
próximos, isso nos mostra que o problema é bem entendido pela equipe.
Mas há uma série de motivos que nos fazem ir adiante com as estimativas, segundo 
MERCIECA (2016), são elas:
• Estimativas nos permitem falhar precocemente;
• Estimativas nos ajudam a gerenciar a incerteza (riscos);
• Estimativas ajudam o time a falar sobre o planejamento;
• Estimativas nos ajudam a ajustar o planejamento;
• Estimativas nos ajudam a perceber que o ótimo é inimigo do bom.
Já vimos que os pontos de história são parecidos com a escala crescente de Fibonacci. 
Também já vimos a importância de desenvolvedores com experiência na fase de 
estimativas, e já conhecemos algumas dicas, mas como seguir adiante com as histórias 
a serem codificadas dentro do primeiro sprint, por exemplo, e, principalmente, se a 
equipe é nova e nunca passou pela metodologia Planning Poker antes?
Não há um caminho fácil ou seguro, e não há padrões, mas podemos dizer que uma 
boa prática seria ter sempre em mente que não existe um ponto de história correto. É o 
que a equipe quer que seja. 
Os pontos da história simplesmente representam categorias de esforço. 
Uma história “13” é maior que uma história “3”, mas é menor que uma história 
“20”. Uma forma útil é fazer a equipe começar com uma história de tamanho médio e 
todos deverão concordar com o valor que ela representa. A partir daí, o time inicia os 
trabalhos para estimar a primeira história.
É crítico, depois de alguns sprints, fazer com que a equipe repita brevemente suas 
estimativas anteriores para reforçar a compreensão da equipe sobre o que é um “20” ou 
de um “13”, por exemplo.
Para o primeiro sprint, faça a estimativa da equipe nos pontos da história, mas não 
os use para determinar quanto trabalho deve ser aceito. 
Simplesmente trabalhe com a equipe para que eles julguem coletivamente quantas 
histórias eles acham que podem terminar (desenvolver) no primeiro sprint.
O time poderá então usar sua velocidade como um guia de quanto trabalho pode 
aceitar confortavelmente a cada sprint.
Então, como você percebeu, o primeiro sprint de uma equipe que estiver iniciando 
a jornada no mundo ágil é de aprendizagem. A cada sprint feito, a equipe acumula 
conhecimento e as estimativas tendem a melhorar muito.
12
13
TIAGY (2017) nos diz que o dimensionamento é feito levando-se em conta:
• A quantidade de trabalho a ser feito; 
• A complexidade do trabalho; 
• Risco ou incerteza ao realizar o trabalho; 
• Tempo / Duração.
Diferentemente dos métodos tradicionais, é um pouco mais complexo calcular tempo 
(duração), porque isso depende de muitos fatores para trazer esse dimensionamento de 
forma direta. Dessa maneira, TIAGY (2017) trata disso na forma de um dimensionamento 
relativo, e leva em consideração algumas etapas:
1. Liste todas as histórias para serem dimensionadas.
2. Coloque-as em ordem da menor para a maior.
• Pegue a primeira história de usuário. 
• Então pegue a segunda história de usuário. 
• Decida qual é maior e coloque a maior acima. 
• Então pegue a próxima e decida onde ela se encaixa relativamente às 
outras duas. 
• Então pegue a próxima e faça o mesmo. 
• Repita o processo até que todas as histórias estejam agora na lista (em 
uma sequência do menor para o maior). Você pode utilizar cartões, 
post-its, lousa, etc., para fazer esse trabalho.
• 3. Dimensione as histórias.
• Comece da parte inferior e dê a essa história 2 pontos. Dar “2” 
fornece a você o espaço para dar um número menor “1” se descobrir 
algo menor depois.
• Veja a próxima história e decida qual é o tamanho dessa história em 
comparação com a primeira.
• Continue até ter o tamanho de cada história.
Use este conjunto de números (influenciado por Fibonacci) enquanto 
dimensiona: 1, 2, 3, 5, 8, 13, 20... (TIAGY,2017)
A estimativa baseada em horas deve ser usada quando as estimativas da tarefa são 
fornecidas em horas.
Recomendamos que você não enfatize os pontos da história durante o planejamento 
do sprint e se concentre mais em estimar o tempo necessário para concluir todas as 
tarefas envolvidas na história do usuário.
Portanto, estimativa de pontos de história é alto nível, enquanto estimativas baseadas 
em horas já são de baixo nível, sendo utilizadas para representar o esforço real para a 
conclusão das tarefas.
13
UNIDADE 
Introdução às Estimativas Ágeis e aos Padrões de Projeto
Pre-Planning
User Story Story Point
Story Point
User Story 1
UI Design 
Development Task 1
User Story 1
5
3
8
Tasks Hours
User Story
Tasks
Sprint Planning
Story Points and taks hour estimation process
Figura 2 – Processo de estimativa de pontos de histórias e horas de tarefas. TIAGY, 2017
Vamos às regras para iniciar uma sessão agora?!
1. Cada estimador recebe um conjunto de cartas;
2. Todos os estimadores selecionam itens de backlog, discutem recursos e fazem 
perguntas;
3. Quando um recurso for totalmente discutido, cada estimador em particular 
escolhe um cartão para representar sua estimativa;
4. Quando todos os estimadores fizerem suas estimativas, eles revelam suas cartas 
ao mesmo tempo. Se todas as estimativas corresponderem, os estimadores 
selecionarão outro item de lista de pendências e repetirão o mesmo processo. 
Quando as estimativas diferirem, os estimadores discutem a questão para chegar 
a um consenso;
5. As tarefas são divididas em linhas pelo número de pontos de história ne-
cessários para implementá-las, depois, colocamos cada item de backlog na 
linha apropriada.
STORY CARD, disponivel em: https://goo.gl/FJSqLX
Figura 3 – após a estimativa de todos os story cards, devemos transcrever para uma matriz,
de forma que cada história dimensionada fi que na linha referente aos seus pontos
14
15
Agora, veja que interessante, como convertemos esses tamanhos (1,2,3,5,8...) em 
estimativas de hora do homem. 
Não podemos fazer isso até que o primeiro sprint seja concluído. 
Enquanto o primeiro sprint está em andamento, podemos rastrear a velocidade da 
equipe, assim, somente quando o sprint número 1 terminar é que saberemos quantos 
Story Points um time pode completar por sprint. Usamos esses números para prever o 
desempenho da equipe para os próximos sprints.
Portanto, você deve tomar muito cuidado. Quando usamos metodologias ágeis, não 
podemos ficar estimando horas no princípio, pois é necessário o desenvolvimento e 
evolução da equipe fazendo software ágil. Essa é a ideia.
Então, se de cara você for traduzir Pontos de História para horas, você deixa de se 
beneficiar da velocidade da estimativa relativa. Você começa a trabalhar em horas e 
corre o risco de criar um compromisso que nessa fase é desnecessário.
 Ele fornece uma falsa sensação de precisão à medida que você reduz um ponto de 
história com um intervalo de tempo de 10 a 20 horas para, por exemplo, 15 horas. 
Será mais difícil chegar a um acordo nas estimativas quando você começar a trabalhar 
no domínio exato do tempo.
Quando temos todas as tarefas do backlog estimadas em termos de Story Points, 
podemos entender quantos sprints precisaremos para concluir o projeto. E, finalmente, 
podemos converter essas unidades abstratas em linhas do tempo reais do calendário.
0
0 0
0 0
8
8 8
8 8
13
13 13
13 13
20
20 20
20 20
40
40 40
4040
100
100 100
100 100
?
??
??
1
1 1
1 1
2
2 2
2 2
3
3 3
3 3
5
5 5
5 5
1
2
1
2
1
2
1
2
1
2
Figura 4 – Exemplo de baralho de cartas para entregar aos desenvolvedores para o jogo Planning Poker
Estratégias de Organização de Código
Refatoração
FOWLER (1999) define da seguinte maneira: “A refatoração é o processo de mudar 
um sistema de software de tal maneira que ele não altera o comportamento externo do 
código, mas melhora sua estrutura interna.”
15
UNIDADE 
Introdução às Estimativas Ágeis e aos Padrões de Projeto
A refatoração é tipicamente feita em pequenos passos. Após cada pequeno passo, 
você fica com um sistema funcionalmente inalterado. 
Praticantes normalmente intercalamcorreções de bugs e acrescentam adições entre 
essas etapas, de tal forma que ela não impede a alteração da funcionalidade. Trata-se 
apenas de uma reorganização de código.
Refatoração implica em equivalência: os produtos inicial e final devem ser funcional-
mente idênticos, tornando o código mais claro, mais limpo, mais simples e elegante.
Cuidado, não estamos falando de correção de bugs, mas sim de melhoria de código, 
executando a mesma coisa, melhor e mais rápido certo?!
Evite armadilhas, e não faça isso:
• Reescrever código;
• consertar bugs;
• melhorar aspectos observáveis de software como, por exemplo, sua interface;
• não coloque defeitos onde antes havia código funcional.
Benefícios que podemos colher do uso da refatoração:
• Melhora os atributos objetivos do código que se correlacionam com a facilidade de 
manutenção;
• ajuda a compreensão do código;
• incentiva o desenvolvedor a pensar e entender as decisões de design, em particular 
no contexto de propriedade coletiva de código;
• favorece o surgimento de elementos de design reutilizáveis e módulos de código.
FOWLLER (1999) distingue modificação de código para preservação de comporta-
mento e modificação de código para mudança de comportamento, e reforça a necessi-
dade dos testes da seguinte maneira:
Se estivermos fazendo uma modificação de código de refatoração ou 
preservação de comportamento:
• todos os nossos testes de unidade devem passar antes e depois da 
modificação;
• não precisamos modificar nenhum teste ou escrever novos;
• esperamos um código mais limpo quando terminarmos;
• nós não esperamos novo comportamento.
• Se estamos fazendo uma modificação de código de mudança de com-
portamento:
• esperamos novo comportamento;
16
17
• devemos escrever novos testes;
• podemos obter um código mais sujo quando terminarmos (e então 
refatorá-lo).
Se perdermos de vista essa distinção, então nossas expectativas para 
qualquer tarefa de modificação de código são confusas e complexas, 
ou de qualquer forma mais confusas e complexas do que se estivés-
semos atentos a isso. É por isso que a palavra e seu significado são 
importantes. (FOWLER,1999)
Figura 5 – Código Legado, mau escrito. 
Os erros e vícios estão apontados nos balões e destacados em letras de diversas cores. 
“O código se torna código legado no momento em que ele é muito intimidante para 
ser alterado. Não importa qual seja o motivo. Se você escreveu um novo recurso hoje, 
o que levou muita energia mental e tempo, e amanhã você terá medo de mudá-lo, 
então eu tenho novidades, você tem um código legado. Portanto, o conceito não diz 
respeito apenas a programas de computador antigos ou em tecnologia ultrapassada.”
Reusabilidade
Reuso de código refere-se ao uso de código básico em um programa, seus componentes 
ou código-fonte, para criar novos programas. A reutilização do código depende muito do 
conceito estereotipado. A reutilização de código não é um padrão e nem um princípio de 
design, é uma boa prática de programação que evita, dentre outras coisas, a redundância.
KUMBHAR (2017) coloca alguns princípios para a execução do reuso de código, a saber:
Princípios de design sólido são bem conhecidos entre os programadores. 
Eles têm uma relação muito próxima com a reutilização de código.
17
UNIDADE 
Introdução às Estimativas Ágeis e aos Padrões de Projeto
Princípio de Responsabilidade Única: Isso significa que nossos compo-
nentes (especialmente as classes) devem ter uma única responsabilida-
de. Este princípio leva a classes de peso leve bem projetadas. Quando 
seguimos esse princípio, acabamos em componentes reutilizáveis.
Princípio de abertura fechada: Este princípio de projeto determina 
que nossos componentes (incluindo classes e métodos) devem estar 
abertos para extensão e fechados para modificações. Quando seguido 
completamente, esse método leva a métodos e classes limpos, peque-
nos e reutilizáveis.
Princípio de substituição de Libskov: funções devem ser capazes de 
usar métodos de classes derivadas sem realmente conhecê-los. Isso 
nos força a criar interfaces reutilizáveis.
Segregação de interface. Melhor os separamos, mais elas são reutilizáveis.
Inversão de dependência: as classes concretas devem ser derivadas de 
interfaces bem projetadas. (KUMBHAR, 2017).
Extensibilidade
O software deve permanecer flexível e maleável. A extensibilidade é a ferramenta 
que melhor nos ajuda a alcançar isso.
Refere-se à capacidade de um software de se adaptar a uma alteração na amplitude 
da aplicação, em particular a sua capacidade em manter sua funcionalidade e desempe-
nho em caso de alta demanda.
Qualquer que seja o tamanho e a complexidade de um software, sua funcionalidade, 
desempenho, escalabilidade e custo devem corresponder às expectativas do usuário final.
Vejamos dois tipos de falta de extensibilidade:
• Tipo 1, quando o desempenho se deteriora rapidamente com o aumento da de-
manda antes de atingir o nível nominal e a falha pode ser corrigida pelas operações 
de definição e otimização de parâmetros do sistema;
• Tipo 2, quando o desempenho se deteriora para inaceitável, e nenhuma melhora 
pode ser feita, nem mesmo a substituição de hardware. A única maneira de corrigir 
esse defeito requer um questionamento caro da arquitetura do software.
O uso de filas, a arquitetura orientada a serviços SOA, utilizando serviços web e 
sistemas de gerenciamento de banco de dados, influenciam a escalabilidade do software.
Robustez
Significa que seu programa leva em conta todas as possibilidades, e que não existe erro 
não tratado, ou seja, todas as situações são tratadas pelo código e resultam em estado válido.
Isso significa que você deve projetar seu software de maneira robusta. O seu programa 
não só deve funcionar de forma correta em cada situação, mas também deve resistir a qual-
quer possível mau comportamento ou erro do usuário em seus arredores. Isso implica que 
você sempre deve verificar as suposições feitas durante o processo de desenvolvimento.
18
19
Portanto, é um estilo de programação que impede a finalização anormal ou ações 
inesperadas. Basicamente, requer código para lidar com entradas inválidas e absurdas de 
uma maneira razoável. Se ocorrer um erro interno, o programa ou biblioteca terminará 
normalmente e fornecerá informações suficientes para que o programador possa 
depurar o programa ou a rotina na retaguarda, todavia, não sairá para um prompt de 
comando, deixando o usuário na mão literalmente.
Existem alguns princípios a serem seguidos para criarmos robustez no software, 
conforme BISHOP:
• Paranoia: Não confie em nada que você não tenha gerado de código! 
Sempre que alguém usa sua rotina de programa ou biblioteca, supo-
nha que eles tentem quebrá-lo. Quando você chamar outra função, 
verifique se ela foi bem-sucedida. Mais importante ainda, assuma que 
seu próprio código terá problemas e o programe defensivamente, para 
que esses problemas possam ser detectados o mais rápido possível.
• Estupidez: Suponha que o usuário não possa ler páginas de manual ou 
documentação. Programe para que o código que você escreve manipule 
entradas e parâmetros incorretos, falsos e malformados de uma forma 
razoável, sendo “razoável”, definido pelo ambiente. Por exemplo, se você 
imprimir uma mensagem de erro, a mensagem deve ser autoexplicativa e 
não exigir que o usuário procure códigos de erro em um manual. 
• Implementos perigosos: Um “implemento perigoso” é qualquer coisa 
que suas rotinas esperem permanecer consistentes entre as chamadas. 
Por exemplo, na biblioteca de E/S padrão, espera-se que o conteúdo 
da estrutura FILE dos arquivos alocados permaneça fixo nas chamadas 
à biblioteca de E/S padrão. Isso faz com que seja um “implemento 
perigoso”. Não permita que os usuários tenham acesso a eles! Eles 
podem acidentalmente (ou deliberadamente) modificar os dados nessa 
estrutura de dados, causando falhas nas funções da biblioteca. Nunca 
retorne ponteiros ou índices em matrizes; sempre esconda os endere-ços verdadeiros (ou índices) usando “token”.
• Ocultar estruturas de dados: torna seu programa ou biblioteca mais 
modular. Por exemplo, o gerenciador de filas usa matrizes para repre-
sentar filas. Isso lhes dá um tamanho máximo. Você pode decidir que as 
listas vinculadas seriam mais adequadas e desejar reescrever as rotinas. 
Se você projetou adequadamente a interface e ocultou o máximo pos-
sível de informações e dados, o programa de chamada não precisa ser 
alterado; no entanto, se você negligenciar esse estilo de ocultação de 
informações e abstração de informações, os programas que funcionam 
corretamente com a representação atual poderão ser interrompidos se 
você alterar essa representação (porque o chamador assumiu que os ele-
mentos da fila estão em localizações inteiras sequenciais, por exemplo).
• Não pode acontecer: Como diz a velha frase: “nunca diga nunca”. 
Casos impossíveis raramente são assim; na maioria das vezes, são 
apenas altamente improváveis. Pense em como esses casos devem ser 
tratados e implemente esse tipo de tratamento. Na pior das hipóteses, 
verifique o que você acha que é impossível e imprima uma mensagem 
de erro, se ocorrer. Afinal, se você modificar o código repetidamente, 
é muito provável que uma modificação afete outras partes do código 
e cause efeitos inconsistentes, o que pode levar à ocorrência de casos 
“impossíveis”. (BISHOP, 2002)
19
UNIDADE 
Introdução às Estimativas Ágeis e aos Padrões de Projeto
Padrões de Desenho
Um padrão de projeto é uma solução geral repetível para um problema que ocorre 
com frequência no design de software. 
Um padrão de design não é um design acabado que pode ser transformado diretamente 
em código, mas descrição ou modelo de como resolver um problema que pode ser usado 
em muitas situações diferentes.
Padrões Criacionais
Os padrões de design criativos são padrões de design que lidam com mecanismos 
de criação de objetos, tentando criar objetos de maneira adequada à situação. A forma 
básica de criação de objetos pode resultar em problemas de design ou adicionar comple-
xidade ao design. Padrões de design criativos resolvem esse problema controlando de 
alguma forma a criação desse objeto.
• Abstract Factory: Cria uma instância de várias famílias de classes;
• Builder: Separa a construção de objetos de sua representação;
• Factory Method: Cria uma instância de várias classes derivadas;
• Object Pool: Evita aquisições caras e liberação de recursos pela reciclagem de 
objetos que não estão mais em uso;
• Prototype: Uma instância totalmente inicializada para ser copiada ou clonada;
• Singleton: Uma classe da qual apenas uma única instância pode existir.
Padrão Estrutural
Esses padrões de design são todos sobre a composição de Classes e Objetos. Padrões 
estruturais de criação de classes usam herança para compor interfaces. Padrões estruturais 
de objetos definem maneiras de compor objetos para obter novas funcionalidades:
• Adapter: faz a correspondência de diferentes classes.
• Bridge: Separa a interface de um objeto de sua implementação;
• Composite: Uma estrutura de árvore de objetos simples e compostos;
• Decorator: Adicionar responsabilidades aos objetos dinamicamente;
• Facade: Uma única classe que representa um subsistema inteiro;
• Flyweight: Uma instância refinada usada para compartilhamento eficiente;
Private Class Data: Restringe o acesso do aaccessor/mutator;
• Proxy: Um objeto representando outro objeto.
20
21
Padrão Comportamental
Esses padrões de design são todos sobre comunicação de objetos da classe. Padrões 
comportamentais são aqueles padrões que estão mais especificamente relacionados à 
comunicação entre objetos.
• Chain of rresponsability: Uma maneira de passar um pedido entre uma cadeia 
de objetos.
• Command: Encapsula uma solicitação de comando como um objeto.
• Interpreter: Uma maneira de incluir elementos de linguagem em um programa.
• Iterator: Acessa sequencialmente os elementos de uma coleção.
• Mediator: Define a comunicação simplificada entre classes.
• Memento: Captura e restaura o estado interno de um objeto.
• Null Object: Projetado para agir como um valor padrão de um objeto.
• Observer: Uma maneira de notificar a mudança para várias classes.
• State: Altera o comportamento de um objeto quando seu estado muda.
• Estrategy: Encapsula um algoritmo dentro de uma classe.
• Template Method: Adia as etapas exatas de um algoritmo para uma subclasse.
• Visitor: Define uma nova operação para uma classe sem alteração.
21
UNIDADE 
Introdução às Estimativas Ágeis e aos Padrões de Projeto
Material Complementar
Indicações para saber mais sobre os assuntos abordados nesta Unidade:
 Vídeos
Agile in Practice: Planning Poker – Agile Academy
https://youtu.be/0FbnCWWg_NY
Agile Estimating and Planning: Planning Poker - Mike Cohn
https://youtu.be/MrIZMuvjTws
Estimation - Black Pepper Software Limited
https://youtu.be/7nTxdl29ePY
Design Patterns - Como surgiram os padrões de projeto? – 4WHILE
https://youtu.be/sUyTKDHGCtA
22
23
Referências
AGILE ALLIANCE, Agile 101, 2018. Disponível em: https://www.agilealliance.
org/glossary/backlog/#q=~(filters~(postType~(~’page~’post~’aa_book~’aa_event_
session~’aa_experience_report~’aa_glossary~’aa_research_paper~’aa_video)~tags~(~’bac
klog))~searchTerm~’~sort~false~sortDirection~’asc~page~1) . Acessado em 10/05/2018.
BISHOP, M. Robust Programming, 2002, University of California at Davis. Disponível 
em: http://nob.cs.ucdavis.edu/bishop/secprog/robust.html. Acessado em: 05/05/2018.
FOWLER, M. et Ali. Refactoring Improving the design of existing code, 1ª Addison 
Wesley Longmann, California EUA, 1999.
KOUZINA, O. Why Agile Estimates Don’t Work, 2014, TARGET PROCESS. Dis-
ponível em: https://www.targetprocess.com/blog/2014/07/why-agile-estimates-dont-
-work-part-2/. Acessado em 2/5/2018.
KUMBHAR, N. What is code reusability? 2017. Disponível em: https://www.
quora.com/What-is-code-reusability?utm_medium=organic&utm_source=google_rich_
qa&utm_campaign=google_rich_qa. Acessado em: 4/5/2018.
MERCIECA, M. Why You Should Do Software Estimates, 2016, MUTUALLY HU-
MAN. Disponível em: https://www.mutuallyhuman.com/blog/2016/09/09/why-you-
-should-do-software-estimates acessado em 3/5/2018.
RADIGAN, D. The secrets behind story points and agile estimation, ATLASSIAN. 
Disponível em: https://www.atlassian.com/agile/project-management/estimation. Aces-
sado em: 2/5/2018.
23

Mais conteúdos dessa disciplina