Home > Tendências

ABC da programação ágil

Existem formas de desenvolver aplicativos de uma forma mais rápida e com menos chances de fracasso

John Paul Mueller

19/11/2007 às 19h03

0101_int.jpg
Foto:

Todo gerente conhece o pesadelo do desenvolvimento. O projeto consome o dobro do tempo esperado, o custo ultrapassa muito o budget e não há um fim à vista. Quando você apresenta um aplicativo parcial aos usuários, eles o odeiam, mas a empresa precisa realmente do aplicativo para atingir determinadas metas, entre elas aumentar a capacidade de produção. Felizmente, você não precisa conviver com os problemas criados pelo velho processo de desenvolvimento de software; você pode usar a programação ágil para superá-los.

Quais são as razões de negócio para usar a programação ágil?
As empresas precisam reduzir o custo e o tempo de desenvolvimento de software, aumentar sua confiabilidade e assegurar que ele realmente funcione colocando TI e usuários para trabalharem juntos. É vital para qualquer empresa preencher estes requisitos e as técnicas de programação ágil podem satisfazê-los em diversos cenários de programação de aplicativos. O novo modelo faz sentido para o negócio porque reduz o custo de desenvolvimento ao diminuir o número de erros que os desenvolvedores cometem quando projetam e criam aplicativos. Além disso, as técnicas de programação ágil eliminam o custo de desenvolvimento mais alto de todos: o do fracasso.

Entretanto, mesmo depois de um aplicativo entregue e instalado, problemas de confiabilidade podem minar qualquer ganho que ele tenha a oferecer. A alta confiabilidade que a maioria das empresas almeja só pode ser alcançada com um aplicativo bem-projetado, que não passe mais tempo na loja de reparo digital do que satisfazendo as necessidades dos usuários. A programação ágil tem êxito ao reduzir o número de erros de desenvolvimento potenciais por módulo e ao proporcionar teste contínuo para localizá-los rapidamente.

Muitas empresas querem obter retorno rápido do investimento para qualquer projeto de desenvolvimento. Mas a maioria dos projetos se arrasta durante anos enquanto a empresa espera que o desenvolvedor finalize o aplicativo com um todo. Com as técnicas de programação ágil, você não precisa esperar pelo aplicativo inteiro. Em resumo, você obtém parte do aplicativo gratuitamente porque a economia de custo auferida se estende ao desenvolvimento do restante do aplicativo.

Um programa que funcione talvez não pareça nada extraordinário, mas pode significar a diferença entre um aplicativo que economiza (ou gera) dinheiro e um que não economiza (nem gera) dinheiro. Um projeto em uma grande confecção de roupas ilustra bem este ponto. O desenvolvedor presumiu que os funcionários usariam o mouse ao selecionar itens na tela para entrada de pedidos. Depois que o novo aplicativo foi instalado nos servidores de produção, a empresa observou uma perda de desempenho expressiva dos funcionários, ao invés do ganho esperado. O fato é que os funcionários preferem utilizar somente o teclado, já que mover as mãos do teclado para o mouse para trabalhar com o aplicativo consome minutos preciosos em cada pedido.

A programação ágil ajuda a evitar este cenário ao envolver o usuário no processo de desenvolvimento. Se a confecção tivesse seguido esta abordagem, o primeiro uso do aplicativo teria ajudado a empresa a usufruir o ganho de performance esperado. Em vez disso, a empresa gastou tempo e ainda mais dinheiro refazendo o aplicativo.

O que diferencia a programação ágil?
Com ela, um projeto de desenvolvimento de aplicativo é realizado em pequenos incrementos. Cada etapa, abordada separadamente em um período de tempo muito curto, complementa o aplicativo e representa uma parte completa da funcionalidade. Você pode implementar o aplicativo parcial, que deverá permitir que as pessoas executem algum nível  de trabalho, mesmo que o aplicativo ainda não faça tudo que você pretende para ele no fim.

++++

Assim, você pode descobrir, imediatamente, se alguma parte do aplicativo apresenta problemas e corrigi-los de saída, e não depois de incorporar todo tipo de funcionalidade a elementos que têm bugs ou que não eram o que o usuário desejava.
Cada fase é, por si só, um mini-projeto. Na função de gerente de projeto ágil, você supervisiona os estágios de requisitos, design, codificação, teste e documentação como faria normalmente, mas somente para um recurso específico do aplicativo.

Se você estiver criando um tipo especial de processador de texto, o corretor ortográfico pode ser uma fase, por exemplo. O corretor ortográfico complementa o processador de texto, mas só afeta um aspecto do aplicativo. Os usuários podem trabalhar com o processador de texto antes do desenvolvedor criar esta ferramenta. Eles apenas não podem fazer a correção ortográfica do que escrevem.

Não terei que realizar muito trabalho extra?
Algumas pessoas pensam que a implementação de técnicas de programação ágil é muito trabalhosa. Na realidade, ela reduz a carga de trabalho e acelera significativamente o ROI, porque o tempo de retorno de cada componente é mais curto e o software entra em operação mais cedo.

Diante da resposta imediata que os desenvolvedores podem dar para este software, os gerentes, com freqüência, usam técnicas de programação ágil para salvar projetos que estão com problemas.

O que mais é diferente além de trabalhar em fases?
A base da programação ágil é a comunicação. Esta metodologia enfatiza a comunicação face-a-face. Os documentos escritos são os pontos de discussão. Em outras palavras, em vez de ter muitas pessoas trabalhando por conta própria em vários segmentos do projeto, todo mundo se junta para trabalhar nestes incrementos como uma unidade coesa.

Ao contrário de outros métodos, a programação ágil se apóia em equipes com membros extremamente diferenciados que trabalham agrupados. Uma equipe inclui gerentes de projeto, projetistas, desenvolvedores, testadores, clientes, redatores e quem mais for necessário. Visto que um módulo do projeto é pequeno o suficiente para que todo mundo o entenda e para que todas as partes interessadas trabalhem unidas, em geral é possível torná-lo disponível em um período de tempo mínimo, com pouco ou nenhum retrabalho.

Entretanto, o aspecto mais importante do desenvolvimento ágil é a participação de todos no processo. O cliente (usuário) está envolvido no projeto desde o início, o que permite à equipe de desenvolvimento fazer menos suposições erradas sobre como o usuário vai interagir com o aplicativo e sobre os passos necessários para executar uma tarefa específica. Este processo é muito diferente da abordagem comum em muitas instalações: "Escreva uma especificação, jogue-a por baixo da porta e ignore-a até olhá-la com desprezo durante a demonstração do aplicativo".

Trabalhar dessa forma não mudará nossa cultura corporativa?
A programação ágil requer um ambiente diferente daquele normalmente encontrado na corporação. Todos os membros da equipe, por exemplo, precisam ter algum nível de confiança nos outros membros. Nenhum indivíduo pode sonegar informação, recursos ou dados de outros membros da equipe. Para garantir um bom resultado, a equipe tem que trabalhar unida e evitar as usuais complicações políticas. Em alguns casos, pode ser necessário substituir um membro por outro que se mostra mais disposto a confiar na equipe.

A equipe também tem que se mostrar disposta a fazer concessões. Um módulo do aplicativo pode precisar de determinados recursos e, por outro lado, oferecer recursos que são interessantes, porém desnecessários. Às vezes, para ter o módulo pronto em um prazo razoável, uma equipe precisa optar por remover recursos desnecessários e guardá-los para uma futura etapa. O ponto importante é que a equipe precisa se dispor a trabalhar unida para criar o módulo do aplicativo no prazo determinado.

++++

Algumas organizações estão acostumadas a reunir muita gente em volta de um problema na esperança de concluir o trabalho mais depressa. Se você adotar técnicas de programação ágil, poucas pessoas altamente qualificadas vão bastar. Com menos linhas de comunicação, os membros da equipe podem executar as tarefas mais rápido, já que são menos pessoas tendo que concordar com alguma atitude em particular.

A equipe tomará algumas decisões que talvez não sejam muito populares na organização como um todo. O velho ditado “Não se pode agradar todo mundo” se aplica aqui. Como a equipe tem um representante de cada setor, a organização tem que confiar que a equipe vai agir de boa fé. A meta é conviver com o incremento do aplicativo que a equipe de desenvolvimento disponibiliza. Do contrário, o projeto pode ficar caótico muito depressa. Obviamente, isso não significa que a organização seja obrigada a aceitar um aplicativo que tenha bugs ou que não execute a contento a tarefa a que se propõe. A razão de implementar o aplicativo em pequenos incrementos é encontrar e corrigir bugs e problemas de uso o mais cedo possível para reduzir o custo de reparo.

Outro aspecto importante é promover um ambiente que incentive a comunicação entre os membros da equipe. Para isso, talvez seja preciso alocar a equipe em um lugar específico. Os integrantes da equipe devem manter o mesmo horário de trabalho e estar disponíveis uns para os outros conforme o necessário. Talvez você tenha que designar clientes para a equipe temporariamente (alguém, como o usuário corporativo, que vai interagir com o aplicativo) e pedir-lhes que deixem de lado suas funções normais neste período.

Quando não devo usar técnicas de programação ágil?
Não existe “a” solução genial para o desenvolvimento de aplicativos. Nunca existirá. As técnicas de programação ágil ajudam a criar aplicativos com qualidade e velocidade, mas não funcionam para todos os projetos.

Uma organização talvez precise criar um grande aplicativo que não pode ser dividido em pequenas partes e demanda mais de 20 desenvolvedores, por exemplo. Se você tem de entregar um aplicativo de monitoramento cardíaco para um hospital, não vai desenvolver e implementar apenas a parte que monitora o coração do paciente, sem as partes que enviam alertas quando o coração falha. Neste caso, é preciso criar o aplicativo inteiro e testá-lo como um todo antes da implementação, ou vai se deparar com muitos óbitos (e muitos processos judiciais). As técnicas de programação ágil não são uma boa solução neste caso porque o sistema colapsa rapidamente quando há pessoas demais envolvidas.

As técnicas de programação ágil também não funcionam bem para aplicativos que requerem desenvolvimento distribuído. Se você tem alguns programadores na Inglaterra e outros nos Estados Unidos, a equipe não poderá se comunicar com a necessária rapidez. As equipes distribuídas têm dificuldade para usufruir todos os benefícios do método ágil, apesar de ferramentas de mensagens instantâneas ajudarem um pouco. Mesmo assim, o sistema pode paralisar rapidamente e você se verá dedicando muito tempo a manter os integrantes individuais da equipe atualizados.

Além disso, talvez você tenha dificuldade para usar técnicas de programação ágil com aplicativos de missão crítica, nos quais cada peça precisa funcionar desde o início. Considerando-se que a programação ágil funciona melhor com etapas pequenas, você não terá um aplicativo inteiro montado imediatamente. O processo requer que a organização implemente o aplicativo parcial para obter comentários da organização como um todo. A meta é corrigir quaisquer bugs e problemas de uso rapidamente, e não criar um aplicativo monolítico que não pode ser testado antes do fim do projeto.
Algumas empresas simplesmente não se adaptam muito bem às técnicas de programação ágil porque adotam um gerenciamento estilo “comando e controle”. Isso mata o processo criativo necessário para fazer a programação ágil funcionar. De qualquer forma, a maioria dos especialistas considera o gerenciamento tipo comando e controle ultrapassado e um grande problema que a empresa deve eliminar.

++++

Só existe um tipo de programação ágil?
A programação ágil abarca um número significativo de metodologias que você pode usar para atingir sua meta. A escolha do método vai depender do tipo de aplicativo que você quer criar, dos clientes que você precisa satisfazer e do ambiente da sua organização. Eis algumas das metodologias de programação ágil mais comuns:

Programação eXtrema (eXtreme programming -- XP): Este método enfatiza muito a adaptabilidade em vez da previsibilidade. Funciona melhor em cenários onde a organização não sabe com exatidão de quais produtos necessita. Foi idealizado por Kent Beck.
Scrum: Propõe recomeçar uma etapa em vez de tentar corrigir o problema. Funciona melhor em cenários onde a organização está usando novas ferramentas e o aplicativo quase certamente vai mudar durante o desenvolvimento. Jeff Sutherland usou o método Scrum pela primeira vez na Easel Corporation em 1993.
Desenvolvimento adaptativo de software (adaptive software development -- ASD): Prioriza a velocidade e a flexibilidade. Funciona melhor em cenários onde a organização precisa produzir resultados com rapidez para um aplicativo que pode crescer à medida que os clientes o utilizam. Foi desenvolvido por Jim Highsmith.
Método de desenvolvimento dinâmico de sistemas (dynamic systems development method -- DSDM): Originou-se de técnicas de desenvolvimento rápido de aplicativos (rapid application development -- RAD) que enfatizam o envolvimento do usuário. Funciona melhor em cenários em que o aplicativo precisa funcionar em um ambiente de computador complexo que o desenvolvedor não entende muito bem. O DSDM Consortium desenvolveu esta metodologia em 1990 no Reino Unido para consolidar experiências com melhores práticas de programação.
Desenvolvimento orientado a funcionalidades (feature driven development -- FDD): Enfatiza a previsibilidade e a aderência a melhores práticas de desenvolvimento. Funciona melhor em situações em que a equipe de desenvolvimento tem que criar um aplicativo com recursos específicos e confiabilidade acima do normal. Jeff De Luca desenvolveu este método originalmente para suprir as necessidades de um grande banco de Cingapura em 1997.
Não é uma lista completa. Outras metodologias de programação ágil, como Crystal Clear, poderão ter um lugar na sua organização. A programação ágil é tão útil que as pessoas estão sempre descobrindo novas maneiras de utilizá-la. Conseqüentemente, você continuará vendo as organizações criarem novas metodologias de programação ágil.
 

John Paul Mueller é repórter da CIO-EUA

Junte-se a nós e receba nossas melhores histórias de tecnologia. Newsletter Newsletter por e-mail