Desenvolvimento ágil e o software incremental

Uma forma de produzir código funcional, dentro do prazo.

Por Murilo Costa


O manifesto para desenvolvimento ágil de software mostra os princípios e as prioridades da equipe em um projeto de desenvolvimento, para esse texto será utilizada a metodologia ágil Scrum como base para a explicação.

O Scrum é um método empírico baseado no conhecimento através da experiência, utilizando um processo iterativo (em ciclos), ele busca melhorar a capacidade de prever problemas e controlar os riscos através de uma comunicação “informal” (e-mail, telefonemas, mídias sociais) mais intensa e a produção de software funcional para entrega em partes.

Como organizar a equipe

O guia do Scrum recomenda uma equipe de 4 a 8 membros para que a comunicação seja eficaz e o gerenciamento não seja tão complexo. É necessário haver um proprietário do produto (em inglês, Product Owner), que deve ser responsável por representar os interesses do cliente, gerenciar quais módulos são importantes e ordená-los tentando atender, da melhor forma possível, as necessidades desse cliente.

Outro papel de importância é o de mestre Scrum (em inglês, Scrum Master), que é responsável por guiar o time de desenvolvimento e o proprietário do produto pelas técnicas necessárias para desenvolver as metas do projeto. Ele deve garantir também, que a equipe de desenvolvimento siga os processos assim como descrito pela especificação e planejamento. O resto da equipe é parte do time de desenvolvimento (em inglês, Development Team), que é responsável por desenvolver o software de acordo com as diretrizes estabelecidas pela metodologia adotada e reforçadas pelo mestre Scrum.

Comunicação com o cliente

Um dos princípios da metodologia ágil é a comunicação constante entre os membros da equipe e com os clientes. O objetivo é extrair o máximo de informação possível para validar os requisitos continuamente, o que possibilita responder às mudanças de forma rápida e eficaz aumentando a adaptabilidade da equipe a alterações no projeto e diminuindo o tempo de resposta, o que torna possível a entrega de pedaços funcionais de software que correspondem exatamente às expectativas dos contratantes.

A melhor forma de obter um controle sobre as requisições de mudanças feitas pelo cliente é utilizar um meio de comunicação que permite armazenar um histórico, como e-mail, por exemplo, pode-se armazenar cada troca de mensagem como evidência e justificativa para mudança de escopo e posterior responsabilização do requerente, caso a mudança cause problemas ou desentendimentos.

Iniciando o projeto

A parte mais importante do projeto é a definição do escopo, geralmente ele é especificado pela coleção de requisitos levantados a partir das necessidades e regras de negócio (como funcionam os processos que vão ser automatizados) do cliente. Somente conhecendo o escopo que é possível iniciar a separação de responsabilidades entre as partes do software e a determinação dos módulos que o compõe, os quais serão entregues ao final de cada iteração do processo.

O Scrum determina que deve existir um catálogo com as funcionalidades e tarefas que precisam ser executadas para o desenvolvimento do sistema como um todo, os itens desse catálogo podem ser definidos e priorizados em reuniões entre o proprietário do produto com o mestre Scrum ou o time de desenvolvimento.

O backlog do produto

O catálogo de funcionalidades é conhecido como product backlog, em cada iteração os itens da lista devem ser consultados, priorizados e revisados, o objetivo é manter a rastreabilidade das alterações do projeto e assim garantir um controle maior sobre as mudanças de requisitos, avanços do projeto e incentiva a criação de um arcabouço de conhecimento.

É importante manter o backlog sempre atualizado conforme o projeto evolui e novas mudanças vão aparecendo, na falta de documentação isso pode determinar o que deve ser feito, é de responsabilidade do proprietário do produto gerenciar essa lista.

Modularizando o projeto

Dividir o produto em módulos entregáveis é um dos maiores desafios da aplicação de um processo iterativo, decidir quais funções são essenciais para ter um incremento de software (módulo funcional) pode ser decisivo para o sucesso ou fracasso do projeto. A forma mais interessante de atingir esse objetivo é utilizando o BDD (Behaviour Driven Development, em português, Desenvolvimento Orientado a Comportamento), que será descrito em outro post.

Essa técnica ajuda a separar as funcionalidades associando-as ao comportamento esperado por cada parte do software, se um conjunto de funções atende o mesmo comportamento, então, elas fazem parte do mesmo módulo. Isso possibilita determinar quais tarefas devem ser agrupadas para gerar um módulo funcional, o qual pode ser implantado e utilizado enquanto outras partes estão sendo desenvolvidas.

O BDD foi desenvolvido especificamente para metodologias ágeis, a mesma filosofia de comunicação, produção em tempo hábil e conformação com as necessidades do cliente são aplicadas a ele.

O sprint e seu planejamento

No Scrum, o sprint (em português, corrida) é um evento no qual as tarefas delimitadas e priorizadas como um módulo no backlog são executadas. Um sprint pode ter duração de 2 a 3 semanas e deve produzir um pedaço usável do produto, o gráfico acima descreve exatamente esse processo. A revisão diária tem como objetivo alinhar a equipe sobre as tarefas, os desafios e os empecilhos que surgiram, é de extrema importância para a integração da equipe e zela pela continuação das atividades de forma eficaz.

O planejamento de um sprint é bem simples, deve-se verificar quais tarefas que fazem parte da construção do módulo principal do sistema, esse módulo deve conter as operações básicas para que seja útil ao cliente.

Adaptabilidade em frente às mudanças

Durante o desenvolvimento podem haver mudanças de alguns requisitos levantados previamente, nesse caso, deve-se finalizar o sprint atual e adicionar essas mudanças no backlog do produto para a próxima iteração. Pode-se, por exemplo, criar um novo ciclo para incluir essas alterações e desenvolver outro pedaço funcional do software ao mesmo tempo, depende do impacto que a mudança causará e da capacidade técnica da equipe.

Os processos ágeis possuem suas vantagens e desvantagens, porém ao dominá-las e aplicá-las de forma concisa é possível obter resultados satisfatórios, além de possibilitar a criação de software complexo sem a necessidade de longos períodos de desenvolvimento para entregar um produto que pode nem atender às necessidades do cliente.