Ingegneria del software
Per ingegneria del software si intende la branca dell'informatica che si occupa di definire metodi, formalismi grafici e strumenti utili a governare il ciclo di vita di un prodotto software, ovvero l'insieme delle attività da svolgere per la sua realizzazione, dall'analisi dei requisiti utente alla manutenzione dopo il rilascio.
Storia
La necessità di creare una disciplina che si occupi della realizzazione dei software nasce, intorno alla fine degli anni '60, dall'esigenza di sviluppare prodotti sempre più complessi ed evoluti che rispondano a richieste di grandi utenze.
Più precisamente dal 1950 al 1965 lo sviluppo del personal software era alquanto limitato: molti programmi venivano sviluppati per batch, gli informatici erano pochi ed apprendevano sul campo. Ciò che veniva sviluppato era pensato per un unico cliente, inoltre ad ogni progetto lavorava ed avrebbe lavorato una sola persona, senza scrivere alcuna documentazione.
Fino alla nascita dell'ingegneria del software, la realizzazione di prodotti per computer era una mera attività di programmazione eseguita attraverso l'applicazione di discipline come:
Dal 1965 al 1975 si assiste allo sviluppo di software pensato per più utenti e per i sistemi in real-time. In questo periodo iniziano conseguenzialmente gli sviluppi di pacchetti software, tuttavia si presentano anche numerosi problemi come la gestione e il mantenimento di un software.
La programmazione consisteva soprattutto nel mettere insieme una sequenza di istruzioni di codice per realizzare compiti ben specifici.
A partire dal 1972 e fino al 1988 vengono introdotte nuove tecnologie, nascono i sistemi distribuiti e si afferma la figura del sistemista informatico esperto. Il costo dell'harware si abbassa considerevolmente e di conseguenza la tecnologia informatica comincia a diffondersi rapidamente. Il livello qualitativo del software si eleva, tuttavia il suo sviluppo è ancora limitato a progetti scientifici e militari, e solo successivamente, dopo aver affrontato una lunga fase di collaudo, il software viene introdotto nelle industrie. Organizzazioni come il Pentagono spingono fortemente lo studio di modelli che permettano di minimizzare fortemente la presenza di errori all'interno dei software.
Con l'introduzione delle tecnologie informatiche anche nel settore industriale e commerciale, a partire dal 1988, bacini di utenze non più tecniche si trovano a sentire l'esigenza di informatizzare le proprie strutture.
In questo periodo nasce la programmazione orientata agli oggetti, si tende a controllare lo sviluppo del software cercando di sviluppare dei prodotti con una certa qualità anche a causa della concorrenza affermatasi tra le software house. Si cerca di curare al massimo l'interfaccia grafica presentata all'utente, in quanto anche il tipo di utenza è cambiato.
Da queste esigenze nasce l'incontro tra i requisiti dell'azienda cliente e le funzionalità che il programmatore deve realizzare.
Si sviluppa un concetto simile alle ottimizzazioni da catena di montaggio per le industrie del secolo scorso che avevano similmente stravolto il modo di produrre apparecchiature meccaniche. Si cerca di identificare quei punti focali che devono governare la realizzazione di un buon prodotto software e soprattutto si cerca di definire formalmente cosa possa descrivere un buon prodotto software.
Differenti utenze generano nuove esigenze nella realizzazione di un software. Le aziende pongono ad esempio l'accento sulla necessità di definire processi di sviluppo del software che permettano di rispettare le scadenze fissate per ridurre i costi di realizzazione die prodotti stessi.
L'ingegneria del software racchiude questi e molti altri elementi creando una scienza che si preoccupa effettivamente di concretizzare come permettere non più ad una singola persona ma ad un team di tanti sviluppatori, di realizzare un buon software.
Vengono identificati differenti cicli di vita del software ovvero diversi processi che possono essere attualizzati da team per giungere ad un risultato comune. Ognuno di questi differenti processi identifica una serie di passi chiave da seguire per realizzare un prodotto sofware secondo uno stile di realizzazione differente per raggiungere differenti obiettivi.
Ciclo di vita di un Software
Esistono numerose metodologie per guidare l’attività dei gruppi di lavoro per lo sviluppo di un prodotto software. Queste sequenziano e dettagliano le attività da eseguire in modo da portare a termine con successo il Ciclo di vita del software di un prodotto software. E' possibile automatizzare l’applicazione di queste metodologie utilizzando una famiglia di strumenti nota come CASE Tool (Computer Aided Software Engineering).
Queste metodologie suddividono il Ciclo di vita di un software in 7 macro attività ben distinte e successive, identificate anche come fasi della realizzazione di un software:
- Definizione del problema: in tale fase un cliente espone il proprio problema, da risolvere in questo caso sviluppando un software. Bisogna capire cosa vuole esattamente il cliente, cercando di esprimersi come lui. E' una fase piuttosto delicata in cui si richiede la comprensione del problema.
Bisogna quindi documentarsi sulle problematiche da voler risolvere. Non si procede alla fase successiva se il problema non risulta chiaro, in questo caso tutto quello che richiede il cliente dev'essere conosciuto, dunque non devono esserci ambiguità.
Svolgendo questa fase si svilupperà una documentazione che riporterà gli obiettivi da raggiungere e le costrinzioni che vincolano il progetto;
- Analisi dei requisiti: E' una fase in qui si elencano i servizi, cioè l'elenco dei compiti che deve svolgere il software, bisogna conoscere con quali strumenti lo si realizzerà, rispettando il budget, le scadenze e le diverse versioni da sviluppare, inoltre si elenca il personale da impiegare prendendo atto di come si procederà nelle successive fasi dello sviluppo del software.
In tale fase viene sviluppata una documentazione riferita ai requisiti del software (Software Require Specify) da cui deriverà il contratto da firmare con il cliente. Bisogna a tal proposito stilare una documentazione chiara in quanto se ci fossero ambiguità il cliente potrebbe chiedere più dello stabilito;
Queste due fasi potrebbero comporre un'unica fase, questo dipende dal progetto;
- Specifiche del progetto: tale fase si occupa di alcuni dettagli tecnici specificando il funzionamento del software. E' una fase di preparazione verso la fase successiva e genera una documentazione di specifiche;
- Progettazione: In questa fase si definiscono le strutture dati, gli algoritmi, i moduli che compongono il software, sviluppando il progetto con l'uso di strumenti come lo pseudocodice;
E' possibile che la fase delle specifiche venga inglobata nell'analisi dei requisiti o nella progettazione, tutto ciò dipende dal progetto
- Programmazione o codifica (programming): Questa è la fase in cui i requisiti vengono implementati. La codifica viene ovviamente documentata;
- Testing: In tale fase si svolgono delle determinate verifiche sul software, cercando di testare se tutto quello che si è prodotto funzioni a dovere.
Si svolge dunque un piano di collaudo che si concluderà ritornando alla fase di codifica se si dovessero riscontrare problemi. Con lo scopo di rendere questa fase più semplice la si scompone in diversi gruppi di test:
- Test unitari;
- Test d'integrazione;
- Test funzionali;
- Test di performance;
- Test di accettazione;
- Test d'istallazione;
- Mantenimento: In questa fase si cerca di mantenere il software "vivo", difatti si procede alla correzione di bug, si potrebbe procedere all'integrazione di nuove funzionalità al software o anche voler ottimizzare le performance del software.
La correzione di un bug comporterà il ripercorrere alcuni dei test effettuati nella fase precedente che in questo caso assumono il nome di test di regressione;
In funzione della complessità del problema e del prodotto finale, queste fasi possono essere ulteriormente suddivise.