È suddiviso in 4 parti:
A determinare la qualità complessiva di un prodotto software concorrono 3 punti di vista.
ESTERNA
Esprime il comportamento dinamico del software, nell’ambiente d’uso.
INTERNA (intrinseca)
Esprime la misura in cui il codice software possiede una serie di attributi statici, indipendentemente dall’ambiente di utilizzo e dall’utente.
PERCEPITA (in uso)
Esprime l’efficacia ed efficienza con cui il software serve le esigenze dell’utente, ed è correlata alla percezione diretta dell’utente.
La qualità esterna è quella rappresentata dalle prestazioni del prodotto e dalle funzionalità che offre (il prodotto è visto come una black box da testare).
In sostanza, riguarda il comportamento “dinamico” del software in un dato ambiente operativo.
Va ricordato che il software non “funziona” mai da solo, ma è sempre parte di un ambiente (environment) che può contenere hardware, persone, processi etc…
Le caratteristiche di qualità esterne del software lo qualificano in relazione a questo ambiente e permettono di osservarne il comportamento mentre è utilizzato operativamente.
La qualità interna rappresenta le proprietà intrinseche del prodotto (quelle misurabili direttamente sul codice sorgente, sul suo flusso di controllo). Si realizza a partire da:
I requisiti di qualità dell’utente (External Quality Requirements), che rappresentano le specifiche di qualità così come le dà l’utente, fornendo il primo input alla progettazione;
Le specifiche tecniche (Internal Quality Requirements), che rappresentano la qualità richiesta dall’utente tradotta dallo sviluppatore nell’architettura del software, nella struttura del programma, nelle interfacce del software verso l’utente.
La qualità in uso riguarda il livello con cui il prodotto si dimostra utile all’utente nel suo effettivo contesto d’utilizzo, in particolare la capacità del prodotto di dare efficacia ed efficienza al lavoro dell’utente, a fronte di una sicurezza di utilizzo e di una soddisfazione nel far uso del prodotto.
In sostanza, è una misura della interazione tra utente e prodotto, in un determinato contesto d’uso.
I tre punti di vista sulla qualità si influenzano a vicenda: è chiaro che non può esservi qualità percepita positivamente dall’utente senza che vi sia una buona qualità intrinseca del codice e buone prestazioni!
La qualità del processo contribuisce a migliorare la qualità del prodotto, influenzando direttamente i valori degli attributi interni di qualità.
Gli attributi di qualità interni influenzano insiemi di attributi di qualità esterni.
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.
Per descrivere le tre viste sulla qualità, lo standard propone due modelli, uno per la qualità interna ed esterna, ed uno per la qualità in uso.
Entrambi i modelli definiscono la qualità in termini di un insieme di caratteristiche di primo livello a cui sono associati insieme di sottocaratteristiche di secondo livello che meglio descrivono ciascuna caratteristica.
Le caratteristiche di secondo livello saranno valutate in funzione di un ampio insieme di metriche sia interne che esterne.
La capacità del prodotto software di fornire funzioni che soddisfano esigenze stabilite ed implicite quando il software è usato sotto condizioni specificate.
Appropriatezza (suitability): la capacità del prodotto software di fornire un appropriato insieme di funzioni all’utente per i compiti e gli obiettivi specificati.
Accuratezza (accuracy): la capacità del prodotto software di fornire i giusti o concordati risultati o effetti, con la precisione richiesta.
Interoperabilità (interoperability): la capacità del prodotto software di interagire con uno o più sistemi specificati.
Sicurezza (security): la capacità del prodotto software di proteggere informazioni e dati in modo che persone o sistemi non autorizzati non possano leggere o modificarli e che a persone o sistemi autorizzati non sia negato l’accesso ad essi.
Conformità (compliance): la capacità del prodotto software di aderire a standard, convenzioni o regolamentazioni in leggi e prescrizioni relative alla funzionalità.
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 ad usare l’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 qualità in uso è rappresentata da 4 caratteristiche, che rappresentano il punto di vista dell’utente sulla qualità del software.
Rappresenta la capacità del software di supportare specifici utenti a raggiungere determinati obiettivi, con efficacia, produttività, soddisfazione e sicurezza personale, in determinati contesti d’uso.
Efficacia, la capacità di supportare un utente nel raggiungere i suoi obiettivi con accuratezza e completezza in un dato contesto.
Produttività, la capacità di supportare un utente nello spendere l’appropriata quantità di risorse in relazione all’efficacia dei risultati da raggiungere.
Soddisfazione, la capacità di soddisfare un utente in un dato contesto d’uso.
Sicurezza, la capacità di raggiungere accettabili livelli di rischio di danni a persone, al software, ad apparecchiature, o all’ambiente operativo in un dato contesto d’uso.
Sono collegate alle caratteristiche esterne di 2° livello.
Alcune caratteristiche interne vanno ad influenzare più di una caratteristica esterna di 2° livello.
Ad esempio, per la funzionalità:
Per valutare le caratteristiche di qualità, la ISO/IEC 9126 fornisce 3 insiemi di metriche, rispettivamente le metriche esterne (nella 9126-2), quelle interne (nella 9126-3), quelle in uso (nella 9126-4).
Metrica Interna: è applicabile ad un prodotto software non eseguibile (es. Specifica, codice sorgente).
Metrica Esterna: misura aspetti del software relativi al suo comportamento, osservabili testando il software in esecuzione.
Metrica di Qualità in Uso: misura fino a che punto un prodotto soddisfa i bisogni utente per raggiungere specifici scopi con efficacia, produttività, sicurezza, soddisfazione, in un determinato contesto d’uso.
Lo Standard descrive ogni metrica attraverso i seguenti elementi:
2. Ciclo di Vita e Processi Software
3. Processi per lo sviluppo rapido del software
4. Sviluppo Agile del Software
5. Test Driven Development (TDD)
7. Component Based Software Engineering (CBSE): Generalità
8. Component Based Software Engineering (CBSE): Il processo di svi...
9. Ingegneria del Software orientato ai Servizi
10. Ingegnerizzazione dei Servizi
11. I Processi di Manutenzione del Software
12. Reengineering, Refactoring e Reverse Engineering del Software
13. Verifica e Convalida del Software. Richiami e concetti di base ...
14. Tecniche di Testing Dinamico
15. Testing di Sistemi Object Oriented
16. Automazione del testing e Analisi Mutazionale
17. Tecniche di Analisi Statica del codice e il Debugging
18. Stima dei costi nei progetti Software
19. Il Modello COCOMO per la stima dei costi Software – La gestio...
20. Gestione e Miglioramento dei Processi di Produzione del Softwar...
21. La Valutazione della Qualità dei Processi Software – Il Capa...