Sviluppo Software su Misura : Le Fasi Principali - Webcircles
Informativa e consenso per l'uso dei cookie

Accetto Il nostro sito salva piccoli pezzi di informazioni (cookie) sul dispositivo, al fine di fornire contenuti migliori e per scopi statistici. È possibile disattivare l'utilizzo di cookies modificando le impostazioni del tuo browser. Continuando la navigazione si acconsente all'utilizzo dei cookie.

Loading...

Il processo di sviluppo software

Come si sviluppa un software? In questo articolo parleremo delle metodologie più diffuse ed efficaci per sviluppare un software da zero.

Published by Fabrizio Romano in Web

20 Apr 2020

Introduzione

Mi fa sempre sorridere il pensiero di come la figura degli sviluppatori software venga percepita dai non addetti ai lavori. Una sorta di sciamani della tecnologia, rinchiusi in stanze piene di monitor, lampade al neon e cartoni della pizza da asporto. Persone schive, la cui unica vita sociale si consuma durante una partita a Minecraft o World of Warcraft.

Engineers

In realtà quello dello sviluppo software è un mondo tanto complesso quanto affascinante, regolato da leggi chiare e gestito dalle figure professionali più disparate. Lo sviluppo di un progetto software non è un processo né artistico né creativo. Non è un qualcosa che inizia con un semplice «Pronti? Via!», ma è una pratica che segue un copione ben preciso all'interno del quale entrano in gioco diversi attori, ciascuno in un determinato momento e con un ruolo definito.

In questo articolo cercheremo di capire come viene organizzato e gestito correttamente lo sviluppo di un progetto software, esaminando quali siano le varie fasi che lo compongono e quali siano le figure professionali coinvolte.

Cosa si intende per sviluppo software

Secondo Wikipedia, che in quanto a definizioni formali è sicuramente più efficace di me, «lo sviluppo software [...] indica la serie di passi o percorso da svolgere per ottenere risultati di alta qualità e in tempi prefissati nello sviluppo di un prodotto o sistema software».

Vediamo, dunque, che emergono due concetti fondamentali: in primis l'obiettivo, cioè le scadenze da rispettare; in secondo luogo il processo e i passi da seguire per raggiungere l'obiettivo prefissato.

La questione delle tempistiche è forse l'aspetto più importante nel processo di sviluppo software. Proviamo ad immaginare a quanto sia vitale il time-to-market per le aziende che offrono prodotti e servizi attraverso piattaforme tecnologiche. Hai avuto un'idea geniale per un prodotto tecnologico? Sappi che se non fai in fretta a svilupparlo, arriva qualcun altro più veloce di te che si posiziona per primo in quel settore e conquista il mercato.

Ma come si fa a garantire che lo sviluppo di un prodotto software avvenga in tempi certi e con risultati di alta qualità? Ecco che entra in gioco il meraviglioso mondo del project management. Fin dai primi anni settanta sono stati messi a punto numerosi metodi per lo sviluppo software, alcuni più efficaci, altri molto meno efficaci. La cosa interessante è che durante tutti questi anni c'è stato ampio spazio per sperimentare e capire quale modello è davvero il più indicato per gestire con successo lo sviluppo software al giorno d'oggi.

Le fasi dello sviluppo software

Prima di approfondire le metodologie e i modelli di sviluppo software, è necessario avere un'idea generale di quali siano le fasi che deve attraversare un software prima di vedere la luce.

Analisi

Nella fase di analisi l'obiettivo principale è quello di raccogliere i requisiti funzionali del progetto, provando a rispondere alla domanda «Cosa deve fare il nostro software?». In questa fase entrano in gioco il committente e l'analista programmatore che esplorano sia il dominio applicativo, sia le funzionalità che dovranno essere implementate nel software. Al termine del processo viene prodotto il documento di analisi in cui si descrivono il dominio applicativo, gli utilizzatori del software e le funzionalità che dovranno essere sviluppate. Tale documento sarà poi il punto di partenza per tutte le fasi successive.

Design

In questa fase il testimone viene passato al software architect e allo UX designer che, partire dal documento di analisi, progettano il software rispettivamente dal punto di vista tecnico e dal punto di vista di usabilità ed esperienza utente. Al termine di questa fase vengono prodotti gli schemi tecnici (diagram) dei vari componenti e i bozzetti (wireframe) dell'interfaccia utente.

Implementazione

È solo a questo punto che entrano in gioco i famosi programmatori-sciamani che, a partire dagli schemi progettuali elaborati dai colleghi, realizzano materialmente il software occupandosi ciascuno di sviluppare una o più funzionalità.

Test

Nella fase di test viene messo insieme il lavoro svolto dai vari programmatori per ottenere un prodotto finito. Tale prodotto deve superare una serie di test automatizzati e manuali, al fine di garantire che il software restituisca un output coerente e che si comporti esattamente come richiesto dal cliente.

Project management

Esempi di modelli di sviluppo software

Esistono vari modelli specifici per lo sviluppo software, ma ciascuno di essi può essere classificato in due principali categorie:

  • Modelli a cascata (waterfall)
  • Modelli iterativi

La differenza tra queste due tipologie di sviluppo software è sostanziale e riguarda principalmente l'approccio con cui si affronta il problema. Se nei modelli a cascata si procede con un approccio per fasi successive, nei modelli iterativi si utilizza un approccio per funzionalità successive.

Waterfall VS Iterative

Nell'immagine, tratta dal blog di Martin Fowler, uno dei massimi esperti di architetture software, si evince chiaramente come l'approccio a cascata prenda in esame l'intero software, facendo passare in sequenza tutto il progetto attraverso ciascuna delle fasi. Prima l'analisi di tutto il sistema, poi la progettazione di tutte le funzionalità, solo a quel punto lo sviluppo e come ultimo step il test. È chiaro che se una volta giunti alla fase di test dovesse emergere qualche grosso problema architetturale, sarebbe praticamente impossibile ri-progettare l'architettura dell'intero sistema, perché ciò si ripercuoterebbe drammaticamente sui tempi di sviluppo, comportando a volte addirittura il fallimento del progetto.

Per i progetti software estremamente ridotti, l'approccio a cascata può anche funzionare bene, ma come facciamo se la piattaforma che vogliamo sviluppare è molto complessa e richiede mesi di lavoro?

La risposta arriva dai modelli di sviluppo iterativi, che prevedono di suddividere il progetto in tante piccole fasi. L'obiettivo è quello di iniziare rilasciando il prima possibile una versione estremamente minimale del software che contiene solo poche funzionalità di base, per poi aggiungere tutte le altre funzionalità un po' per volta.

L'aspetto interessante è che così facendo, ogni funzionalità attraversa tutte le fasi di realizzazione (analisi, progettazione, sviluppo, test) e poi viene rilasciata. In questo modo, qualora in fase di test dovesse emergere un problema legato ad analisi o progettazione errate, alla peggio si perderà qualche giorno per modificare quella singola funzionalità, senza rischiare che l'intero progetto venga compromesso.

L'approccio iterativo consente inoltre di tenere sempre monitorati i tempi di consegna. Per ogni funzionalità o gruppo di funzionalità viene infatti prevista una data di rilascio, il che porta avere tante scadenze ravvicinate che possono essere tenute sotto controllo molto più facilmente rispetto ad una singola data di consegna, spesso distante nel tempo.

Sviluppo software su misura

Se da un lato gli approcci iterativi, come i metodi "Agile", sono nati principalmente per lo sviluppo di soluzioni software su misura, in realtà queste metodologie possono essere applicate anche a numerosi altri tipi di progetto al di fuori dell'ambito informatico, soprattutto quando il contesto in cui si opera è in continua evoluzione e si vogliono allo stesso tempo garantire scadenze certe e risultati di qualità.

Addirittura recentemente i metodi iterativi sono stati usati nell'edilizia, un contesto applicativo che, per sua natura, è indissolubilmente legato a dei processi di realizzazione sequenziali e a cascata.

Naturalmente, dopo questa lunga ode ai processi iterativi, è facile dedurre che noi di Webcircles lavoriamo applicando queste metodologie, in particolare Scrum, grazie alle quali siamo riusciti portare a termine con successo, ma anche con grande fatica, progetti software complessi in contesti estremamente mutevoli e sfidanti.

Scopri come possiamo aiutarti a realizzare il tuo progetto software!