Estratto del documento

Ingegneria del software

Introduzione al software

Oggi il software rappresenta la tecnologia più importante a livello mondiale ed è anche chiaro che esso sia un chiaro esempio della legge delle conseguenze impreviste: l’invenzione di una tecnologia può avere effetti profondi e talvolta inattesi su altre tecnologie a prima vista non correlate su imprese commerciali, su persone e talvolta persino su intere culture.

Cosa è un software?

Esso è l’insieme di programmi per computer di ogni dimensione e architettura, contenuti presentati durante l’esecuzione dei programmi e documenti in forma stampata ed elettronica che riguardano ogni media elettronico. Esso viene realizzato e supportato dagli ingegneri del software e viene realizzato direttamente o indirettamente da praticamente ogni persona che risiede nel mondo industrializzato. Il software deve essere realizzato seguendo i passi previsti per ogni altro prodotto di successo, applicando un processo che conduca a risultati di alta qualità che rispondano alle esigenze di coloro che utilizzeranno il prodotto. In sostanza si applica al software un approccio ingegneristico.

Dal punto di vista di un ingegnere software, il prodotto è rappresentato dai programmi, dai documenti e dai dati che costituiscono il software. Dal punto di vista dell’utente, il prodotto è rappresentato da quelle informazioni che aiutano a migliorare le condizioni di vita. L’impatto del software sulla nostra società e cultura continua ad essere profondo. L’ingegneria del software è l’insieme dei metodi, un processo e una serie di strumenti, che permette una progettazione generale di un software.

Quindi, volendo dare una definizione più appropriata, un software è non solo l’insieme dei programmi, ma l’insieme degli artefatti che lo compongono, prodotti durante il suo sviluppo. Una definizione dell’IEEE è la seguente: insieme di programmi, ogni altra documentazione relativa al funzionamento di un sistema di elaborazione dati.

Ruolo del software e sue caratteristiche

Oggi il software svolge un duplice ruolo: è un prodotto ma allo stesso tempo è un veicolo per distribuire un prodotto. Esso è in grado di produrre, gestire, acquisire, modificare, presentare o trasmettere dati, oppure può essere base per il controllo di un computer (sistema operativo), la comunicazione di informazioni (reti informatiche) e la produzione e controllo di altri programmi (strumenti e ambienti di sviluppo).

Il software è un elemento immateriale, “logico”. Di conseguenza le caratteristiche di un software sono molto diverse da quelle di un hardware. Il software si sviluppa o si struttura, non si fabbrica nel senso tradizionale. Il software non “si consuma”. Caratteristica distintiva è la costosità, legata soprattutto alla bassa produttività. Problema da risolvere è l’inaffidabilità, ovvero il software non si comporta come ci si aspetta. Inoltre, mentre si sta per sviluppare la progettazione software, può accadere che ci siano delle modifiche (rework), dovute a requisiti dati dall’utente poco chiari o mal compresi, oppure alla conseguenza di troncamento del lavoro quando ci si accorge che i tempi di consegna sono prossimi e non si riesce a completare lo sviluppo.

Confronto tra software e hardware

Problematiche abbastanza rilevanti sono il deterioramento del software. A differenza dell’hardware che tende ad usurarsi nel tempo, il software non è soggetto ai fattori nocivi ambientali e, in teoria, la curva dei guasti dovrebbe avere una forma di “curva ideale”. Mettiamo a confronto le due curve dei guasti dell’hardware e del software: quella dell’hardware (non indicata esplicitamente), ha una curva “a vasca da bagno”, dato che la frequenza di guasti è rilevante nei primi periodi di esercizio dell'hardware stesso, dovuto ad errori di progettazione e poi si stabilizza per un certo periodo di funzionamento. Tuttavia, col tempo subentra l’usura e quindi la frequenza guasti dell’hardware risale esponenzialmente.

Per quanto riguarda il software, i difetti non rilevati provocano un’alta frequenza di guasti nelle prime fasi di esercizio del programma; dopo la scoperta e correzione (sempre che non se ne introducano altri) la curva si appiattisce. Tale curva però è ideale, infatti un programma è soggetto a modifiche (attività di manutenzione), e a mano a mano che se ne apportano, è probabile che si introducano nuovi difetti, provocando i picchi della frequenza di guasti visibili. Prima che la curva ritorni ad un valore stabile, vengono richieste nuove modifiche, che producono un nuovo picco. Così, la frequenza minima di guasti tende a salire lentamente: il software si deteriora a causa delle modifiche.

Inoltre, se un componente hardware si usura o guasta, esso può essere sostituito, mentre un software non può essere riparato con pezzi di ricambio. Quindi la manutenzione di un software è un compito piuttosto arduo rispetto all’hardware. Il software “muta”.

Categorie di software

Oggi esistono sette grandi categorie di software che presentano continue sfide per gli ingegneri del software:

  • Software di sistema (collezione di programmi al servizio di altri programmi)
  • Software applicativo (è costituito da programmi indipendenti che risolvono specifici bisogni, per attività decisionali, gestionali o tecniche)
  • Software scientifico o per l’ingegneria (legato ad algoritmi di calcolo intensivo, come pure gli strumenti CAD o di simulazione)
  • Software embedded (tale software risiede in un prodotto o in un sistema che viene utilizzato per implementare e controllare caratteristiche e funzioni per l’utente finale o per il sistema stesso; esso svolge funzionalità limitate e talvolta fuori del comune oppure offre funzionalità di controllo rilevanti)
  • Software a linea di prodotti (progettato per fornire funzionalità specifiche utilizzabili da vari clienti, e mirato a concentrarsi su un mercato limitato e specifico o al mercato di consumatori di massa)
  • Applicazioni Web (insieme di file ipertestuali collegati che presentano informazioni utilizzando testo e limitate funzionalità grafiche)
  • Software per l’intelligenza artificiale (si serve di algoritmi non numerici per risolvere problemi complessi, non riducibili a un’analisi diretta e a calcoli precisi)

Sfide per gli ingegneri software

Accesso ubiquitario al software (la rapida evoluzione delle connessioni wireless porterà ben presto alla realizzazione di vere e proprie architetture di calcolo distribuite), netsourcing (il World Wide Web sta rapidamente diventando un motore di calcolo oltre che un fornitore di contenuti), open-source (software liberamente distribuibile, oppure modifiche “libere” che si possono trovare su rete da apportare al software). La sfida per gli ingegneri software è quella di costruire applicazioni che facilitino le comunicazioni di massa e la distribuzione dei prodotti di massa utilizzando concetti che si stanno formando solo ora.

Ognuna di queste “nuove sfide” obbedirà indubbiamente alla legge delle conseguenze impreviste e avrà effetti (per le imprese, gli ingegneri software e gli utenti finali) che è impossibile prevedere oggi.

Software legacy e loro evoluzione

I programmi molto più “antiquati” (meno recenti) sono detti software legacy o preesistenti. I sistemi software preesistenti sono stati sviluppati decenni fa e sono stati continuamente modificati per rispondere ai cambiamenti nei requisiti commerciali e delle piattaforme di calcolo. La proliferazione di tali sistemi provoca grossi problemi per le grandi aziende che trovano costosa la manutenzione ma pericolosa l’evoluzione.

Tuttavia il software preesistente è caratterizzato da un’elevata longevità e dal fatto di essere fondamentale per l’attività delle imprese. Tuttavia il software deve essere adattato per rispondere ai bisogni dei nuovi ambienti di calcolo o delle nuove tecnologie; deve essere ampliato per renderlo interoperabile con sistemi o database più moderni. Il software deve essere rielaborato per poterlo utilizzare in un ambiente di rete. Quando si verificano queste nuove modalità evolutive, il software deve essere sottoposto a reingegnerizzazione, in modo da mantenerlo utilizzabile per il futuro. Ogni ingegnere software deve riconoscere che il cambiamento è naturale e non deve cercare di contrastarlo.

Evoluzione del software

Indipendente dal suo dominio applicativo, dalle sue dimensioni o dalla sua complessità, il software evolve nel corso del tempo. Le operazioni di modifica (manutenzione) del software guidano questo processo e si verificano quando vengono corretti degli errori, quando un software viene adattato ad un nuovo ambiente, quando il cliente richiede nuove funzionalità e quando l’applicazione deve essere riprogettata per fornire benefici legati ad un contesto più moderno.

Come iniziare un progetto software

Ogni progetto software è dovuto ad alcuni bisogni (il bisogno di correggere un difetto in un’applicazione esistente, il bisogno di adottare un sistema preesistente a un nuovo ambiente di lavoro, il bisogno di estendere le funzioni e le caratteristiche di un’applicazione esistente o il bisogno di creare un nuovo prodotto, servizio o sistema). All’inizio del progetto di ingegneria del software, l’attività viene espressa spesso in modo informale nell’ambito di semplici conversazioni, in cui il software non viene menzionato.

Il problema dell'ingegneria del software

Il processo crea un’interazione fra gli utenti e i progettisti, fra gli utenti e gli strumenti in evoluzione e fra i progettisti e gli strumenti in evoluzione (la tecnologia). Si tratta di un processo iterativo in cui lo strumento evolutivo stesso fungerà da mezzo di comunicazione e in cui ogni nuova fase del dialogo trae conoscenze più utili dalle persone interessate. Quando si realizza un prodotto o sistema è importante svolgere una serie di passi prevedibili, una sorta di percorso che aiuti a ottenere risultati di alta qualità nel tempo prefissato. Questo percorso è chiamato “processo di sviluppo software”.

Gli ingegneri del software adattano il processo alle loro esigenze e poi lo seguono. Inoltre, coloro che hanno richiesto lo sviluppo del software giocano un ruolo importante nel processo di definizione, costruzione e collaudo del software.

Ciò è importante perché introduce stabilità, controllo e organizzazione in un’attività che, se lasciata libera, può diventare piuttosto caotica. Tuttavia un moderno approccio all’ingegneria del software deve essere “agile”. Deve prevedere solo quelle attività, quei controlli e quella documentazione che sono appropriati per il team di sviluppo e per il prodotto che deve essere realizzato. Il processo da adottare dipende dal software che si sta realizzando.

Dal punto di vista di un ingegnere software, il prodotto del lavoro sono i programmi, i documenti e i dati sviluppati come conseguenza delle attività di ingegneria del software definite dal processo. La qualità, l’ottimizzazione dei tempi e l’utilizzabilità a lungo termine del prodotto che si sta realizzando sono i migliori indicatori dell’efficacia del processo utilizzato.

Processo di sviluppo software

Un processo di sviluppo software è una struttura di riferimento entro il quale si svolgono le attività necessarie alla realizzazione di software di alta qualità. Un processo di sviluppo software definisce la strategia adottata nella realizzazione del software, ma l’ingegneria del software comprende anche le tecnologie che popolano il processo: metodi, tecniche e strumenti automatici.

L'ingegneria del software: una tecnologia stratificata

L’ingegneria del software è l’istituzione e l’impiego di principi ingegneristici fondamentali, allo scopo di ottenere in modo economico software affidabile ed efficiente su macchine vere. L’ente IEEE ha formulato una definizione più completa: Ingegneria del software: 1) Applicazione di una strategia sistematica, disciplinata e misurabile allo sviluppo, esercizio e manutenzione del software; cioè applicazione dell’ingegneria del software; 2) Studio delle strategie di cui al punto 1.

L’ingegneria del software è una tecnologia stratificata. Il nocciolo dell’ingegneria del software è l’attenzione alla qualità. Quindi, si ha la necessità di avere approcci sistematici allo sviluppo del software. Vediamo i diversi strati dell’IS. Il livello fondamentale è costituito dal processo. Il processo di realizzazione del software è la colla che tiene insieme i livelli tecnologici e che consente lo sviluppo del software razionale e in tempi stimabili. Il processo definisce una sequenza di fasi e attività per lo sviluppo del software, rappresenta la base del controllo gestionale dei progetti software, crea prodotti intermedi (modelli, documenti, dati, resoconti, formulari, ecc.), si stabiliscono dei punti di controllo (milestone), si garantisce la qualità e si governano in modo opportuno le modifiche, infine, si determinano le risorse da impiegare nello sviluppo. Per tale livello vengono usati quelli che si chiamano modelli del processo di sviluppo del software.

Altro strato è costituito dai metodi di ingegneria del software, che costituiscono il sapere tecnico relativo alla costruzione di software. Essi definiscono le tecniche da impiegare nello sviluppo del software. Esiste una fitta gamma di metodi, tra cui quelli per la definizione dei requisiti, la progettazione, la codifica, la costruzione dei programmi, per il collaudo e il supporto.

Infine, ultimo strato del nostro stack IS è costituito dagli strumenti dell’ingegneria del software. Essi forniscono al processo e ai metodi un supporto automatizzato, ad esempio, un sistema CASE (Computer Aided Software Engineering, ingegneria del software assistita al computer) o vari ambienti di programmazione. I fattori che governano l’ingegneria del software sono: costi delle risorse impiegate per lo sviluppo (umane, hardware, software), tempi di consegna (mercato sempre più esigente), qualità del prodotto finale.

La qualità del prodotto finale va vista da diversi punti di vista: dal punto di vista del cliente, la qualità è vista qualora il software risolve il problema ad un costo accettabile; dal punto di vista dell’utente, il software è buono qualora sia facile da comprendere, efficiente da usare, semplifica il lavoro; dal punto di vista dello sviluppatore, la qualità si ha quando il software sia facile da progettare modificare e riusare; infine, dal punto di vista del manager del prodotto, la qualità si ha se il prodotto si vende bene e piace ai clienti, e, inoltre, costi poco svilupparlo e modificarlo.

Modello di qualità del software di McCall

  • Correttezza
  • Affidabilità
  • Efficienza
  • Usabilità (product operation)
  • Portabilità
  • Ricusabilità
  • Interoperabilità (product transition)
  • Manutenibilità
  • Flessibilità
  • Testabilità (product revision)

Risulta ovvio che per misurare quantitativamente le varie caratteristiche di un software, avremo bisogno di metriche.

Obiettivo dell’ingegneria del software

Definire metodi e procedure per lo sviluppo del software, utili ad ottenere sistemi di grandi dimensioni, di alta qualità, a basso costo, ed in breve tempo. Per consentire tali obiettivi occorre puntare sulla qualità del processo di sviluppo del software.

La struttura di un processo software

La struttura di un processo stabilisce le basi di un processo di sviluppo software, identificando un piccolo numero di attività strutturali applicabili a tutti i progetti software, indipendentemente dalle loro dimensioni o dalla loro complessità. Inoltre, la struttura del processo prevede un insieme di attività ombrello applicabili all’intero processo di sviluppo software. Ogni attività strutturale è popolata da un insieme di azioni di ingegneria del software, ovvero un insieme di operazioni correlate che determinano un “prodotto” del lavoro di ingegneria del software. Ogni azione è costituita da singole attività.

Vediamo un insieme di attività strutturali applicata nella maggior parte dei progetti software:

  • Comunicazioni: questa attività strutturale riguarda le comunicazioni e collaborazioni con il cliente (o altri stakeholders) e comprende la raccolta dei requisiti e altre attività correlate.
  • Pianificazione: questa attività stabilisce un piano per il successivo lavoro di ingegneria del software. Descrive le operazioni che devono essere svolte, i rischi probabili, le risorse necessarie, i prodotti da realizzare e una pianificazione del lavoro.
  • Modellazione: questa attività comprende la creazione di modelli che consentano allo sviluppatore e al cliente di comprendere meglio i requisiti software e progettuali (analisi e progetto).
  • Costruzione: questa attività comprende la generazione (manuale o automatizzata) del codice e le attività di collaudo necessarie per individuare gli errori.
  • Implementazione: il software viene fornito al cliente, il quale valuta il prodotto e fornisce indicazioni che si basano sulla propria valutazione.

Le precedenti cinque attività strutturali generiche possono essere utilizzate durante lo sviluppo di piccoli programmi, per la creazione di applicazioni Web e per l’ingegnerizzazione di sistemi computerizzati più estesi.

Anteprima
Vedrai una selezione di 9 pagine su 40
Requisiti software Pag. 1 Requisiti software Pag. 2
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
Requisiti software Pag. 6
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
Requisiti software Pag. 11
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
Requisiti software Pag. 16
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
Requisiti software Pag. 21
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
Requisiti software Pag. 26
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
Requisiti software Pag. 31
Anteprima di 9 pagg. su 40.
Scarica il documento per vederlo tutto.
Requisiti software Pag. 36
1 su 40
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher cecilialll di informazioni apprese con la frequenza delle lezioni di Fondamenti di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Fassolino Rita.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community