Ingegneria del software

disciplina accademica

L'ingegneria del software(software engineeringininglese) è quelladisciplinainformaticache si occupa dei processi produttivi e dellemetodologiedi sviluppo finalizzate alla realizzazione disistemi software[1].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 es. attraverso la definizione di nuovilinguaggi di programmazione) chemetodologico(per esempio il perfezionamento dei modelli diciclo di vita del software).

Un modello di sviluppo software
Esempio dialgoritmoindiagramma a blocchi

La necessità di creare una disciplina teorico-pratica che si occupasse in toto della realizzazione dei software nasce, intorno alla fine deglianni sessanta,dall'esigenza di sviluppare prodotti sempre più complessi ed evoluti che rispondessero alle richieste delle grandi utenze, conferendo rigore e disciplina allostato dell'artedello sviluppo software nelle grandi aziende.

Più precisamente dal1950al1965lo sviluppo del software era alquanto limitato: molti programmi venivano sviluppati perbatch,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, solitamente senza scrivere alcunadocumentazione del software.Fino alla nascita dell'ingegneria del software, la realizzazione di prodotti percomputerera una mera attività diprogrammazioneeseguita attraverso l'applicazione di discipline come:

Laprogrammazioneconsisteva soprattutto nel mettere insieme una sequenza diistruzionidicodice sorgenteper realizzare compiti ben specifici.

Dal1965al1975si assiste allosviluppo di softwarepensato per più utenti e per i sistemi inreal-time.In questo periodo iniziano di conseguenza gli sviluppi dipacchettisoftware ed emergono numerosi problemi, come la gestione e la manutenzione del software.

Nel 1968 la conferenzaNATOtenuta aGarmisch,inGermania,rende chiaro il problemarappresentato dall'incapacità di produrre nei tempi previsti software affidabile e rispondente ai requisiti. A partire dal1972e fino al1988vengono introdotte nuove tecnologie, nascono isistemi distribuitie si afferma la figura del progettista del sistema informatico (quello che in seguito verrà chiamatoarchitetto del software). Il costo dell'hardwaresi 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 dicollaudo,il software viene introdotto nelle industrie. Organizzazioni comeil Pentagonospingono fortemente lo studio di modelli che permettano di minimizzare la quantità di errori all'interno dei software.

Con l'introduzione delle tecnologie informatiche anche nel settore industriale e commerciale, a partire dal1988,bacini di utenze non più tecniche sentono l'esigenza di informatizzare le proprie strutture. In questo periodo nasce laprogrammazione orientata agli oggetti,si tende a controllare lo sviluppo del software, cercando di sviluppare prodotti di qualità, anche a causa della concorrenza affermatasi tra lesoftware house.Si cerca di curare al massimo l'interfaccia graficapresentata all'utente, in quanto anche il tipo di utenza è cambiato. Da queste esigenze nasce l'incontro tra irequisitidell'azienda cliente e le funzionalità che il programmatore deve realizzare.

Si sviluppa un concetto analogo alle ottimizzazioni da catena di montaggio nelle industrie delXX secolo,che avevano similmente stravolto il modo di produrre apparecchiature meccaniche. Si cerca cioè di identificare i punti focali che devono governare la realizzazione di un buon prodotto software ma soprattutto si cerca di definire formalmente cosa possa descrivere unbuonprodotto software.

Descrizione

modifica

Concetti base

modifica
Lo stesso argomento in dettaglio:Sviluppo software.
Una parte dello sviluppo software

L'ingegneria del softwareidentifica una formalizzazione del processo dianalisi,progettazione,realizzazione emanutenzionedi un sistema informatico. Per tale associazione con una idea quasibiologicadi vita si parla spesso diciclo di vitadi un software, concetto che ha assunto con il passare dei decenni un'importanza sempre maggiore, abbandonando progressivamente l'idea di software comemanufattoe passando ad un'idea del software come prodotto industriale. La necessità di creare unascienzache si occupi della realizzazione dei sistemi informativi nasce dalla necessità di sviluppare prodotti sempre più complessi ed evoluti che rispondano a esigenze di correttezza del prodotto finale e ad una facile manutenzione di esso.

Il software come prodotto industriale diventa anche oggetto di un attento esame per estendere le capacità di realizzazione dello stesso. Nasce in pratica un concetto simile alle ottimizzazioni dacatena di montaggioper le industrie delsecolo scorso.Si cercano quindi di identificare nella realizzazione del software, quegli obiettivi a cui tengono le industrie del software, come qualità del software realizzato e soprattutto di rilasciare un prodotto ben documentato e facilmente "manutenibile".

La nuova scienza, l'ingegneria del software, si preoccupa effettivamente di concretizzare queste esigenze, tramite la definizione dimodelliche permettono a team di tecnici di realizzare in cooperazione prodotti sempre più evoluti e di qualità. L'ingegneria del software definisce quindi un insieme di processi, ovvero sequenze di fasi che individuano tappe specifiche nella realizzazione di un sistema software, tutte documentate e ispezionabili, che offrano in sostanza adeguata visibilità alle diverse tipologie degli utenti del sistema, per il controllo dei singoli prodotti e/o per l'eventuale manutenzione.

Le fasi dell‘Ingegneria del Software o dell’ingegneria dei sistemi

modifica

È possibile raggruppare in modo succinto ogni dominio dell’ingegneria del software in sole 5 fasi:

  • Analisi di business e analisi dei requisiti;
  • Progettazione e architettura del software;
  • Sviluppo software, programmazione o codificazione;
  • Consegna ed assicurazione della qualità del software;
  • Manutenzione correttiva-adattiva e manutenzione evolutiva;

Ricordando che queste cinque fasi che abbiamo elencato per un processo di ingegneria del softwarenon dovrebbero essere prese come una regolao uno standard.[2]

Produzione software nel terzo millennio

modifica

Ancora oggi le aziende pongono l'accento sulla necessità di definire processi disviluppodel software che consentano di rispettare le scadenze fissate per ridurre i costi di realizzazione dei prodotti stessi. Vengono identificati differenticicli di vita del software,ovvero diversi processi che possono essere attualizzati da un team per giungere ad un risultato comune. Ognuno di questi differenti processi identifica una serie di passi chiave da seguire per realizzare infine un prodotto software che soddisfi i requisiti. L'ingegneria del software racchiude questi e molti altri elementi, definendo una scienza che si preoccupa effettivamente di come permettere non più ad una singola persona ma ad un team di tanti sviluppatori, di realizzare unbuonsoftware. Differenti utenze generano differenti requisiti[3]e nuove esigenze nella realizzazione di un software.

Resta oggi il problema di produrre con tempi e costi prestabiliti dei sistemi software di formidabili dimensioni, enormemente cresciuti rispetto ai pacchetti software di alcune decine di anni fa. Per queste situazioni la neonata scienza si trova spesso in difficoltà e si sente il bisogno di teorie più evolute. Se l'approccio iniziale era basato sui concetti dell'industria meccanica dell'inizio delXX secolo(tempi e metodi), adesso si capisce che tale impostazione è insufficiente: nell'industria meccanica si parla ormai difabbrica immaterialecostituita dalle conoscenze dei dipendenti, dai rapporti tra di loro, dalle aspirazioni comuni; ancor di più ciò vale per la fabbrica software. In aggiunta molti hanno capito le caratteristiche originali del prodotto software (prima fra tutte l'immaterialità del prodotto principale - il codice eseguibile) che portano alla necessità di tecnologie meno note in altri settori: la più importante di tali tecnologie è probabilmente ilcontrollo di configurazione(come le aziende).

Ordinamento universitario

modifica

In Italia

modifica

Nell'ordinamento universitario italiano esistono lauree specializzate nell'ingegneria del software. Esse si pongono come obiettivo quello di specializzare informatici nei diversi ambiti ai quali può essere applicata la disciplina: dai sistemi complessi esistema real-time,a quelliembedded,fino ad arrivare a quellidistribuitied enterprise.Lauree magistraliin ingegneria del software sono, ad esempio, quelle dell'Università degli Studi dell'Aquila[4],dellaLibera Università di Bolzano[5]e delPolitecnico di Torino[6]che prevedono percorsi di doppia laurea estera. Per lelauree triennali,invece, esistono cattedre e insegnamenti diingegneria del softwarenella facoltà di scienze per i corsi di laurea inInformatica,Ingegneria InformaticaedInformatica e tecnologie per la produzione del software.

  1. ^Per l'IEEE Standard 610.12-1990 è l'applicazione di un approccio sistematico, disciplinato e quantificabile nello sviluppo, funzionamento e manutenzione del software
  2. ^Le 5 fasi dello sviluppo software – infografica | Ingegneria del software e analisi dei requisiti,suingegneriadelsoftware.online.URL consultato il 13 gennaio 2020(archiviato dall'url originaleil 12 gennaio 2020).
  3. ^chicoalff,Como escrever uma User Story fantástica | Ingegneria del software e analisi dei requisiti,suingegneriadelsoftware.online.URL consultato il 13 gennaio 2020(archiviato dall'url originaleil 12 gennaio 2020).
  4. ^[1]
  5. ^[2]
  6. ^[3]

Bibliografia

modifica

Voci correlate

modifica

Altri progetti

modifica

Collegamenti esterni

modifica
Controllo di autoritàThesaurus BNCF63744·LCCN(EN)sh87007398·GND(DE)4116521-4·BNE(ES)XX541523(data)·BNF(FR)cb11966616k(data)·J9U(EN,HE)987007539284805171·NDL(EN,JA)01014113