Ci sono vantaggi rispetto a pratiche agili oltre ad avere una build funzionante tra gli sprint?


9

Di recente mi sono interessato alle pratiche agili nello sviluppo del software e da allora ho visto molti articoli sottolineare che queste pratiche consentono di ridurre i costi complessivi.

La logica alla base di solito va così: se i tuoi requisiti cambiano, puoi riflettere questo cambiamento nel prossimo backlog dello sprint e questo porterà a costi ridotti, perché la progettazione della nuova funzionalità e l'implementazione è ravvicinata in termini di tempo, quindi il il costo diminuisce, secondo la famosa regola secondo cui in seguito è necessario apportare una modifica alle proprie esigenze, maggiore sarà il costo per soddisfare tale requisito.

Ma i progetti software medio-grandi sono complessi. Un'improvvisa modifica dei requisiti non significa che non dovrai toccare altre parti del tuo sistema per soddisfare tale requisito. In molti casi l'architettura dovrà essere modificata in modo molto significativo, il che significa anche che dovrai implementare nuovamente tutte le funzionalità che si basavano sull'architettura precedente. Quindi l'intero punto di riduzione dei costi in un certo senso scompare qui. Naturalmente se un nuovo requisito richiede una nuova parte indipendente del sistema, questo non è un problema, la vecchia architettura cresce, non ha bisogno di essere ripensata e reimplementata.

E il contrario. Se stai usando la cascata e improvvisamente ti rendi conto che deve essere introdotto un nuovo requisito, puoi andare e cambiare il tuo design. Se richiede che l'architettura esistente venga modificata, la riprogetti. Se in realtà non si scherza, ma introduce solo una nuova parte del sistema, allora vai e fai tutto il lavoro, nessun problema qui.

Detto questo, mi sembra che l'unico vantaggio di uno sviluppo agile sia la creazione di funzionalità complete tra gli sprint, e per molte persone e gli articoli non è fondamentale. Inoltre, l'agile sembra comportare una cattiva architettura del software in generale, poiché le caratteristiche sono un po 'schiaffeggiate l'una sull'altra, i team agili si preoccupano solo che una funzione funzioni, non come funziona. Questo sembra che quando i sistemi crescono in complessità con il tempo, le pratiche di sviluppo agili aumentano effettivamente il caos nell'architettura generale del prodotto, con conseguente conseguente aumento dei costi, dal momento che sarà sempre più difficile introdurre cambiamenti, mentre la cascata ti consente di perfezionare la tua architettura prima di rilasciare qualcosa.

Qualcuno può indicarmi dove sto andando storto qui, perché ovviamente molte persone usano agile in ambienti di produzione, quindi devo sbagliarmi da qualche parte.


Tu hai un punto. Vorrei sottolineare che il termine "cascata" non ha 1 definizione universale (come molti altri termini nell'IT). La maggior parte delle persone ritiene che non sia consentito codificare se non sono state scritte e firmate tutte le 2000 pagine di requisiti. Questo non deve essere affatto il caso.
NoChance,

Sì, per "cascata" intendo un processo lineare di specifiche funzionali (fondamentalmente) -> design -> codice tra pietre miliari, non sprint. E, certamente, i requisiti di 2000 pagine e le specifiche tecniche non sono un must, le responsabilità di base delle classi e le loro relazioni reciproche sono spesso sufficienti come design di alto livello.
tux91,

3
@EmmadKareem: In realtà, proprio nella cascata, è esattamente così. Non inizi la codifica fino a quando ogni dettaglio del design non è definitivo. Fortunatamente, l'attuale cascata viene raramente applicata allo sviluppo del software, soprattutto perché non funziona davvero.
tdammers,

1
@tdammers, grazie per il tuo commento. Questo è successo poche volte però. Il metodo waterfall non ha proprietario e può essere applicato e interpretato in modo diverso. Non è una regola che dice di non programmare fino a .... o altrimenti ..., questo perché non è una metodologia. Se avvolto in una buona metodologia, penso che abbia molto senso specialmente nei progetti in cui gli utenti conoscono il nucleo di ciò di cui hanno bisogno da un sistema.
NoChance,

@Emmad Kareem: sono d'accordo con te. Penso che i metodi agili siano più adatti a progetti in cui i requisiti non sono chiari e sono necessari molti prototipi e feedback degli utenti per ottenere i requisiti finali. D'altra parte ci sono casi in cui i requisiti fondamentali sono chiari fin dall'inizio. In questi casi, adotterò un metodo di sviluppo più simile alla cascata (con qualche spazio per le correzioni lungo il percorso) che a un metodo agile. Penso che dipenda davvero dal tipo di progetto a cui stai lavorando.
Giorgio,

Risposte:


7

Prima di tutto, il modello "a cascata" era sempre un uomo di paglia che descriveva come NON eseguire un progetto di sviluppo software. Cerca.

Comunque, la maggior parte dei progetti SDLC "a cascata" comportano un processo di "gestione del cambiamento", poiché quando le persone scoprono che i presupposti che sono stati scritti nelle specifiche non sono più validi (e ciò accade sempre su grandi progetti complessi). Sfortunatamente, il processo di gestione delle modifiche è costruito come misura di gestione delle eccezioni ed è incredibilmente costoso, il che significa che il progetto finirà tardi o di scarsa qualità.

L'idea alla base delle metodologie Agile è che il cambiamento è un dato di fatto: accadrà. Pertanto, è necessario eseguire operazioni standard di "gestione delle modifiche" anziché la gestione delle eccezioni. Questo non è facile, ma la gente ha scoperto che se usi molte buone pratiche di progettazione, puoi farlo.

Un altro grosso problema con la progettazione a caricamento frontale è che (molto spesso) viene dedicato così tanto tempo alla raccolta dei requisiti e alla progettazione, allo sviluppo e al collaudo. Inoltre, se il test è l'ultima fase e viene rilevato un problema serio, è altamente improbabile che venga risolto entro il periodo di tempo.

Forse una delle migliori caratteristiche di un approccio Agile è che richiede una continua interazione (cioè una vera comunicazione) tra il team che sviluppa la soluzione e il cliente che ne ha bisogno. Vengono stabilite le priorità, in modo che gli elementi con la priorità più alta vengano eseguiti per primi (e se scade il tempo, vengono tagliati gli articoli con priorità bassa). Il feedback arriva rapidamente.

Tornando alla questione dei cambiamenti drammatici, devi davvero usare metodi che mitigano i cambiamenti. Buoni direttori di SOLID OO possono svolgere un ruolo importante in questo, così come la creazione di solide suite di test automatizzate in modo da poter testare la regressione del software. Dovresti fare queste cose indipendentemente dalla tua metodologia, ma diventano veramente essenziali se stai cercando di essere agile.


Grazie mille. Per tutti coloro che vogliono leggere in merito a come funziona il design in modo agile e perché non è poi così male: http://jamesshore.com/Agile-Book/incremental_design.html
tux91

8

Bene, ci sono alcuni vantaggi. Il primo è che i clienti non leggono i documenti delle specifiche. Mai. Waterfall parte dal presupposto che tutti accetteranno bene una specifica all'inizio e quindi quando il software verrà consegnato al cliente un anno dopo, corrispondendo alle specifiche, saranno felici. In pratica, i clienti scoprono sempre tutte le cose di cui hanno davvero bisogno, davvero non hanno bisogno e devono davvero essere qualcosa di diverso quando giocano attivamente con il software stesso. Agile ottiene un prototipo funzionante nelle mani dei clienti, quindi queste disconnessioni vengono catturate immediatamente. Agile non si tratta solo di reagire alle mutevoli esigenze. Si tratta anche di far sì che tali requisiti mutevoli si verifichino presto, quando il costo del cambiamento è basso, non alla fine, quando il costo del cambiamento è elevato.

Un secondo vantaggio è che, poiché Agile ha spesso risultati altamente visibili, i progetti hanno meno probabilità di uscire dai binari. Con un grande progetto Waterfall, è fin troppo facile andare indietro senza nemmeno accorgersene. Waterfall produce marce morte di un millesimo alla fine del progetto. Con Agile, poiché effettui consegne ai clienti ogni due settimane, tutti sanno esattamente dove si trova il progetto e le scivolate vengono catturate (e adattate) rapidamente. Nella mia esperienza, Waterfall produce alla fine settimane o mesi di 100 ore settimanali. Agile significa che potresti dover mettere un paio di giorni 12 ore alla fine dello sprint.

Un terzo vantaggio è che i progetti Agile tendono ad essere più motivanti. È molto difficile per le persone avere un qualche senso di guida in un progetto lungo un anno. La scadenza sembra così lontana e quella mancanza di immediatezza significa che le persone tendono a procrastinare, lucidare eccessivamente i progetti e altrimenti non funzionano in modo molto produttivo. Ciò è particolarmente vero perché i primi mesi vengono spesi per cose che le persone non amano fare, come i documenti delle specifiche. Poiché Agile ha sempre delle scadenze molto immediate e concrete nel prossimo futuro, le persone tendono ad essere più motivate. È molto più difficile procrastinare con una scadenza concreta per una serie fissa di compiti previsti per la prossima settimana.


Primo argomento, questo è esattamente ciò per cui mi sento agile. Affrontare requisiti in costante evoluzione. Inoltre, riguardo alla modifica anticipata dei requisiti, ciò ha ancora un'enorme possibilità di fare confusione con l'architettura in mano, portando a reimplementare molto codice esistente. Secondo argomento, puoi per favore spiegare perché i progetti a cascata causano marce mortali? Sembra che una piccola disciplina unita a specifiche tecniche concise possano fare meraviglie qui. Terzo argomento, qual è il problema con la costruzione di un progetto a cascata dal basso verso l'alto e la possibilità di costruirlo una volta ogni tanto?
tux91,

2
La mia esperienza con i progetti Waterfall è che sono sempre puntuali per il primo 90% del tempo pianificato, a quel punto sono improvvisamente indietro di mesi. Il modello di Agile di insistere sulle demo ogni sprint rende questo molto meno probabile. Quando le persone sanno che saranno responsabili entro una settimana e mezza, di solito sono meglio motivate rispetto a quando saranno ritenute responsabili entro nove mesi. È solo psicologia umana.
Gort the Robot,

1
Beh, immagino di non poter discutere con l'esperienza, anche se la mia esperienza è stata un po 'diversa, con un buon design nella codifica manuale non ha molti problemi lungo la strada e anche le stime sembrano essere abbastanza buone. Penso comunque che l'architettura risultante sarà più solida se si utilizza la cascata.
tux91,

2
Ci sono alcune aree - per lo più quelli critici per la sicurezza, ad esempio, il segnalamento ferroviario, avionica - dove i clienti fanno leggere con molta attenzione le specifiche. Sono piuttosto rari e tendono comunque a condurre metodologie di sviluppo molto diverse.
Donal Fellows

4

In risposta alla citazione della domanda, che è un'idea sbagliata fondamentale degli avversari anti-agili

"... mentre la cascata ti permette di perfezionare la tua architettura prima di rilasciare qualsiasi cosa." è un errore, lascia che lo aggiusti per te; "... mentre la cascata ti permette di perfezionare la tua architettura in modo da non rilasciare mai nulla. "

L'implicazione che Waterfall fornisce in qualche modo un'architettura di qualità superiore è fondamentalmente falsa e completamente smentita da prove storiche empiriche.

Se Facebook fosse stato progettato a cascata con 500 milioni di utenti come un requisito duro e veloce e non fosse rilasciato fino a quando un'architettura a supporto che fosse stata perfezionata, nessuno ne avrebbe mai sentito parlare oggi.

Lo stesso con YouTube, Twitter e innumerevoli altre società.

Hanno ottenuto qualcosa che il cliente può toccare e rispondere al lavoro e lo rilasciano il più rapidamente possibile. Hanno ricevuto feedback, perfezionato e rilasciato di nuovo; iterate. Ecco come in questi tre esempi, rispondono solo con funzionalità che i clienti accettano e desiderano e perdono il minor tempo possibile in cose che i clienti trovano di scarso o nessun valore.

Chiunque abbia avuto anni significativi di esperienza nello sviluppo di software sarà d'accordo sul fatto che non esiste un'architettura perfetta . Solo uno che inizia più lontano dall'entropia e dalla grande palla di fango rispetto ad altre alternative. Agile lo riconosce e lo tiene in considerazione. Costruire nel processo, come debito tecnico, rapida ridefinizione delle priorità e refactoring.


3
Usando la parola "mai", stai dicendo che non ci sono prodotti software là fuori che sono stati fatti usando la cascata? Inoltre, perché "mai" rilasciare qualcosa se si dispone di una serie di requisiti per una particolare pietra miliare che si finisce per implementare con successo?
tux91,

1
@ tux91 mi fai notare; nulla sarà mai perfetto dato che deve cambiare immediatamente dopo che i disegni sono stati messi su carta e sono obsoleti prima che venga scritta una singola riga di codice. Quindi l'affermazione che ho citato è un errore, non perfezionerai mai un'architettura e non rilascerai mai nulla.

1
@ tux91 leggo ancora per comprensione, ho detto, che non esiste un'architettura di prefetto e se non rilasci fino a quando non c'è come nella citazione, non verrà mai rilasciato nulla. Non ho detto quello che stai rivendicando, punto, questo è nella tua testa e nella tua interpretazione. Quello che ho detto è che l'argomento cascata in qualche modo fornisce un'architettura di qualità migliore è un errore e fondamentalmente imperfetto. E questi argomenti sulla NASA e la cascata e cosa no; oltre ad essere estraneo ai programmatori , uccise 3 astronauti, sul campo per quella materia, non una brillante storia di successo.

1
@ tux91 wrt uso di "mai", sono qui con Jarrod: la domanda dice "cascata ti permette di perfezionare ..." - che egli contrasta con una parola del tutto appropriata (in questo contesto "perfetto" irrealistico) "mai". L'unica ragione per cui non ho votato è che cerco di evitare di votare le risposte a domande non costruttive
moscerino del

1
@gnat sì, immagino di non aver pensato quando ho usato la parola perfetto , non è quello che volevo sul
serio

3

Scrum di per sé non prescrive alcuna pratica tecnica perché è un quadro generale.

Lo sviluppo di software agile richiede l'eccellenza tecnica del team. Ciò deriva dalle seguenti pratiche tecniche di XP (programmazione estrema). Ad esempio, è necessario conoscere refactoring, tdd, tutto il team, programmazione di coppie, progettazione incrementale, ci, collaborazione ecc.

Farlo in questo modo consente di gestire i cambiamenti in modo rapido e sicuro, che è anche il motivo principale per utilizzare lo sviluppo agile in primo luogo.

L'unica misura di agilità che conta è se riesci regolarmente (settimanalmente, due volte a settimana) a rilasciare software valido e funzionante per il tuo cliente. Puoi farlo? Allora sei agile nel mio libro.


Quello che non capisco è questo "possibile gestire il cambiamento in modo rapido e sicuro", poiché implica che un progetto basato su cascata è più difficile da cambiare. Perché? È solo una base di codice. Specifica cosa devi cambiare, progettalo e come si adatta all'architettura, al codice, al test e alla versione esistenti. Basta non chiamarlo uno sprint, chiamalo invece una pietra miliare. Non sembra che richiederebbe più tempo o presenterebbe più difficoltà che agilità. La differenza è che fai una pianificazione più attenta ma non hai bisogno di fare cose XP rigorosamente.
tux91,

@ tux91 Aggiornato la mia risposta. Per quanto riguarda l'architettura, raccomando di leggere questo o guardare questo alle 26:20 su ciò che chiamiamo "progettazione incrementale".
Martin Wickman,

2

Per me, il principale vantaggio di Agile è la riduzione del rischio nel progetto.

Fornendo in modo iterativo e ricevendo un sacco di feedback dalla tua base di utenti, aumenti la possibilità che tu fornisca qualcosa che realmente desiderano e lo farai fornendo pragmaticamente le funzionalità più importanti per loro il prima possibile. In teoria, ciò avverrà con stime e pianificazione migliori. Questo è ovviamente molto allettante dal punto di vista aziendale, molto più della semplice costruzione rilasciabile.

Potresti sostenere che questo cambiamento costante compromette il tuo sistema e riduce la qualità, ma direi due cose. 1) Questo cambiamento si verifica comunque su progetti di consegna di software più tradizionali: non è stato preso in considerazione e si verifica più avanti nel progetto, quando, come hai sottolineato, le cose sono più difficili e più costose da cambiare. 2) Agile ha molto da dire su come affrontare questo cambiamento in termini di utilizzo di persone motivate e pratiche come TDD, accoppiamento e revisioni del codice. Senza quel cambiamento di mentalità verso la qualità e il miglioramento continuo, accetto che i frequenti cambiamenti che l'agile implica potrebbero iniziare a causare problemi.


Sì, è esattamente quello che penso sull'unico vantaggio di cascata. Ci sono volte in cui non vuoi mostrare il tuo prodotto a nessuno mentre è in fase di sviluppo, perché non è ancora pronto, non ha ancora i punti di vendita. O se hai un'idea abbastanza ferma di ciò che vuoi costruire alla fine. I test, la programmazione delle coppie e le revisioni del codice non garantiscono tuttavia che si ottenga una buona architettura generale del prodotto, ma vengono eseguiti solo per garantire che le nuove funzionalità funzionino correttamente.
tux91,

1

In molti casi l'architettura dovrà essere modificata in modo molto significativo, il che significa anche che dovrai implementare nuovamente tutte le funzionalità che si basavano sull'architettura precedente.

Se la tua architettura deve essere modificata in modo significativo a seguito di una modifica dei requisiti, hai una cattiva architettura o requisiti cattivi. Una buona architettura consente di rinviare quante più decisioni possibili e di disaccoppiare i componenti del sistema. Buoni requisiti (utente) non sono cose come "usa un database diverso".

Quindi, operiamo partendo dal presupposto che abbiamo una buona architettura funzionante. In tal caso, le metodologie di sviluppo agili perdono questo "lavaggio" con metodologie di progettazione all'avanguardia. Dopotutto, una caratteristica fondamentale delle metodologie di sviluppo agili sono pratiche come TDD che promuovono l'accoppiamento libero nel codice, consentendo al progetto di continuare ad alta velocità sia che sia vicino all'inizio o molto maturo.


0

In molti casi l'architettura dovrà essere modificata in modo molto significativo, il che significa anche che dovrai implementare nuovamente tutte le funzionalità che si basavano sull'architettura precedente. Quindi l'intero punto di riduzione dei costi in un certo senso scompare qui.

Seguendo un processo agile, ci sono maggiori possibilità di ottenere questo requisito prima che sia stato sviluppato troppo software (e deve essere cambiato). Quando trascorri diversi mesi senza lavorare con il cliente e dando loro qualcosa da guardare, affronti questi importanti problemi architettonici solo dopo aver "pensato" di essere pronto a consegnare.

Preferirei provare a implementare queste modifiche in un'applicazione funzionante che ha una copertura di test piuttosto che un enorme mucchio di codice che non si compila nemmeno. Pur essendo a capo dell'assistenza tecnica, mi è stato consegnato un CD di un'applicazione che era stata in mesi di sviluppo e che non si sarebbe nemmeno installata. Avremmo potuto trovare quel problema la prima settimana, ma invece era tempo di ordinare la cena perché era una lunga notte.

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.