Um processo de software é um conjunto de atividades que tem como produto final um software funcional. Um processo software não diz como fazer um software, mas diz quem faz, o que faz e quando fazer. Cada organização faz um processo de software que seja adequado ao seu ambiente. Existem alguns modelos de processo que definem as atividades para o desenvolvimento de um software, especificam os produtos de cada atividade e indicam papéis das pessoas envolvidas. Alguns modelos de processo de software existem são o Modelo Cascata, Desenvolvimento Incremental, Desenvolvimento Ágil, etc. As organizações devem escolher, combinar ou adaptar aqueles que melhor se adequarem ao seu contexto. Entre as vantagens de adotar um modelo de processo de software temos: uma maior padronização dos artefatos, uma melhor comunicação entre os membros da equipe, um roteiro para o trabalho a ser seguido, etc.

No restante do artigo veremos melhor o que é um processo ágil, como podemos ter agilidade, quais são as oposições existentes ao desenvolvimento ágil e os fatores humanos que devem existir no desenvolvimento ágil. Também veremos como as ferramentas podem oferecer suporte para os processos ágeis.

Processo Ágil

Os processos ágeis de software são caracterizados através de três preceitos básicos. O primeiro preceito é que não sabemos de forma antecipada quais requisitos de software irão constar no sistema e nem quais serão modificados posteriormente. Também não sabemos quais prioridades do cliente serão alterados no decorrer do projeto. O segundo preceito é que não conseguimos prever o quanto de trabalho de projeto será necessário antes que a construção seja implementada de forma que possamos avaliar o projeto. O terceiro e último preceito é que não sabemos ou não temos como prever o quanto de análise, projeto, desenvolvimento e testes serão necessários para o projeto.

Através dos preceitos discutimos acima podemos notar que temos certa imprevisibilidade que devemos administrar num projeto. Esse tipo de situação é bastante comum no desenvolvimento de softwares empresariais, onde o cliente necessita de uma solução, mas muitas vezes nem mesmo ele sabe realmente o que ele deseja e dessa forma as ideias, prioridades, esclarecimentos vão surgindo ao longo do projeto de desenvolvimento do software. Portanto, o desenvolvimento ágil sugere uma forma de lidar com toda essa imprevisibilidade através da adaptabilidade dos processos. Assim sendo, um processo ágil deve ser adaptável.

No entanto, a adaptabilidade contínua deve ser feita através de progressos que levem em frente o desenvolvimento. Ou seja, não adianta alterarmos documentos, partes burocráticas, etc., se a parte mais importante que é o software não estiver evoluindo ao objetivo. Os métodos ágeis também sugerem que a adaptabilidade deve ser feita incrementalmente. Para conseguir essa adaptação incremental (adicionando funcionalidades ou efetuando modificações aos poucos) precisamos de feedback do cliente. Através do feedback do cliente podemos verificar as adaptações apropriadas a serem feitas. Para ter o feedback do cliente precisamos que ele no mínimo use o software. Nas versões iniciais pode ser um pouco complicado de conseguir o software já operacional para o cliente. Por isso um bom catalisador para o feedback do cliente são os protótipos operacionais ou então partes operacionais do sistema. Lembrando que esses protótipos não são descartáveis, eles são parte fundamental do software que serão entregues ao cliente para que ele possa avaliar. Esses incrementos são entregues ao cliente em curtos períodos de tempo para que as adaptações acompanhem o mesmo ritmo das mudanças. Aqui temos também a noção de iterações, o cliente recebe o protótipo, avalia, sugere melhorias. Após isso um novo protótipo é entregue ao cliente com as modificações que ele solicitou e novamente temos um feedback do cliente sugerindo novas melhorias ou aceitando o incremento. Essas iterações capacitam o cliente a avaliar o incremente de software regularmente e a fornecer feedback necessário para a equipe de software.

Como ter Agilidade

Para termos agilidade devemos seguir os 12 princípios estabelecidos pela Agile Allince, são eles:

  1. A prioridade principal é sempre satisfazer o cliente por meio de entregas rápidas e contínuas de software operacional.
  2. Devemos sempre acolher os pedidos de modificações, mesmo que estes sejam atrasados. Os processos ágeis se aproveitam das mudanças como uma vantagem competitiva na relação com o cliente.
  3. Entregue software funcional de forma frequente, seja em algumas semanas ou alguns meses, dando preferência para intervalos mais curtos.
  4. Os responsáveis pela área comercial e os desenvolvedores devem trabalhar em conjunto diariamente ao longo de todo projeto.
  5. Sempre devemos construir projetos com indivíduos motivados. Devemos dar a eles o ambiente e apoio necessário, além de confiarmos neles para ter o trabalho feito.
  6. A conversa aberta e de forma presencial é o método mais eficiente e efetivo de transmitir as informações para dentro de uma equipe de desenvolvimento.
  7. A principal medida de progresso do projeto é o software em funcionamento.
  8. Os processos ágeis promovem desenvolvimento sustentável, ou seja, todos os envolvidos devem estar capacitados a manter um ritmo constante indefinidamente.
  9. A atenção contínua com a excelência técnica e com bons projetos aumenta a agilidade.
  10. Manter a simplicidade é considerado essencial.
  11. As melhores arquiteturas, requisitos e projetos estão ligados às equipes auto-organizáveis.
  12. A equipe se autoavalia, em intervalos regulares, no intuito de se tornarem cada vez mais eficientes. Dada essa autoavaliação a equipe procurar formas de ajustar o seu comportamento de acordo com isso.

Certos modelos de processo ágil ignoram alguns princípios, outros atribuem um peso maior a alguns princípios. No entanto, os princípios definem um espírito ágil que é mantido em cada um dos modelos de processo existentes atualmente.

Oposições ao desenvolvimento ágil

Evidentemente que o desenvolvimento ágil tomou grandes proporções no mundo inteiro e também já está sendo adotado em muitas empresas de software no Brasil. Tive a oportunidade de acompanhar uma grande mudança em uma grande corporação de desenvolvimento de software. A mudança foi gradual, porém se estendeu a quase 98% de todos os projetos de desenvolvimento de software desta companhia. Como o desenvolvimento ágil teve resultados bastante satisfatórios nas equipes recebendo feedbacks positivos dos clientes, cada vez mais a sua disseminação tomou grande proporções na empresa. No entanto, ainda existem alguns contrários ao desenvolvimento ágil. Um deles é Jim Highsmith que afirmou que os metodologistas ágeis são um bando de hackers pretensiosos que vão acabar tento uma grande surpresa ao tentarem transformar seus brinquedinhos em software de porte empresarial. Até que ponto devemos levar a sério afirmações que não condizem com as mais recentes pesquisas e experiências relatadas pelos profissionais da área? Claro que nunca devemos rechaçar qualquer tipo de opinião, principalmente vindo de certas pessoas, porém é sempre bom também olharmos para o mercado, para os profissionais experientes da área, para as revoluções que vem acontecendo no meio empresarial e para as dimensões que isso vem tendo nos últimos tempos.

Muitos esquecem que cada modelo tem suas vantagens e desvantagens, assim como alguns modelos adaptam bons conceitos já existentes em outros modelos, que é o caso do desenvolvimento ágil. O melhor a se fazer é sempre usar o que tem de melhor nas diversas abordagens existentes e adaptá-las à realidade do projeto em questão.

Fatores humanos

Os grandes defensores do desenvolvimento de software ágil enfatizam a grande importância que os fatores humanos têm sobre os membros da equipe de software. Entre esses traços-chave que deve existir entre as pessoas de uma equipe ágil temos: a Competência que abrange habilidades específicas relacionadas a software e conhecimento sobre o processo que a equipe escolheu para aplicar; o Foco Comum que enfatiza a importância em focar num único objetivo que é entregar o incremento de software funcional ao cliente dentro do prazo prometido; a Colaboração que envolve todos os membros da equipe colaborando entre si para atingir o objetivo final; a Habilidade na tomada de decisão onde destaca-se que a equipe deve ter autonomia e liberdade para controlar seu próprio destino. A equipe tem autoridade para tomar decisões técnicas e de projeto; a Habilidade de solucionar problemas confusos onde a equipe deve estar pronta para solucionar problemas complexos que surgirão durante a caminhada; a Confiança mútua e respeito que faz com que a equipe se fortaleça cada vez mais; e a Auto-organização na qual a equipe se organiza para o trabalho a ser feito, organiza o processo para que ele seja melhor adequado ao ambiente e organiza o cronograma de trabalho para que seja cumprida a entrega do incremento. Todos esses fatores são de suma importância para qualquer equipe ágil.

Ferramentas de Suporte ao Processo Ágil

Suporte a Projetos Distribuídos

Um processo ágil também deve ter o suporte de algumas ferramentas afim de facilitar a vida da equipe envolvida no projeto.

Um dos grandes empecilhos encontrado pelas equipes que aderem a um processo ágil é quando elas estão distribuídas.

A ferramenta open-source FireScrum foi desenvolvida de forma a facilitar a adoção do Scrum por times distribuídos, apoiando o planejamento e controle de projetos. O Scrum é um framework para gerenciamento de projetos e está alinhado com as práticas ágeis adotando atividades de monitoramente e feedback através de reuniões rápidas e diárias com toda a equipe. Scrum também traz a ideia de ciclo iterativo e incremental.

O Scrum, assim como outras metodologias ágeis, enfatiza a iteração face-a-face. No entanto, com o crescimento contínuo das equipes remotas o Scrum distribuído também é recomendado pela ScrumAlliance (www.scrumalliance.com) em que divide-se o trabalho em partes entre times Scrum isolados. Com base nisso desenvolveu-se o FireScrum de forma a apoiar o Scrum em equipes distribuídas.

O ScrumFire reúne um conjunto de aplicações integradas para suportar equipes que utilizam o Scrum como base para o desenvolvimento de seu projetos, especialmente em equipes que trabalham remotamente. Esta ferramenta foi desenvolvida com base nos conceitos da Web 2.0 e RIA (Rich Internet Applications), focando em usabilidade para garantir a simplicidade do seu uso. Como a ferramenta é Web, ela pode ser acessível remotamente através de um browser.

Entre as funcionalidades oferecidas pela ferramenta tem-se: controle de acesso, cadastro de usuários, cadastro de projetos, criação de itens de backlog, priorização de itens de backlog, criação de sprints, associação de itens de backlog a sprints, criação de tarefas para um dado item do backlog, alocação de um membro do time a uma determinada tarefa, geração do gráfico burndown da sprint e geração do gráfico de burndown do produto, cadastro de tarefas a um dado item de backlog com estimativa, esforço e responsável, cadastrado de impedimentos, associação de impedimentos às tarefas ou itens de backlog. Além disso, a ferramenta também viabiliza o uso remoto da técnica de estimativa Planning Poker que conta com recursos multimídia para reuniões de estimativas utilizando comunicação via chat, vídeo ou texto. Entre outras funcionalidades temos também a possibilidade de criação e gerenciamento de casos de testes e registro de bugs.

Outras ferramentas semelhantes ao ScrumFire incluem a VersionOne, TargetProcess, ScrumWorks e Agilo for Scrum.

Suporte ao Gerenciamento de Projetos

Uma ferramenta de gerencia de projetos é considerada a base para a aplicação do processo de desenvolvimento de software. Assim, cabe à ferramenta prover em maior ou menor grau e direcionar a execução das atividades que envolvem o desenvolvimento do software. As ferramentas de gerência de projetos têm como objetivo apoiar o planejamento, acompanhamento e controle de um projeto. Os gerentes do projeto e a equipe de desenvolvimento podem visualizar o progresso do projeto através de gráficos e medidas que são coletadas pela ferramenta.

A XPlanner é uma ferramenta web open-source voltada para o desenvolvimento ágil de software. É uma ferramenta simples, porém com muitas funcionalidades importantes especialmente utilizados para uso no desenvolvimento com o método ágil XP. Além de ser voltada para um ambiente ágil e gerência de projetos, a XPlanner oferece diversas vantagens como: código livre que permite a alteração e adaptação de funcionalidades, capacidade de suportar a gerência de múltiplos projetos e equipes distribuídas, suporte na web e no site oficial, disponível em diversas línguas, possibilidade de integração com diversos banco de dados. Para fazer o download da ferramenta basta baixá-la em http://www.xplanner.org.

A ferramenta atua no planejamento e monitoramento de projetos para equipes. A Xplanner é utilizada nos métodos ágeis XP, mas também tem sido utilizada em outros métodos ágeis com sucesso. A XPlanner tem como característica um modelo simples de planejamento, suporte para armazenamento e monitoramento de projetos, iterações, histórias de usuários e tarefas, controle de histórias não concluídas, envio de notificações quando tem-se alocação de histórias e tarefas, monitoramente online e geração de folha de registro de horas individual e da equipe, geração de medidas de velocidade da equipe e individual, geração de gráficos de velocidade da iteração, gráfico de burndown, gráfico de distribuição das tarefas, disponibilidade para acrescentar notas para as histórias e tarefas, visão das estimativas da iteração, exportação dos dados do projeto e da iteração para formatos XML, MPX para Microsoft Project e PDF, entre diversas outras funcionalidades.

A ferramenta XPlanner possui funcionalidades relacionadas à gerência de escopo, gerência de tempo, acompanhamento do cronograma, produtividade da equipe, geração de medidas, dentre outras, porém não suporta a gerencia de riscos, custos, recursos humanos, entre outras. Isso permite um foco maior na simplicidade e agilidade na gerência dos projetos.

Com isso, neste artigo vimos o que é um processo ágil e quais são as suas características, quais são os princípios para termos agilidade, os tipos de oposições que existem em relação ao desenvolvimento ágil e os fatores humanos que determinam traços-chave para as pessoas de uma equipe ágil.

Por fim, vimos como algumas ferramentas podem auxiliar um processo ágil. O FireScrum oferece uma alternativa para projetos distribuídos, ao passo que a XPlanner é uma alternativa que visa simplificar e agilizar a gerência de projetos nas organizações ágeis. Diversas funcionalidades suportadas pelas ferramentas visam facilitar a gerência do projeto e como consequência aumentar as chances de sucesso num projeto.

Bibliografia

[1] Pressman, R. Engenharia de Software: Uma abordagem Profissional. 7ª edição. Editora Bookman.

[2] Ken Schwaber e Jeff Sutherland. Scrum Guide. Disponível em http://www.scrum.org

[3] Mike Cohns: Succeding with Agile. Disponível em http://www.mountaingoatsoftware.com/blog/