Seguici
Kalpa

Kalpa

Il tuo partner nel mondo embedded

Siamo una società in cui le buone idee possono trasformarsi in proposte e progetti reali, basandosi sulla qualità, la passione, la competenza, la fiducia e la collaborazione. Sosteniamo un ambiente informale fondato sulla curiosità, il rispetto, il confronto, la crescita e l’audacia nel guardare il futuro per aiutare i nostri clienti a realizzarlo.

 

Processo

WaterFall/V-Model

Il processo di sviluppo chiamato Waterfall model consiste in una serie di fasi che devono essere compiute in rigida successione. Questi fasi possono essere riassunte in:

  • Analisi dei requisiti
  • Progetto
  • Sviluppo
  • Collaudo
  • Manutenzione

La particolarità del processo sta nel fatto che le diverse fasi (in linea teorica) non si sovrappongono: ogni fase deve essere completata prima dell’inizio della successiva. In genere al termine di ogni fase si dovrebbe intraprendere una revisione del progetto per capire se si è in linea con i piani o se qualche azione correttiva deve essere intrapresa.

Il V-Model è spesso detto essere un’estensione del modello a cascata. A differenza del modello a cascata, le attività in questo modello realizzano una forma a ‘V’, con la codifica alla punta inferiore della ‘V’. Ogni fase del ciclo di sviluppo software ha una corrispondente fase del ciclo di test.

Pro
  • Il modello identifica ed astrae le attività principali dello sviluppo di software le mostra nella loro sequenza “più basica”, dando una terminologia comune e la base per i metodi di sviluppo più complessi. I progetti, nella realtà, raramente seguono il modello in modo letterale.
  • Questo modello è facilmente controllabile, da un punto di vista gestione del progetto, anche se poi è il modello più difficile da seguire per chi sviluppa.
Contro
  • Il numero di feedback ad ogni fase, è teoricamente infinito, il che significa che è possibile ripetere una fase, se necessario, un gran numero di volte, fino al raggiungimento di quello che si considera un risultato sufficiente a soddisfare vincoli, siano essi progettuali o di usabilità del sistema. Questo chiaramente porta a dei rischi notevoli in relazione alla durata del progetto.
  • Il modello non è in realtà applicabile. Il problema è che è impossibile per un progetto di medie/grandi dimensioni riuscire a chiudere in modo compiuto una fase, prima di muoversi verso un’altra fase. Ad esempio la prima fase spesso viene chiusa addirittura durante la fase di codifica.
  • La gestione delle risorse può essere molto complessa perché, in relazione alla fase la quantità e la tipologia di risorse può variare in modo significativo, rendendo difficile la creazione di team stabili. Inoltre, le fasi finali del progetto possono essere complicate, dato che spesso gli sviluppatori alla fine di un progetto stanno già iniziandone uno nuovo.
  • Il risk management è molto complesso perché tutti i rischi devono essere gestiti simultaneamente.

Agile

L’Agile è definito come un framework concettuale incentrato sul rilascio iterativo ed incrementale di software. In progetto Agile tipicamente:

  • È richiesto di rilasciare software ogni 1 o al massimo 2 settimane.
  • Si avrà una visione di alto livello sul progetto da raffinare in seguito prima dello start del progetto
  • Una volta che il progetto è iniziato tutto il lavoro si baserà su iterazioni di lunghezza fissa
  • Ogni iterazione inizierà con un meeting di pianificazione 

Un aspetto molto importante dei metodi agile è il rilascio di software funzionante al completamento di ogni iterazione. Un’iterazione non è semplicemente un periodo di sviluppo di software ma di aggiornamento del software prodotto. Questo significa che il software deve essere integrato e testato prima del completamento dell’iterazione.

Pro
  • Maggiore attenzione ai risultati di business – l’utente è molto più coinvolto. 
  • Maggiore time to market – l’approccio iterativo accelera lo sviluppo.
  • Maggiore efficienza organizzativa e team con morale più alto. 
  • Maggiore produttività e costi più bassi.
  • Potenziale qualità più alta il test è parte integrante dello sviluppo.
Contro
  • Non è facile creare un ambiente realmente collaborativo.
  • E’ necessario un forte coinvolgimento del management dell’organizzazione (collaborazione dello Sponsor, cambiamento culturale, adeguata formazione dei partecipanti). 
  • Il tipo di business può presentare dei vincoli
  • Bisogna ridisegnare l’approccio al project management
  • Non si può applicare a tutti i tipi di progetti (es. progettazione delle schede hardware)

Agile

L’Agile è definito come un framework concettuale incentrato sul rilascio iterativo ed incrementale di software. In progetto Agile tipicamente:

  • È richiesto di rilasciare software ogni 1 o al massimo 2 settimane.
  • Si avrà una visione di alto livello sul progetto da raffinare in seguito prima dello start del progetto
  • Una volta che il progetto è iniziato tutto il lavoro si baserà su iterazioni di lunghezza fissa
  • Ogni iterazione inizierà con un meeting di pianificazione 

Un aspetto molto importante dei metodi agile è il rilascio di software funzionante al completamento di ogni iterazione. Un’iterazione non è semplicemente un periodo di sviluppo di software ma di aggiornamento del software prodotto. Questo significa che il software deve essere integrato e testato prima del completamento dell’iterazione.

Pro
  • Maggiore attenzione ai risultati di business – l’utente è molto più coinvolto. 
  • Maggiore time to market – l’approccio iterativo accelera lo sviluppo.
  • Maggiore efficienza organizzativa e team con morale più alto. 
  • Maggiore produttività e costi più bassi.
  • Potenziale qualità più alta il test è parte integrante dello sviluppo.
Contro
  • Non è facile creare un ambiente realmente collaborativo.
  • E’ necessario un forte coinvolgimento del management dell’organizzazione (collaborazione dello Sponsor, cambiamento culturale, adeguata formazione dei partecipanti). 
  • Il tipo di business può presentare dei vincoli
  • Bisogna ridisegnare l’approccio al project management
  • Non si può applicare a tutti i tipi di progetti (es. progettazione delle schede hardware)

Metodi iterativi

Nei metodi iterativi le stesse attività che in un processo di sviluppo Waterfall sono considerate come delle fasi da svolgersi in sequenza rigida, sono sovlte iterativamente in cui ogni ciclo di lavorazione (o iterazione) comporta lo svolgimento di:

  • analisi
  • design
  • codifica
  • test

Ogni iterazione ha lo scopo di ridurre i rischi di progetto. Inizialmente, tramite la costruzione di prototipi, prototipi di interazione (interfacce utente), prototipi architetturali (realizzazione e test di aspetti infrastrutturali), si affrontano i rischi legati alla scelta delle tecnologie ed i dubbi sulla strutturazione del sistema. Quando i rischi principali sono stati messi sotto controllo, ogni iterazione ha lo scopo di costruire, in modo progressivo, nuove porzioni del sistema, via via integrate con le precedenti, e di verificarle con il committente e le altre parti interessate.

Pro
  • Gestione sistematica e progressiva riduzione dei rischi di progetto.
  • Rispetto al processo di sviluppo a cascata, in generale, maggiore qualità dei prodotti, e maggiore produttività dei progetti (costi e tempi inferiori).
Contro

Nessuno, ma due punti di attenzione:

  • La pianificazione dei progetti condotti in modo iterativo è più complessa. Il piano di un processo iterativo evolve durante tutta la durata del progetto stesso, e richiede un controllo sistematico degli avanzamenti.
  • Un punto cruciale per il successo di un progetto iterativo è la collaborazione sistematica tra committenti (e altri stakeholder) e gruppo di progetto.