Definizione:
Progettare significa eseguire un processo di risoluzione di un problema il cui obiettivo è trovare e descrivere un modo:
Un progettista affronta una serie di problemi di design
Per prendere una decisione di progetto, l’ingegnere del software usa:
Lo spazio dei possibili progetti che saranno implementabili scegliendo tra le varie alternative viene spesso chiamato design space.
Top-down design
Bottom-up design
Si parte progettando i componenti basilari di basso livello e si decide poi come collegarli insieme per ottenere i componenti di più alto livello.
Si procede dunque per livelli di astrazione (layers of abstraction).
In genere è normale usare un misto dei due approcci:
È suddiviso in 4 parti:
La qualità del processo contribuisce a migliorare la qualità del prodotto, influenzando direttamente I valori degli attributi interni di qualità (misurati tramite le internal measures).
Gli attributi di qualità esterni sono influenzati da insiemi di attributi di qualità interni.
Gli attributi di qualità esterni influenzano gli attributi di qualità in uso (percepiti dall’utente).
In definitiva, migliorare la qualità del processo di sviluppo software e del prodotto software fa migliorare la qualità percepita dall’utilizzatore.
Fattori di qualità
Sei fattori di qualità esterna:
Per ogni fattore di qualità esterna viene definito un insieme di fattori di qualità interni.
La capacità del prodotto software di fornire funzioni che soddisfano esigenze stabilite ed implicite quando il software è usato sotto condizioni specificate:
La capacità del prodotto software di mantenere uno specificato livello di prestazioni quando usato sotto condizioni specificate.
Maturità (maturity): la capacità del prodotto software di evitare malfunzionamenti, quali risultati di anomalie nel software.
Tolleranza all’errore (fault tolerance): la capacità del prodotto software di mantenere uno specificato livello di prestazioni in caso di anomalie software o di violazione delle sue specificate interfacce.
Recuperabilità (recoverability): la capacità del prodotto software di ristabilire uno specificato livello di prestazioni e di ripristinare i dati direttamente intaccati in caso di malfunzionamenti.
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni relativamente all’affidabilità.
La capacità del prodotto software di essere capito, appreso, usato e gradito all’utente, quando usato sotto condizioni specificate.
Comprensibilità (understandability): la capacità del prodotto software di mettere in grado l’utente di comprendere se il software è appropriato, e come esso possa essere usato per particolari compiti e condizioni d’uso.
Apprendibilità (learnability): la capacità del prodotto software di permettere all’utente di imparare la sua applicazione.
Operabilità (operability): la capacità del prodotto software di permettere all’utente di operare con esso e di controllarlo.
Attrattività (attactiveness): la capacità del prodotto software di essere attraente all’utente (cioè avere un livello di gradimento nell’utilizzo).
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni, stili guida o regolamentazioni relativamente all’usabilità.
La capacità del prodotto software di fornire appropriate prestazioni relativamente alla quantità di risorse usate, sotto condizioni stabilite.
Comportamento rispetto al tempo (time behaviour): la capacità del prodotto software di fornire un appropriato responso e tempi di elaborazione e velocità di ‘attraversamento’ nell’eseguire le sue funzioni sotto specificate condizioni.
Utilizzo di risorse (resource utilisation): la capacità del prodotto software di usare appropriate quantità e tipo di risorse quando il software esegue le sue funzioni sotto specificate condizioni.
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni relativamente all’efficienza.
La capacità del prodotto software di essere modificato. Le modifiche possono includere correzioni, miglioramenti o adattamenti del software per cambiamenti nell’ambiente operativo, nei requisiti e nelle specifiche funzionali.
Analizzabilità (analysability): la capacità del prodotto software ad essere diagnosticato per deficienze o cause di malfunzionamenti nel software o per l’identificazione delle parti da modificare.
Modificabilità (changeability): la capacità del prodotto software di permettere l’implementazione di una specificata modifica.
Stabilità (stability): la capacità del prodotto software di evitare effetti inaspettati derivanti da modifiche ad esso.
Testabilità (testability): la capacità del prodotto software di permettere a software modificato di essere validato.
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni relativamente alla manutenibilità.
La capacità del prodotto software di essere trasferito da un ambiente ad un altro.
Adattabilità (adaptability): la capacità del prodotto software di essere adattato per differenti e specificati ambienti senza dover applicare altre azioni o mezzi diversi da quelli forniti per tale scopo per il software considerato.
Installabilità (installability): la capacità del prodotto software di essere installato in uno specificato ambiente.
Coesistenza (co-existence): la capacità del prodotto software di coesistere con altri software indipendenti in un ambiente comune condividendo risorse comuni.
Sostituibilità (replaceability): la capacità del prodotto software di essere usato al posto di un altro specificato prodotto software per gli stessi scopi e nello stesso ambiente.
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni relativamente alla portabilità.
La capacità del prodotto software di abilitare specificati utenti ad ottenere specificati obiettivi con efficacia, produttività, sicurezza (safety) e soddisfazione in uno specifico contesto.
Efficacia (effectiveness): la capacità del prodotto software di mettere in grado gli utenti di raggiungere gli obiettivi specificati con l’accuratezza e la completezza in uno specificato contesto d’uso.
Produttività (productivity): la capacità del prodotto software di mettere in grado gli utenti di spendere una quantità di risorse appropriate in relazione all’efficacia ottenuta in uno specificato contesto d’uso.
Sicurezza (safety): la capacità del prodotto software di raggiungere accettabili livelli di rischio di danni a persone, al software, ad apparecchiature od all’ambiente operativo in uno specificato contesto d’uso.
Soddisfazione (satisfaction): la capacità del prodotto software di soddisfare gli utenti in uno specificato contesto d’uso.
1. Introduzione
4. Casi d'uso
6. Class Diagram – parte prima
7. Class diagram – parte seconda
8. Class diagram – parte terza
9. Modellazione architetturale
10. Sequence Diagram
14. Progettazione Architetturale
15. Design Patterns – Parte prima
16. Design Patterns – Parte seconda
17. Progettazione dell'interfaccia utente
I. Sommerville – Ingegneria del Software – 8a edizione – Cap. 11, 13, 14.
International Standard ISO/IEC 9126.
T. Lethbridge, R. Laganière - Object-Oriented Software Engineering: Practical Software Development using UML and Java – Capitolo 9 (http://www.site.uottawa.ca/school/research/lloseng/).