Qual é a diferença entre a abordagem incremental e a iterativa para o desenvolvimento de software?


16

A abordagem incremental é um método de desenvolvimento de software em que o modelo é projetado, implementado e testado de forma incremental (um pouco mais é adicionado a cada vez) até que o produto seja finalizado. Envolve desenvolvimento e manutenção. O produto é definido como acabado quando atende a todos os seus requisitos

O Design Iterativo é uma metodologia de design baseada em um processo cíclico de prototipagem, teste, análise e refino de um produto ou processo. Com base nos resultados dos testes, a iteração mais recente de um design, alterações e refinamentos são feitos. Esse processo visa melhorar a qualidade e a funcionalidade de um design. No design iterativo, a interação com o sistema projetado é usada como uma forma de pesquisa para informar e desenvolver um projeto, à medida que versões sucessivas ou iterações de um design são implementadas.

Parece que ambos os métodos são sobre a criação de uma parte do sistema, refinando-o para passar em todos os casos de teste, adicionando outro componente do sistema e refinando-o novamente, estes são repetidos até que o sistema seja concluído.

Qual é a diferença real entre essas duas maneiras de projetar software

Como é possível combinar esses dois métodos para formar uma abordagem de design iterativa e incremental

Respostas:


13

A Abordagem Incremental usa um número definido de etapas e o desenvolvimento vai do início ao fim em um caminho linear de progressão.

O desenvolvimento incremental é feito nas etapas de projeto, implementação, teste / verificação, manutenção. Eles podem ser divididos ainda mais em sub-etapas, mas a maioria dos modelos incrementais segue o mesmo padrão. O Modelo Waterfall é uma abordagem tradicional de desenvolvimento incremental.

A Abordagem Iterativa não possui um número definido de etapas, mas o desenvolvimento é feito em ciclos.

O desenvolvimento iterativo está menos preocupado em acompanhar o progresso de recursos individuais. Em vez disso, o foco é criar primeiro um protótipo funcional e adicionar recursos nos ciclos de desenvolvimento, onde as etapas de Incremento de Desenvolvimento são realizadas para cada ciclo. A modelagem ágil é uma abordagem iterativa típica.


O modelo incremental foi originalmente desenvolvido para seguir o modelo tradicional de linha de montagem usado nas fábricas. Infelizmente, o design e o desenvolvimento de software têm pouco em comum com a fabricação de bens físicos. Código é o modelo, não o produto final do desenvolvimento. Boas opções de design são frequentemente 'descobertas' durante o processo de desenvolvimento. Bloquear os desenvolvedores em um conjunto de suposições sem o contexto apropriado pode levar a projetos ruins, na melhor das hipóteses, ou a um descarrilamento completo do desenvolvimento, na pior das hipóteses.

A abordagem iterativa agora está se tornando prática comum, porque se encaixa melhor no caminho natural da progressão no desenvolvimento de software. Em vez de investir muito tempo / esforço perseguindo o 'design perfeito' com base em suposições, a abordagem iterativa trata de criar algo que seja 'bom o suficiente' para começar e evoluí-lo para atender às necessidades do usuário.

tl; dr - Se você estivesse escrevendo um ensaio sob o Modelo Incremental, tentaria escrevê-lo perfeitamente do início ao fim de uma frase de cada vez. Se você o escreveu sob o Modelo Iterativo, redigiria um rascunho rápido e trabalharia para aprimorá-lo através de um conjunto de fases de revisão.


Atualizar:

Modifiquei minha definição para 'Abordagem incremental' para se encaixar em um exemplo mais prático.

Se você já teve que lidar com a contratação da Abordagem Incremental, é como a maioria dos contratos é realizada (especialmente para os militares). Apesar das muitas variações sutis do típico "Modelo em cascata", a maioria / todas elas são aplicadas da mesma maneira na prática.

Os passos são os seguintes:

  • Adjudicação de Contrato
  • Revisão preliminar do projeto
  • Revisão crítica do projeto
  • Congelamento da especificação
  • Desenvolvimento
  • Fielding / Integração
  • Verificação
  • Teste de confiabilidade

O PDR e o CDR são onde as especificações são criadas e revisadas. Depois que a especificação estiver concluída, ela deverá ser congelada para evitar a fluência do escopo. A integração ocorre se o software for usado para estender um sistema pré-existente. A verificação é para verificar se o aplicativo corresponde à especificação. Confiabilidade é um teste para provar que o aplicativo será confiável a longo prazo; isso pode ser especificado como um SLA (Service Level Agreement), em que o sistema é necessário para manter uma certa porcentagem de tempo de atividade (ex 99% de atividade por 3 meses) )

Esse modelo funciona muito bem para sistemas simples de especificar no papel, mas difíceis de produzir. É muito difícil especificar o software no papel com qualquer grau de detalhe apreciável (ex UML). A maioria dos 'tipos de negócios' encarregados do gerenciamento / contratação não consegue perceber que - quando se trata de desenvolvimento de software - o próprio código é a especificação. As especificações do papel costumam levar tanto ou mais tempo / esforço para escrever quanto o próprio código e geralmente se mostram incompletas / inferiores na prática.

Abordagens incrementais tentam desperdiçar tempo / recursos tratando o próprio código como a especificação. Em vez de executar a especificação do papel através de várias etapas de revisão, o próprio código passa por vários ciclos de revisão.


+1 para bom exemplo, embora Incremental descrição parece errado para mim
Basilevs

@Basilevs Isso é melhor?
Evan Plaice

6
Cachoeira não é incremental. Incremental refere-se especificamente à construção (design por teste) de software peça por peça. No modelo em cascata tradicional, você faz todo o seu design, toda a sua implementação e todos os seus testes. Não é de forma alguma incremental. Existem variações de cascata, como onde você manipularia seus requisitos de engenharia antecipadamente e depois dividir o projeto em incrementos em que cada incremento é projetado, implementado, testado (e integrado e testado com outros incrementos), mas isso não é tradicional cascata.
Thomas Owens

0

Como em qualquer adjetivo, e quase tudo no desenvolvimento de software ... depende!

Depende do contexto e de como o termo está sendo usado. Então você está perguntando sobre a diferença entre as abordagens incremental e iterativa para o desenvolvimento de software, mas sua citação analisa o design iterativo, que é uma coisa diferente (embora semelhante).

Então, respondendo especificamente como uma abordagem ao desenvolvimento de software.

A questão está equivocada. Não é um ou outro. Você não pode compará-los diretamente, pois eles se referem a diferentes partes do processo.

O desenvolvimento de software iterativo é por natureza incremental. O desenvolvimento incremental de software não precisa ser iterativo.

Um incremento é uma pequena mudança, espero que a frente. É uma maneira de se referir a cada etapa do trabalho realizado.

Uma iteração é um ciclo de trabalho.

Portanto, uma iteração se refere ao ciclo geral de desenvolvimento usado. Um incremento refere-se a cada etapa individual do trabalho. Uma iteração produzirá um incremento, que é composto de um ou mais incrementos reais no software (geralmente mais).

Em conclusão...

O desenvolvimento de software iterativo é um tipo específico de abordagem para o desenvolvimento de software, trabalhando em iterações em oposição a uma abordagem em cascata tradicional. Scrum é um bom exemplo.

O desenvolvimento incremental de software é mais geral e refere-se ao avanço do trabalho em etapas, que é um recurso da maioria das abordagens (talvez todas?). Dito isso, o termo é usado com mais frequência em relação a abordagens modernas e ágeis, o que provavelmente explica a confusão entre os dois termos muito semelhantes.

E, finalmente, é claro, depende de como o termo deve ser usado quando usado, o que geralmente varia significativamente de acordo com o orador, a hora do mês, etc!

Uma questão mais interessante é: onde uma abordagem empírica para o desenvolvimento de software se encaixa nisso tudo. A beleza de uma abordagem iterativa é que ela possibilita o empirismo, que é onde a mágica acontece.

Espero que isto ajude.

Este artigo descreve bem, com exemplos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.