Ingegneria del software: La qualità del software

Ingegneria del software: La qualità del software

Introduzione

I sistemi informatici sono ormai una parte significativa della società moderna. In ogni settore, dai sistemi bancari/assicurativi all’e-commerce, dai sistemi di trasporto a quelli sanitari, è praticamente impossibile condurre la maggior parte delle attività dell’uomo, senza l’ausilio di sistemi software. E’ quindi essenziale che questi operino in modo affidabile, evitando eventi catastrofici come blackout di metropoli, disastri aerei, fallimenti di missioni spaziali, crack finanziari.
In tutti questi casi, ci troviamo di fronte a sistemi in cui i requisiti di affidabilità sono di importanza essenziale.

L’affidabilità è un concetto complesso da formulare, dipendente da diversi fattori di qualità; è un parametro esterno della qualità del software, vale a dire che si riferisce alla qualità percepita dagli utenti. In estrema sintesi possiamo definire l’affidabilità come “the ability of a system to avoid service failures that are more frequent and more severe than is acceptable to the user(s)”.
Tuttavia, l’insieme delle attività necessarie per ottenere il livello di affidabilità desiderata richiedono costi di sviluppo ingenti.

L’obiettivo generale di qualità accettabile a costi accettabili è una sfida sia tecnica che manageriale, e raggiungerlo richiede una conoscenza di entrambi gli aspetti.
Garantire la qualità del software non dovrebbe essere una fase tra lo sviluppo e la distribuzione, ma piuttosto un insieme di attività intrecciate tra di loro, con il compito di verificare la bontà degli artefatti prodotti, dai requisiti iniziali, agli artefatti di progetto, fino ad arrivare alla qualità del prodotto finale. La realizzazione di tali attività, in pratica, è spesso solo parziale. Esse richiedono scelte attente, una pianificazione accurata, e combinazioni di tecniche idonee per la specifica organizzazione, i prodotti e i processi; tuttavia non sempre, all’interno di un’azienda, si ha completa familiarità con l’intera gamma di tecniche di verifica e validazione, dal controllo ai test, all’analisi automatizzata.

Ingegneria del software - La qualità del software
Ingegneria del software – La qualità del software

La definizione di qualità del software

Conformance to explicitly stated functional and performance requirements, explicitly documented development standards, and implicit characteristics that are expected of all professionally developed software” (da Pressman).

Questa è la definizione che i testi di ingegneria del software propongono per la qualità del software.
D’altro canto, lo sviluppo del software è un’attività creativa e tecnica allo stesso tempo; un’attività ad altissimo contenuto intellettuale e quindi con un grande margine di errore umano. In sintesi, si tratta di tradurre esigenze (spesso non ben identificate) in una soluzione tecnica deterministicamente corretta. Quello che possiamo fare è, da un lato, ridurre il numero di errori che sono inevitabilmente immessi nelle singole fasi e, dall’altro, potenziare la rimozione degli errori immessi individuandoli il più presto possibile, cioè nella fase stessa in cui questi sono stati introdotti.
Ci sono quindi due fasi cruciali per la qualità del software:

  1. l’introduzione di errori nella fase di realizzazione (analisi, progettazione e codifica);
  2. la rimozione degli errori, prima attraverso la revisione dei requisiti e della progettazione, poi attraverso la verifica (test ed analisi) del codice sviluppato.

Un errore commesso in una fase iniziale del ciclo di sviluppo software (analisi,progetto e codifica) genera altri errori nella fase successiva, e così via.
L’analisi condotta sugli errori rilevati nel codice, inoltre, ha dimostrato che essi sono imputabili solo in minima parte ad una errata codifica mentre la maggior parte di essi è da imputare a specifiche e a requisiti incompleti o errati, a errori nel disegno dei dati, nella progettazione o nei test.
Una prima conclusione ovvia, è che un buon livello di qualità si raggiunge con:

  1. la riduzione degli errori immessi in fase di analisi, progettazione e codifica;
  2. il potenziamento della rimozione degli errori introdotti.

Basterebbe infatti introdurre il minor numero possibile di errori e poi, sapendo quanti e quali errori siano stati inseriti ed in quali programmi o parti di codice, correggerli.
Purtroppo, il bilancio di queste due attività, nella pratica quotidiana, è sempre negativo ed un considerevole numero di errori (fault) sfugge alle attività di correzione e sono quindi rilasciati in produzione insieme al codice: sarà allora l’utente a scoprirli e lo sviluppatore a correggerli.

Già da alcuni anni il mondo dello sviluppo software ha dirottato la propria attenzione dalla problematica della gestione degli errori nel software, a quella dei costi e tempi di sviluppo. La sfida oggi sembra essere quella di “produrre software a costi inferiori ed in tempi brevi”. Un’altra caratteristica che è cresciuta notevolmente negli ultimi decenni è la complessità del software e la conseguente difficoltà ad effettuarne la manutenzione. In pratica, il codice è
continuamente modificato per rispondere a diverse esigenze: nuovi requisiti, adeguamento a nuove normative, miglioramento di aspetti funzionali, prestazionali e gestionali, ecc.
Intervenire sul codice esistente può risultare, a volte, difficile e costoso quando questo non è stato già progettato e realizzato correttamente per facilitare la manutenzione, sia correttiva che evolutiva e migliorativa. La qualità della progettazione è quindi un elemento fondamentale per agevolare l’evoluzione del software.

Una soluzione, ovvia, semplice ed efficace a questo problema è sicuramente la seguente: capire bene le esigenze, progettare una soluzione corretta e modulare, produrre un codice robusto e facile da manutenere, eseguire test esaustivi ed efficaci.
L’ingegneria del software fornisce tecniche e metodi di sicura efficacia per indirizzare queste problematiche.

 

Precedente Perché comprare online? - Shopping online sinonimo di convenienza e risparmio Successivo Definizione di dispositivo mobile: smartphone e tablet

Lascia un commento

*