Le considerazioni svolte fino a questo punto hanno smontato il modello di qualità del software basato sui test, dimostrandone la non validità a garanzia della correttezza.
Ma cè anche un altro aspetto: la correttezza è solo una delle numerose qualità che deve possedere un prodotto software.
Nella figura vediamo il modello di qualità proposta da Bohem, dove sono distinti vari filoni che si suddividono poi in aspetti sempre più dettagliati.

Abbiamo delle qualità relative alluso del programma, alla sua portabilità e manutenzione.
Nelluso del programma vengono evidenziate laffidabilità, lefficienza e linterfaccia utente.
Nel momento della manutenzione troviamo la provabilità del sistema, la comprensibilità del codice, la modificabilità.
Entrando nei dettagli si nota come sia possibile definire degli aspetti ancora più primitivi, come la leggibilità del codice o la strutturazione.
Concentrando lattenzione su uno solo di questi aspetti, per esempio la correttezza, si ottiene si un programma che funziona perfettamente, ma può risultare di bassa qualità negli altri.
Per esempio possiamo avere un programma che non sbaglia mai, ma che è così difficile da usare che solo pochi utenti riescono ad ottenere i risultati voluti (che equivale ad avere un programma con qualche buco).
Ancora potremmo avere un programma perfetto, ma con il codice così oscuro e poco strutturato che ogni modifica o miglioramento introduce decine e decine di errori.
Elenchiamo alcune delle caratteristiche principali di un programma dal punto di vista qualitativo:
Portabilità: la semplicità di
trasferimento di un programma da un ambiente operativo
allaltro, da un computer all altro.
Affidabilità: la capacità di eseguire
una determinata funzione sotto delle determinate condizioni per
un determinato periodo di tempo.
Efficienza: la capacità di portare a
termine il compito assegnato con lo spreco minimo di risorse
macchina.
Errori: le differenze tra i risultati
stabiliti come corretti per definizione o per via teorica e i
risultati effettivamente prodotti.
Robustezza: la capacità di continuare ad
operare in modo corretto anche di fronte a situazioni di input
palesemente errate.
Correttezza: la qualità di un programma
privo di errori di codifica o progettazione, di un programma che
rispetta le specifiche stabilite in analisi, di un programma che
soddisfa lutente.
Purtroppo risulta ancora difficile stabilire delle metriche precise per ognuno di questi criteri, e bisogna affidarsi ancora allesperienza ed al buon senso.