Processo Incremental x Iterativo

Monalisa e o Desenvolvimento de Software

A figura abaixo é bem famosa atualmente, provavelmente você já viu várias vezes.

A sua empresa deve (ou deveria) usar um processo incremental e iterativo para desenvolver os softwares.

Trabalhar de forma incremental e iterativa é bem comum em tarefas criativas, por exemplo: escrever esse post.

Estou no tópico Monalisa e o Desenvolvimento de Software, e este é o tópico onde irei falar sobre o processo incremental e iterativo, no final pretendo juntar esse assunto com o de qualidade interna, focando em refatoração. Também pretendo falar sobre o papel dos testes num processo incremental e iterativo. E quando comecei o post eu não tinha definida a estrutura dele, só sabia que ia escrever sobre qualidade externa e interna, por isso já tive que retirar várias partes e refatorar outras.

A figura apresentada mostra de uma forma bem clara a diferença entre um processo incremental para um iterativo. No primeiro já temos melhor definido o que queremos, já no segundo temos apenas uma ideia genérica do que queremos.

Na prática o processo iterativo acaba sendo também incremental, e vice-versa, pois ao desenvolver as partes no processo incremental, iremos fazer uma iteração. Meio confuso neh? Vamos para um exemplo:

O Joãozinho pegou o post-it da funcionalidade de enviar e-mail de confirmação do cadastro. Joãozinho implementou essa funcionalidade realizando os seguintes passos:

  1. Implementou o envio de e-mail;
  2. Implementou a ativação do usuário, apenas quando ele tiver acessado o link de confirmação da conta;
  3. Adicionou a implementação do envio de e-mail no cadastro do usuário;
  4. Adicionou o corpo do e-mail com as informações de bem-vindo e ativação da conta.
  5. Joãozinho percebeu que o envio de e-mail estava demorando, e deixou ele de forma assíncrona;
  6. Houve uma melhora no corpo do e-mail, pois o Joãozinho não gostou muito do primeiro layout.

Podemos observar que o Joãozinho já sabia como seria essa funcionalidade, e foi desenvolvendo ela de forma incremental. Porém, ao finalizar a implementação ele teve que ainda realizar algumas iterações, de acordo com o comportamento que a funcionalidade teve. Se o Joãozinho não tivesse percebido tais comportamentos, ele teria apresentado essa funcionalidade para o cliente, e esse poderia ter pedido a alteração do envio de e-mail de forma assíncrona e a melhora do layout.

Ou seja, no processo incremental já sabemos bem o que queremos (ex.: um bolo de chocolate), já no processo iterativo temos apenas uma vaga ideia, e iremos descobrir mais detalhes do que queremos, ao longo do desenvolvimento (ex.: um portal de Internet).

P.S.: Como notaram, retirei a parte sobre qualidade externa e interna, fica para o próximo post. Acabei me alongando muito no assunto do processo incremental X iterativo, e então optei por deixar apenas essa parte no post. Essa é uma das vantagens de usar um processo incremental e iterativo, com a mentalidade ágil. 😉

Anúncios

Técnicas de Integração de Sistema – Incremental

Ao realizar os testes de integração uma dúvida que pode surgir é a de como combinar os módulos do software. Existem 5 abordagens diferentes para realizar a junção dos módulos, a fim de obter a montagem de todo o sistema:

  • Incremental
  • Top down
  • Bottom up
  • Sandwich
  • Big bang

Neste post, irei falar sobre a abordagem Incremental, que como o próprio nome sugere ocorre aos poucos, módulo a módulo.

A interação ocorre através de uma série de ciclos de teste. Em cada ciclo de teste, os módulos vão se integrando com os já existentes e testados para gerar maiores módulos. A idéia é concluir um ciclo de testes, os desenvolvedores corrigirem todos os erros encontrados, e continuar o próximo ciclo de testes. O sistema completo é construído incrementalmente, ciclo por ciclo, até que o sistema esteja operacional e pronto para a realização dos testes de nível de sistema.

Uma aplicação da abordagem Incremental ocorre frequentemente na fabricação de bolos: a confeiteira degusta a massa do bolo antes de colocá-la no forno, e antes de colocar a cobertura ela verifica a sua consistência e sabor.

A seguir veremos as vantagens e desvantagens do uso da abordagem Incremental na realização dos testes de integração, sendo interessante notar que boa parte das vantagens e desvantagens apresentadas, também ocorre no desenvolvimento incremental.

Vantagens

  • O tester não precisa esperar até que todo o sistema esteja pronto, para iniciar os testes;
  • Há um menor risco de fracasso geral do projeto, já que cada módulo é verificado antes e caso algo esteja errado a correção será implementada já no próximo ciclo de teste;
  • A integração dos módulos só é realizada, após eles já terem sido verificados, ou seja, se algum erro acontecer a causa, provavelmente, será a comunicação entre esses módulos.

Desvantagens

  • A modulação pode ser uma tarefa difícil de ser realizada, pois os módulos necessitam ser pequenos, mas com alguma funcionalidade completa;
  • Em determinadas situações, a realização do teste só poderá ser feita com a utilização de Mock Object.

Considerações Finais

Na utilização da abordagem Incremental para a realização dos testes de integração, alguns aspectos devem ser considerados, tendo em vista o número de ciclos de testes:

  • O número de módulos do sistema;
  • A complexidade dos módulos;
  • A complexidade da interface entre os módulos;
  • O número de módulos a serem usados para o agrupamento em cada ciclo de teste;
  • Verificar se os módulos a serem integrados foram devidamente testados antes;
  • O tempo de resposta da equipe de desenvolvimento em cada ciclo de teste.

Por hoje é só pessoal. Em breve comentarei sobre a técnica Top-down, que é uma técnica de fazer a integração de forma incremental. Até lá!

Fique por dentro das novidades, assine o feed do QualidadeBR.

Fonte:

NAIK, Kshirasagar; TRIPATHY, Priyadarshi. Software Testing and Quality Assurance. Hoboken (New Jersey): John Wiley & Sons, Inc., 2008.

alisson.brito.googlepages.com/ProcessoDeSoftware_AlissonBrito.ppt