Il ruolo (fondamentale) del Software Quality Assurance
Quando si parla di software si fa riferimento, in termini generali, ad un componente logico che riceve un insieme di dati in ingresso, li elabora e produce infine un insieme di dati in uscita.
In tutte queste fasi, le varie attività che vengono svolte per accertarsi che il componente dia i risultati previsti rientrano nel cosiddetto software testing, responsabilità del team di Software Quality Assurance.
Ma che cos’è la Software Quality Assurance (SQA) e che cosa fa chi si occupa di garantire la qualità del software?
Che cos’è la Software Quality Assurance
La Software Quality Assurance corrisponde, letteralmente, alla Garanzia di Qualità del Software. Si tratta di quel processo di monitoraggio che si rivolge alla progettazione ingegneristica del software nel suo complesso, considerandone metodi e attività per assicurarsi della qualità del prodotto software finale e della sua conformità agli standard vigenti. Una serie di attività, insomma, che vanno dalla definizione dei requisiti iniziali fino al rilascio finale.
La Software QA può essere considerata a tutti gli effetti come l’applicazione del principio di matrice industriale del Controllo Qualità, che prevede il prodotto venga sottoposto a verifica da parte di personale tecnico specializzato e terzo rispetto a chi si occupa di progettazione e produzione.
Perché la Software QA è importante?
Non dare rilevanza alla Software QA implica, naturalmente, correre il rischio di mettere in produzione software altamente difettosi che dovranno poi essere corretti e ritestati dall’Application Maintenance. Un risparmio di denaro iniziale, insomma, che si tradurrà poi in spese raddoppiate: com’è vero che l’intervento di correzione su un sistema in produzione è più complesso, altrettanto vero è che non si può non prendere in considerazione l’enorme danno d’immagine per l’azienda e la conseguente perdita di fiducia da parte del cliente (associata alla sua percezione di bassa qualità del software).
Riassumendo, quindi, i vantaggi delle attività di Software Quality Assurance sono:
– Ritorno in immagine e affidabilità dell’azienda;
– Riduzione dei costi associati al malfunzionamento del software;
– Calo dei costi di Application Maintenance;
– Riduzione dei costi relativi alla progettazione delle evoluzioni future dell’applicazione (considerando che “qualità” implica anche documentare in modo esaustivo e strutturato il progetto).
Obiettivi della Software Quality Assurance
Quando si tratta di sviluppo software, bug ed errori rientrano nella norma. Questi, infatti, sono inevitabili a prescindere dalle competenze e dalle capacità tecniche dei programmatori perché dipendono piuttosto dalla complessità del software stesso. Più il software è complesso, più saranno le possibilità di incappare in errori e più sarà complicato, di conseguenza, scoprirli.
Oltretutto, non è raro che un test scritto ed eseguito con successo durante le prime fasi di sviluppo del software finisca per fallire in una fase successiva, dopo l’introduzione di modifiche al codice. Ma anche qui, le cose non sono così semplici: il problema sono i dati di input del test non più adatti? O l’errore sta nel codice? O, ancora, nel programma stesso?
La Software Quality Assurance entra in gioco proprio con l’obiettivo di monitorare il software durante tutto il suo ciclo di vita. Gli obiettivi della SQA possono riassumersi così:
– Verificare e validare il software, accertandosi che questo soddisfi i requisiti e le specifiche;
– Migliorare la qualità, collaudando il prodotto software secondo diversi parametri, uno dei quali relativo all’individuazione di eventuali errori.
Come riconoscere la qualità di un software: i 5 indicatori
Le caratteristiche alla base della qualità del prodotto software sono:
– Efficienza: il software utilizza un basso numero di risorse per operare, ovvero di tempo di utilizzo della CPU e di spazio di memoria;
– Affidabilità: la frequenza dei guasti registrata dalla misura del MTBF (Mean Time Between Failures, ovvero il tempo intercorso tra due guasti correlati successivi) è bassa e il sistema ha ottime capacità di reazione;
– Sicurezza: le politiche di controllo degli accessi messe in atto dal sistema per evitare intrusioni indesiderate sono affidabili;
– Manutenibilità: il codice è facile da mantenere, estendere e correggere, cosa generalmente associata alla realizzazione di un codice ben strutturo e dall’architettura modulare.
Cosa fa il team di Quality Assurance
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 del cambiamento: 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 del cambiamento: 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 in 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.
Tecniche messe in atto
Per concludere, ecco un elenco con alcune delle tecniche messe in atto dalla Software Quality Assurance:
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.