Estratto del documento

PRINCIPI DELL'INGEGNERIA DEL SOFTWARE - Metodi e Tecniche

Metodi: linee guida generali che governano l'esecuzione di un'attività attraverso un approccio rigoroso, sistematico e disciplinato.

Tecniche: hanno carattere più meccanico ed un'applicabilità più limitata.

I principi chiave

Rigore e Formalità

Lo sviluppo del software è un'attività creativa e pertanto si tende ad essere poco precisi e/o accurati. Un adeguato livello di rigore è necessario al fine di ottenere prodotti affidabili, controllarne i costi ed aumentare la fiducia nel loro corretto funzionamento. Il rigore non limita la creatività.

La formalità è il più alto livello di rigore (richiede il processo di sviluppo sia guidato e valutato con leggi matematiche). Occorre determinare il giusto livello di rigore. La formalità offre garanzie e vantaggi maggiori ma in alcuni casi è troppo complessa e non applicabile.

in pratica: - Parti critiche, come lo scheduler di un sistema operativo real-time, necessitano di una descrizione formale del loro funzionamento ed una dimostrazione formale della loro correttezza. - La derivazione sistematica dei dati in ingresso per le procedure di test è un approccio rigoroso ma non formale. - La documentazione rigorosa dei passi di sviluppo aiuta la gestione del progetto e la verifica della tempistica del processo. La fase di programmazione adotta un approccio formale. I programmi sono oggetti formali, scritti in linguaggi di programmazione la cui sintassi e semantica sono definite formalmente. I programmi possono essere manipolati automaticamente dai compilatori. La formalità nella programmazione favorisce la verificabilità e l'affidabilità dei prodotti software. Il rigore e la formalità possono essere applicati anche nelle fasi di progettazione, specifica e verifica. - Separazione degli Interessi Per dominare la complessitàquelli relativi all'implementazione tecnica. Questo permette di sviluppare soluzioni più flessibili e riutilizzabili. Per separare i vari aspetti del problema, è possibile utilizzare i tag HTML appropriati. Ad esempio, per evidenziare i concetti chiave, si può utilizzare il tag : È necessario separare i vari aspetti del problema, concentrandosi su ciascuno di essi in maniera separata. Occorre innanzitutto isolare gli aspetti scarsamente correlati tra di loro. Esistono vari modi di separazione: - Temporale: la separazione delle attività in diversi periodi temporali consente una pianificazione precisa ed evita gli inconvenienti legati al continuo cambiamento. - Qualitativa: ad esempio correttezza ed efficienza di un programma possono essere considerate separatamente curando la seconda qualità dopo aver assicurato la prima. Un altro tipo di separazione riguarda la capacità di affrontare separatamente diverse parti del sistema. Da questo concetto deriva il principio di modularità. Un potenziale inconveniente legato alla separazione degli interessi è la minore possibilità di effettuare ottimizzazioni globali. Un importante applicazione di questo principio è la separazione tra aspetti relativi al dominio del problema da quelli relativi all'implementazione tecnica. Questo permette di sviluppare soluzioni più flessibili e riutilizzabili.

quelli relativi al dominio dell'implementazione. La separazione degli interessi può fornire una base per la separazione delle responsabilità nel trattare i vari aspetti.

- Modularità

Un sistema complesso può essere suddiviso in parti più semplici detti moduli. Un sistema composto da moduli è detto modulare. Consente di applicare la separazione degli interessi in due fasi:

- Si possono trattare i dettagli di ciascun modulo separatamente ignorando i dettagli degli altri.

- Si possono esaminare le caratteristiche complessive di tutti i moduli e le loro relazioni per integrarli in un sistema coerente.

Se ci si concentra prima sui moduli e poi sulla loro composizione si ha un approccio bottom-up. Se si procede prima alla scomposizione in moduli e successivamente sulla progettazione di ciascuno di essi si ha un approccio top-down.

La modularità fornisce 4 tipi di benefici fondamentali:

- La capacità di scomporre un sistema complesso in parti

più semplici (divide etimpera).- La capacità di comporre un sistema complesso a partire da moduli esistenti.- La capacità di comprendere un sistema in funzione delle sue parti.- La capacità di modificare un sistema modificando solo un piccolo insiemedelle due parti.

Alta coesione e basso accoppiamento

Per ottenere i benefici della modularità è necessario che i moduli abbianoun’alta coesione interna ed un basso accoppiamento tra di essi.

Un modulo è altamente coeso se tutti i suoi elementi sono strettamenteconnessi.

L’accoppiamento caratterizza le relazione tra i moduli. Un bassoaccoppiamento consente di analizzare, capire, modificare, testare o riusareciascun modulo separatamente.

Strutture modulari con alta coesione e basso accoppiamento consentono divedere i moduli come delle black box quando si descrive la strutturacomplessiva e vedere ciascuno nei suoi dettagli quando è necessario 53analizzare la struttura interna.

realizzato.

Astrazione nei linguaggi di programmazione

I linguaggi di programmazione sono astrazioni costruite sull'hardware. I costrutti dei linguaggi consentono di scrivere programmi ignorando i dettagli che implementano a basso livello la loro semantica. Ciò consente al progettista di concentrarsi sulla soluzione del problema piuttosto che sull'istruire il calcolatore ad eseguire una sua risoluzione.

Astrazione nei processi

Si consideri l'esempio della stima dei costi per la realizzazione di una nuova applicazione. Un modo possibile consiste nell'individuazione di alcuni fattori chiave quali ad esempio: il numero di progettisti necessari e la dimensione attesa del prodotto. La stima può essere ottenuta estrapolandola dai costi di sistemi simili nei fattori chiave individuati astraendo in tal modo dalle differenze nei dettagli.

- Anticipazione del cambiamento

La capacità di supportare l'evoluzione del software richiede l'abilità

La capacità di anticipare i potenziali cambiamenti futuri costruisce la base per l'evolvibilità del software. La capacità di evolvere deve essere pianificata con estrema cura. I progettisti devono tentare di identificare i possibili cambiamenti e predisporre il progetto per favorire la loro attuazione in modo agevole. La riusabilità è un'altra qualità influenzata dall'anticipazione del cambiamento. L'anticipazione del cambiamento richiede adeguati strumenti per la gestione delle varie versioni e revisioni del software. L'anticipazione del cambiamento è fondamentale anche nei processi (ad es. la previsione degli effetti del cambio di personale).

Generalità: Ogni volta che si cerca di risolvere un problema, si cerca di scoprire quale è il problema più generale che si nasconde dietro a quello specifico. Alcune volte il problema più generale è più complesso, ma spesso è più semplice di

quello originale. La soluzione del problema generale è potenzialmente più riusabile. La soluzione generalizzata può essere più costosa (velocità di esecuzione, memoria utilizzata, tempo di sviluppo). Occorre bilanciare la generalità rispetto ai costi e all'efficienza della soluzione.

- Incrementalità

Si parla di incrementalità quando un processo procede passi (incrementi) che permettono di raggiungere l'obiettivo attraverso approssimazioni successive. Nel caso del software si intende che l'applicazione desiderata si ottiene come risultato di un processo evolutivo.

Esempi: si consegna in anticipo un sottoinsieme delle funzionalità di un sistema per ottenere al più presto feedback dagli utenti; nuove caratteristiche sono aggiunte in modo incrementale. Si cura per prima il supporto alle funzionalità, quindi ci si dedica alle prestazioni. Si consegna inizialmente un prototipo del prodotto che viene quindi

Anteprima
Vedrai una selezione di 17 pagine su 76
Preparazione completa Ingegneria del software Pag. 1 Preparazione completa Ingegneria del software Pag. 2
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 6
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 11
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 16
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 21
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 26
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 31
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 36
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 41
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 46
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 51
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 56
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 61
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 66
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 71
Anteprima di 17 pagg. su 76.
Scarica il documento per vederlo tutto.
Preparazione completa Ingegneria del software Pag. 76
1 su 76
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher andrea.dellosso.1 di informazioni apprese con la frequenza delle lezioni di Ingegneria del software 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à della Calabria o del prof Furfaro Angelo.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community