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

Qualidade de Software – Processo ou Projeto?

Essa é uma daquelas perguntas que muitos responderiam começando com “Veja bem” e como já diria um amigo meu, quando você inicia uma resposta com “Veja bem” você provavelmente irá enrolar, o popular “encher lingüiça”.

Antes de responder a essa pergunta precisamos, definir e diferenciar projeto de processo:

Um projeto é um esforço temporário empreendido para criar um produto, serviço ou resultado exclusivo. (PMBOK)

Um conjunto de atividades, métodos, práticas e tecnologias que as pessoas utilizam para desenvolver e manter software e produtos relacionados. (CMM)
Pela própria definição já conseguimos notar a diferencia principal entre projeto e processo, que é a duração de cada um. O projeto tem início, meio e fim, já o processo é contínuo. Para exemplificar essa diferença, vou usar dois exemplos:
O casamento é um projeto, ele tem início com os requisitos (igreja, tipo de comemoração, lua-de-mel, etc), meio com a elaboração do projeto (tempo, pessoas envolvidas, etc) e com a execução (convite dos convidados, aluguel do local da festa) e por fim o casamento em si.
A vida de casal seria (ou deveria ser) um processo, pois é contínua, já possui procedimentos (ex. almoço na casa da sogra no domingo) e artefatos (ex. o próprio almoço na casa da sogra) estabelecidos.
Qualidade de Software como processo
A Qualidade de Software é vista como processo, quando ela já tem um processo definido, regular e previsível, todo input (entrada) feito para a Qualidade de Software respeitará esse processo. Um exemplo seria a área de Qualidade de uma fábrica de Software, cujos softwares desenvolvidos passam pela Qualidade seguindo o processo dessa área. Ou seja, o processo será sempre reusado, o máximo que haverá será customizações e melhorias.
Qualidade de Software como projeto
Um grande projeto será desenvolvido pela empresa XPTO e será necessário o envolvimento da equipe de Qualidade atual da empresa e a contratação de novos funcionários. A equipe de Qualidade notou que o seu processo não está adequado para a magnitude do projeto, portanto ele terá que sofrer grandes modificações.
No caso citado acima, a Qualidade de Software será um “subprojeto” do projeto, portanto ele pode ser classificado como projeto de Qualidade de Software, afinal os esforços a serem dedicados serão temporários (o período do projeto). Haverá necessidades de renovação, mudança, criação e inovação, e o fluxo estabelecido poderá ser válido só para aquele projeto, e muitas vezes ele não será reusado em sua integridade em outros projetos, portanto ele se torna singular.
Conclusão
A visão de Qualidade de Software muitas vezes é confundida entre projeto e processo, ambos podem ser associados a Qualidade de Software. O diferencial para ela ser um processo ou um projeto será a maneira que ela é implantada na empresa. O importante é definir as atividades, métodos, práticas e tecnologias, pois são eles os componentes tanto de um processo quanto de um projeto.

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