# ISO/IEC 9126

Con la sigla ISO/IEC 9126 si individua una serie di normative e linee guida, sviluppate dall'ISO (Organizzazione internazionale per la normazione) in collaborazione con l'IEC (Commissione Elettrotecnica Internazionale), preposte a descrivere un modello di qualità del software. Lo standard è stato sostituito dalla ISO/IEC 25010:2011. Il modello propone un approccio alla qualità in modo tale che le società di software possano migliorare l'organizzazione e i processi e, quindi come conseguenza concreta, la qualità del prodotto sviluppato.
La norma tecnica relativa alla qualità del software si compone in quattro parti:
* Modello della qualità del software
* Metriche per la qualità esterna
* Metriche per la qualità interna
* Metriche per la qualità in uso

## Modello di qualità

Il modello di qualità stabilito nella prima parte dello standard, ISO/IEC 9126-1, è classificato da sei caratteristiche generali (funzionalità, affidabilità, efficienza, usabilità, manutenibilità, portabilità) e varie sottocaratteristiche misurabili attraverso delle metriche, fornite in tre relazioni tecniche (technical reports) quali ISO/IEC 9126-2, 3 e 4. La funzionalità è un "requisito funzionale" a differenza delle ultime cinque caratteristiche chiamate invece " requisiti non funzionali" o "requisiti di qualità"; in particolare questi ultimi sono materia fondamentale nello studio dell'ingegneria del software.
Il modello è articolato nel seguente modo:

### Funzionalità

La Funzionalità è la capacità di un prodotto software di fornire funzioni che soddisfano esigenze stabilite, necessarie per operare sotto condizioni specifiche.
* Appropriatezza: rappresenta la capacità del prodotto software di fornire un appropriato insieme di funzioni per gli specificati compiti ed obiettivi prefissati all'utente.
* Accuratezza: la capacità del prodotto software di fornire i risultati concordati o i precisi effetti richiesti.
* Interoperabilità: è la capacità del prodotto software di interagire ed operare con uno o più sistemi specificati.
* Conformità: la capacità del prodotto software di aderire a standard, convenzioni e regolamentazioni rilevanti al settore operativo a cui vengono applicate.
* Sicurezza: la capacità del prodotto software di proteggere informazioni e dati negando in ogni modo che persone o sistemi non autorizzati possano accedervi o modificarli, e che a persone o sistemi effettivamente autorizzati non sia negato l'accesso ad essi.

### Affidabilità

L'Affidabilità è la capacità del prodotto software di mantenere uno specificato livello di prestazioni quando usato in date condizioni per un dato periodo.
* Maturità: è la capacità di un prodotto software di evitare che si verificano errori, malfunzionamenti o siano prodotti risultati non corretti.
* Tolleranza agli errori: è la capacità di mantenere livelli predeterminati di prestazioni anche in presenza di malfunzionamenti o usi scorretti del prodotto.
* Recuperabilità: è la capacità di un prodotto di ripristinare il livello appropriato di prestazioni e di recupero delle informazioni rilevanti, in seguito a un malfunzionamento. A seguito di un errore, il software può risultare non accessibile per un determinato periodo di tempo, questo arco di tempo è valutato proprio dalla caratteristica di recuperabilità.
* Aderenza: è la capacità di aderire a standard, regole e convenzioni inerenti all'affidabilità.

### Efficienza

L'efficienza è la capacità di fornire appropriate prestazioni relativamente alla quantità di risorse usate.
* Comportamento rispetto al tempo: è la capacità di fornire adeguati tempi di risposta, elaborazione e velocità di attraversamento, sotto condizioni determinate.
* Utilizzo delle risorse: è la capacità di utilizzo di quantità e tipo di risorse in maniera adeguata.
* Conformità: è la capacità di aderire a standard e specifiche sull'efficienza.

### Usabilità

L'usabilità è la capacità del prodotto software di essere capito, appreso, usato e benaccetto dall'utente, quando usato sotto condizioni specificate.
* Comprensibilità: esprime la facilità di comprensione dei concetti del prodotto, mettendo in grado l'utente di comprendere se il software è appropriato.
* Apprendibilità: è la capacità di ridurre l'impegno richiesto agli utenti per imparare ad usare la sua applicazione.
* Operabilità: è la capacità di mettere in condizione gli utenti di farne uso per i propri scopi e controllarne l'uso.
* Attrattiva: è la capacità del software di essere piacevole per l'utente che ne fa uso.
* Conformità: è la capacità del software di aderire a standard o convenzioni relativi all'usabilità.

### Manutenibilità

La manutenibilità è la capacità del software di essere modificato, includendo correzioni, miglioramenti o adattamenti.
* Analizzabilità: rappresenta la facilità con la quale è possibile analizzare il codice per localizzare un errore nello stesso.
* Modificabilità: la capacità del prodotto software di permettere l'implementazione di una specificata modifica (sostituzioni componenti).
* Stabilità: la capacità del software di evitare effetti inaspettati derivanti da modifiche errate.
* Testabilità: la capacità di essere facilmente testato per validare le modifiche apportate al software.

### Portabilità

La portabilità è la capacità del software di essere trasportato da un ambiente di lavoro ad un altro. (Ambiente che può variare dall'hardware al sistema operativo).
* Adattabilità: la capacità del software di essere adattato per differenti ambienti operativi senza dover applicare modifiche diverse da quelle fornite per il software considerato.
* Installabilità: la capacità del software di essere installato in uno specificato ambiente.
* Conformità: la capacità del prodotto software di aderire a standard e convenzioni relative alla portabilità.
* Sostituibilità: è la capacità di essere utilizzato al posto di un altro software per svolgere gli stessi compiti nello stesso ambiente.

## Qualità esterne

Le metriche esterne, specificate nella norma ISO/IEC 9126-2, misurano i comportamenti del software sulla base dei test, dall'operatività e dall'osservazione durante la sua esecuzione, in funzione degli obiettivi stabiliti in un contesto tecnico rilevante o di business.

## Qualità interne

La qualità interna, più precisamente le metriche interne, è specificata nella norma ISO/IEC 9126-3 e si applica al software non eseguibile (ad esempio il codice sorgente) durante le fasi di progettazione e codifica. Le misure effettuate permettono di prevedere il livello di qualità esterna ed in uso del prodotto finale, poiché gli attributi interni influiscono su quelli esterni e quelli in uso. Le metriche interne permettono di individuare eventuali problemi che potrebbero influire sulla qualità finale del prodotto prima che sia realizzato il software eseguibile. Esistono metriche che possono simulare il comportamento del prodotto finale tramite simulazioni.

## Qualità in uso

La qualità in uso rappresenta il punto di vista dell'utente sul software. Il livello di qualità in uso è raggiunto quando sia stato raggiunto sia il livello di qualità esterna sia il livello di qualità interna. Le norme ISO/IEC 9126-4 forniscono esempi di metriche da utilizzare per la misurazione della qualità rispetto ai tre punti di vista (interno, esterno, in uso). La qualità in uso, quindi, permette di abilitare specificati utenti ad ottenere specificati obiettivi con efficacia, produttività, sicurezza e soddisfazione.
* Efficacia: la capacità del software di mettere in grado gli utenti di raggiungere gli obiettivi specificati con accuratezza e completezza.
* Produttività: la capacità di mettere in grado gli utenti di spendere una quantità di risorse appropriate in relazione all'efficacia ottenuta in uno specificato contesto d'uso.
* Soddisfazione: è la capacità del prodotto software di soddisfare gli utenti.
* Sicurezza: rappresenta la capacità del prodotto software di raggiungere accettabili livelli di rischio di danni a persone, al software, ad apparecchiature o all'ambiente operativo d'uso.

## Ciclo di qualità del software

La qualità di un prodotto software dipende dalla qualità del processo di sviluppo adoperato e dalla maturità dell'organizzazione che lo produce, con tecniche e strumenti adeguati, determinando una sequenza logica di azioni lungo il ciclo di vita.

## Altre norme

Il modello di qualità del software ISO/IEC 9126 dal 2005 è confluito nel sistema di norma ISO/IEC 25000.