Professional Documents
Culture Documents
Belo Horizonte
2007
Universidade Federal de Minas Gerais
Instituto de Ciências Exatas
Departamento de Ciências da Computação
Especialização em Informática: Ênfase: Engenharia de Software
por
Belo Horizonte
2007
ALEXANDRE COTA MOL
Belo Horizonte
2007
Folha de aprovação: fornecida
pela secretaria do Programa de
Pós-Graduação em Ciências da
Computação, com as devidas
assinaturas do orientador e da
banca de avaliação do trabalho.
À todos aqueles que têm ensinado-me a ser uma pessoa melhor a cada dia,
pela confiança, por suas palavras motivadoras, pelo carinho,
o comportamento ético, a honestidade, a amizade e por atitudes admiráveis
que têm tornado exemplos e práticas em minha vida.
AGRADECIMENTOS
The agile methods appeared when the traditional software development started being
questioned, due, among several aspects, to the large volume of documentation. The
agile methods got more attention with the publication of a manifesto in 2001. Agile
methods are essentially iterative, incremental and evolutionary software development
methods, and one of their goals is to accept the changes of requirements during the
development process, promoting progressive deliveries of functional software as soon
as possible. The agile methods are based on the customer’s participation in the process
of software development. The customer defines and prioritizes what will be developed
at each phase. Although the agile methods have been classified as applicable only to
small teams, some examples exist where they were applied to teams consisting of
hundreds of people. This work discusses the following agile methods: Adaptative
Software Development, Crystal Clear, Crystal Orange, Dynamic Systems Development
Method, Extreme Programming, Feature Driven Development, Lean Development and
Scrum. At the end of this work there are some comparisons among these methods and
the Rational Unified Process.
AM Agile Modeling
ASD Adaptive Software Develompent
DSDM Dynamic Systems Development Method
FDD Feature-Driven Development
IID Interactive Incremental Development
JAD Joint Application Development
LD Lean Development
OO Object-Oriented
OSS Open Source Software
PP Programatic Programming
PSP Personal Software Process
ROI Return Of Investment
RUP Rational Unified Process
TST Team Software Process
UP Unified Process
XP Extreme Programming
LISTA DE TABELAS
1 INTRODUÇÃO....................................................................................................................13
2 OS MÉTODOS ÁGEIS........................................................................................................16
2.1 O SURGIMENTO DOS MÉTODOS ÁGEIS.....................................................................................16
2.2 O MOVIMENTO ÁGIL............................................................................................................16
2.3 O MÉTODO ITERATIVO INCREMENTAL DE DESENVOLVIMENTO.....................................................18
2.4 O DESENVOLVIMENTO EVOLUTIVO..........................................................................................20
2.5 O DESENVOLVIMENTO ADAPTÁVEL.........................................................................................20
2.6 O DESENVOLVIMENTO ÁGIL..................................................................................................20
2.7 CONTRASTES ENTRE MÉTODOS ÁGEIS E MÉTODOS TRADICIONAIS...............................................22
2.7.1 Metas Básicas do Projeto..........................................................................................24
2.7.2 Tamanho do Projeto...................................................................................................24
2.7.3 Ambiente do Projeto..................................................................................................24
2.7.4 Relações com o Cliente.............................................................................................25
2.7.5 Planejamento e Controle...........................................................................................26
2.7.6 Comunicação no Projeto...........................................................................................26
2.7.7 Requisitos..................................................................................................................27
2.7.8 Desenvolvimento.......................................................................................................27
2.7.9 Testes.........................................................................................................................28
2.7.10 Clientes....................................................................................................................28
2.7.11 Desenvolvedores......................................................................................................29
2.7.12 Cultura.....................................................................................................................29
3 UM COMPARATIVO ENTRE DIVERSOS MÉTODOS................................................31
3.1 SCRUM...............................................................................................................................31
3.2 ADAPTATIVE SOFTWARE DEVELOPMENT (ASD)........................................................................33
3.3 LEAN DEVELOPMENT (LD)...................................................................................................34
3.4 CRYSTAL.............................................................................................................................35
3.4.1 Crystal Clear .............................................................................................................38
3.4.2 Crystal Orange...........................................................................................................41
3.5 EXTREME PROGRAMMING (XP) ............................................................................................43
3.6 DYNAMIC SYSTEMS DEVELOPMENT METHOD (DSDM)............................................................51
3.7 FEATURE-DRIVEN DEVELOPMENT (FDD)................................................................................55
3.8 ALGUMAS COMPARAÇÕES ENTRE OS MÉTODOS ÁGEIS................................................................59
4 CONCLUSÃO......................................................................................................................63
REFERÊNCIAS......................................................................................................................65
13
1 INTRODUÇÃO
Método
[Do grego méthodos, ‘caminho para chegar a um fim’]
Substantivo masculino.
1. Caminho pelo qual se atinge um objetivo.
2. Programa que regula previamente uma série de operações que se devem realizar,
apontando erros evitáveis, em vista de um resultado determinado.
3. Processo ou técnica de ensino:
4. Modo de proceder; maneira de agir; meio.
5. Tratado elementar
Portanto podemos inferir que métodos ágeis devam prover processos, maneiras de
agir, para se alcançar o desenvolvimento rápido de software, de forma desembaraçada.
Conforme o Aurélio temos que:
Desembaraçado
[Part. de desembaraçar]
Adjetivo.
1. Isento ou livre de embaraços.
2. Ativo, diligente, expedito.
14
O que se percebe é que a indústria de software está otimista com relação aos
métodos ágeis, mas poucos dados estatísticos estão disponíveis, se comparados aos métodos
tradicionais. No entanto, não é objetivo desse trabalho induzir a utilização de métodos ágeis,
pois como disse Alistair Cockburn (COCKBURN, 2006; tradução nossa):
Um erro comum de um metodologista iniciante é acreditar que a última técnica que
ele acabou de aprender é a técnica mestre que todas as pessoas teriam que utilizar, [...]
há um número continuamente crescente de técnicas úteis no mundo, e portanto seria
de responsabilidade de cada profissional em sua especialidade aprender a usá-las. Não
faz nenhum sentido que o autor de uma metodologia a ser utilizada por um número
variado de pessoas e equipes em diferentes países, diferentes projetos, com diferentes
tecnologias deva legislar sobre qual funcionará melhor para essas pessoas e equipes,
isso é algo que cada pessoa e equipe deve pesquisar e decidir sobre.
Esse trabalho fornece uma visão geral dos métodos ágeis, que poderá servir de
base para uma pesquisa mais detalhada sobre cada método aqui apresentado, ou ter esse
trabalho como uma referência para a avaliação entre os métodos ágeis que mais se adequam
as necessidades e as características de uma organização. Por isso esse trabalho está dividido
da seguinte forma:
O segundo capítulo fundamenta o que são as métodos ágeis.
O terceiro capítulo fornece uma descrição dos métodos ágeis mais
utilizadas atualmente.
O quarto capítulo traz a conclusão desse trabalho.
16
2 OS MÉTODOS ÁGEIS
Jeff Sutherland, Jim Highsmith, Jon Kern, Ken Schwaber, Kent Beck, Martin Fowler, Mike
Beedle, Robert C. Martin, Ron Jeffries, Stephen J. Mellor e Ward Cunningham.
Os valores defendidos por esse grupo são:
Indivíduos e interações ao invés de processos e ferramentas.
Software operacional ao invés de documentação compreensiva.
Colaboração do cliente ao invés de negociação de contrato.
Responder às mudanças ao invés do seguimento de um plano.
A partir desses valores eles criaram doze princípios nos quais estão embasados os
métodos ágeis:
1. Nossa mais alta prioridade é satisfazer o cliente entregando continuamente
e mais cedo software de valor.
2. As alterações de requisitos são benvindas, mesmo que mais tarde durante o
desenvolvimento. Pocessos ágeis aceitam as mudanças como uma
vantagem competitiva do cliente.
3. Entregar freqüentemente software operacional, em um par de semanas ou
um par de meses, com preferência por um período mais curto.
4. Pessoas de negócio e desenvolvedores devem trabalhar juntos diariamente
durante o projeto.
5. Construir projetos com indivíduos motivados. Dando a eles um ambiente e
apóio que eles necessitam, e confiando que eles concluirão o seu trabalho.
6. O método mais eficiente e efetivo de disseminar informação na equipe de
desenvolvimento está na conversação face-a-face.
7. Software operacional é a medida básica de progresso.
8. Projetos ágeis promovem desenvolvimento sustentável.
9. Os patrocinadores, fomentadores, e usuários deveriam manter um relativo
progresso, constante e indefinidamente.
10. Atenção continua para a excelência técnica e o bom desenho melhoram a
agilidade.
11. Simplicidade – a arte de maximizar a quantidade de trabalho realizado – é
essencial.
12. As melhores arquiteturas, requisitos, e desenhos emergem de uma equipe
auto-organizado.
18
A intervalos regulares, a equipe reflete sobre como tornar-se mais efetivo, então
sintonizam e ajustam seu comportamento adequadamente.
Desta forma em cada iteração exige-se relativo esforço dedicado às diversas fases
do projeto – requisitos, desenho, implementação e teste - e ênfase nas mudanças. Métodos
ágeis são um subconjunto de métodos iterativos (LARMAN, 2003).
O desenvolvimento ágil de software requer inovação e responsabilidade, para
poder compartilhar os conhecimentos entre os integrantes da equipe de desenvolvimento e do
cliente, pois o que se objetiva é aproveitar o potencial dos clientes, usuários e
desenvolvedores, adotando um processo o suficiente para manter a qualidade e a agilidade.
(LARMAN, 2003).
nosso contexto seria a agilidade. Se a pessoa tem disciplina forte, sem agilidade, o resultado é
burocracia e estagnação. Agilidade sem disciplina é o entusiasmo exacerbado de uma
companhia iniciante mesmo sem obter lucro. Grandes companhias têm ambos em medidas
apropriadas para as suas metas (BOEHM, 2003). Agilidade é mais uma atitude que processo,
mais ambiente que metodologia (HIGHSMITH, 2004).
Como os desenvolvimentos de software estão se tornando cada vez maiores e mais
complexos. O ambiente no qual o software é imaginado, especificado e criado está mudando.
Os aspectos de usabilidade e qualidade do software tornaram-se mais críticos. O tempo
necessário para liberação de um software para o mercado pode significar a diferença entre um
produto próspero ou falido (BOEHM, 2003).
Visando diminuir o tempo necessário para a liberação de um software, os métodos
ágeis são a conseqüencia da prototipação rápida e a experiência de desenvolvimento rápido,
como também o surgimento da filosofia que programar é uma arte ao invés de um processo
industrial (BOEHM, 2003).
A natureza da mudança rápida baseada na economia da Internet demanda
flexibilidade e velocidade por parte dos desenvolvedores de software, algo não usualmente
associado com o desenvolvimento conduzido por métodos tradicionais (BOEHM, 2003).
As mudanças ocorrem em quase tudo no software. Os requisitos mudam. Os
desenho muda. O negócio muda. A tecnologia muda. A equipe muda. Os membros da equipe
mudam. O problem não muda, porque a mudança irá acontecer; o problema, ao acontrário, é a
nossa inabilidade para tratar a mudança (BECK, 2004).
As práticas casadas para suportar esses valores variam de acordo ao método ágil
utilizado, mas geralmente baseiam-se em três áreas (BOEHM, 2003):
Comunicação.
Administração.
Técnico.
Uma outra meta dos métodos ágeis é aceitar as mudanças. Se uma mudança é
determinada, como é na maioria dos projetos de desenvolvimento, então use de técnicas que
tirem proveito das mudanças. Se as exigências mudam rapidamente, tenha iterações curtas o
suficiente para atender as exigências atuais. Constantemente integre e faça testes de regressão.
Mantenha o cliente próximo e envolva-os nos processos de planejamento e validação.
Redesenhe quando necessário, mas não desenhe em demasia. Não desenvolva documentação
22
para ser guardada. Concentre totalmente na iteração atual e entregue um produto que satisfaça
o cliente na hora certa (BOEHM, 2003).
Métodos ágeis em geral necessitam de relacionamento com o cliente e usuários do
software sob desenvolvimento. Os requisitos e a validação dependem da descrição do cliente,
priorização, e o refinamento de suas necessidades ao longo do desenvolvimento. O ciclo para
construir funcionalidade é altamente dependente de um cliente informado e envolvido. O
cliente também estabelece os critérios de aceitação e testes (BOEHM, 2003).
Os métodos ágeis exigem uma massa crítica de pessoas altamente motivadas e
instruídas. A documentação e o desenho são mantidos minimos (BOEHM, 2003).
A aceitação cultural dos métodos ágeis é também necessária para iniciar e manter
agilidade, mas há um ceticismo considerável em utilizar métodos ágeis no desenvolvimento
de grandes softwares, complexos ou de segurança crítica. Os métodos ágeis parecem ser a
melhor escolha para software menores. Embora haja grandes projetos documentados, a grande
maioria das experiências são de projetos relativamente pequenos, projetos de cinco a dez
pessoas. Pois em experiências com projetos ágeis utilizando-se cinquenta pessoas necessitam
que aspectos do processo de métodos tradicionais sejam integrados para se obter sucesso com
grandes projetos (BOEHM, 2003). Ao contrário dessa visão de Barry Bohem (BOEHM,
2003), veremos no capítulo 3 deste trabalho que métodos como o Crystal Clear aumentam a
cerimônia para que possam ser aplicáveis a grandes projetos (COCKBURN, 2006), assim
como o método XP tem sofrido adaptações para que possa ser aplicado a projetos maiores (
BECK, 2003).
2.7.7 Requisitos
A maioria dos métodos ágeis expressam os requisitos como ajustáveis e histórias
informais. Os métodos ágeis contam com seus ciclos rápidos de iterações para determinar as
necessidades de mudanças nas funcionalidades desejáveis e para corrigí-los na próxima
iteração. A determinação do conjunto de requisitos de mais alta prioridade a serem incluídos
na próxima iteração é feito de forma colaborativa entre os clientes e os desenvolvedores
(BOEHM, 2003).
Os métodos tradicionais geralmente preferem as especificações formais,
completas, consistentes e testáveis. Esses métodos geralmente têm sido muito mais lentos que
os métodos ágeis para assimilar novos conceitos como requisitos priorizados e a evolução
desses (BOEHM, 2003).
2.7.8 Desenvolvimento
A diferença primária entre práticas de desenvolvimento ágil e conduzidos por
processos estão entre o desenho e a arquitetura do software. Os métodos ágeis defendem o
desenho simples, onde a funcionalidade é implementada. Agilistas encorajam o desenvolvedor
a fazer um desenho mais simples, em toda oportunidade. Isto significa que se o desenho tem
funcionalidades que estão além das necessidades atuais do cliente ou que as antecipam,
dever-se-á gastar esforço extra para removê-las (BOEHM, 2003).
Os métodos tradicionais utilizam o planejamento e o desenho baseado em
arquitetura para acomodar mudanças previsíveis. Este esforço permite aos desenhistas
organizar o sistema de tal forma a tirar vantagem do re-uso de software através de uma linha
de produtos o que pode ter um maior impacto no desenvolvimento rápido (BOEHM, 2003).
28
2.7.9 Testes
Os testes são uma forma de validação que os clientes têm especificado o produto
certo e que os desenvolvedores têm construído o produto certo. Isso requer que o código seja
desenvolvido e executado, o qual significa que para longos desenvolvimentos, problemas
serão descobertos mais tarde no ciclo de desenvolvimento, quando são caros para serem
corrigidos. Métodos ágeis tratam desse problema organizando o desenvolvimento em
pequenos incrementos, e aplicando programação em pares (no caso do XP) ou outras técnicas
de revisão para remover defeitos de código assim que são gerados. Os métodos ágeis também
desenvolvem testes executáveis para realizar testes de regressão. Testes automatizados são
recomendados pela maioria dos métodos ágeis (BOEHM, 2003).
Métodos tradicionais tratam de corrigir os problemas de desenvolvimento mais
tarde, e a verificação de consistência de requisitos e as especificações de requisitos o mais
cedo no processo de desenvolvimento. Esses métodos também investem em testes
automatizados planejando e preparando a execução dos testes. Isso cria muita documentação
que pode ficar desatualizada pela mudança dos requisitos. Os testes realizados mais tarde
perdem muitas vantagens em relação aos testes realizados mais cedo, como acontece nos
métodos ágeis (BOEHM, 2003).
2.7.10 Clientes
As maiores diferenças entre os métodos ágeis e os conduzidos por planos está em
que o primeiro enfatiza fortemente ter os representantes do cliente dedicados e alocados no
projeto, enquanto os métodos conduzidos por processos conta com acordos, onde o
desenvolvedor trabalhará baseado no plano contratual e as especificações. O risco para os
métodos ágeis é que seja alocado um representante do cliente que esteja mais disponível ao
invés do mais indicado, por isso é necessário estabelecer critérios para tal (BOEHM, 2003).
Os métodos tradicionais, conduzidos por processos, também necessitam de
representantes de cliente, e beneficiam-se também de suas participações em tempo integral e
em loco. O maior desafio para o cliente é manter o controle de falhas em suas mãos para
29
2.7.11 Desenvolvedores
Fatores críticos para o sucesso dos projetos que utilizam métodos ágeis incluem a
amizade, talento, habilidade e comunicação. Os métodos ágeis e os tradicionais operam
melhores com uma mistura de habilidades e entendimento dos desenvolvedores, mas os
métodos ágeis precisam de uma predominância de pessoas altamente qualificadas (BOEHM,
2003).
Pesado
Adaptação
(Habilidade, Entendimento)
Metodologia Rigorosa
Leve
Leve Pesado
Aperfeiçoamento
(Processo, Documentação)
2.7.12 Cultura
Em uma cultura ágil as pessoas se sentem confortável e motivadas quando há
muitos degraus de liberdade disponíveis para eles definirem e trabalharem nos problemas.
Onde confia-se em cada pessoa e no trabalho que têm a fazer para o sucesso do projeto. Isso
inclui uma procura for tarefas comuns ou não notadas, para completá-las (BOEHM, 2003).
Na cultura conduzida por planos, as pessoas sentem-se confortáveis e motivadas
quando houver políticas e procedimentos que definem o papel deles no empreendimento. Isso
é mais que um ambiente de produção em série onde as tarefas de cada pessoa são bem
definidas. A expectativa é que eles realizarão as tarefas conforme as especificacões, de forma
30
que os produtos do trabalho deles serão integrados facilmente a outros, mesmo tendo um
conhecimento limitado do que os outros estão fazendo (BOEHM, 2003).
31
3.1 Scrum
Scrum foi desenvolvido por Ken Schwaber e Jeff Sutherland (SCHWABER, 2002).
Scrum está baseado no conceito de que o desenvolvimento de software não é um processo
definido, mas um processo impírico com transformações complexas de entrada/saída que
pode ou não ser repetido em diferentes circunstâncias (BOEHM, 2003). Este processo resulta
em flexibilidade, adaptabilidade e produtividade. Scrum não define qualquer técnica de
desenvolvimento de software para a fase de implementação. Scrum concentra em como os
membros da equipe deveriam atuar em ordem para produzir sistemas flexíveis em uma
ambiente de constantes mudanças (ABRAHAMSON, 2002).
O Scrum oferece um meio de introduzir os métodos ágeis no ambiente de
disciplinas dos métodos tradicionais. Utilizando o Scrum para um ou mais componentes do
sistema, a gestão pode alcançar a sua efetividade sem alterar completamente a forma que a
organização normalmente realiza negócios. Scrum tem sido um dos poucos métodos ágeis que
tem sido empregado em projetos maiores. Isso tem sido realizado da mesma forma que
empresas integram equipes de produtos. Uma equipe individual do Scrum faz parte de uma
equipe de escalão mais alto de líderes que cuidam de vários produtos. Mantendo a
comunicação e prevenindo conflitos de desenvolvimento é controlado através da equipe de
coordenação (BOHEM, 2003).
O Scrum enfatiza o gerenciamento de projeto, que é feito pelo Scrum Master
(Scrum Mestre). O seu ciclo de desenvolvimento é de 30 dias, chamado Sprint, o qual é
precedido por uma atividade pre-Sprint (pré-Srpint) e outra atividade post-Sprint (pós-Sprint).
Um reunião diária com duração inferior a 30 minutos (geralmente 15 minutos) permite à
equipe monitorar problemas de estado do projeto e de comunicação. A principal idéia do
Scrum é que os sistemas de desenvolvimento envolvem diversos ambientes e variáveis
técnicas (por exemplo requisitos, prazos, recursos e tecnologias) que podem mudar durante o
processo. Isto torna o processo de desenvolvimento imprevisível e complexo, exigindo
flexibilidade dos processos de desenvolvimento de software para que sejam capazes de
responder às mudanças. Como resultado do processo de desenvolvimento, um software
produzido é útil quando entregue (ABRAHAMSON, 2002).
32
Bases para ciclos posteriores são obtidos das revisões repetitivas de qualidade, as
quais focam na demonstração de funcionalidade do software desenvolvido durante o ciclo.
Um importante fator das revisões é a presença do cliente, com um grupo de peritos, chamado
de customer focus-group (group focado no cliente). Porém, as revisões de qualidade são
escassaz, pois somente acontecem ao final de cada ciclo. A participação do cliente geralmente
se faz através de seções de joint application development (JAD), que é essencialmente um
workshop, onde desenvolvedores e representantes do cliente reunem-se para discutir as
características do produto desejado, e para melhorar a comunicação. ASD não propõe uma
agenda para as seções de JAD, mas ressalta a importância de que aconteça no início do
projeto (ABRAHAMSON, 2002).
1
WOMACK, J.; JONES, D.; ROOS, D. The Machine That Changed the World : The Story of Lean Production.
New York: HarperCollins, 1991.
2
No ciclo de desenvolvimento em espiral o produto é desenvolvido em uma série de iterações. Cada nova
iteração corresponde a uma volta na espiral. Isso permite construir produtos em prazos curtos, com novas
características e recursos que são agregados à medida que a experiência descobre sua necessidade [FIL03, p. 12].
35
3.4 Crystal
Alistair diz que escolheu construir uma família de metodologias, junto com
princípios, para serem ajustados às necessidades. Crystal não é um kit de metodologia para
você ajuntar por conta própria, mais um conjunto de exemplos que você ajusta às suas
circunstâncias. Crystal é o nome de uma família de metodologias, e como os cristais, possui
diferentes cores e rigidez, referindo-se ao tamanho e ao nível crítico do projeto (COCKBURN,
2006).
As idéias básicas do Crystal incluem princípios que definem as metodologias que
preenchem os requisitos variáveis dos diferentes projetos (ABRAHAMSON, 2002). Essa
família é composta por membros que são alocados conforme as necessidades dos projetos:
Crystal Clear, Crystal Yellow, Crystal Orange, Crystal Orange Web, Crystal Red, etc
(COCKBURN, 2006). Cada membro da família Crystal é identificado por uma cor –
transparente (Clear), amarelo (Yellow), alaranjado (Orange), vermelho (Red), etc - que indica
o tamanho do projeto e a metodologia que será utilizada, quanto mais escura a cor mais
rigorosa será a metodologia (ABRAHAMSON, 2002).
Crystal sugere que a escolha da cor da metodologia seja feita conforme o tamanho
e o nível crítico do projeto. Grandes projetos geralmente requisitam mais coordenação e
metodologias mais rígidas que projetos menores. Quanto mais crítico for o software que está
sendo desenvolvido, mais rigor será necessário (ABRAHAMSON, 2002). Além das cores, o
Crystal utiliza-se de algumas letras para representar potenciais perdas causados por uma falha
no sistema de desenvolvimento de software:
‘C’ de Confort (Conforto) - indica que o sistema falha devido a defeitos
causados por uma perda de credibilidade do usuário, assim como um
36
Orange Red
Yellow
Clear
Alistair Cockburn diz que as duas técnicas podem ser substituícas, caso se tenha
uma outra alternativa para alcançar esses objetivos (COCKBURN, 2006).
Para um projeto do tipo E50 deve-se extender o Crystal Orange com alguns
elementos de verificações adicionais dos testes ao invés de mover-se para o Crystal Red que
destina-se a projetos com 80 pessoas (COCKBURN, 2006):
Os papéis que exigem pessoas separadas são (COCKBURN, 2006):
Patrocinador.
Especialista de negócio.
Especialista de uso.
Facilitador técnico.
Analista/desenhista de negócio.
Gerente de projetos.
Arquiteto.
Mentor de desenho.
Líder desenhista-programador.
42
Outros desenhistas-programadores.
Desenhista de interface de usuário.
Reuse point.
Escritor.
Testador.
Os padrões de políticas são identicas ao Crystal Clear, exceto que o período das
iterações pode ser extendido para três ou quatro meses. E como no Crystal Clear as políticas
padrões são obrigatórias, mas substituição equivalente é permitida (COCKBURN, 2006).
43
A média de duração das iterações está entre uma e três semanas, o que é menor que
no Scrum. O XP também possui baixa escala de cerimônia, pois possui somente um pequeno
conjunto, informal, de artefatos, como cartões indexados para resumir características
requisitadas, chamados de story cards (cartões de história) (LARMAN, 2003).
Uma boa atualização da descrição original do XP foi a declaração das
aplicabilidades conhecidas: tinha sido provado que projetos envolvendo aproximadamente 10
desenvolvedores ou menos, e não era aprovado para sistemas críticos. Não obstante tem sido
aplicado com equipes maiores (LARMAN, 2003).
O XP criado por Kent Beck é um método IID que dá ênfase à satisfação do cliente
através do rápido desenvolvimento de software de alto valor, técnicas hábeis e sustentáveis de
desenvolvimento de software, e resposta flexível às mudanças. É indicado para projetos de
equipes relativamente pequenas, normalmente com datas de entregas inferiores a um ano. As
iterações são pequenas – usualmente uma a três semanas (LARMAN, 2003).
XP provê métodos explicitos para programadores, de maneiras que eles podem
mais confidentemente responder às mudanças de requisitos, mesmo mais tarde no projeto, e
ainda produzir código de qualidade. Esses incluem desenvolvimento conduzido por testes,
reescrita do código fonte para melhorar a consistência interna (refactoring), programação em
par, e integração contínua, entre outros. Em contraste a maioria dos métodos, algumas práticas
do XP são verdadeiramente adotadas pelos desenvolvedores (LARMAN, 2003).
XP é muito orientado à comunicação e à equipe; clientes, desenvolvedores, e
gerentes formam a equipe trabalhando em uma mesma sala de projeto para rapidamente
entregar software com alto valor para o negócio (LARMAN, 2003).
Embora muitos métodos evolutivos evitam detalhar especificações e planos que
cubram o ciclo completo da versão, a maioria deles incentivam documentá-los pelo menos
para a próxima iteração. Em contraste o XP enfatiza a comunicação oral para requisitos e
desenhos (LARMAN, 2003).
47
3
Must have significa “tem que ter”; should have significa “deveria ter”; could have significa “poderia ter”; want
significa “quer”.
54
O DSDM define a ideologia e as bases para todas as suas atividades através das
nove práticas (ABRAHAMSON, 2002):
1. É imperativo o involvimento de usuários ativos.
2. A equipe DSDM deve ter autonomia para tomar decisões.
3. O foco está frequentemente na entrega de produtos.
4. A condição a ser atendida para os propósitos do negócio é o critério
essencial para aceitação das liberações.
5. O desenvolvimento iterativo e incremental é necessário para convergir em
uma solução precisa de negócio.
6. Todas as mudanças durante o desenvolvimento são reversíveis.
7. Requisitos são a base em uma alto nível.
8. Testar e integrar através das iterações (lifecycle).
9. Um cooperativismo e uma colaboração proxima compartilhada por todos
os participantes é essencial.
TAB. 1 – Métodos ordenados pelo nível de agilidade e o formalismo (adaptação de BOEHM, 2003).
61
Projetos
Toda a Unidades de Projeto com
Método com multi- Individual
empresa negócio equipe única
equipes
Scrum N/A ~ ~ ~ ~
ASD ~ ~ ~ ~ N/A
LD ~ + ~ N/A N/A
Crystal N/A ~ + + ~
XP N/A ~ N/A + +
DSDM ~ + + + ~
RUP N/A ~ + + N/A
FDD N/A ~ + ~ ~
A Tabela 3 mostra o ciclo de vida de cada iteração para o qual fornece orientação
específica.
Desenvolvi-
Método Conceituação Requisitos Desenho Manutenção
mento
Scrum ~ ~ ~ ~ ~
ASD ~ ~ ~ ~ ~
LD ~ ~ ~ N/A ~
Crystal ~ ~ ~ ~ ~
XP N/A + + + +
DSDM + + ~ ~ ~
RUP + + + + +
FDD N/A N/A + + ~
4 CONCLUSÃO
Jim Highsmith diz em seu livro “Agile Project Management: Creating Innovative
Products” (HIGHSMITH, 2004) que agilidade é uma forma de pensar, ao contrário de um
conjunto de práticas e processos, e que equipes ágeis possuem o equilíbrio entre flexibilidade
e organização. Em princípio seria desejável que todo projeto pudesse contar com agilidade,
mas nem sempre equipes ágeis possuem o equilíbrio entre flexibilidade e organização, a
menos que um certo grau de formalismo dos processos e controle sejam adotados, o que
normalmente acontece nos métodos tradicionais, e que têm sido recomendados por alguns
métodos ágeis, como o Crystal e o DSDM.
Através do desenvolvimento deste trabalho ficou claro que existem várias outras
alternativas ao XP e ao RUP, e que, além dos métodos citados aqui, existem outros métodos
que merecem menção: Evo, Agile Modeling (AM), Pragmatic Programming (PP), Open
Source Software (OSS), Personal Software Process (PSP) e Team Software Process (TSP).
As fronteiras entre os métodos ágeis e os tradicionais têm sido reduzidas, pois
métodos como o Crystal, DSDM e FDD, classificados como métodos ágeis, trazem muitas
das características dos métodos tradicionais, como o RUP, sendo adaptáveis aos projetos onde
são aplicados. Apesar de serem citados somente esses métodos ágeis, aqui na conclusão, no
capítulo 3 podemos identificar outros métodos ágeis que possuem algumas características
similares aos métodos tradicionais. Para citar um exemplo de como as fronteiras estão sendo
reduzidas, podemos observar que o Crystal ganha mais formalismo à medida que é
empregado em equipes maiores. Os seus processos se tornam mais rígidos e documentados.
Em contrapartida, observa-se que alguns métodos tradicionais têm reduzido o seu volume de
documentação exigida, ganhando agilidade com a adoção de ferramentas que automatizam
esse processo.
Outros fatores também devem ser considerados, pois nem sempre o volume de
documentação é a causa fundamental da perda de agilidade, assim como processos muito
informais poderão dificultar a contratação dos serviços do desenvolvedor de software por
novos clientes. Alguns fatores poderão contribuir para o aumento da agilidade, como: adotar
padrões de desenvolvimento de software; utilizar ferramentas de desenvolvimento
automatizadas e integradas entre si; contratação de pessoal altamente qualificado; equipe com
cultura mais homogênea; gestão de treinamento e do conhecimento; processos motivacionais;
ambiente de trabalho agradável; liderança ativa; entre outros.
65
REFERÊNCIAS
BECK, Kent. Extreme Programming Explained: embrace change. 2. Ed. Addison Wesley
Professional, 2004. 224 p. ISBN 0321278658.
BOEHM, Barry; TURNER, Richard. Balancing agility and discipline: A Guide for
Perplexed. Addison Wesley Professional, 2003. 304 p. ISBN 0321186125.
COCKBURN, Alistair. Agile software development: the cooperative game. 2. Ed. Addison
Wesley Professional, 2006. 504p. ISBN 0201760436.
LARMAN, Graig. Agile & iterative methods: a manager’s guide. Addison Wesley
Professional, 2003. 368p. ISBN 0131111558.
SCHWABER, Ken; BEEDLE, Mike. Agile software development with Scrum. Printice
Hall, 2002. 158 p. ISBN 0130676349.