O desenvolvimento ágil possui princípios que o caracterizam, são eles: a satisfação do cliente, a entrega incremental, equipes de projetos pequenas e altamente motivadas, métodos informais, poucos artefatos de engenharia de software, simplicidade no desenvolvimento geral. No desenvolvimento ágil procura-se entregar um software funcional o mais cedo possível do que gastar horas, dias, semanas ou até meses com a análise e projeto de um software. Também temos a priorização de uma comunicação muito mais ativa e contínua entre os desenvolvedores e os clientes.

Todos os envolvidos e interessados no projeto, tais como os gerentes, clientes e os usuários finais, trabalham em conjunto e de forma auto-organizável em uma equipe ágil que controla o seu próprio objetivo. Essa equipe sabe que é fundamental uma comunicação acelerada e colaboração constante entre todos os participantes, sempre tirando dúvidas e ajudando uns aos outros.

Trabalhar de maneira ágil atualmente é extremamente importante para o sucesso de qualquer projeto devido aos ambientes modernos que estão em constante mudança de forma bastante acelerada. Cada vez mais se tem provado que o desenvolvimento ágil tem sido disparadamente a melhor alternativa para esses tipos de projetos entregando sistemas corretos e completos rapidamente.

O desenvolvimento ágil tem atividades básicas como comunicação, planejamento, modelagem, construção e emprego. No entanto, elas são realizadas através de um conjunto pequeno de tarefas que impulsiona a equipe para o desenvolvimento e entrega de forma imediata.

Diferente de outras abordagens o desenvolvimento ágil considera como um artefato apenas o incremento de software operacional que seja entregue na data combinada com o cliente. Ou seja, quaisquer outros documentos como casos de uso, modelos, projetos não são considerados entregas. Apenas o software operacional e funcionando.

História do Desenvolvimento Ágil

O movimento ágil surgiu em 2001 com Kent Beck e mais dezesseis experientes e renomados desenvolvedores, autores, e consultores na área de software. Esses autores assinaram o "Manifesto para o Desenvolvimento Ágil de Software". Esse manifesto ágil dizia que eles estavam desenvolvendo e ajudando outros a desenvolver software, desvendando formas melhores de desenvolvimento. Através deste trabalho os autores do manifesto passaram a valorizar o seguinte:

  • Indivíduos e interações acima de processos e ferramentas
  • Software funcional acima de documentação completa
  • Colaboração dos clientes acima de negociação contratual
  • Respostas a mudanças acima de seguir um plano

Com isso, os autores manifestaram que embora os itens do lado direito tenha valor, os itens da esquerda são mais ainda valorizados.

Portanto, o desenvolvimento ágil tenta de certa forma atacar os antigos princípios da engenharia de software e valorizar novas formas de desenvolver software. Em essência os métodos ágeis foram desenvolvidos a partir de um esforço para sanar as fraquezas que existia na engenharia de software convencional. Vale salientar que o desenvolvimento ágil procura sanar as fraquezas que existiam e não apagar todo conhecimento já existente. Pelo contrário, os princípios, conceitos e métodos continuam valendo, e muito, porém sendo adaptada aos desafios atuais.

Por muitos anos as ideias por trás do desenvolvimento ágil são conhecidos pelos desenvolvedores, no entanto, somente há menos de quinze anos que elas realmente se consolidaram como um "movimento".

Apesar dos benefícios oferecidos pelo desenvolvimento ágil ele não é indicado para todos os projetos, produtos, empresas, ambientes, contextos e pessoas. Em algumas oportunidades já vivenciei experiências de pessoas que simplesmente não conseguiram se adaptar ao desenvolvimento ágil. Em outras situações empresas também não conseguiram aderir ao ágil, muito devido aos próprios clientes não conseguirem se encaixar na nova filosofia proposta. O desenvolvimento ágil, por outro lado, é fortemente indicado para negócios que mudam rapidamente, ser ágil é fundamental para dar respostas ao ambiente de negócios. Atualmente as condições de mercado estão sempre mudando e muito rapidamente. Por isso os clientes precisam de respostas rápidas. As mudanças são caras, ainda mais quando são feitas sem controle e mal gerenciadas. A abordagem ágil tem como uma característica bastante forte reduzir os custos destas mudanças ao longo de todo o processo de software.

Agilidade

Segundo o autor Ivar Jacobson, muito conhecido na engenharia de software, agilidade não é somente uma palavra da moda quando descrevemos um moderno processo de software. Agilidade é quando uma equipe é rápida e capaz de responder apropriadamente as mudanças no software, ou mudanças ocorridas nos membros da equipe, ou ainda as mudanças que envolvem o surgimento de novas tecnologias, ou então quaisquer outras mudanças que causem impacto no produto em construção ou no projeto que cria o produto. Dessa forma, o suporte para mudanças deve ser incorporado em tudo o que fazemos em software. Ivar Jacobson ainda acrescenta que uma equipe ágil também sabe reconhecer que o software é desenvolvido por pessoas trabalhando em equipes e que as suas habilidades e capacidades em colaborar estão no cerne do sucesso do projeto.

Portanto, podemos analisar que incorporar o espírito da mudança é o principal meio para sermos ágeis. No entanto, ser ágil não é somente responder às mudanças, devemos abraçar a filosofia que é proposta no manifesto que foi discutido na seção "História do desenvolvimento ágil". O manifesto ágil incentiva a estruturação e as atitudes em equipe tornando a comunicação mais fácil entre os membros da equipe, entre o pessoal ligado a tecnologia e outras áreas, entre os desenvolvedores e os gerentes. O manifesto Também enfatiza a entrega rápida do software operacional, a diminuição da importância dos artefatos, assumir o cliente como parte da equipe de desenvolvimento de software, reconhecer que planejamento tem limites quando o negócio é mutável e dessa forma o planejamento também deve ser flexível o suficiente para acomodar essas mudanças.

Por fim, salienta-se que a agilidade pode ser aderida em qualquer processo de software. No entanto, devemos considerar que a equipe deve ser adaptada e alinhada a essa nova realidade. Uma situação que ocorre na maioria dos projetos que passam a ser ágeis, deixando assim outras formas tradicionais de desenvolvimento, é a tentativa de tornar o projeto totalmente ágil em poucos dias ou semanas. Vivenciei projetos que fracassaram ao tentar essa abordagem desesperada de se tornar ágil. O ideal é que a agilidade seja gradativamente empregada ao projeto procurando inicialmente fazer um planejamento ágil de entregas curtas ao cliente e de forma incremental, dividindo as tarefas com os membros da equipe, depois tentando eliminar artefatos que não são essenciais aos projetos, e assim por diante. O ideal é aos poucos fazer a equipe entender como funciona o desenvolvimento ágil, sempre aderindo aos poucos. De preferência seria interessante termos um profissional mais experiente com o desenvolvimento ágil para que ele possa instruir a equipe a começar e dar prosseguimento até que a equipe obtenha o amadurecimento necessário.

O Custo das Mudanças

Conforme os estudos realizados durante décadas afirma-se que os custos das mudanças aumentam cada vez mais conforme o avanço do projeto. Quando estamos na fase de requisitos e precisamos adicionar novas funcionalidades a um requisito ou alterar requisitos já existentes é simples e barato efetuá-las. No entanto, se já estamos testando a nossa aplicação e o cliente requisita uma mudança que afetará diversos componentes, requerendo novos testes, mudanças na arquitetura, etc., teremos um custo muito maior. Dessa forma, os custos sempre crescem rapidamente conforme a evolução do projeto.

Uma das grandes características dos métodos ágeis é que se temos um processo ágil bem elaborado, esse custo de realizar uma mudança é menor. O segredo desse custo menor nas mudanças é que os métodos ágeis trabalham com entregas incrementais, os testes são contínuos e a programação é realizada em pares. Todas essas praticas e outras desenvolvidas nos métodos ágeis contribuem para essa mudança não ser tão significativa. Há um grande número de publicações e experiências compartilhadas na área de desenvolvimento de software que os métodos ágeis reduzem de forma bastante significativa os custos das alterações. A minha experiência que já vivenciou os dois lados, métodos tradicionais e métodos ágeis, também confirma essa afirmação. Além dos métodos ágeis mudarem a filosofia de que não deveríamos mexer em nada e um contrato deve ser seguido até o fim, também temos as práticas que se aplicadas tendem a ajudar de forma bastante significativa o impacto dessas mudanças.

Casos de Sucesso

Svensson e Höst nos seus estudos publicados relataram os resultados da adoção do desenvolvimento ágil em uma organização de grande porte que tem cerca de 1.500 pessoas. Através de um projeto piloto que durou oito meses constatou-se que adoção dos métodos ágeis teve um efeito bastante positivo tanto pelo ponto de vista da empresa quanto do cliente.

Ilieva também relatou sua experiência com desenvolvimento ágil e desenvolvimento tradicional onde foram utilizados dois projetos similares em tamanho, esforço e tecnologia adotada. Desenvolveu-se um software primeiramente utilizando um projeto de desenvolvimento baseado em um modelo tradicional e depois utilizando desenvolvimento ágil. Constatou-se que houve um aumento de produtividade em 41,23% com redução de esforço homem/hora de 11,45% e redução de defeitos em 13,33%. Ou seja, trabalhou-se menos, produziu-se mais e ainda tivemos uma redução dos erros encontrados.

Paulo Cheque Bernardo e Fabio Kon também relataram como foi a experiência em utilizar métodos ágeis na re-implementação de um sistema de grande porte desenvolvido para Universidade de São Paulo (USP). O sistema controla aproximadamente 25 mil alunos matriculados e outorga cerca de 5 mil títulos por ano. Além disso, o sistema também controla todos os dados do programa de pós-graduação da universidade e todo o histórico da vida acadêmica dos alunos. Com o intuito de modernizar os antigos sistemas que mantinham todos esses dados criou-se um novo sistema desenvolvido através de práticas de métodos ágeis de desenvolvimento.

O desenvolvimento do novo software se deu de forma incremental e seguindo a filosofia dos métodos ágeis. Entre as práticas adotadas tem-se:

  • Planejamento e Fases pequenas: As iterações eram curtas com pequenas fases de desenvolvimento. Foi utilizado o software XPlanner para auxiliar no planejamento.
  • Design simples: O sistema foi bem modularizado e sem flexibilidade desnecessária, como enfatizado no desenvolvimento ágil. Além disso, técnicas como programação orientada a objetos, reflexão e AOP ajudaram no desenvolvimento de um design simples.
  • Testes: Ferramentas como JUnit, TestNG, Selenium, Emma, Ant e CruiseControl auxiliaram no desenvolvimento dos testes de unidade, aceitação, segurança e desempenho que são executadas várias vezes por dia.
  • Refatoração: Devido a segurança fornecida pelos testes automatizados o sistema recebe diariamente várias refatorações, algumas envolvendo grandes quantidades de código. A IDE Eclipse também fornece auxilio para fazer as refatorações no sistema.
  • Programação em pares: Os programadores trabalham em pares de modo a espalhar o conhecimento do projeto por toda a equipe.
  • Padronização e Propriedade coletiva do código: Ferramentas como CheckStyle auxiliam na criação e verificação automática de padrões de estilos de código. Todos os programadores trabalham em vários módulos do projeto sem restrições.
  • Integração contínua: O sistema ganhou um repositório único gerenciado pelo SVN. Todos os desenvolvedores podem trabalhar em qualquer parte do código e o processo de integração das mudanças é simples e ágil.
  • Cliente junto aos desenvolvedores: O feedback dos usuários é sempre muito rápido e com isso as correções e refinamentos são diariamente colocadas em produção. O contato permanente dos desenvolvedores com os clientes também permitiram um contato mais direto e frequente, diminuindo a burocracia na coleta de requisitos.

Os números relatados também é algo que impressionado neste projeto da USP. O sistema começou a ser desenvolvido em maio de 2006 e entrou em produção em julho do mesmo ano. A equipe tinha uma mescla de dois programadores sênior e dois estagiários sendo que alguns possuíam maior conhecimento das tecnologias e outros tinham uma maior familiaridade com as regras de negócio e com os códigos já existentes nos antigos sistemas. O sistema possui cerca de 15 mil linhas de código com aproximadamente 100 classes Java e 50 arquivos JSP. Em relação aos testes automatizados há cerca de 5 mil linhas de código de teste divididos em 50 classes. Os testes são executados várias vezes ao dia.

Esses são apenas alguns dos casos de sucessos encontrados na indústria de software. Esses estudos mostram o quanto o desenvolvimento ágil pode fazer a diferença em pequenos, médios e grandes projetos. É sempre interessante tirarmos o maior proveito possível dessas experiências até como forma de beneficiar o nosso projeto com práticas que já deram certo em outros projetos.

Bibliografia:
  1. Pressman, R. Engenharia de Software: Uma abordagem Profissional. 7º edição. Editora Bookman.
  2. Ken Schwaber e Jeff Sutherland. Scrum Guide.
  3. Mike Cohns: Succeding with Agile.
  4. Paulo Cheque Bernardo, Fabio Kon. Desenvolvendo com agilidade: Experiências na reimplementação de um sistema de grande porte. Departamento de Ciência da Computação Instituto de Matemática e Estatística (IME) - Universidade de São Paulo.