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
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Schemi preparazione esame Matlab
-
Preparazione esame di Stato
-
Monografico Russo 2 - preparazione completa all'esame
-
Comunicazione Interculturale - preparazione completa all'esame
- Risolvere un problema di matematica
- Riassumere un testo
- Tradurre una frase
- E molto altro ancora...
Per termini, condizioni e privacy, visita la relativa pagina.