Progettazione software: le fasi e i modelli

progettazione-software-cover
Condividi questo post
Indice dei contenuti

Cosa si intende per progettazione di un software?

Cosa vuol dire progettare un software? Sembra un’impresa titanica, qualcosa di molto complicato, perché un software è un’entità talvolta molto complessa e va d sé che anche progettarne sia un’attività estremamente articolata.

Ma niente panico, siamo qui per chiarirti le idee su come avviene il progetto di un software.

La digitalizzato oggi sta penetrando in tutti i settori e spesso le aziende si rendono conto di aver bisogno di software personalizzati, che possano soddisfare esigenze specifiche e che abbiano particolari caratteristiche.

La richiesta di piattaforme custom è sempre maggiore, tutti si immergono nell’avventura di progettazione di un software. Tuttavia, capita spesso di trovarsi impreparati ad affrontare in modo adeguato tutto le fasi, o perché si tende a saltare qualche passaggio fondamentale di analisi passando direttamente alla pratica, o ancora perché si insiste troppo poco sul collaudo del software. Ciò che è certo è che, se si vogliono raggiungere dei risultati concreti, è necessario affidarsi ad una software house specializzata in questo settore: solo un team di professionisti è in grado di seguire in modo preciso e scrupoloso tutte le fasi di progetto.

Dunque, quali sono le fasi di progettazione di un software? Sono 6 e tutte sono propedeutiche tra di loro, eccole di seguito.

  1. Analisi de requisiti
  2. Progettazione
  3. Programmazione
  4. Collaudo e testing
  5. Deploying
  6. Manutenzione

 

Le fasi del ciclo di vita di un software

Fase preliminare

Prima di entrare nel vivo delle fasi di sviluppo di un software vero e proprio, è necessario porre l’accento su una fase preliminare che ha l’obiettivo di contestualizzare il prodotto che si svilupperà in termini di vantaggi utilizzo, di descrizione del problema che questo software andrà a risolvere, nonché degli obiettivi che giustificano la sua esistenza.

A tal fine, è necessario fare un resoconto delle specifiche iniziali del software, ossia:

  • requisiti funzionali, features che il programma deve avere obbligatoriamente;
  • requisiti non funzionali, caratteristiche opzionali.

Uno strumento molto utile per schematizzare queste fase è la tabella MoSCow, che assegna a tutte le caratteristiche pensate per il software le etichette Must Have o Should Have per esprimere l’obbligatorietà di una funzionalità prevista.

Ciò che ti illustrerò è il più tradizionale e utilizzato modello di sviluppo e prende il nome di modello a cascata. Prevede che le fasi si susseguano in una sequenza lineare.

modello-a-cascata

 

1. Analisi dei requisiti

Nello specifico, questa fase riguarda:

  • Il dominio applicativo, cioè il contesto in cui il software è destinato ad operare.
  • Le informazioni sull’applicazione, come lo scopo, definizioni, panoramica del sistema, riferimenti.
  • Le funzioni che svolgerà, caratteristiche degli utenti, vincoli o eventuali dipendenza.
  • I requisiti relativi alle prestazioni.
  • Le specificità dell’interfaccia utente.
  • I requisiti del database.

Questa è la fase più importante dell’ingegneria del software, poiché sbagliare in questo frangente può comportare sgradevoli perdite di tempo, col rischio di tornare ad aprire temi già affrontati e chiusi in precedenza.

Errori del genere comportano anche perdite economiche non indifferenti, dal momento che una descrizione approssimativa potrebbe portare al malfunzionamento finale del software.

Per tutti questi motivi è fondamentale affrontare questa fase di raccolta, descrizione e specifica dei requisiti che l’applicazione deve avere con attenzione maniacale, per non incorrere in gravi errori nelle fasi successive.

2. Progettazione

Questa è la fase in cui vengono definite le strutture di dati, le funzioni e i comportamenti in base ai vincoli imposti dai requisiti protagonisti della fase precedente. In pratica, si definisce l’architettura e la struttura dei singoli componenti del sistema.

Più in dettaglio, si tratta di definire le istruzioni operative per la fase di implementazione. Queste istruzioni devono essere adeguatamente dettagliate, raccolte in un documento ben strutturato e comprensibile. Questa, dunque, è anche la fase dedicata all’individuazione la migliore soluzione implementativa rispetto ai requisiti funzionali definiti, a quelli non funzionali e ai vincoli.

Le micro-attività di questa fase possono essere svolte con tempi e risultati diversi, ma come risultato della progettazione si ottiene l’architettura del sistema, ossia la sua organizzazione strutturale, contenente i componenti software, l’interfaccia dei componenti (ossia le proprietà visibili all’utente), la relazioni tra le varie parti.

La fase di progettazione prende in considerazione anche i fattori legati all’utilizzo di una tecnologia concreta, ecco perché la fase di progettazione non può prescindere dalle tecnologie utilizzate, a differenza della fase di analisi dei requisiti. Per questo motivo, durante la progettazione si definiscono anche tutti gli aspetti dell’implementazione.

Esistono degli strumenti molto validi che possono darci un grande aiuto in questo processo, come ad esempio il linguaggio di progettazione OCL (Object Constraint Language), ma è possibile anche ricorrere alla rete di Petri o al diagramma delle classi, i diagrammi di flusso (Gannt) o la sua evoluzione, l’UML activity diagram.

3. Programmazione

Finalmente si può passare alla stesura del codice, attività che è bene accompagnare con una dettagliata documentazione, per far sì che anche altri professionisti possano eventualmente mettere mano all’elaborato.

Poiché spesso questa fase della progettazione di software deve rispettare tempistiche ristrette, è necessario ricorrere a programmi dotati di tutti gli strumenti di facilitazione in un’unica soluzione per la scrittura del codice sorgente, un Integrated Development Enviroment (IDE), ossia un software che supporta i programmatori nello sviluppo del codice, dotato di un editor, un compilatore, uno strumento di building automatico e un debugger.

Sebbene la fase di analisi e di progettazione siano fondamentali, la scrittura del codice di programmazione costituisce senza dubbio la fase fondamentale: anche se analisi e progettazione sono state svolte al meglio, se il codice contiene errori, tutto il progetto può essere compromesso.

Durante la stesura del codice dovrebbe avere luogo anche il primo debugging, cioè l’eliminazione degli errori di sintassi più evidenti e grossolani, che possono danneggiare il funzionamento globale del programma. Di fatto, gli IDE più avanzati hanno efficienti sistemi di live debug che evidenziano in real time le porzioni di codice inutili, ripetuti, variabili non necessari ecc.

4. Testing

Terminata la fase di programmazione e del primo debugging, è fondamentale verificare che il funzionamento del software sia conforme alle specifiche definite nella fase di analisi dei requisiti. Questo tipo di errori sono più difficili da individuare rispetto a quelli evidenti della fase di live debugging: di solito, non si tratta tanto di errori di sintassi ma di errori concettuali o logici.

Quindi, durante la fase di test ci si accerta che l’applicazione si comporti effettivamente come era stato previsto e si segnalano le discrepanze di comportamento ai programmatori, i quali devono investigare per poi procedere alla rimozione degli elementi che causano queste discrepanze.

 

5. Deployment

Fatti tutti i test necessari, raggiunto un efficace livello di qualità, il software è pronto per andare in produzione.

“Andare in produzione” assume accezioni diverse in base al tipo di software realizzato. Se si tratta di programmi destinati alla vendita o alla distribuzione (software gratuiti), la produzione equivale al momento in cui il prodotto viene rilasciano sul mercato. Se, invece, si tratta di un programma realizzato e personalizzato per un cliente, questa fase equivale all’installazione e al collaudo presso la sede del cliente. Infine, nel caso delle web application, la produzione rappresenta l’installazione e il collaudo sul web server e il tuning di quest’ultimo.

In questo momento inizia la vita operativa del software creato, periodo in cui svolge il compito per cui è stato progettato e sviluppato.

6. Manutenzione

Per garantire il buon funzionamento nel software nel corso del tempo, è necessario aggiornarlo periodicamente, fornendo un pronto e costante supporto a coloro che utilizzano il programma quotidianamente.

Inoltre, durante la vita di un software in produzione, possono rendersi necessari degli interventi correttivi o di aggiornamento sull’applicazione, che possono anche prevedere nuove fasi di progettazione, sviluppo e test. Queste tipologie di interventi possono essere raggruppate in due famiglie:

  • Manutenzione ordinaria: si tratta di interventi correttivi giustificati da eventuali errori passati inosservati durante i test o causati dall’uso del programma in condizioni non previste durante la fase di progettazione.
  • Manutenzione evolutiva: in questo caso gli interventi hanno lo scopo di modificare o arricchire il software con nuove funzionalità, in questo caso giustificate da nuove necessità operative.

Generalmente, ogni programma è soggetto, durante la sua vita operativa, ad interventi correttivi ed evolutivi.

Le fasi appena descritte, come anticipato all’inizio, possono essere ascrivibili al modello di sviluppo a cascata. Si tratta di un modello sì molto comune e facilmente adattabile a diverse tipologie di progetto, ma talvolta può risultare poco flessibile: di fatto, tutte le fasi devono essere affrontate in modo lineare e diventa molto complicato andare a ritroso fra una fase e l’altra, ogni variazione all’interno di una delle fasi può provocare ritardi e slittamenti sulla tabella di marcia e portare inevitabilmente a ritardare la data di consegna, giorno intorno al quale ruotano tutte le fasi.

Altri modelli di sviluppo software

Una piccola panoramica di quali sono i modelli di sviluppo usati può essere utile a capire come anche la scelta del modello di sviluppo può influenzare le varie fasi.

Inoltre, ogni team di sviluppo può avere il proprio metodo e, soprattutto, ogni singolo progetto può richiedere delle modifiche o degli adattamenti al metodo abituale.

Ogni metodo di sviluppo ha i suoi pro e contro e non esiste un modello di riferimento, ecco quali sono oggi i modelli di sviluppo più utilizzati.

Modello evolutivo

Novità di questo metodo è il concetto di prototipazione, grazie al quale è possibile accelerare i tempi di verifica del software poiché viene prodotta una versione semplificata di esso.

Si basa su cicli composti da 4 fasi:

  1. Costruzione del prototipo
  2. Consegna del prototipo al cliente
  3. Feedback del cliente e conseguenti considerazioni
  4. Eventuali modifiche al prototipo in base alle osservazioni ricevute.

Il prototipo può anche essere un semplice mockup, ossia una basilare interfaccia, una sorta di schizzo, che nonprevede un effettivo funzionamento del programma ma che ha comunque il vantaggio di ridurre i tempi di valutazione dei requisiti funzionali ed può essere utile per fare ulteriori considerazioni sugli aspetti di progettazione prima passare all’implementazione del codice. Non porta ad alcun miglioramento, invece, dal punto di vista della programmazione vera e propria.

 

mockup-modello-evolutivo

 

Modello a spirale

Questo modello prevede non più uno sviluppo in fasi lineari, ma un ciclo continuo e ripetuto delle fasi di creazioni del software, fino alla conclusione.

Può definirsi anche un “meta modello” perché si può anche applicare agli altri modelli e può essere considerato una sorta di framework, uno schema di step da seguire.

Tipica di questo modello è la valutazione dei rischi che va inserita in ogni ciclo di sviluppo.

 

Metodologia Agile

SI tratta del modello ormai più diffuso non solo in ambito di progettazione software ma anche nel project management.

Obiettivo principale di questa metodologia è la soddisfazione del cliente, che vede il suo software crescere piano piano grazie ai rilasci rapidi di modifiche al software.

Bisogna precisare, però, che la metodologia agile non è un vero e proprio modello di sviluppo, ma un insieme di operazioni che consentono di sviluppare un prodotto efficiente in tempi rapidi, con gruppi di lavoro autonomi e facili interazioni col cliente.

 

Hai in mente un progetto interessate? Oppure hai bisogno di un software personalizzato per la tua azienda? Scopri i nostri servizi e non esitare a contattarci per qualsiasi dubbio o chiarimento.

metodologia-agile

 

Altri post da non perdere!
refactoring-cover
Software su misura
Refactoring: cos’è e perché è importante

Cosa si intende per refactoring? Il refactoring è una pratica comune nel campo dello sviluppo software che consiste nel ristrutturare il codice sorgente di un

Vuoi migliorare il tuo business oggi?
Lasciaci un messaggio, rimaniamo in contatto!
cerchio-popup-contatti
Per qualsiasi tipo di dubbio o richiesta siamo sempre a disposizione

Sentiamoci!