Quality of Service di un software

Q

Durante lo sviluppo di un software l’unico aspetto su cui ci si concentra è quello legato ai requisiti funzionali, ovvero all’implementazione di quelle che sono le funzionalità richieste o desiderate del software che si sta realizzando.
Nel disegnare un’architettura software però è fondamentale tenere bene a mente quelli che sono i requisiti non funzionali, ovvero tutti quegli aspetti che ne determinano la Quality of Service.

Principali attributi di Quality of Service

Di seguito sono mostrate le caratteristiche principali e più comuni che un “buon” software dovrebbe avere:

Disponibilità

E’ il grado in cui un sistema, un sottosistema o un’apparecchiatura è accessibile ed è in grado di svolgere una funzione richiesta in determinate condizioni ad un dato istante (es. fornire un servizio ad un utente), o durante un dato intervallo di tempo, supponendo che siano assicurati i mezzi esterni eventualmente necessari.
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.

Affidabilità

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.

Robustezza

E’ la capacità di far fronte ad errori durante l’esecuzione o input errati gestendo arresti e azioni inattese. Un esempio più essere la gestione delle eccezioni per evitare comportamenti non previsti o arresti anomali dell’esecuzione.

Gestibilità

E’ la capacità di amministrare e quindi gestire le risorse del sistema per garantire la disponibilità e le prestazioni del sistema stesso rispetto alle altre funzionalità.
Insieme di funzionalità di sistema utilizzate per l’avvio e l’arresto del server, un esempio sono l’installazione di nuovi componenti, la gestione delle autorizzazioni di sicurezza e l’esecuzione di altre attività.
Una metrica può essere il numero di ore di personale richieste al mese per eseguire gli normali aggiornamenti.

Flessibilità

E’ la capacità di adattarsi a modifiche della configurazione hardware o dell’architettura senza un grande impatto sul sistema sottostante.

Performance

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.

Scalabilità

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.

Estensibilità

E’ la capacità di aggiungere facilmente nuove funzionalità minimizzando l’impatto sulle funzionalità già esistenti.

Manutenibilità

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.

Riusabilità

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.

Sicurezza

E’ la capacità di assicurare che le informazioni gestite da un componente non siano accessibili e modificabili da altre parti.

Conclusioni

Come avrete potuto intuire dalla lettura di questo articolo i cosiddetti requisiti non funzionali possono avere una grande importanza e rilevanza su sistemi di medie e grandi dimensioni, che devono avere una vita abbastanza lunga, che trattano dati sensibili o devono supportare carichi consistenti e variabili nel tempo.

E’ pertanto buona pratica dedicargli molta attenzione in fase di design e progettazione di un architettura software.

A proposito di me

Alessio Fiore

Grande appassionato di sviluppo software e linguaggi di programmazione ha una grande conoscenza nel mondo Java e framework come Spring e Hibernate.
Laureato magistrale in Ingegneria Informatica lavora come sviluppatore software in ambito Telco principalmente lato backend, ma coltivando sempre molto interesse su tecnologie frontend.
Ha una grande esperienza su system integration, architetture software e sistemi distribuiti.

Di Alessio Fiore

Gli articoli più letti

Articoli recenti

Commenti recenti