Qual è la differenza tra l'approccio incrementale e iterativo allo sviluppo del software?


16

L' approccio incrementale è un metodo di sviluppo del software in cui il modello è progettato, implementato e testato in modo incrementale (ogni volta ne viene aggiunto un po 'di più) fino al completamento del prodotto. Implica sia lo sviluppo che la manutenzione. Il prodotto è definito finito quando soddisfa tutti i suoi requisiti

L'iterativo design è una metodologia di progettazione basata su un processo ciclico di prototipazione, test, analisi e raffinazione un prodotto o processo. Sulla base dei risultati del test dell'iterazione più recente di un progetto, vengono apportate modifiche e perfezionamenti. Questo processo ha lo scopo di migliorare in definitiva la qualità e la funzionalità di un progetto. Nella progettazione iterativa, l'interazione con il sistema progettato viene utilizzata come forma di ricerca per informare e far evolvere un progetto, poiché vengono implementate versioni successive o iterazioni di un progetto.

Sembra che entrambi i metodi riguardino la creazione di una parte del sistema, la raffinazione per passare tutti i casi di test, l'aggiunta di un altro componente del sistema e la raffinazione di nuovo, questi vengono ripetuti fino al termine del sistema.

Qual è la differenza effettiva tra questi due modi di progettare il software

Come è possibile combinare questi due metodi per formare un approccio progettuale iterativo e incrementale

Risposte:


13

L' approccio incrementale utilizza un determinato numero di passaggi e lo sviluppo va dall'inizio alla fine in un percorso lineare di progressione.

Lo sviluppo incrementale avviene in fasi di progettazione, implementazione, test / verifica, manutenzione. Questi possono essere suddivisi ulteriormente in passaggi secondari, ma la maggior parte dei modelli incrementali segue lo stesso modello. Il modello Waterfall è un tradizionale approccio di sviluppo incrementale.

L' approccio iterativo non ha un numero prestabilito di passaggi, piuttosto lo sviluppo avviene in cicli.

Lo sviluppo iterativo è meno preoccupato di tenere traccia dell'avanzamento delle singole funzionalità. Invece, ci si concentra sulla creazione prima di un prototipo funzionante e sull'aggiunta di funzionalità nei cicli di sviluppo in cui le fasi di sviluppo dell'incremento vengono eseguite per ogni ciclo. La modellazione agile è un tipico approccio iterativo.


Il modello incrementale è stato originariamente sviluppato per seguire il modello tradizionale della catena di montaggio utilizzato nelle fabbriche. Sfortunatamente, la progettazione e lo sviluppo del software hanno poco in comune con la produzione di beni fisici. Il codice è il modello non il prodotto finito dello sviluppo. Le buone scelte di progettazione vengono spesso "scoperte" durante il processo di sviluppo. Bloccare gli sviluppatori in una serie di ipotesi senza il contesto appropriato può portare a progetti scadenti nel migliore dei casi o a un deragliamento completo dello sviluppo nel peggiore.

L'approccio iterativo sta diventando una pratica comune perché si adatta meglio al percorso naturale di progressione nello sviluppo del software. Invece di investire un sacco di tempo / sforzi nella ricerca del "design perfetto" basato su ipotesi, l'approccio iterativo è tutto sulla creazione di qualcosa che sia "abbastanza buono" per iniziare ed evolverlo per soddisfare le esigenze dell'utente.

tl; dr - Se stavi scrivendo un saggio sotto il Modello incrementale, proveresti a scriverlo perfettamente dall'inizio alla fine di una frase alla volta. Se lo scrivessi con il Modello Iterativo, sbaglieresti una bozza veloce e lavorerai per migliorarlo attraverso una serie di fasi di revisione.


Aggiornare:

Ho modificato la mia definizione di "approccio incrementale" per adattarlo a un esempio più pratico.

Se hai mai avuto a che fare con il contratto, l'approccio incrementale è il modo in cui vengono eseguiti la maggior parte dei contratti (specialmente per i militari). Nonostante le molte sottili variazioni del tipico "modello a cascata", la maggior parte / tutte sono applicate allo stesso modo nella pratica.

I passaggi sono i seguenti:

  • Aggiudicazione
  • Revisione preliminare del progetto
  • Revisione del progetto critico
  • Blocco delle specifiche
  • Sviluppo
  • Fielding / Integrazione
  • Verifica
  • Test di affidabilità

Il PDR e il CDR sono i punti in cui le specifiche vengono create e riviste. Una volta che la specifica è completa, dovrebbe essere congelata per prevenire lo scorrimento dell'ambito. L'integrazione si verifica se il software viene utilizzato per estendere un sistema preesistente. La verifica serve a verificare che l'applicazione corrisponda alle specifiche. L'affidabilità è un test per dimostrare che l'applicazione sarà affidabile a lungo termine, questo può essere specificato in modo molto simile a uno SLA (Service Level Agreement) in cui il sistema è tenuto a sostenere una certa percentuale di uptime (ex uptime del 99% per 3 mesi ).

Questo modello funziona alla grande per sistemi che sono semplici da specificare su carta ma difficili da produrre. Il software è molto difficile da specificare su carta con qualsiasi grado di dettaglio apprezzabile (ex UML). La maggior parte dei "tipi di attività" responsabili della gestione / contratti non riescono a rendersi conto che, quando si tratta di sviluppo del software, il codice stesso è la specifica. Le specifiche cartacee spesso richiedono tanto o più tempo / sforzo per scrivere quanto il codice stesso e di solito si dimostrano incomplete / inferiori nella pratica.

Approcci incrementali tentano di sprecare tempo / risorse trattando il codice stesso come una specifica. Invece di eseguire le specifiche della carta attraverso più passaggi di revisione, il codice stesso passa attraverso più cicli di revisione.


+1 per un buon esempio, sebbene la descrizione incrementale mi sembri sbagliata
Basilevs

@Basilevs È meglio?
Evan Plaice,

6
La cascata non è incrementale. Incrementale si riferisce specificamente alla costruzione (progettazione attraverso test) pezzo per pezzo. Nel tradizionale modello a cascata, esegui tutti i tuoi progetti, quindi tutte le tue implementazioni e quindi tutti i tuoi test. Non è affatto incrementale. Esistono varianti di cascata, ad esempio dove gestiresti le tue esigenze ingegneristiche in anticipo e quindi suddividerai il progetto in incrementi in cui ogni incremento è progettato, implementato, testato (e integrato e testato con altri incrementi), ma questo non è tradizionale cascata.
Thomas Owens

0

Come con qualsiasi aggettivo, e la maggior parte delle cose nello sviluppo del software ... dipende!

Dipende dal contesto e da come viene usato il termine. Quindi stai chiedendo la differenza tra approcci incrementali e iterativi allo sviluppo del software, ma la tua citazione esamina il design iterativo, che è una cosa diversa (anche se simile).

Quindi rispondendo specificamente come approccio allo sviluppo del software.

La domanda è fuori posto. Non è l'uno o l'altro. Non è possibile confrontarli direttamente in quanto si riferiscono a diverse parti del processo.

Lo sviluppo di software iterativo è per sua natura incrementale. Lo sviluppo di software incrementale non deve essere iterativo.

Un incremento è una piccola mossa, si spera in avanti. È un modo di fare riferimento a ogni fase del lavoro svolto.

Un'iterazione è un ciclo di lavoro.

Pertanto, un'iterazione si riferisce al ciclo di sviluppo complessivo utilizzato. Un incremento si riferisce a ogni singola fase del lavoro. Un'iterazione produrrà un incremento, che è costituito da uno o più incrementi effettivi del software (di solito più).

In conclusione...

Lo sviluppo software iterativo è un tipo specifico di approccio allo sviluppo del software, che lavora in iterazioni rispetto a un approccio a cascata tradizionale. Scrum è un buon esempio.

Lo sviluppo di software incrementale è più generale e si riferisce al portare avanti il ​​lavoro nei passaggi, che è una caratteristica della maggior parte (forse di tutti?) Gli approcci. Detto questo, il termine è più spesso usato in relazione ad approcci moderni e agili, il che probabilmente spiega la confusione tra i due termini molto simili.

E, ovviamente, dipende da come si intende il termine quando usato, che spesso varia in modo significativo in base all'oratore, all'ora del mese, ecc.!

Una domanda più interessante è: dove si adatta un approccio empirico allo sviluppo del software in tutto ciò. La bellezza di un approccio iterativo è che abilita l'empirismo, che è dove avviene la magia.

Spero che sia di aiuto.

Questo articolo lo descrive bene, con esempi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.