Software Quality Assurance (Software QA) è una metodologia per garantire che la qualità del prodotto software sia conforme a una serie predeterminata di standard.
Il controllo qualità del software non è solo una fase del processo di sviluppo; funziona in parallelo con il ciclo di vita dello sviluppo del software.
Le aziende devono accertarsi che ogni parte del software, interna ed esterna, sia conforme allo standard predefinito. Verifica individualmente ogni blocco di questo processo per identificare i problemi prima che diventino un problema grave.
Esternamente invece le aziende valutano l'efficienza, l'affidabilità e i costi di manutenzione.
Le caratteristiche interne testate dai processi di QA del software includono struttura, complessità, leggibilità, flessibilità, testabilità e le pratiche di codifica che gli sviluppatori hanno seguito per sviluppare il software.
Esistono molti metodi diversi con cui viene eseguito l’SQA e molti standard diversi a cui la qualità dovrebbe essere conforme, come ISO 9000 o CMM.
Ovviamente gli standard QA sono cambiati nel tempo per rimanere aggiornati all’evoluzione del business. L’ultima della serie ISO 9000 è la ISO 9001: 2015 e include una maggiore attenzione al cliente, così come pratiche di alta gestione in ottica evolutiva, finalizzate a mantenere il passo aziendale allineato a logiche di miglioramento continuo.
Insieme a tutti i miglioramenti generali apportati alla ISO 9001, la ISO 9001:2015 include miglioramenti alla sua struttura e maggiori informazioni per il processo decisionale basato sul rischio.
Esistono due diversi approcci al QA del software:
- Approccio sulla gestione dei difetti di qualità del software
- Approccio sugli attributi di qualità del software
L'approccio Software Quality Defect Management si concentra sul conteggio e sulla gestione dei difetti. Il livello di gravità può generalmente classificare i difetti.
I team di sviluppo software utilizzano strumenti come matrici di perdita di difetti e grafici di controllo chiari e concisi per misurare e migliorare la capacità del loro processo di sviluppo software .
L' approccio Software Quality Attributes funziona aiutando gli ingegneri del software ad analizzare le prestazioni di un prodotto software. Questo approccio si concentra sul dirigere l'attenzione dell'ingegnere su diversi fattori di qualità.
Le caratteristiche alla base della qualità del prodotto software sono:
Affidabilità. L'affidabilità riflette la capacità del sistema di continuare a fare gli straordinari in ambienti e condizioni di lavoro differenti. L'applicazione dovrebbe restituire costantemente risultati corretti.
Usabilità. Le applicazioni software dovrebbero essere facili da imparare e navigare. Questa facilità d'uso e l'efficacia dell'utilizzo del prodotto è chiamata usabilità.
Efficienza. Questo attributo QA software indica quanto bene il sistema utilizza tutte le risorse disponibili. Viene mostrato dalla quantità di tempo necessaria al sistema per completare qualsiasi attività.
Manutenibilità. Mostra quanto sia facile mantenere diverse versioni di sistema e supportare modifiche e aggiornamenti in modo rapido e funzionale.
Portabilità. Questo attributo di garanzia della qualità del software dimostra la capacità del sistema di funzionare efficacemente su varie piattaforme, ad esempio portabilità dei dati, visualizzazione, hosting e altro ancora.
È possibile utilizzare questi attributi per il controllo qualità e il controllo qualità del software.
Tra le attività che rientrano nelle competenze del team di Software Quality Assurance possiamo citare:
1. Creazione di un SQA Management Plan: definizione di un piano relativo alle attività di Software Quality Assurance da svolgere durante l’intero progetto.
2. Impostazione dei checkpoint: calendarizzazione dei momenti in cui valutare la qualità delle attività per tenere traccia costante del progetto e assicurare ispezioni di qualità regolari.
3. Applicazione di tecniche di ingegneria del Software: uso di tecniche di ingegneria del software per il raggiungimento di specifiche di qualità e raccolta di informazioni con cui stimare il progetto.
4. Esecuzione di revisioni tecniche formali: valutazione, assieme al team tecnico, della qualità e del design del prototipo per poter cogliere, sin da questa fase, eventuali errori nella fase iniziale del System Development Life Cycle.
5. Rafforzare l’aderenza al processo: accertamento costante dell’aderenza del processo durante l’intero percorso di sviluppo del software attraverso la valutazione del prodotto (per confermare che questo soddisfi i requisiti) e il monitoraggio del processo (per verificare la correttezza dei vari passaggi dello sviluppo del software).
6. Monitoraggio dell'evoluzione: adozione di un mix di procedure manuali e strumenti automatizzati per convalidare, valutare la natura e controllare l’effetto delle modifiche
7. Misura l’impatto dell'evoluzione: valutazione dell’impatto prodotto dai cambiamenti apportati per risolvere eventuali errori e difetti.
8. Esecuzione di audit SQA: ispezione e comparazione tra l’effettivo System Development Life Cycle eseguito e quello preventivato. Questa attività porta alla luce eventuali problematiche di conformità.
9. Archiviazione dei registri e dei report: raccolta, conservazione e condivisione con tutte le parti interessate dei vari documenti relativi alla Software Quality Assurance a partire da risultati dei testi, degli audit, rapporti di revisione etc.
Esistono diverse tecniche per SQA. L'auditing è la tecnica principale ampiamente adottata. Tuttavia, abbiamo anche alcune altre tecniche significative.
Audit: ispezione dei prodotti di lavoro e delle relative informazioni per determinare se l’insieme di processi standard è stato seguito o meno.
Revisione: valutazione del software da parte degli stakeholder interni ed esterni per ottenere commenti e approvazione.
Ispezione del codice: revisione formale che prevede l’esecuzione di test statici per trovare bug ed evitare lo svilupparsi di ulteriori difetti nelle fasi successive.
Ispezione del design: ispezione del design volta a controllare, ad esempio, i requisiti generali, le specifiche funzionali e l’interfaccia, la tracciabilità dei requisiti, la gestione degli errori etc.
Simulazione: strumento che modella situazioni reali per esaminare virtualmente il comportamento del sistema.
Test funzionale: tecnica che verifica cosa fa il sistema (senza considerare il come). Questo tipo di test si concentra principalmente sulla verifica delle specifiche o delle caratteristiche del sistema.
Standardizzazione: riduzione dell’ambiguità e delle supposizioni per garantire la qualità.
Analisi statica: analisi software che viene eseguita da uno strumento automatizzato senza eseguire effettivamente il programma.
Procedure dettagliate: revisione, relative al software o al codice, in cui lo sviluppatore guida i membri del team di sviluppo per esaminare il prodotto, sollevare domande, proporre alternative e commentare possibili errori.
Stress test: verifica della robustezza del sistema sottoposto a carico pesante, cioè oltre le condizioni normali.
La garanzia della qualità del software è un processo ombrello impiegato in tutta la pipeline di sviluppo del software. È il modo migliore per le aziende per assicurarsi di aver testato ogni parte del loro prodotto secondo gli standard più elevati prima di lanciarlo sul mercato.