Metodologias Ageis No Contexto de Desenv
Metodologias Ageis No Contexto de Desenv
Metodologias Ageis No Contexto de Desenv
FT – Faculdade de Tecnologia
Limeira - 2010
UNICAMP – Universidade Estadual de Campinas
FT – Faculdade de Tecnologia
Limeira - 2010
2
Sumário
Resumo .......................................................................................................................................... 4
Abstract ......................................................................................................................................... 4
1. Introdução ............................................................................................................................. 5
2. Metodologias Ágeis............................................................................................................... 5
3. Estudo de Caso .................................................................................................................... 20
4. Análise e Discussão sobre as Metodologias Ágeis Abordadas ........................................... 22
5. Considerações Finais ........................................................................................................... 24
6. Referências Bibliográficas .................................................................................................. 25
3
Resumo
Este trabalho apresenta um estudo sobre metodologias ágeis, mais especificadamente os
métodos Lean Software Development (LSD), Scrum e eXtreme Programming. São apresentadas
características, conceitos, formas de trabalho, além de uma comparação entre essas
metodologias, como pontos em comum e diferenças. Este trabalho remete-se a disciplina FT027
(Gestão e Qualidade de Projetos) do programa de Pós Graduação da Faculdade de Tecnologia
da Universidade Estadual de Campinas.
Abstract
This paper presents a study about agile methodologies, more specifically the methods Lean
Software Development (LSD), Scrum and eXtreme Programming. Characteristics are presented,
concepts, ways of working, beyond of comparison between these methodologies, as
commonalities and differences. This work refers to FT027 (Management and Quality Project) of
program by Graduate School of Technology, State University of Campinas.
4
1. Introdução
2. Metodologias Ágeis
Nesta seção, será apresentada uma breve introdução sobre a origem dos métodos
ágeis além de dar ênfase em três metodologias ágeis de desenvolvimento de software:
Lean Software Development (LSD), Scrum e eXtreme Programming (XP).
Filho [7, p. 22] sintetiza e coloca da seguinte maneira o modo pelo qual os métodos
ágeis surgiram:
5
projetos, elas foram aprimoradas e, em alguns casos, chegaram a se
transformar em novas metodologias de desenvolvimento de software.
Essas metodologias passaram a ser chamadas de leves por não
utilizarem as formalidades que caracterizavam os processos tradicionais
e por evitarem a burocracia imposta pela utilização excessiva de
documentos. Com o tempo, algumas delas ganharam destaque nos
ambientes empresarial e acadêmico, gerando grandes debates,
principalmente relacionados à confiabilidade dos processos e à
qualidade do software.”
De acordo com Beck [3], em 2001 um encontro entre 17 líderes que trabalhavam no
contra-fluxo dos padrões da indústria de software, foi discutido formas de trabalho,
objetivando chegar a uma nova metodologia de produção de software, que pudesse ser
usada por todos eles e em outras empresas, substituindo os modelos tradicionais de
desenvolvimento. O grupo chegou ao consenso de que alguns princípios eram
determinantes para a obtenção de bons resultados. O resultado deste encontro foi a
identificação de 12 princípios e a publicação do Manifesto Ágil [3] que os representa
com quatro premissas:
6
5. Os projetos devem ser construídos em torno de indivíduos motivados. Dando
o ambiente e o suporte necessário e confiança para fazer o trabalho;
6. O método mais eficiente e eficaz de transmitir informações para e entre uma
equipe de desenvolvimento é através de conversa face a face;
7. Software funcionando é a medida primária de progresso;
8. Os processos ágeis promovem desenvolvimento sustentável. Os
patrocinadores, desenvolvedores e usuários devem ser capazes de manter um
ritmo constante indefinidamente;
9. Contínua atenção a excelência técnica e bom design aumentam a agilidade;
10. Simplicidade para maximizar, a quantidade de trabalho não realizado é
essencial;
11. As melhores arquiteturas, requisitos e designs emergem de equipes auto-
organizáveis;
12. Em intervalos regulares, a equipe deve refletir sobre como tornar-se mais
efetiva, e então, ajustar-se de acordo com seu comportamento.
O Manifesto Ágil, segundo Filho [7], ressalta o que mais tem valor para as
metodologias ágeis, a importância de como saber lidar com pessoas, assim como ter o
cliente colaborando para encontrar a melhor solução, entregar o software com qualidade
e do que se adaptar às mudanças. Isto oculta parte das dificuldades dos processos,
contratos, documentação e planejamento para o desenvolvimento de um software [7].
De acordo com o Lean Institute Brasil [11], “Lean é uma estratégia de negócios para
aumentar a satisfação dos clientes através da melhor utilização dos recursos. A Gestão
Lean procura fornecer consistentemente valor aos clientes com os custos mais baixos
(Propósito) através da identificação de melhoria dos fluxos de valor primários e de
suporte (Processos) por meio do envolvimento das pessoas qualificadas, motivadas e
com iniciativa (Pessoas). O foco da implementação deve estar nas reais necessidades
dos negócios e não na simples aplicação das ferramentas lean.”
7
De acordo com Mary Poppendieck [14], o desenvolvimento de software Lean é a
aplicação dos princípios da Toyota product development system para o desenvolvimento
de software. Quando ele é aplicado corretamente, o desenvolvimento é de alta
qualidade, além de ser realizado rapidamente e possuir um baixo custo. Além disso, o
desenvolvimento ágil possui um grande sucesso devido ao Lean.
2.2.1 Princípios
O pensamento Lean foca em oferecer o que o cliente quer, onde e quando quiserem
sem haver qualquer desperdício. Para atingir esse objetivo, Lean possui alguns
princípios. No trabalho publicado por Poppendieck Poppendieck [15], é feito o
mapeamento dos sete princípios de Lean para o desenvolvimento de software. Em
conjunto todos esses princípios oferecem entregas rápidas, com mais qualidades e com
baixo custo, ao mesmo tempo. A seguir cada princípio é apresentado conforme o ponto
de vista de Filho [7].
8
Processos complexos aumentam a quantidade de documentos, por isso também
caracterizam desperdício.
Esperas por requisitos, por testes, por aprovação ou por feedback retardam o fluxo
do desenvolvimento ou a identificação de problemas.
Defeitos são desperdício porque o custo para corrigi-los aumenta com o tempo. À
medida que o projeto evolui, a complexidade do código aumenta, com isso, a
localização e a remoção de um defeito torna-se mais difícil
Filho [7] afirma que lições devem ser extraídas das experiências vividas pela equipe
e incorporadas ao processo, fazendo com que as dificuldades passadas sejam fonte de
conhecimento e contribuam para o amadurecimento da equipe e do processo. O uso de
um processo definido engessa o aprendizado.
Deming [5 apud [7, p. 78]] propôs um ciclo de melhoria contínua que pode ser
aplicado neste cenário, sendo que primeiro deve-se fazer a identificação o problema,
localizar a sua causa, criar uma solução, implementar, verificar os resultados e se
adaptar à nova realidade.
Adiar decisões permite que as escolhas sejam apoiadas por mais experiência e
conhecimento adquiridos no decorrer do processo. Para retardar decisões durante a
construção de sistemas é importante que a equipe crie a capacidade de absorver
mudanças tratando os planejamentos como estratégias para atingir um objetivo e não
9
como comprometimentos. Assim, mudanças serão vistas como oportunidades para
aprender e atingir as metas [7].
De acordo com Filho [7], com ciclos rápidos o desenvolvimento caminha através de
um processo iterativo no qual o cliente refina suas necessidades e as obtém
implementadas já no próximo ciclo. Iterações curtas trazem mais experiência para a
equipe e aumentam a sua segurança para tomar decisões.
Franco [8] coloca que envolver os desenvolvedores nas decisões de detalhes técnicos
é fundamental para atingir a excelência. Quando dotados com a experiência necessária e
guiados por um líder, eles tomarão decisões técnicas e de processos, melhores que
qualquer outra pessoa poderia tomar por eles. Lean utiliza as técnicas de produção
puxada (pull) para agendar o trabalho e possuem mecanismos de sinalizações locais, de
forma a permitir que outros trabalhadores identifiquem o trabalho que necessita ser
realizado. No desenvolvimento de software Lean, o mecanismo da produção puxada
(pull) corresponde ao acordo de entregar versões refinadas e incrementais do software
em intervalos regulares. A sinalização local é feita através de gráficos visuais, reuniões
diárias, integrações freqüentes e testes automatizados [8].
De acordo com Filho [7], a equipe de desenvolvimento deve elaborar soluções que a
deixem segura de que estão construindo um produto de qualidade. Por isso existe a
necessidade da utilização de uma arquitetura adequada, mantendo uma alta cobertura de
testes automatizados e preservando a flexibilidade para mudanças, adaptações e
extensões são formas de trazer segurança e motivação para alcançar níveis mais
elevados de qualidade. Dessa maneira, ao invés de se gastar tempo para encontrar e
corrigir defeitos, mais investimento e esforços devem ocorrer na prevenção através de
vários tipos de teste. De acordo com Franco [8], o software necessita de um nível
adicional de integridade e precisa manter sua utilidade ao longo do tempo. O software
que possui integridade possui uma arquitetura coerente, facilidade satisfatória de uso,
atende aos propósitos para o qual foi proposto, manutenível, adaptável e extensível.
Para Franco [8], para que haja a obtenção da integridade nos sistemas de grande
complexidade é preciso um conhecimento profundo de diversas áreas. Filho [7] coloca
que a criação de grandes sistemas envolve soluções integradas que devem prover bons
resultados perante uma análise global do software. Os pontos de vista dos clientes e dos
usuários equivalem a visões de alto nível do sistema. Otimizações macro canalizam os
esforços para aumentar a satisfação dos usuários finais através de um produto
consistente. Lean ainda recomenda a escolha de métricas de alto nível que sejam
representativas para identificar a evolução. Essas métricas devem levar em consideração
também a qualidade e a satisfação do cliente, pois a partir delas será possível avaliar
quais trocas são vantajosas.
2.3. Scrum
12
O Scrum não define uma técnica específica para o desenvolvimento de software
durante a etapa de implementação, ele se concentra em descrever como os membros da
equipe devem trabalhar para produzir um sistema flexível, num ambiente de mudanças
constantes. A idéia central do Scrum é que o desenvolvimento de sistemas envolve
diversas variáveis (ambientais e técnicas) e elas possuem grande probabilidade de
mudar durante a execução do projeto (por exemplo: requisitos, prazos, recursos,
tecnologias etc.). Estas características tornam o desenvolvimento do sistema de software
uma tarefa complexa e imprevisível, necessitando de um processo flexível e capaz de
responder às mudanças [8].
Filho [7] descreve os elementos de apoio do Scrum, sendo que os únicos elementos
que a equipe produz para seguir a práticas de Scrum são cartões com as funcionalidades
e gráficos de acompanhamento. Os cartões agrupados formam o Backlog do Produto e
outros backlogs. Os gráficos são atualizados freqüentemente e devem refletir o estado
do projeto. Estes são listados a seguir [7]:
De acordo com Franco [8], os papéis no Scrum que possuem tarefas e propósitos
diferentes durante o processo e suas práticas são apresentados a seguir:
13
• Cliente: participa das tarefas relacionadas à definição da lista de
funcionalidade do software sendo desenvolvido ou melhorado, elaborando os
requisitos e restrições do produto final desejado.
• Gerente: é encarregado pela tomada das decisões finais, utilizando as
informações visuais disponibilizadas graficamente pelos padrões e
convenções a serem seguidas no projeto. Ele também é responsável por
acordar, junto aos Clientes, os objetivos e requisitos do projeto.
• Equipe Scrum: é a equipe de projeto que possui autoridade de decidir sobre
as ações necessárias e de se organizar para poder atingir os objetivos
preestabelecidos. A Equipe Scrum é envolvida, por exemplo, na estimativa de
esforço, na criação e revisão da lista de funcionalidade do produto, sugerindo
obstáculos que precisam ser removidos do projeto.
• Scrum Master: é responsável por garantir que o projeto esteja sendo
conduzido de acordo com as práticas, valores e regras definidas no Scrum e
que o progresso do projeto está de acordo com o desejado pelos Clientes. O
Scrum Master interage tanto com a Equipe Scrum, como com os Clientes e o
Gerente durante o projeto. Ele também é responsável por remover e alterar
qualquer obstáculo ao longo do projeto, para garantir que a equipe trabalhe da
forma mais produtiva possível.
• Responsável pelo Produto: é oficialmente responsável pelo projeto,
gerenciamento, controle e por tornar visível a lista de funcionalidade do
produto. Ele é selecionado pelo Scrum Master, Clientes e Gerente. Ele
também é responsável por tomar as decisões finais referentes às tarefas
necessárias para transformar a lista de funcionalidades no produto final,
participando na estimativa do esforço de desenvolvimento necessário e é
responsável pelo detalhamento das informações referentes à lista de
funcionalidade utilizada pela Equipe Scrum.
14
está de acordo com o planejamento) e, ao final de cada sprint, uma reunião de
retrospectiva e planejamento do próximo sprint (Figura 3) [1].
Na metodologia Scrum para se planejar uma interação (uma entrega) deve-se seguir a
seguinte seqüência de atividades, segundo Araujo e Galina [1]:
15
de desenvolvimento de software e conseqüentemente objetivando a velocidade de
conclusão dos próximos sprints [1].
Segundo Franco [8], a metodologia Extreme Programming (XP) surgiu como uma
tentativa para solucionar os problemas causados pelos ciclos de desenvolvimento longos
dos modelos de desenvolvimento tradicionais. O XP é composto por práticas que se
mostraram eficientes nos processos de desenvolvimento de software nas últimas
décadas. Depois de aplicado e obtido sucesso num caso real, o XP foi formalizado
através de princípios chaves e doze práticas [2]. Quando analisadas individualmente, as
práticas que compõem o XP não são novas. No XP estas práticas foram reunidas e
alinhadas de tal forma a criar uma interdependência entre elas, e assim, deu origem a
uma nova metodologia de desenvolvimento de software.
16
• Feedback: todo problema deve ser evidenciado o mais cedo possível para que
possa ser corrigido imediatamente. Toda a oportunidade é descoberta o mais
cedo possível para que possa ser incorporada de forma rápida ao produto que
está sendo construído;
• Coragem: é preciso coragem para apontar um problema no projeto, para
solicitar ajuda quando necessário, para simplificar o código que já está
funcionando (podendo introduzir novos defeitos), comunicar ao cliente que
não será possível implementar um requisito no prazo estimado e, até mesmo,
para fazer alterações no processo de desenvolvimento.
• Respeito: é necessário entre as pessoas, sendo a peça principal para que os
demais valores funcionem. Sem respeito, a Comunicação e o Feedback serão
pouco eficientes e a Coragem de um membro poderá ser nociva aos demais
por não estar alinhada com os interesses da equipe. Todos os participantes
devem manter o respeito entre si e em relação aos seus trabalhos.
Desvalorizar alguém, a função que exerce ou a qualidade de seu trabalho são
formas de falta de respeito que minam a sinergia da equipe. Uma forma de
respeito de cada um para com a equipe é assumir responsabilidades que serão
capazes de cumprir e da equipe para com seus membros é confiar que cada
um fará o melhor trabalho possível. XP considera que os desenvolvedores
também são pessoas e preocupa-se com suas necessidades pessoais e
profissionais através dos princípios da humanidade e da diversidade,
estabelecendo compromissos com o princípio da aceitação da
responsabilidade.
2.4.2. Práticas
As práticas do XP, segundo Franco [8], são agrupadas em quatro grupos de acordo
com sua finalidade, começando da elipse central para a extremidade:
• Codificação;
• Equipe;
• Processo;
• e Produto.
19
A Figura 4 apresenta uma ilustração gráfica do agrupamento das práticas do XP,
descritas anteriormente.
3. Estudo de Caso
O estudo de caso foi retirado de “Introducing Lean Principles with Agile Practices at
a Fortune 500 Company” e foi elaborado por Emma Parnell-Klabo (2006).
Antes de qualquer ação ela necessitou reorganizar seus processos, e para isso utilizou
os princípios DMAIC do Seis Sigma.
20
• Paradas freqüentes no processo de desenvolvimento que acarretavam atrasos de
alguns dias e até semanas nos produtos;
• Os executantes do processo possuíam pouca visibilidade de todas as outras
tarefas;
• Redundância e sobreposição de papéis entre os departamentos;
• Expectativas pouco claras dos clientes;
• Baixo nível de interação entre os clientes e o time de desenvolvedores;
• Atribuir os recursos mais qualificados e conhecedores técnicos para coordenar o
trabalho em vez de utilizá-los para contribuir no processo de desenvolvimento;
Os resultados desse piloto foram: 30% menos na codificação e testes, e 15% menos
com os custos com recursos, além da duração do projeto ser 40% menor.
Diante desses resultados foi observado que a junção de Lean e Ágil forneceram bons
resultados, porém, antes da aplicação dos princípios do Lean e técnicas de software
Ágil, as ferramentas Lean devem ser utilizadas para remover resíduos, após todos os
processos estarem organizados.
21
4. Análise e Discussão sobre as Metodologias Ágeis Abordadas
A cada nova iteração um subprojeto é elaborado, onde são realizadas todas as etapas
como: planejamento, requisitos, codificação e testes. E essas iterações duram poucas
semanas, o que leva a resultados rápidos, principalmente para os clientes. Os
subprojetos entregues frequentemente possuem funcionalidades já em operação.
22
torna-se flexível para acomodar mudanças funcionais e de prioridade durante
a construção do sistema. No fim de cada ciclo, o software pode ser entregue
ao cliente para que o restante do desenvolvimento seja direcionado pelo seu
feedback.
• Desenvolvimento Incremental: Durante as iterações, o software pode
receber incrementos funcionais de duas formas: 1) acrescentando
funcionalidades à medida que o software cresce, ou 2) evoluindo as
funcionalidades junto com o sistema. Na primeira, as funcionalidades são
implementadas completamente e entregues uma por vez, no segundo caso
elas são criadas de forma simplificada para entrarem em produção
rapidamente e, se preciso, são completadas ou melhoradas nas próximas
iterações;
• Colaboração: Clientes e usuários estão mais próximos dos desenvolvedores
e acompanham a evolução do produto. O contato constante com o cliente
permite feedback rápido e facilita a comunicação. Com mais comunicação, a
visão dos participantes sobre o andamento do projeto torna-se mais apurada,
evitando que surpresas aconteçam no fim do projeto. A identificação e
resolução de problemas tornam-se mais rápidas e as prioridades, o escopo e
os detalhes da implementação podem ser negociados com mais facilidade;
• Estimativas: Métodos ágeis usam estimativas ao invés de predições.
Estimativas são compostas por uma dupla de valores < v, p >, onde v é um
palpite sobre determinado evento ou atividade e p é a probabilidade de v
acontecer. Equipes ágeis baseiam-se na comunicação e na transparência. Ao
invés de tratar suas estimativas como fatos, admitem que existe uma incerteza
associada ao valor estimado e evidenciam isso para que o cliente e outros
envolvidos também tomem ciência do grau de dificuldade de cada tarefa.
Estimativas de longo prazo geralmente possuem graus maiores de incerteza
associados. À medida que o tempo passa e o conhecimento sobre o assunto
aumenta, as estimativas podem ser refeitas considerando um nível maior de
detalhes e associando probabilidades de sucesso mais altas;
• Negociação: No desenvolvimento de software, o planejamento e o produto
final estão relacionados com quatro variáveis interdependentes: tempo, custo,
escopo e qualidade. Essas variáveis se relacionam de forma que a alteração
do valor de qualquer uma delas influencia as outras;
23
• Priorização: Métodos ágeis baseiam-se fortemente na adaptação a mudanças.
As estratégias de planejamento focam em planos detalhados para o curto
prazo e mais superficiais para o futuro distante. Desta forma, é possível uma
visão panorâmica para guiar as decisões no longo prazo e precisão nas
atividades do dia-a-dia. As duas principais vantagens desta abordagem são: 1)
economia de esforço ao abrir mão do detalhamento de longo prazo, pois é
difícil fazer previsões sobre o futuro e a alta chance de mudanças durante a
execução invalida facilmente especificações minuciosas; 2) detalhes no longo
prazo trazem a falsa sensação de certeza, pois os indivíduos passam a tratar
previsões detalhadas como predições. Equipes ágeis revêem seus planos
constantemente. A cada planejamento, elas têm a oportunidade de avaliar as
condições do projeto e, baseadas nesses fatos, traçar o melhor caminho para
atingir seus objetivos. Esta estratégia mantém os planos e a execução sempre
adequados à realidade, que inevitavelmente estão em mutação, significando
identificar prioridades para cada momento do projeto.
5. Considerações Finais
Figur
gura 5. Complementaridade dos métodos ágeis.
6. Referências Bibliog
liográficas
[1] ARAUJO, R. C., GALINA INA, T. C.: Análise de Escopo e Planejamento noo Desenvolvimento
de Software, sob a Perspectiv
tiva Ágil. Universidade do Vale do Rio dos Sinos
nos (Unisinos). São
Leopoldo – RS – Brasil. 2007.
07.
[3] BECK, K., et al.: Manianifesto for Agile Software Development. 2001
01. Disponível em
<http://www.agilemanifesto.o
.org>. Acesso em Junho de 2010.
[5] DEMING, W. E.: Outt oof the Crisis: Quality, Productivity, and Com
mpetitive Position.
Cambridge University Presss .1986.
.1
[6] DYBA, T., DINGSØYR R, T.: What do we know about Agile Softwar
ware Development?
Published by the IEEE Compu
puter Society. 2009.
25
[8] FRANCO, E. F.: Um modelo de gerenciamento de projetos baseado nas metodologias ágeis
de desenvolvimento de software e nos princípios da produção enxuta. Escola Politécnica da
Universidade de São Paulo (Dissertação de Mestrado). 2007.
[10] KALERMO, J., RISSANEN, J.: Agile software development in theory and practice.
Universidade de Jyväskylä, Finlândia (Dissertação de Mestrado). 2002.
[13] PARNELL-KLABO, E.: Introducing Lean Principles with Agile Practices at a Fortune 500
Company. Proceedings of AGILE 2006 Conference. 2006.
[15] POPPENDIECK, M., POPPENDIECK, T.: Lean Software Development: An Agile Toolkit
for Software Development Managers. Primeira Edição. Boston: Addison-Wesley Professional.
2003.
[16] SCHWABER, K.; BEEDLE, M. Agile Software Development With Scrum. Primeira
Edição. Upper Saddle River: Prentice-Hall. 2001.
26