Gli attributi di qualità del software possono essere spiegati come le caratteristiche del sistema dell'applicazione software che vengono tenute sotto controllo per soddisfare le esigenze del software ad essere di buona qualità. Qui, per gli standard di qualità del software, il termine qualità può essere definito come una scala di distinzione, per soddisfare le esigenze del cliente o dell'utente finale, per soddisfare i principi che l'applicazione deve seguire, per mantenere la facilità d'uso, degli aspetti, ecc. Questi attributi sono classificati come la specifica del requisito non funzionale, che deve essere soddisfatta per rendere eccezionale la qualità del software.
Di seguito sono mostrate le caratteristiche principali e più comuni che un “buon” software dovrebbe avere:
Questo attributo indica che un'applicazione dovrà eseguire tutte le attività per le quali è stata assegnata. La disponibilità include anche alcuni concetti relativi alla sicurezza, alle prestazioni, all'integrità, all'affidabilità e alla riservatezza del software.
Inoltre, la disponibilità di prim'ordine indica che un software sia disponibile dopo eventuali guasti operativi in modo che i periodi di interruzione del servizio non superino un valore temporale specifico.
Il termine “24×7” descrive la disponibilità totale. Questo aspetto di un sistema è spesso accoppiato con quello di performance.
Una metrica è il rapporto del tempo totale in cui un’unità funzionale è in grado di essere utilizzata durante un dato intervallo per la durata dell’intervallo stesso.
L'interoperabilità descrive la capacità di due sistemi di impegnarsi nello scambio di informazioni tramite determinate interfacce. Pertanto, gli ingegneri del Software devono esaminare l'attributo di interoperabilità in termini di interoperabilità sia sintattica che semantica.
E’ la capacità di un oggetto di eseguire una funzione richiesta in una data condizione per un periodo di tempo specificato. La capacità di garantire l’integrità e la coerenza di un’applicazione e delle sue transazioni. È anche definibile come la probabilità che un’unità funzionale esegua la sua funzione richiesta per un intervallo specificato nelle condizioni specificate.
E’ la capacità di eseguire le funzionalità richieste in un lasso di tempo che soddisfa gli obiettivi specificati.
Una metrica può essere il numero di transazioni per secondo che un sistema riesce ad elaborare.
E’ la capacità di far fronte ad errori durante l’esecuzione o input errati gestendo arresti e azioni inattese. Un esempio può essere la gestione delle eccezioni per evitare comportamenti non previsti o arresti anomali durante l’esecuzione.
Ogni sistema è progettato per essere facilmente utilizzato per eseguire determinate attività. L'attributo di usabilità denota la facilità con cui gli utenti sono in grado di eseguire attività sul sistema.
Il principio più noto per questa proprietà è KISS (Keep It Simple Stupid).
E’ la capacità di adattarsi a modifiche della configurazione hardware o dell’architettura senza un grande impatto sul sistema sottostante.
E’ la capacità di supportare i requisiti di disponibilità e performance all’aumentare del carico. La scalabilità può essere di due tipi: verticale aumentando la capacità del server esistente (es: in termini di memoria o numero CPU, oppure orizzontale aggiungendo server o numero di istanze).
E’ la capacità di un software di essere facilmente manutenuto ad esempio in termini di correzione di bug, sostituzione di componenti o massimizzando la vita di un prodotto.
E’ la capacità di usare un componente in uno o più contesti senza dover apportare modifiche allo stesso. Questo aspetto assume una notevole importanza perché permette di ottenere un risparmio in termini di tempi e costi.
E’ la capacità di assicurare che le informazioni gestite da un componente non siano accessibili e modificabili da altre parti.
Questo attributo determina la conformità di un software ai requisiti e alle specifiche effettive. La maggior parte dei professionisti considera questo attributo come un requisito fondamentale e principale di un'applicazione moderna e pertanto sosterrebbe l'esecuzione di test che valutano la funzionalità desiderata di un sistema nelle fasi iniziali di test del software.
La garanzia della qualità del software è un processo di copertura impiegato in tutta la pipeline di sviluppo del software. E’ pertanto buona pratica dedicargli molta attenzione in fase di design e progettazione di un architettura software.