De que se trata o artigo

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.

Em que situação o tema é útil

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.

Resumo DevMan

Neste artigo serão descritos os métodos ágeis de desenvolvimento, principalmente do ponto de vista de valores e princípios comuns a esses métodos, assim como suas práticas individuais. Para isso, optou-se por descrever com maiores detalhes o método XP, Scrum e Lean, por esses serem os métodos mais aplicados no contexto atual da área de desenvolvimento ágil, além de terem relação com a utilização de métricas de software seja por meio de suas práticas ou pelo seu processo e papéis envolvidos no projeto de software.

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, qualidade do produto e também do processo. Outra prática que apoia o feedback constante e a melhoria contínua é a área de trabalho informativa que deve fornecer instrumentos que forneçam dados sobre o andamento do projeto. Esses dados serão coletados por meio de métricas de software que devem medir o progresso, apontar melhorias e dificuldades durante todo o projeto.

Existem diversos trabalhos que propuseram abordagens para escolha e utilização de métricas específicas para projetos ágeis. No entanto, a utilização de métricas para acompanhamento da atividade de teste foi pouco explorada, havendo a necessidade de descrever melhor os objetivos de se utilizar cada métrica de teste e diversos aspectos que influenciam a utilização dessas métricas. Além disso, há uma carência de ferramentas que além de automatizar a coleta dessas métricas, forneçam a possibilidade de gerenciamento durante as iterações de desenvolvimento.

Como mencionado anteriormente, a atividade de teste fornece um feedback instantâneo a respeito do software que está sendo desenvolvido. Assim sendo, é importante que a equipe de desenvolvimento e teste utilize métricas para acompanhar essa atividade, focando principalmente na melhoria contínua do processo, das práticas e ferramentas de teste utilizadas. Por fim, essa equipe deve conduzir a atividade utilizando métricas para avaliar e estabelecer metas de qualidade para os artefatos de teste produzidos. A partir de um código de teste de qualidade também será possível medir de forma eficiente a qualidade do software produzido.

Métodos Ágeis de Desenvolvimento

O foco principal dos métodos ágeis de desenvolvimento de software, segundo seus proponentes, é a simplicidade e a velocidade. Nesse contexto, a equipe de desenvolvimento ágil concentra-se na entrega rápida de funcionalidades realmente necessárias, coletando feedback e reagindo às mudanças tecnológicas e no negócio. Além disso, o feedback do cliente permite o aumento de sua satisfação, já que ele passa a ter uma melhor visão do andamento do projeto e do sistema em desenvolvimento.

A partir de agora as características de métodos ágeis são descritas, bem como os valores e princípios que guiam o desenvolvimento nesses métodos. Também são apresentadas as práticas de desenvolvimento e condução de projetos, que são atividades que garantem a agilidade e principalmente a qualidade no processo de desenvolvimento e no produto resultante. Neste sentido, são discutidas a origem e a descrição geral sobre os valores e princípios comuns a todos os métodos ágeis. Em seguida os principais métodos ágeis são descritos e detalhados principalmente sob o ponto de vista do fluxo de atividades e práticas conduzidas durante o desenvolvimento de software. Por fim, teremos as considerações finais do artigo.

Abordagens Ágeis

Historicamente engenheiros de software só poderiam passar para a fase de projeto e implementação após passar por uma fase exaustiva de elicitação e especificação de requisitos. Pesquisadores desenvolveram então métodos, técnicas e ferramentas para apoiarem uma evolução mais flexível de processo e produto, focando na qualidade do produto, no custo e na eficiência do projeto. Nesse contexto, foram introduzidos modelos de processo evolucionário, como o modelo incremental e o modelo baseado em prototipação.

Mais recentemente, a ideia desses modelos foi incorporada em métodos ágeis. A agilidade, para uma organização de desenvolvimento de software, é a habilidade de adotar e reagir rapidamente e apropriadamente a mudanças no seu ambiente e por exigências impostas pelos clientes. Portanto, a agilidade não trata apenas do tamanho ou da velocidade das mudanças, mas é, principalmente, um meio de atingir a flexibilidade no projeto de software.

Segundo Pressman (2006), a agilidade pode ser aplicada a qualquer processo de software. No entanto, o autor enfatiza algumas práticas essenciais para que isso seja possível: (1) permitir à equipe de projeto adaptar tarefas e aperfeiçoá-las; (2) conduzir um planejamento para que se entenda a fluidez de uma abordagem de desenvolvimento ágil; (3) eliminar tudo, menos os produtos mais essenciais e mantê-los simples; (4) enfatizar uma estratégia de entrega incremental que forneça o software funcionando ao cliente o mais rápido possível para o tipo de produto e ambiente operacional desejados.

...
Quer ler esse conteúdo completo? Tenha acesso completo