Ingegneria del software: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: aggiungo template {{Collegamenti esterni}} (ref)
Voci correlate: Aggiunto i template "Div col" e "Div col end"
 
(43 versioni intermedie di 25 utenti non mostrate)
Riga 1:
{{Nota disambigua2|Se stai cercando informazioni sull'ingegneria del software nell'ordinamento [[università|universitario]] italiano, vedi le voci '''[[ingegneria informatica]]''' o '''[[informatica]]'''}}
{{F|ingegneria del software|febbraio 2013|Voce ampia senza nessuna fonte e riferimento}}
[[File:A_software_reengineering_process_model.svg|thumb|Un modello di sviluppo software]]
PerL' '''ingegneria del software''' ('''''software engineering''''' in [[lingua inglese|inglese]]) si intendeè quella [[Materia (didattica)|disciplina]] [[informatica]] che si occupa dei processi produttivi e delle [[Metodologia di sviluppo del software|metodologie]] di sviluppo finalizzate alla realizzazione di [[sistema software|sistemi software]].<ref>Per l'IEEE Standard 610.12-1990 è l'applicazione di un approccio sistematico, disciplinato e quantificabile nello sviluppo, funzionamento e manutenzione del software.</ref>. Si propone una serie di obiettivi legati all'evoluzione dello sviluppo del software (inteso come attività [[industria del software|industriale]]) sia da un punto di vista tecnologico (per es. attraverso la definizione di nuovi [[linguaggio di programmazione|linguaggi di programmazione]]) che [[Modello di sviluppo del software|metodologico]] (per esempio il perfezionamento dei modelli di [[ciclo di vita del software]]).
 
L'ingegneria del software, quindi, si propone una serie di obiettivi legati all'evoluzione dello sviluppo del software (inteso come attività [[industria del software|industriale]]) sia da un punto di vista tecnologico (per esempio attraverso la definizione di nuovi [[linguaggio di programmazione|linguaggi di programmazione]]) che [[Modello di sviluppo del software|metodologico]] (per esempio il perfezionamento dei modelli di [[ciclo di vita del software]]).
 
== Storia ==
[[File:Algoritmo_para_Procesar_y_Organizar_en_GTD.png|thumb|Esempio di [[algoritmo]] in [[diagramma a blocchi]]]]
La necessità di creare una disciplina teorico-pratica che si occupasse in toto della realizzazione dei software nasce, intorno alla fine degli [[anni 1960|anni sessanta]], dall'esigenza di sviluppare prodotti sempre più complessi ed evoluti che rispondessero alle richieste delle grandi utenze, conferendo rigore e disciplina allo [[stato dell'arte]] dello sviluppo software nelle grandi aziende.
 
Riga 17 ⟶ 16:
La [[programmazione (informatica)|programmazione]] consisteva soprattutto nel mettere insieme una sequenza di [[istruzione (informatica)|istruzioni]] di [[codice sorgente]] per realizzare compiti ben specifici.
 
Dal [[1965]] al [[1975]] si assiste allo [[Sviluppo software|sviluppo di software]] pensato per più utenti e per i sistemi in [[sistema real-time|real-time]]. In questo periodo iniziano di conseguenza gli sviluppi di [[pacchetto (software)|pacchetti]] software ed emergono numerosi problemi, come la gestione e la manutenzione del software.
 
Nel 1968 la conferenza [[NATO]] tenuta a [[Garmisch]], in [[Germania]], [http://homepages.cs.ncl.ac.uk/brian.randell/NATO/ rende chiaro il problema] rappresentato dall'incapacità di produrre nei tempi previsti software affidabile e rispondente ai requisiti.
Riga 28 ⟶ 27:
==Descrizione==
=== Concetti base ===
{{vedi anche|Sviluppo software}}
L'ingegneria del software identifica una formalizzazione del processo di [[Analisi dei requisiti|analisi]], [[Progettazione (ingegneria del software)|progettazione]], realizzazione e [[Manutenzione (software)|manutenzione]] di un sistema informatico.
[[File:Development_Stages.svg|thumb|Una parte dello sviluppo software]]
Per tale associazione con una idea quasi [[Biologia|biologica]] di vita si parla spesso di ''ciclo di vita'' di un software, concetto che ha assunto con il passare dei decenni un'importanza sempre maggiore, abbandonando progressivamente l'idea di software come ''manufatto'' e passando ad un'idea del software come prodotto industriale.
L''''ingegneria del software''' identifica una formalizzazione del processo di [[Analisi dei requisiti|analisi]], [[Progettazione (ingegneria del software)|progettazione]], realizzazione e [[Manutenzione (software)|manutenzione]] di un sistema informatico.
Per tale associazione con una idea quasi [[Biologia|biologica]] di vita si parla spesso di ''ciclo di vita'' di un software, concetto che ha assunto con il passare dei decenni un'importanza sempre maggiore, abbandonando progressivamente l'idea di software come ''manufatto'' e passando ad un'idea del software come prodotto industriale. La necessità di creare una [[scienza]] che 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 da [[catena di montaggio]] per le industrie del [[XX secolo|secolo 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 necessità di creare una [[scienza]] che 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.
 
La nuova scienza, l'ingegneria del software, si preoccupa effettivamente di concretizzare queste esigenze, tramite la definizione di [[Modello di sviluppo del software|modelli]] che 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.
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 da [[catena di montaggio]] per le industrie del [[XX secolo|secolo 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".
 
=== Le fasi dell‘Ingegneria del Software o dell’ingegneria dei sistemi ===
La nuova scienza, l'ingegneria del software, si preoccupa effettivamente di concretizzare queste esigenze, tramite la definizione di [[Modello di sviluppo del software|modelli]] che permettono a team di tecnici di realizzare in cooperazione prodotti sempre più evoluti e di qualità.
È possibile raggruppare in modo succinto ogni dominio dell’ingegneria del software in sole 5 fasi:
 
* Analisi di business e analisi dei requisiti;
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.
* 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 software ''non dovrebbero essere prese come una regola'' o uno standard.<ref>{{Cita web|url=https://ingegneriadelsoftware.online/infografica-le-fasi-sviluppo-software/|titolo=Le 5 fasi dello sviluppo software – infografica {{!}} Ingegneria del software e analisi dei requisiti|lingua=it-IT|accesso=2020-01-13|urlarchivio=https://web.archive.org/web/20200112235923/https://ingegneriadelsoftware.online/infografica-le-fasi-sviluppo-software/|dataarchivio=12 gennaio 2020|urlmorto=sì}}</ref>
=== La produzione software nel terzo millennio ===
Ancora oggi le aziende pongono l'accento sulla necessità di definire processi di [[Sviluppo software|sviluppo]] del software che consentano di rispettare le scadenze fissate per ridurre i costi di realizzazione dei prodotti stessi.
 
=== La produzioneProduzione software nel terzo millennio ===
Vengono identificati differenti [[Ciclo di vita del software|cicli 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.
{{vedi anche|Ciclo di vita del software|Modello di sviluppo del software|Metodologia di sviluppo del software}}
Ancora oggi le aziende pongono l'accento sulla necessità di definire processi di [[Sviluppo software|sviluppo]] del software che consentano di rispettare le scadenze fissate per ridurre i costi di realizzazione dei prodotti stessi. Vengono identificati differenti [[Ciclo di vita del software|cicli 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 un ''buon'' software. Differenti utenze generano differenti requisiti<ref>{{Cita web|url=https://ingegneriadelsoftware.online/come-scrivere-una-user-story-fantastica/|titolo=Como escrever uma User Story fantástica {{!}} Ingegneria del software e analisi dei requisiti|autore=chicoalff|lingua=it-IT|accesso=2020-01-13|urlarchivio=https://web.archive.org/web/20200112235948/https://ingegneriadelsoftware.online/come-scrivere-una-user-story-fantastica/|dataarchivio=12 gennaio 2020|urlmorto=sì}}</ref> 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 del [[XX secolo]] (''tempi e metodi''), adesso si capisce che tale impostazione è insufficiente: nell'industria meccanica si parla ormai di ''fabbrica immateriale'' costituita 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 il ''controllo di configurazione'' (come le aziende).
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 un ''buon'' software.
 
Differenti utenze generano differenti requisiti 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 del [[XX secolo]] (''tempi e metodi''), adesso si capisce che tale impostazione è insufficiente: nell'industria meccanica si parla ormai di ''fabbrica immateriale'' costituita 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 il ''controllo di configurazione'' (come le aziende).
 
== Ordinamento universitario ==
=== In Italia ===
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 e [[sistema real-time]], a quelli [[sistema embedded|embedded]], fino ad arrivare a quelli [[sistema distribuito|distribuiti]] ed enterprise. [[Laurea magistrale|Lauree magistrali]] in ingegneria del software sono, ad esempio, quelle dell'[[Università degli Studi dell'Aquila]] (<ref>[http://gseem.eu/])</ref>, della [[Libera Università di Bolzano]] (<ref>[http://em-se.eu/])</ref> e del [[Politecnico di Torino]](<ref>[https://didattica.polito.it/laurea_magistrale/ingegneria_informatica/it/presentazione])</ref> che prevedono percorsi di doppia laurea estera. Per le [[laurea triennale|lauree triennali]], invece, esistono cattedre e insegnamenti di ''ingegneria del software'' nella facoltà di scienze per i corsi di laurea in [[Informatica]], [[Ingegneria Informatica]] ed [[Informatica e tecnologie per la produzione del software]].
 
== Note ==
<references/>
 
== Bibliografia ==
 
* {{cita libro
|autore = [[Ian Sommerville]]
|titolo = Ingegneria del software
|url = https://software-engineering-book.com/
|editore = Pearson
|città = Torino
|anno = 2017
|edizione = 10
|ISBN = 9788891902245
|cid = Sommerville 2017
}}
 
* {{cita libro
|titolo = Software Engineering — Guide to the software engineering body of knowledge (SWEBOK)
|editore = International Standards Organization
|città = Ginevra (CH)
|anno = 2015
|edizione = 2
|url = https://standards.iso.org/ittf/PubliclyAvailableStandards/c067604_ISO_IEC_TR_19759_2015.zip
|lingua = en
|id = ISO/IEC TR 19759:2015(E)
|cid = SWEBOK 2015
}}
 
== Voci correlate ==
{{Div col}}
* [[Application lifecycle management]]
* [[Architettura multi-tier]]
Riga 73 ⟶ 99:
* [[Model-View-Controller|MVC]]
* [[Object Role Modeling]]
*[[Profilazione (programmazione)|Profilazione]]
* [[Qualità del software]]
* [[Rapid application development]]
* [[Rational Software]]
*[[Requisito funzionale|Requisito Funzionale]]
* [[Service Oriented Architecture]]
* [[Sviluppo software]]
* [[Unified Modeling Language]] (UML)
{{Div col end}}
 
== Altri progetti ==
{{interprogetto|preposizione=sull'|wikt=ingegneria del software}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC|software engineering|software engineering}}
 
{{Ingegneria}}
{{controllo di autorità}}
{{portale|informatica|ingegneria}}