Ciclo di vita del software

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

L'espressione ciclo di vita del software si riferisce al modo in cui una metodologia di sviluppo o un modello di processo scompongono l'attività di realizzazione di prodotti software in sottoattività fra loro coordinate, il cui risultato finale è il prodotto stesso e tutta la documentazione a esso associata.

La comparsa in letteratura e nella pratica dello sviluppo del software dei concetti di ciclo di vita e di processo software si può far coincidere con la nascita dell'ingegneria del software, in quanto rappresenta un passaggio storico dallo sviluppo del software inteso come attività "artigianale" (ovvero affidata alla libera creatività dei singoli individui) a un approccio più industriale, in cui la creazione di programmi e sistemi software viene considerata come un processo complesso che richiede pianificazione, controllo, e documentazione appropriati (così come avviene tradizionalmente nei settori più maturi dell'ingegneria). Questa transizione si può ricondurre, in ultima analisi, all'aumentata complessità dei sistemi, all'avvento di un vero e proprio mercato del software, nonché a nuovi e più stringenti requisiti di qualità, legati per esempio all'uso di sistemi informatici in contesti critici (centrali energetiche, sistemi aerospaziali, armamenti e così via). Questo mutamento di prospettiva iniziò a verificarsi, storicamente, fra la fine degli anni sessanta e l'inizio della decade successiva. Da allora, la ricerca su questi temi è stata estremamente prolifica sia in ambito industriale che accademico.

Indice

Le attività fondamentali

La maggior parte dei modelli di ciclo di vita del software prevedono una scomposizione del processo di sviluppo in insiemi di attività simili (quando non addirittura identici). La maggior parte delle distinzioni fra diversi cicli di vita verte infatti su altri aspetti, quali:

  • l'enfasi relativa che si attribuisce a ciascuna attività;
  • l'individuazione degli attori specifici incaricati di ciascuna attività;
  • l'ordine in cui le attività si svolgono.

Le principali attività (e sottoattività) costituenti il processo di sviluppo sono le seguenti:

  • la fase di analisi, ovvero l'indagine preliminare sul contesto in cui il prodotto software deve inserirsi, sulle caratteristiche che deve esibire, ed eventualmente su costi e aspetti logistici della sua realizzazione; questa fase può essere scomposta in sottoattività quali analisi di fattibilità, analisi e modellazione del dominio applicativo, analisi dei requisiti e così via. In senso ampio si può dire che l'analisi ha lo scopo di definire (il più precisamente possibile) il problema da risolvere. Questa fase è costituita anche da raccolta dei dati tramite colloqui tra cliente/committente e relativi sviluppatori. Al termine della fase verrà creato un documento che descrive le caratteristiche del sistema, tale documento viene definito "documento di Specifica";
  • la fase di progetto, in cui si definiscono le linee essenziali della struttura del sistema da realizzare, in funzione dei requisiti evidenziati dall'analisi e dal documento finale da essa creato. Anche questa fase può essere scomposta in sottoattività, dal progetto architetturale al progetto dettagliato. Si può dire che il progetto ha lo scopo di definire (a un certo livello di dettaglio) la soluzione del problema. In questa fase sarà sviluppato un documento che permetterà di avere una definizione della struttura di massima (architettura di alto livello) e una definizione delle caratteristiche dei singoli componenti (moduli);
  • la fase di implementazione o codifica del sistema, ovvero la sua realizzazione concreta; questa tipicamente consiste nella realizzazione di uno o più programmi in un determinato linguaggio di programmazione, benché possano essere coinvolte anche tecnologie diverse (database, linguaggi di scripting e via dicendo). Nella maggior parte dei casi è possibile distinguere almeno una sottoattività di implementazione dei singoli moduli che costituiscono il sistema e la sottoattività dell'integrazione di tali moduli a formare il sistema complessivo. Complessivamente, l'implementazione ha lo scopo di realizzare la soluzione.
  • la fase di collaudo, volta a misurare in che modo il sistema realizzato soddisfa i requisiti stabiliti nella fase di analisi, ovvero a valutarne la correttezza rispetto alle specifiche. Anche il collaudo è normalmente scomponibile almeno nelle due attività del collaudo dei singoli moduli e quello del sistema integrato. Le tipologie specifiche di test (prove) si possono inoltre distinguere in funzione dei particolari aspetti dei moduli o del sistema che vengono valutati; si parla per esempio di test funzionali, test di performance, test di accettazione, test d'installazione;
  • la fase di manutenzione, che comprende tutte le attività di modifica del software successive al suo rilascio presso il cliente o la sua immissione sul mercato. Queste attività possono essere volte a correggere errori del software, adattarlo a nuovi ambienti operativi, o estenderne le funzionalità. La manutenzione incide sui costi, si stima che il 60% dei costi dipenda dalla manutenzione. Ogni modifica al software comporta necessariamente la necessità di nuovi test, sia relativi alle nuove funzionalità eventualmente introdotte, sia mirati a verificare che le modifiche apportate non abbiano compromesso funzionalità preesistenti (test di regressione). Una linea standard di verifica prevede dei test sui moduli più precisamente si occupa di controllare che i moduli presi singolarmente funzionino e che una volta assemblati assieme i moduli continuino a funzionare.
  • In tutti i cicli di vita del software svolge inoltre un ruolo essenziale la documentazione dei prodotti delle varie sottoattività; la stesura della documentazione viene quindi regolamentata nello stesso modo delle attività menzionate.

Processi di sviluppo software

La maggior parte delle metodologie di sviluppo del software consiste, almeno in linea di principio, in un linguaggio di modellazione e un processo.

  1. Il linguaggio di modellazione è la notazione usata dalle metodologie per esprimere le caratteristiche di progetto;
  2. il processo è l’elenco delle indicazioni riguardanti i passi da intraprendere per produrre il progetto stesso.

L’UML (Unified Modelling Language), ad esempio, è un linguaggio di modellazione, utilizzato dai processi per realizzare, organizzare, documentare i prodotti realizzati dalle fasi di cui il processo si compone. Coloro che, individualmente o in gruppo, lavorano allo sviluppo o alla modifica di un software, adottano necessariamente un certo approccio nel modo di relazionarsi con i propri clienti/utenti, nell'organizzare il proprio lavoro, nella scelta delle tecniche da utilizzare. Adottano un processo.

In modo consapevole o meno, ogni sviluppatore (o gruppo di sviluppatori) software ha un proprio processo di sviluppo - un proprio modo di lavorare, basato sulla propria esperienza, sulla propria cultura, e sul contesto culturale ed organizzativo in cui si trova ad operare.

La storia dei successi (e soprattutto degli insuccessi) dei progetti di sviluppo software ha insegnato che ogni processo di sviluppo ha i propri pregi ed i propri limiti. E che un processo di sviluppo inadeguato alle concrete esigenze dello specifico progetto può condurre al fallimento del progetto stesso, o comunque all'insoddisfazione dei clienti/utenti e degli stessi sviluppatori.

Il ciclo di sviluppo del software, nella maggior parte dei casi, è iterativo, e ogni iterazione produce una sua release. Elenchiamo di seguito le fasi principali che possono far parte di ogni singola iterazione:

  1. Specifica dei requisiti: ciò che viene richiesto dal committente
  2. Studio di fattibilità (make or buy)
  3. Analisi e Design dove per analisi si intende lo studio di cosa deve fare il sistema (punto di vista "logico") e per design lo studio di come il sistema deve venire implementato (punto di vista "tecnico"). Negli ultimi anni, la distinzione tradizionale tra analisi e design è entrata in crisi.
  4. Implementazione
  5. Integrazione e test

Alcuni esempi di modelli

Modello a cascata

Per approfondire, vedi la voce Modello a cascata.

Storicamente, il modello a cascata fu il primo modello di ciclo di vita del software. Prevede l'esecuzione sequenziale delle fasi di analisi, progetto, sviluppo, collaudo e manutenzione.

Modelli iterativi

Nella categoria dei modelli iterativi rientrano tutti i processi di sviluppo che permettono di ritornare ad una fase del procedimento già affrontata in precedenza. Per ogni fase "iterabile" si tende a partire con un abbozzo della soluzione che verrà successivamente raffinata al prossimo passaggio.

Modelli incrementali

Per approfondire, vedi la voce Modello incrementale.

Modelli evolutivi

Per approfondire, vedi la voce Modello evolutivo.

Secondo la visione più comune nella moderna ingegneria del software, il modello a cascata non è più adatto ad essere applicato, almeno per la maggior parte delle applicazioni. Fra gli elementi che hanno contribuito al tramonto di questo modello ci sono l'aumento di complessità delle applicazioni, l'introduzione delle GUI (che hanno portato all'attenzione dei progettisti questioni di usabilità precedentemente di scarso rilievo), e l'avvento di nuovi paradigmi di programmazione e metodologie di analisi e progetto, in particolare quelle legate al paradigma object-oriented.

In particolare, si sono affermati una vasta classe di cosiddetti modelli evolutivi, tutti basati sull'idea centrale di coinvolgere maggiormente il committente (o l'utente), sottoponendogli periodicamente versioni parziali o prototipi del prodotto finale. Una tecnica tradizionale in questo senso è, per esempio, quella della prototipazione rapida. In questa linea di pensiero una delle ultime generazioni è quella delle cosiddette metodologie agili.

Il ruolo dei tool

Se originariamente i modelli di ciclo di vita del software erano strumenti di natura esclusivamente concettuale, i moderni ambienti di sviluppo CASE (Computer aided software engineering) spesso automatizzano l'applicazione di un particolare ciclo di vita così come di altri aspetti di un processo software.

Voci correlate

Fasi del ciclo di vita

Modelli e metamodelli di ciclo di vita

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net