Ingegneria del software

Da Skypedia.

Per ingegneria del software (software engineering in inglese, termine coniato nel corso di una conferenza NATO organizzata a Garmisch - Germania - nell’Ottobre del 1968) si intende la branca dell'ingegneria che si occupa dei processi produttivi e delle metodologie di sviluppo finalizzate alla realizzazione di sistemi software. Rispetto al termine "informatica", che può essere usato per riferirsi alla scienza del calcolo automatico (computer science in inglese), l'ingegneria del software ha come proprio oggetto di studio l'uso e lo sviluppo delle metodologie e tecnologie informatiche di supporto al processo di sviluppo del software. Come disciplina di ricerca, l'ingegneria del software si propone una serie di obiettivi legati all'evoluzione dello sviluppo del software (inteso come attività industriale) sia da un punto di vista tecnologico (per esempio attraverso la definizione di nuovi linguaggi di programmazione) che metodologico (per esempio il perfezionamento dei modelli di ciclo di vita del software).

L’ingegneria del software è allora la disciplina tecnologica e gestionale che riguarda la produzione sistematica e la manutenzione dei prodotti software che vengono sviluppati e modificati entro i tempi e i costi preventivati.


Definizione IEEE

Nel glossario dell’ IEEE (“IEEE Standard Glossary of Software Engineering”), l’ingegneria del software e` definita come: "applicazione di un approccio sistematico, disciplinato e quantificabile allo sviluppo, all’operativita` e alla manutenzione del software".

Il software e` definito come: "i programmi, le procedure e l’eventuale documentazione associata e i dati relativi all’operativita` di un sistema di elaborazione".


Attributi dei prodotti software

  • Manutenibilità

Deve essere possibile modificare il software in modo da soddisfare nuovi requisiti.

  • Affidabilità

Nel caso di guasto, il software non deve produrre danni fisici od economici

  • Efficienza

Il software non deve fare un uso indiscriminato di memoria e tempo di calcolo.

  • Facilità di utilizzo

Il software deve essere corredato di una interfaccia utente e della documentazione appropriate.

Affidabilità, correttezza, robustezza

Il software sarà affidabile, se i risultati calcolati, le elaborazioni effettuate, le azioni eventualmente eseguite produrranno gli effetti voluti o comunque con scostamenti tollerabili. Il software sarà corretto, se data una definizione dei requisiti, il software li soddisferà. Il software sarà robusto, se si comporterà in maniera accettabile anche in corrispondenza di situazioni non specificate nei requisiti.


Il processo di sviluppo del software

Il processo di sviluppo è l'insieme di attività per sviluppare un sistema software. Esso è costituito dagli elementi esposti di seguito. Tali attività sono svolte da ingegneri del software, in alcuni casi con l'ausilio di strumenti CASE (Computer-Aided Software Engineering).

Specifica

Si definiscono le funzionalità richieste ed i vincoli.

Progetto

Viene prodotto il software che soddisfi le specifiche. Vi sono vari modelli di sviluppo del software [1] e verranno analizzati di seguito.

Sviluppo a cascata

Le fasi (specifica, progetto, realizzazione, testing, etc.) sono in cascata tra loro con retroazione. Il modello di sviluppo a cascata del software rende il processo produttivo simile ad una manifattura. Il modello tradizionale a cascata identifica le fasi e le attività, forza la progressione lineare da una fase alla successiva, standardizza le uscite da ogni fase tramite dei semilavorati e fissa delle date, non ritorna, quindi può costituire un serio pericolo per la progettazione del software e il suo sviluppo. In compenso si ha una migliore pianificazione e controllo complessivi. Lo sviluppo a cascata si compone dei seguenti passi:

Sviluppo evolutivo

Le fasi di specifica, sviluppo e validazione sono intersecate tra loro. Partendo da una specifica astratta si sviluppa un primo prototipo che può poi essere raffinato.

Trasformazioni formali

Si trasforma una specifica formale, con metodi matematici, in un programma.

Sviluppo per assemblaggio di componenti riutilizzabili

Integrazioni di componenti software già esistenti.

Validazione

Per assicurare che il software soddisfi le richieste del cliente

Modifica (evoluzione)

Il software evolve per soddisfare nuove necessità del cliente (il costo di tale fase è oltre il 60% del totale).


Modellazione del software

Creiamo dei modelli affinché il software e le sue funzione astraggano la realtà eludendo aspetti non importanti ai fini dello sviluppo e per rendere maggiormente comprensibile al team di sviluppo ciò che si sta facendo e come. Ogni componente di un team di sviluppo potrebbe, in un'applicazione modulare, dover mettere le mani su un altro modulo del software che si sta costruendo e ciò anche alla fine del processo di sviluppo (durante la manutenzione del software) per interfacciare un altro modulo. Ciò è potenzialmente molto lungo e dispendioso in quanto le righe di codice potrebbero essere dell'ordine di 10^3 o anche più. La cosa migliore per comprendere il quadro d'insieme e come intervenire sul software è quello di creare dei modelli che possano definire visivamente e logicamente gli aspetti dell'applicazione.

Bisogna sempre considerare che il software non è facilmente comprensibile dagli sviluppatori che non lo hanno scritto.

Il linguaggio di modellazione più usato è sicuramente l'UML.


Sistema, modello, vista, notazione

  • Un modello è un'astrazione che descrive una parte di un sistema (sottosistema).
  • Una vista descrive oggetti selezionati di un modello.
  • Una notazione è un set di regole grafiche o testuali per la descrizione delle viste.

Esempio:

Sistema: Aircraft
Modelli: Flight simulator, modello in scala
Viste: tutti i quadri degli schemi di progettazione, lo schema elettrico, il sistema di propulsione

Dato un sistema un modello ne astrae una parte. Ogni modello può prendere in considerazione parti di altri modelli dello stesso sistema. Le viste danno una documentazione di ciò che costituisce il modello nelle sue varie parti.

Concetti e fenomeni

Un fenomeno è un oggetto nel mondo reale, ma allo stesso modo lo è anche la sua percezione. Quello che si percepisce è concreto, l'astrazione risiede nel concetto che descrive questa percezione.

Un concetto è descritto da un nome, uno scopo e dei membri (classi o categorie).

L'astrazione allora è la classificazione dei fenomeni in concetti.

Risorse