No desenvolvimento de software temos vários modelos, mas os mais conhecidos são o modelo em cascata, interativo e incremental. O modelo cascata é o mais utilizado, apesar de alguns acreditarem que é um modelo ultrapassado. Grandes empresas ainda utiliza esse modelo de desenvolvimento, por ser mais simples de gerenciar, mais facilmente entendido por todos, porém traz alguns problemas no mundo atual.
O modelo em cascata consiste em um sequenciamento de atividades, sendo que uma etapa só começa após a outra ter sido finalizada. Abaixo, uma figura que representa o modelo:
Mas quando se trata de métodos ágeis, esse modelo não se encaixa, precisa ser ajustado, pois ele precisa passar por todas essas etapas, porém, de forma mais rápida, ou seja, iremos realizar o levantamento de requisitos, mas não na sua totalidade, apenas o que é necessário para o momento, aquilo que é mais importante agora, iremos fazer o projeto, codificar esses itens, testar e implantar se necessário. Em métodos ágeis como o Scrum fazemos isso de forma Iterativa e Incremental.
Mas o que vem a ser desenvolvimento iterativo? E o que significa desenvolvimento incremental?
Primeiro, o que é Desenvolvimento Iterativo.
Segundo o dicionário, iterativo é algo repetitivo, reiterado, que ocorre com frequência. É importante não confundir Iterativo com Interativo, são coisas diferentes.
O desenvolvimento iterativo é exatamente a definição do dicionário, ou seja, desenvolvimento repetitivo, é quando repetimos as mesmas etapas do desenvolvimento de um software, até obter o resultado final desejado. No processo iterativo, vamos construindo o software, avaliando o mesmo e fazendo ajustes a fim de melhorá-lo. Nunca esperamos que o resultado saia perfeito na primeira fez.
Veja a imagem abaixo, bem comum na internet:
Veja que no começo só há um esboço da imagem a ser pintada, depois ela vai ganhando forma e chegando ao resultado final.
No software é a mesma coisa. Por exemplo, uma funcionalidade de Pedido de Venda, no começo pode ter apenas a opção de registrar os produtos e o cliente, mas conforme a versão é liberada, o usuário vai solicitando alguns refinamentos, como melhorar a pesquisa do produto, permitir buscar produtos que o cliente já comprou, ou seja, estou refinando o pedido de venda. Chamamos esse processo de desenvolvimento iterativo, pois no início temos uma ideia do que se quer para o pedido de venda, depois vão sendo melhorados os itens até que fique da forma que o usuário pensou.
Desenvolvimento incremental
Incremento significa aquele que aumenta gradativamente, ou seja, são adicionadas partes novas. O desenvolvimento incremental é justamente ir adicionando novas partes ao longo do tempo. É como adicionar tijolos em um muro na sua construção, depois de vários incrementos (tijolos) você tem o muro pronto.
Veja a imagem abaixo:
Veja que primeiro, foi desenhado uma parte do quadro, de forma completa, mas ainda não temos o quadro pronto. Depois, com vários incrementos, se tem o quadro pronto.
No software é como se quebrássemos o projeto do software em várias partes e fôssemos construindo parte por parte, sendo cada uma de forma completa. Ao final de vários incrementos, teremos o software pronto. Por exemplo, para termos um sistema de vendas on-line, precisaremos do cadastro de clientes, carrinho de compras, check-out, faturamento do pedido, acompanhamento do pedido de venda, entre outras funcionalidades. O desenvolvimento incremental, nós entregaríamos o cadastro de cliente por completo, depois o carrinho de compras por completo e assim por diante.
No Scrum, o desenvolvimento é iterativo e incremental. Iremos construir o software em partes, em diversos incrementos e cada um desses incrementos construídos em um curto espaço de tempo de forma iterativa. A cada iteração é feito um novo incremento, uma nova parte do software. E iremos fazendo isso até que o software fique pronto por completo.
No exemplo do sistema de vendas on-line, nós desenvolveríamos o cadastro de clientes (incremento), mas primeiro com as funcionalidades básicas e à medida que o software evolui, ele vai sendo melhorado (iterações), e depois vamos construindo as demais partes do software, priorizando sempre o que é mais importante e que irá gerar maior valor ao cliente.
Em comparação com o modelo cascata, no Scrum teríamos um modelo parecido com o abaixo:
Veja que no processo do Scrum, é realizado em um período curto de tempo (1 mês), todas as atividades para desenvolver o software, porém essas atividades não são exatamente sequenciais, pois enquanto se levanta requisitos, a equipe de desenvolvimento já está trabalhando na codificação e já testa a solução a medida que certas tarefas vão sendo concluídas. Apenas a implantação, pode ocorrer ao final de cada mês ou não, vai depender do que o cliente desejar ou necessitar.
Quais as vantagens deste modelo (iterativo e incremental).
- Entregas pequenas e parciais, sendo possível avaliar o “rumo” do projeto de software.
- Entregar maior valor agregado mais cedo (não precisa esperar 4 ou 5 meses – ou mais – para se ter uma primeira versão do software).
- Reduz as incertezas do projeto.
- Proporciona a melhoria contínua.
- Permite mudar a direção do projeto mais fácil e rapidamente.
- Permite que o escopo do software se torne mais flexível.
Quais as desvantagens (eu diria “pontos de atenção”) deste modelo:
- Mais difícil de gerenciar se utilizado os modelos padrões de gestão de projetos, pois o escopo, prazos e riscos poderá mudar constantemente.
- Necessita de equipes maduras e autodisciplinada, senão o modelo não funcionará.
- Mais complexo para definir contratos com o cliente, já que o escopo inicial dificilmente será igual ao escopo do final do projeto.
Conclusão
O modelo iterativo e incremental é excelente para projetos de software atuais, pois com as constantes mudanças e velocidades com que as mudanças ocorrem, não é conveniente esperar muito tempo para ver o software funcionando. Melhor ter menos funcionalidades no início, mas já proporcionar ao cliente a experiência com a solução, assim ele poderá corrigir o rumo do projeto, solicitar melhorias que irão agregar valor ao negócio e até mesmo avaliar se o que ele está pedindo faz sentido. O modelo tradicional (cascata), o cliente precisaria dizer tudo que ele quer no inicio e depois, não poderá mudar mais nada (pois isso custa muito caro) até o final do projeto.
No modelo iterativo e incremental utilizado pelo Scrum, o cliente pode pedir de forma geral o que deseja e a medida que o projeto evolui, ele vai detalhando melhor esses itens e até mesmo avaliar se uma funcionalidade ainda faz sentido existir, poderá pedir novas funcionalidades que antes não existiam mas que agora farão todo o sentido.
Enfim, apesar de ser mais difícil de gerenciar, usar o modelo iterativo e incremental irá trazer muito mais benefícios no mundo atual em relação às técnicas tradicionais. Adaptando o modelo de gestão para métodos ágeis, o desenvolvimento de novos produtos se torna muito mais transparente e benéfico para o cliente e para os desenvolvedores.
Até a próxima !