Para enfrentar problemas com prazos e complexidade de métodos
tradicionais da engenharia de software, diversos métodos ágeis de
desenvolvimento estão sendo utilizados em projetos de software. Estes métodos
possuem como principal objetivo a satisfação do cliente, preocupando-se com a
entrega incremental de software desde as etapas iniciais de desenvolvimento,
produtos de trabalho de engenharia de software minimizados e simplicidade
global no desenvolvimento.
Métodos ágeis foram desenvolvidos para beneficiarem a entrega
rápida de código que agregue valor ao cliente por meio do desenvolvimento em
pequenos ciclos. Para atingir esse objetivo, esses métodos são focados na
contínua interação entre desenvolvedores e clientes, que garantem que o software
atenda as necessidades de mudança dos requisitos do cliente. Os métodos ágeis
mudam o foco de artefatos complexos de projeto,
fortemente utilizados em métodos tradicionais, para técnicas focadas no
desenvolvimento de código-fonte e testes. A prototipação ágil também ajuda a
acelerar a velocidade de desenvolvimento, reduzindo o excesso de planejamento e
a documentação.
Todo esse dinamismo dos métodos ágeis tem provocado um grande
impacto na forma de se conduzir um projeto de software fortemente sensível a
mudanças. Uma grande diversidade de métodos ágeis tem sido utilizada. Como
exemplos mais conhecidos tem-se o XP (eXtreme Programming), o Scrum,
a família Crystal, o FDD (Feature Driven Development ), o ASD (Adaptative
Software Development), o DSDM (Dynamic System Development Method) e o Lean
Software Development. Esses métodos seguem princípios semelhantes, mas o que os
diferencia são as suas práticas e a forma de condução do processo de
desenvolvimento. O XP é o método mais conhecido, além de ser o método mais
avaliado por estudos acadêmicos. Ele propõe um conjunto de valores, princípios
e práticas em um cenário no qual os requisitos são vagos e mudam
constantemente. Nesse contexto o objetivo do método é a excelência no
desenvolvimento de software, visando baixo custo, poucos defeitos, alta
produtividade e alto retorno de investimento. Outro método que vem se
destacando é o Scrum, que é o mais utilizado na indústria de software
atualmente, sendo mais focado em aspectos de gerenciamento de projeto.
Para satisfazer o cliente por meio da entrega rápida e
contínua de software de qualidade são utilizadas diversas práticas que serão
detalhadas no ao longo deste artigo. Como exemplo pode-se citar a presença do
cliente para ajudar na correção e refinamento de requisitos, a programação em
pares utilizada para melhorar a qualidade do desenvolvimento e promover a
diminuição de defeitos, e a refatoração que otimiza o código já existente. A
agilidade descrita anteriormente traz consigo uma forte preocupação com a
melhoria constante do processo e do produto durante todo o ciclo de
desenvolvimento do software, no qual o progresso do projeto é avaliado
diariamente. Em projetos que utilizam métodos ágeis, a atividade de teste de
software vem sendo considerada uma atividade primordial, com o objetivo de
evitar que a qualidade do produto e a condução do projeto não sejam afetados
por processos menos formais de documentação e projeto em relação aos métodos
tradicionais.
A importância da atividade de teste em métodos ágeis pode ser
constatada no método XP, que considera a atividade tão importante quanto a
atividade de programação. No XP todo pedaço de código tem um conjunto de testes
de unidade automatizados, que deve ser integrado ao repositório de
código-fonte. Os resultados dos testes servem como uma forma de feedback
instantâneo, no qual o desenvolvedor pode detectar em pouco tempo se o método
desenvolvido ainda precisa ser modificado ou refatorado. O código é considerado
completo apenas se passar por todos os testes de unidade. Além disso, no fim de
cada iteração, todos os testes de aceitação (business testing) que foram
criados durante a fase de planejamento serão executados por usuários e
clientes. Esses testes incluem os testes de iterações prévias e aqueles da última
iteração, para determinar se as novas funcionalidades são aceitáveis e prevenir
que novas mudanças causem efeitos colaterais em funcionalidades que estavam
funcionando até o momento.
Entre as práticas de teste utilizadas em métodos ágeis
pode-se citar os testes de unidade utilizando Test Driven Development (TDD),
testes de integração contínuos, testes de aceitação com o cliente e testes de
regressão associados à prática de refatoração. Para complementar essas práticas
a equipe pode utilizar testes exploratórios, teste da interface gráfica (GUI) e
teste de requisitos não-funcionais que podem envolver, por exemplo, requisitos
de desempenho, carga ou stress. Todas essas práticas de testes devem ser
executadas preferencialmente de forma automatizada, buscando a agilidade no
processo de testes.
Neste contexto, o objetivo deste artigo é descrever de forma
detalhada um referencial teórico a respeito das metodologias ágeis considerando
algumas de suas principais abordagens. Para isso, nesse artigo são descritas de
forma geral a origem e as motivações para a utilização de métodos ágeis e
também detalhes sobre os principais métodos. Os métodos ágeis são descritos
principalmente sob o ponto de vista do fluxo de atividades e práticas
conduzidas durante o desenvolvimento de software.
Motivação em estudar
Métodos Ágeis
Atualmente pode-se observar uma grande sinergia entre a
academia e a indústria na área de métodos ágeis, que pode ser constatada em
eventos de larga importância como o International Conference on XP (http://xp2010.org),
Agile Conference (http://agile2010.agilealliance.org) e mais recentemente em
eventos nacionais e latino-americanos, como o Agiles
(http://agiles2010.agiles.org) e o Agile Brazil (http://www.agilebrazil.com).
Em relação à maturidade das pesquisas da área de métodos
ágeis, Dingsøyr et al. (2008) afirmam que há um nível intermediário nas
pesquisas em relação ao método XP, a programação em pares e TDD. Tópicos como:
modelagem ágil, DSDM, Lean, Scrum e a educação de engenharia de software com
métodos ágeis ainda são nascentes. Nesse contexto, é importante realizar mais
estudos, por exemplo, com o método Scrum. Além disso, os estudos devem ser
conduzidos com organizações experientes na aplicação de métodos ágeis e devem
explorar a utilização de práticas ágeis em diversos contextos, procurando
encontrar como aplicar princípios ágeis em situações reais e aplicar práticas e
princípios do desenvolvimento ágil em áreas já estabelecidas como engenharia de
requisitos, teste de software ou arquitetura de software.
A utilização de métodos ágeis de desenvolvimento tem crescido
sensivelmente. Esses métodos vêm sendo adotados em diversos contextos, em
pequenas, médias e grandes empresas e até agências governamentais e
universidades. As pesquisas da área de métodos ágeis têm mostrado por meio de
diversos estudos experimentais a efetividade e algumas deficiências das
principais práticas de métodos ágeis tanto na indústria, quanto na academia.
Os benefícios da utilização de métodos ágeis envolvem a
capacidade de reação a mudanças constantes, a colaboração com o cliente,
processos eficientes para gerar produtos de qualidade (que atendem ao
cronograma, possuem menos defeitos e que resultam em usuários mais
satisfeitos), aprendizagem e melhoria contínua do projeto. Nesse contexto,
estudos com o cliente relataram sua satisfação com oportunidades de feedback
constante. Empresas de desenvolvimento que utilizam XP relatam que seus
funcionários ficaram mais satisfeitos com os seus trabalhos e com o produto
final e estudantes universitários acreditam que a utilização de métodos ágeis
melhora a produtividade do time.
No entanto, Dybå e Dingsøyr (2008) identificaram por meio de
diversos estudos já publicados, algumas limitações da utilização de métodos
ágeis. Um dos exemplos é a dificuldade de se ter o cliente sempre presente por
longos períodos e a dificuldade para introduzir métodos ágeis em projetos
grandes e complexos. Além disso, ainda faltam estudos científicos que mostrem a
efetividade de algumas práticas ágeis, como por exemplo o TDD, que apesar de
comprovadamente resultar em um software de melhor qualidade, ainda produz
resultados controversos em termos do impacto na produtividade do time e no
projeto do código-fonte.
A atividade de teste de software no contexto de métodos ágeis
possui um papel bastante importante. Diferentemente de métodos tradicionais nos
quais os testes ocorrem mais tarde no processo de desenvolvimento, os testes
ágeis devem ocorrer de forma frequente, procurando detectar defeitos o mais
cedo possível em ciclos de desenvolvimento iterativos e curtos, com um
constante feedback do cliente. Além disso, a estratégia de desenvolvimento
dirigido a testes (TDD) pode ser utilizada para explorar, projetar, desenvolver
e testar o software, não devendo ser tratada apenas como uma atividade de
testes.
Para apoiar o feedback constante da equipe em projetos ágeis
são utilizadas diversas práticas como reuniões diárias, reuniões de revisão e
retrospectivas. Essas práticas têm como objetivo a melhoria da equipe de desenvolvimento,
qualid
...