La norma ISO 90003 (UNI CEI ISO/IEC/IEEE 90003:2020 – Linee guida per l’applicazione della norma ISO 9001 nel settore del software) è una guida preziosa per le organizzazioni che desiderano applicare la ISO 9001:2015 nel campo dello sviluppo e della gestione del software. Questa norma offre indicazioni chiare per l’acquisizione, la fornitura, lo sviluppo, il funzionamento e la manutenzione del software, senza modificare i requisiti esistenti della ISO 9001:2015. L’applicazione di questa linea guida costituisce un passo importante per garantire la qualità e l’affidabilità dei servizi legati alle applicazioni software di qualsiasi tipo.
Oggi, purtroppo, si denota un forte decadimento della qualità del software sviluppato per le diverse applicazioni (programmi desktop, programmi client-server, applicazioni web, app per dispositivi mobili, ecc.). Il continuo aggiornamento dei software, causato apparentemente per motivi di sicurezza, ovvero per “patchare” le vulnerabilità emerse, in realtà maschera una qualità del software non adeguata al momento del rilascio. La fretta nel rilasciare nuove versioni spesso porta a trascurare test adeguati allo scopo e l’evento che ha messo in crisi a livello mondiali moltissimi sistemi Microsoft lo scorso luglio ne è solo un esempio.
Obiettivi della norma
I principali obiettivi della norma UNI CEI ISO/IEC/IEEE 90003:2020 sono:
- Guida all’applicazione della ISO 9001:2015: Fornire indicazioni specifiche per le organizzazioni su come applicare i principi e i requisiti della ISO 9001:2015 nel contesto dello sviluppo e della gestione del software.
- Supporto per l’acquisizione e la fornitura di software: Offrire linee guida per l’acquisizione, la fornitura, lo sviluppo, il funzionamento e la manutenzione del software e dei relativi servizi di supporto.
- Mantenimento della qualità: Assicurare che le pratiche di gestione del software siano allineate con gli standard di qualità internazionali, contribuendo così a migliorare la qualità e l’affidabilità dei prodotti software.
- Non modificare i requisiti ISO 9001:2015: La norma non aggiunge né modifica i requisiti della ISO 9001:2015, ma si concentra sull’applicazione di questi requisiti nel settore del software.
I benefici nell’applicazione delle linee guida
I benefici per un’organizzazione nell’applicare le linee guida della norma UNI CEI ISO/IEC/IEEE 90003:2020 alla gestione del software includono:
- Miglioramento della qualità del software: L’applicazione della norma aiuta a stabilire processi e pratiche che migliorano la qualità del software sviluppato, riducendo difetti e aumentando la soddisfazione del cliente.
- Allineamento con standard internazionali: Seguendo le linee guida della norma, le organizzazioni possono garantire che i loro processi di gestione del software siano conformi agli standard internazionali, facilitando l’integrazione e la cooperazione con partner e clienti globali.
- Ottimizzazione dei processi: La norma fornisce indicazioni su come implementare un sistema di gestione della qualità (SGQ) efficace, che può portare a una maggiore efficienza operativa e a una riduzione dei costi attraverso processi più snelli e ben definiti.
- Flessibilità e adattabilità: La norma è progettata per essere indipendente dalla tecnologia e dai modelli di ciclo di vita, permettendo alle organizzazioni di adattare le linee guida alle loro specifiche esigenze e contesti operativi.
- Supporto alla gestione del rischio: Implementando un sistema di gestione per la qualità basato su questa norma, le organizzazioni possono identificare e gestire meglio i rischi associati allo sviluppo e alla manutenzione del software, contribuendo a una maggiore stabilità e affidabilità dei prodotti.
- Soddisfazione del cliente: Un focus sulla qualità e sull’affidabilità del software porta a una maggiore soddisfazione del cliente, poiché i prodotti e i servizi forniti rispondono meglio alle loro esigenze e aspettative.
I requisiti principali della norma
I requisiti principali che caratterizzano la norma UNI CEI ISO/IEC/IEEE 90003:2020, in relazione all’applicazione della ISO 9001:2015 nel contesto del software, includono:
- Sistema di gestione della qualità (SGQ, QMS nella dizione inglese): Le organizzazioni devono stabilire, implementare, mantenere e migliorare un sistema di gestione della qualità che soddisfi i requisiti della ISO 9001:2015, adattandolo alle specificità del settore software.
- Focus sul cliente: È fondamentale garantire che i requisiti dei clienti siano compresi e soddisfatti, contribuendo così a migliorare la soddisfazione del cliente stesso.
- Processo di sviluppo del software: La norma incoraggia l’adozione di processi ben definiti per lo sviluppo, la gestione e la manutenzione del software, che possono includere pratiche di ingegneria del software come quelle descritte in ISO/IEC/IEEE 12207:2017.
- Documentazione e registrazioni: Le organizzazioni devono mantenere documentazione adeguata e registrazioni (informazioni documentate da conservare secondo la definizione ISO 9001:2015) per dimostrare la conformità ai requisiti del SGQ e per facilitare il monitoraggio e la revisione dei processi.
- Gestione dei rischi: È richiesto un approccio basato sul rischio per identificare, valutare e gestire i rischi associati ai processi di sviluppo del software, al fine di prevenire effetti negativi sulla qualità.
- Miglioramento continuo: Le organizzazioni devono impegnarsi in un processo di miglioramento continuo, utilizzando feedback, audit e analisi delle prestazioni per identificare opportunità di miglioramento.
- Formazione e competenza: È essenziale garantire che il personale coinvolto nei processi di sviluppo del software sia adeguatamente formato e competente, per garantire la qualità del lavoro svolto.
Questi requisiti mirano a garantire che le organizzazioni possano fornire software di alta qualità, soddisfacendo le aspettative dei clienti e conformandosi agli standard internazionali. Purtroppo spesso gli auditor ISO 9001 degli organismi di certificazione non entrano nel dettaglio di questi aspetti secondo quello che è indicato in questa normativa che, seppur linea guida, costituiscxe un valido strumento per comprendere se i requisiti ISO 9001 sono stati declinati correttamente nelle attività legate al settore informatico dello sviluppo software.
I test
Secondo la norma UNI CEI ISO/IEC/IEEE 90003:2020, la gestione del test del software deve seguire alcuni principi e pratiche chiave per garantire la qualità e l’affidabilità del prodotto finale. Ecco come deve essere gestito il test del software:
- Pianificazione dei test: È fondamentale sviluppare un piano di test che definisca gli obiettivi, le strategie, le risorse necessarie e i criteri di accettazione. Questo piano deve essere allineato con i requisiti del software e le aspettative del cliente.
- Definizione dei requisiti di test: I requisiti di test devono essere chiaramente definiti e documentati, in modo da garantire che tutti gli aspetti del software siano testati in modo adeguato. Ciò include la definizione di casi di test basati sui requisiti funzionali e non funzionali.
- Esecuzione dei test: I test devono essere eseguiti in modo sistematico e documentato. È importante registrare i risultati dei test, compresi eventuali difetti riscontrati, per facilitare la tracciabilità e la gestione delle problematiche.
- Verifica e validazione: I test devono essere utilizzati per verificare che il software soddisfi i requisiti specificati (verifica) e per convalidare che il software soddisfi le esigenze e le aspettative del cliente provandolo nell’ambiente operativo finale (validazione).
- Gestione dei difetti/anomalie: Deve essere implementato un processo per la gestione dei difetti, anomalie o malfunzionamenti identificati durante i test. Questo include la registrazione, la classificazione, la risoluzione e la verifica delle correzioni apportate.
- Riesame dei risultati dei test: I risultati dei test devono essere analizzati e riesaminati per identificare aree di miglioramento e per garantire che le problematiche siano state risolte in modo efficace. Questo processo contribuisce al miglioramento continuo del sistema di gestione della qualità.
- Documentazione dei test: È essenziale mantenere una documentazione dettagliata dei test, compresi i piani di test, i casi di test, i risultati e le azioni correttive intraprese. Questa documentazione serve come riferimento per audit e revisioni future.
Implementando queste pratiche, le organizzazioni possono garantire che il processo di test del software sia efficace e contribuisca a fornire prodotti di alta qualità che soddisfano le aspettative dei clienti. Troppo spesso i test vengono demandati allo sviluppatore stesso senza fornirgli indicazioni precisi di cosa e come deve essere testato l’applicativo. Spesso non vengono redatte delle vere e proprie Specifiche di Test che normalmente possono essere differenti dalle Specifiche dei Requisiti dell’applicativo: come testare un software è cosa diversa da come lo si deve realizzare.
La manutenzione del software
Ma dopo il collaudo di accettazione ed il rilascio come deve essere gestita la manutenzione del software e l’assistenza tecnica ai clienti secondo questa norma?
Secondo la norma UNI CEI ISO/IEC/IEEE 90003:2020, la gestione della manutenzione del software e dell’assistenza tecnica ai clienti deve seguire alcune linee guida fondamentali per garantire la qualità e l’affidabilità del servizio. Ecco come deve essere gestita:
- Pianificazione della manutenzione: È importante sviluppare un piano di manutenzione che definisca le attività necessarie per mantenere il software in buone condizioni operative. Questo piano dovrebbe includere la gestione delle modifiche, la risoluzione dei problemi e le attività di supporto.
- Attività di manutenzione: Le attività di manutenzione devono comprendere:
- Risoluzione dei problemi e supporto tecnico, inclusa l’assistenza help desk.
- Monitoraggio del sistema per rilevare eventuali guasti o malfunzionamenti.
- Modifiche all’interfaccia quando si apportano aggiunte o cambiamenti ai componenti hardware controllati dal software.
- Gestione della configurazione, test e attività di assicurazione della qualità.
- Documentazione delle attività di manutenzione: È essenziale mantenere registrazioni dettagliate delle attività di manutenzione, comprese le modifiche apportate, i problemi risolti e le interazioni con i clienti. Queste registrazioni possono essere utilizzate per valutare e migliorare il prodotto software e il sistema di gestione della qualità.
- Assistenza tecnica ai clienti: L’assistenza ai clienti deve essere ben strutturata e deve includere:
- Un sistema di supporto per rispondere alle richieste e ai problemi dei clienti. Un buon sistema di ticketing costituisce un valido supporto per svolgere l’assistenza tecnica al cliente.
- Formazione e documentazione per i clienti, per aiutarli a utilizzare il software in modo efficace.
- Un processo per raccogliere feedback dai clienti, che può essere utilizzato per migliorare il software e i servizi di supporto.
- Gestione dei rischi: Le organizzazioni devono gestire i rischi associati alla manutenzione del software, inclusi quelli legati alla disponibilità del supporto per i prodotti acquistati e alla continuità del servizio.
- Miglioramento continuo: Le informazioni raccolte durante le attività di manutenzione e assistenza devono essere utilizzate per identificare opportunità di miglioramento, sia per il software che per i processi di supporto. Questo approccio contribuisce a garantire che il software rimanga rilevante e soddisfi le esigenze dei clienti nel tempo.
Implementando queste pratiche, le organizzazioni possono garantire che la manutenzione del software e l’assistenza tecnica siano gestite in modo efficace, contribuendo così alla soddisfazione del cliente e alla qualità complessiva del prodotto.
Naturalmente non vanno dimenticati i requisiti contrattuali con i clienti. Spesso le attività di manutenzione orinaria sono comprese nel canone di licenza d’uso (o canone di abbonamento per software SaaS). Esse comprendono la risoluzione dei bug o malfunzionamenti software, il supporto operativo nell’utilizzo dell’applicativo (talvolta compreso un “monte ore” di assistenza), interventi eseguiti entro determinati SLA e così via.
Las manutenzione comprende non solo attività correttive, ma anche attività evolutive, ovvero modifiche che migliorano le funzionalità e la sicurezza del software. La loro gestione deve essere mantenuta sotto controllo attraverso procedure di change management che definiscano un ciclo di approvazione delle modifiche comprendente anche la valutazione dei possibili effetti negativi dell’implementazione delle modifiche sulle funzionalità preesistenti, prevedendo appositi test di regressione (regression test).
È opportuno che il fornitore del servizio di assistenza software stabilisca con il cliente una classificazione delle anomalie segnalate per livello di gravità (es. Bloccante, Critica, Secondaria…) e per priorità dell’intervento (es. priorità alta richiede un intervento entro 4 ore, ecc.).
In base ai requisiti contrattuali il fornitore del servizio di assistenza dovrà dimensionare adeguatamente le proprie risorse dedicate.
Documenti e registrazioni
Ma quali sono le principali registrazioni da conservare e documenti da mantenere nel ciclo di progettazione e sviluppo software?
Secondo la norma UNI CEI ISO/IEC/IEEE 90003:2020, è fondamentale mantenere una serie di registrazioni e documenti durante il ciclo di progettazione e sviluppo del software per garantire la qualità e la tracciabilità del processo. Le principali registrazioni e documenti da conservare includono:
- Piani di progetto: Documenti che definiscono gli obiettivi, le risorse, le tempistiche e le strategie per il progetto di sviluppo software.
- Requisiti del software: Documentazione che specifica i requisiti funzionali e non funzionali del software, inclusi i criteri di accettazione.
- Specifiche di progettazione e sviluppo: Documenti che descrivono l’architettura, il design e le specifiche tecniche del software, inclusi diagrammi di flusso e modelli E-R.
- Casi di test e risultati: Documentazione relativa ai casi di test sviluppati per verificare e validare il software, insieme ai risultati ottenuti durante le attività di test.
- Documentazione di sviluppo: Include codice sorgente, pseudo codice, modelli di dati e qualsiasi altro output generato durante il processo di sviluppo.
- Documentazione di supporto: Manuali utente, documentazione operativa, materiale di formazione e documentazione di manutenzione.
- Registrazioni dei riesami, verifiche e validazioni: Verbali delle riunioni e delle review del progetto, che documentano le decisioni prese e le modifiche apportate durante il ciclo di vita del progetto.
- Registrazioni delle modifiche: Documentazione delle modifiche apportate al software, inclusi i motivi delle modifiche e l’impatto previsto (processo di change management).
- Documentazione di gestione della configurazione: Registrazioni relative alla gestione della configurazione del software, che includono lo stato delle versioni, le modifiche e le approvazioni. Il processo di configuration management oggi non può più essere gestito senza tool appositi (es. SVN, GitHub, Microsoft Source Safe, ecc.).
- Feedback e valutazioni*: Documentazione relativa al feedback ricevuto dagli utenti e alle valutazioni delle prestazioni del software, che possono essere utilizzate per miglioramenti futuri.
Mantenere questi documenti e registrazioni non solo aiuta a garantire la qualità del software, ma fornisce anche una base per audit, revisioni e miglioramento continuo del processo di sviluppo.
Il processo di progettazione e sviluppo software
Vediamo ora una breve sintesi del capitolo più importante di questa norma, ovvero quello dedicato al processo di Progettazione e sviluppo software.
8.3 PROGETTAZIONE E SVILUPPO DI PRODOTTI E SERVIZI
8.3.1 Generalità
- La progettazione e lo sviluppo devono essere disciplinati per prevenire problemi.
- Riduzione della dipendenza dalla verifica e validazione per l’identificazione dei problemi.
8.3.2 Pianificazione della progettazione e dello sviluppo
- La pianificazione deve coprire attività come analisi, progettazione, sviluppo, testing, installazione e supporto.
- Include anche gestione delle risorse, interfacce, analisi dei rischi e altro.
8.3.2.2 Ciclo di vita del software
- L’uso di modelli di ciclo di vita (es. Waterfall, Agile) appropriati è essenziale.
- Adattamento delle procedure con il progredire del progetto.
8.3.2.3 Riesame, verifica e validazione
- Riesame, verifica e validazione per la progettazione e lo sviluppo del software.
- Operazioni e manutenzione del software trattate negli accordi sul livello di servizio o nelle procedure di manutenzione.
8.3.2.4 Responsabilità e autorità
- Applicabile al software, ma senza una guida specifica per il software.
8.3.2.5 Interfacce
- Definizione chiara delle responsabilità e delle informazioni tra le parti coinvolte nel prodotto software.
- Coinvolgimento degli utenti finali e funzioni operative intermedie nelle interfacce.
8.3.3 Input di progettazione e sviluppo
- Necessità di input chiari e precisi per garantire un progetto e sviluppo efficace.
- Revisione accurata per eliminare ambiguità e assicurare coerenza.
8.3.4 Riesame, verifica e validazione dei risultati
- Attività formali per assicurare che i risultati siano conformi ai requisiti.
- Procedure di gestione delle carenze identificate durante le attività di revisione.
8.3.5 Risultati della progettazione e dello sviluppo
- Definizione e documentazione completa degli output del processo di progettazione e sviluppo.
- Conservazione dei risultati specificati per un periodo coerente con la politica di gestione documenti.
Per la gestione della configurazione viene fatto riferimento alla norma ISO/IEC/IEEE 12207:2017.
Conclusioni
Oggi il software impatta in modo significativo non solo sulle attività produttive, ma anche sulle attività umane ordinarie (rapporti con la P.A. per richiedere informazioni e fornire dichiarazioni e pagamenti, sistemi di pagamento, sistemi IOT presenti in aziende ed anche in ambienti domestici, app per lo svago e l’intrattenimento,…), pertanto è necessario che chi progetta, sviluppa e manutiene il software applichi regole consolidate per garantire un livello di qualità e sicurezza delle applicazioni adeguato all’utilizzo che ne viene fatto.