Artigo Java Magazine 33 - Desenvolvimento Ágil
Artigos Java Artigo Java Magazine 33 - Desenvolvimento Ágil
Desenvolvimento Ágil<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Um Guia sobre os Processos Ágeis de Desenvolvimento
Conheça as origens do movimento ágil, suas principais características e os processos ágeis mais utilizados
Jefferson de Barros Santos
Nos últimos anos, observamos o aparecimento de novas e interessantes abordagens para o desenvolvimento de software. Técnicas como Test-Driven Development e processos como Extreme Programming ganharam popularidade, e hoje são utilizados por muitas das grandes empresas de software do mundo. Essas abordagens constituem um movimento que vem se tornando cada vez mais importante – o do Desenvolvimento Ágil de Software.
O objetivo deste artigo é mostrar porque o desenvolvimento ágil é importante e como pode ser usado para melhorar a maneira que desenvolvemos software. Serão exploradas suas principais características e apresentados os processos ágeis mais difundidos atualmente. Para compreender melhor as motivações por trás do desenvolvimento ágil, iniciamos por um rápido histórico.
Em meados dos anos 80, se popularizaram os primeiros processos de desenvolvimento. Era uma tentativa de tornar a produção de software mais previsível e eficiente, numa época caracterizada por uma forma de trabalho bastante caótica. O desenvolvimento, até então, era marcado pela falta de planejamento e por pouca organização, o que acarretava muito trabalho repetido ou desnecessário, e levava a um número excessivo de bugs e uma redução drástica na manutenibilidade dos sistemas à medida que evoluíam. Esse estilo de desenvolvimento ficou conhecido pelo termo em inglês code-and-fix (codificar e consertar).
Os primeiros processos de desenvolvimento ("tradicionais") enfatizavam a importância do planejamento para controlar e melhorar a previsibilidade da produção de software. Os planos eram elaborados no início do projeto e eram seguidos fielmente através de etapas seqüenciais de trabalho – o que abria pouco espaço para mudanças. Com o passar do tempo e a experiência adquirida, esses processos se mostraram pouco eficientes. Fortemente burocráticos, exigiam a produção de uma documentação extensa, o que tornava lento o ritmo de desenvolvimento. A rigidez em seguir os planos e etapas do processo dificultava a resposta rápida às mudanças – uma exigência cada vez maior nos cenários de negócios atuais.
O movimento ágil surgiu como uma reação a esses primeiros processos. Insatisfeitos com os resultados obtidos com as abordagens existentes, muitos desenvolvedores e pesquisadores iniciaram uma busca por alternativas. Novas soluções começaram a ser testadas independentemente por diferentes grupos, principalmente nas comunidades de orientação a objetos e de design patterns. Eram baseadas em processos mais leves, menos rígidos, e que produziam uma documentação mais enxuta, suficiente para o andamento do projeto. Caracterizavam-se também pelo foco na qualidade do código, pelo uso de ciclos de desenvolvimento iterativos e pela intensa colaboração entre os envolvidos na produção dos softwares.
O quadro "O Manifesto Ágil" apresenta os valores que fundamentam o desenvolvimento ágil de software. Analisando o Manifesto, que foi elaborado por especialistas e líderes em diversas áreas do desenvolvimento de software, é possível identificar as principais características que definem como ágil um processo de desenvolvimento.
Uma característica fundamental de um processo ágil é o forte comprometimento com mudanças, reconhecendo que o desenvolvimento de software é na maioria das vezes uma atividade adaptativa. As necessidades de negócio mudam constantemente – principalmente hoje com o crescimento das transações comerciais via internet – e o software precisa ser capaz de adaptar-se a essas novas necessidades.
Processos tradicionais entendem o desenvolvimento de software como uma atividade previsível, em que é possível definir, no início de um projeto, os requisitos de negócio e o design da aplicação, que permanecerão estáveis (ou sofrerão poucas modificações) nas etapas seguintes. Assim, estes processos se enquadram melhor em áreas de negócio mais estáveis, quase imutáveis – o que a cada dia é mais difícil de encontrar.
Processos ágeis acolhem as mudanças nos requisitos de negócio e no design da aplicação, mesmo em fases mais avançadas do desenvolvimento. Para garantir essa capacidade de suportar mudanças, baseiam-se num ciclo de vida iterativo e incremental. O uso de iterações permite que conjuntos de funcionalidades sejam produzidos e entregues para o cliente constantemente – incrementalmente – e com tempo reduzido entre cada versão intermediária. Isso torna o feedback mais rápido, facilita o gerenciamento de mudanças de prioridades e a adição de novas funcionalidades, e melhora a medição dos resultados. Os requisitos, o design e o código evoluem iteração após iteração, levando à construção do software que melhor se enquadra às necessidades do cliente no momento.
Outra característica de processos ágeis é a valorização do aspecto humano no desenvolvimento. Processos ágeis reconhecem que são as pessoas que fazem a verdadeira diferença – que são elas o fator primordial na definição do sucesso ou fracasso de um projeto. Processos tradicionais colocam boa parte desta responsabilidade nas ferramentas e nos procedimentos usados pela equipe. O resultado é que muitas vezes é possível ver pessoas realizando determinadas atividades ou empregando certas ferramentas só porque isso foi definido no processo – e obtendo pouco ou nenhum benefício. Processos ágeis focam nas interações entre pessoas para criar ambientes de extrema colaboração e troca de informações entre os membros da equipe.
A valorização do aspecto humano apresenta outro ponto importante: o envolvimento real dos clientes no projeto. Processos ágeis estimulam a participação ativa dos clientes, atribuindo a eles responsabilidades claras durante todo ciclo de desenvolvimento. A cada iteração, clientes definem as prioridades das funcionalidades e escolhem aquelas que serão implementadas. Precisam estar disponíveis para esclarecer dúvidas e detalhar funcionalidades dentro de uma iteração, e devem se envolver nas atividades de testes para homologação do que é produzido.
Software: o artefato mais importante
Os processos ágeis questionam a geração excessiva de documentação nos projetos. Seguindo processos tradicionais, é comum se produzir grandes volumes de documentação, sejam documentos ou modelos, só porque a sua criação está prescrita pelo processo. Os processos ágeis propõem que as equipes descubram quais artefatos (modelos, testes etc.) são fundamentais para elas e deixem de lado os que são desnecessários. Dessa forma, é gerada uma documentação suficiente, mas que não torne o ritmo de desenvolvimento lento.
Entregar software funcionando e constantemente é a melhor forma de medir o progresso de um projeto. Mais uma vez o desenvolvimento iterativo e incremental se mostra a chave para o problema. Ciclos iterativos forçam o ritmo do desenvolvimento, produzindo incrementalmente software pronto para entrega em curtos intervalos de tempo. ...