Qualità del software Andrea Altomare 5°A

Indice

1. Cos'è

2. Classificazione dei parametri

3. Parametri di qualità esterni

  • Correttezza
  • Affidabilità
  • Robustezza
  • Efficienza
  • Usabilità
  • Scalabilità

4. Parametri di qualità interni

  • Verificabilità
  • Manutenibilità
  • Riparabilità
  • Evolvibilità
  • Riusabilità
  • Portabilità

5. ISO/IEC 12207:2008: Ciclo di vita

6. Misurazione del software

  • LOC
  • Numero ciclomatico
Cos'è?

Con "qualità del software" si indica quanto un prodotto software soddisfi delle determinate aspettative rispetto a dei parametri riguardanti il suo funzionamento e la sua struttura interna.

Classificazione dei parametri

Esistono due classi di parametri:

  1. esterni: si riferiscono alla qualità del software nella misura in cui è percepita dagli utenti fruitori, includono: correttezza, affidabilità, robustezza, efficienza, e usabilità;
  2. interni: sono relativi alla qualità percepita dagli sviluppatori, includono: verificabilità, manutenibilità, riparabilità, evolvibilità, riusabilità, portabilità.
Parametri di qualità esterni

Correttezza

Definizione: un programma o sistema software si dice corretto se si comporta esattamente secondo quanto previsto dalla sua specifica dei requisiti.

In pratica, un sistema è corretto se effettua esattamente ciò per il quale è stato progettato.

Affidabilità

Definizione: un sistema è tanto più affidabile quanto più raramente, durante l'uso del sistema, si manifestano malfunzionamenti.

Talvolta si parla di affidabilità come la misura in cui un utente può fidarsi del software che sta utilizzando.

Robustezza

Definizione: la robustezza di un sistema è la misura in cui il sistema si comporta in modo ragionevole in situazioni impreviste, non contemplate dalle specifiche.

Se ad esempio vi sono input imprevisti o utilizzi impropri del programma, ci si aspetta da esso risposte adeguate (messaggi di errore, ecc...) per definirlo "robusto".

Efficienza

Definizione: un sistema è efficiente se usa memoria, CPU e altre risorse in modo proporzionato ai servizi che svolge, ovvero senza sprechi.

Dunque, tanto più il prodotto è in grado di lavorare ad alte prestazioni senza richiedere grandi risorse, tanto più è considerato efficiente.

Usabilità

Definizione: un sistema è facile da usare se un essere umano lo reputa tale.

L'usabilità è una delle caratteristiche più difficili da definire con certezza poiché è estremamente soggettiva e dipende dal contesto e dall'esperienza dell'utente nell'utilizzo dell'applicazione.

Scalabilità

Definizione: un sistema è scalabile se può essere adattato a diversi contesti con forti differenze di complessità senza che questo richieda la riprogettazione dello stesso sistema.

Tale fattore permette di ridurre i costi di produzione e manutenzione del software.

Parametri di qualità interni

Verificabilità

Definizione: un sistema è verificabile se le proprietà di correttezza ed affidabilità sono facili da verificare.

Per aumentare la verificabilità si utilizzano tecniche di programmazione modulare e opportuni linguaggi di programmazione.

Manutenibilità

Definizione: facilità di apportare modifiche a sistema realizzato.

Quando si rilevano dei malfunzionamenti al software, quando se ne produce una nuova versione, quando sono richieste modifiche dal cliente... in tutti questi casi il fattore manutenibilità è di fondamentale importanza.

Riparabilità

Definizione: un sistema è riparabile se la correzione degli errori è poco faticosa.

Anche la riparabilità, come la verificabilità, si persegue attraverso la modularizzazione e l'organizzazione delle varie componenti del programma.

Evolvibilità

Teoricamente, il software è facilmente modificabile, differentemente da altri prodotti ingegneristici.

Tuttavia non vengono mai effettuati studi di fattibilità approfonditi e non si progettano le modifiche. Inoltre, talvolta i cambiamenti apportati non vengono neanche documentati per cui le specifiche non vengono aggiornate, rendendo le variazioni future difficili da compiere.

È necessario quindi progettare e sviluppare il software in previsione delle evoluzioni a venire, in modo da sfruttare al meglio i costi sostenuti in passato.

Riusabilità

Se un programma è riusabile, le sue parti possono essere utilizzate per creare un software diverso.

In questo modo si possono diminuire i costi e aumentare l'affidabilità dei prodotti.

Il fattore riusabilità si ottiene adottando particolari tecniche e metodologie di progettazione, e con la standardizzazione del processo di sviluppo.

Portabilità

Definizione: un sistema è portabile se è in grado di funzionare in ambienti diversi.

Ad oggi, questa caratteristica è di primaria importanza. Con la grande e varia offerta di sistemi e ambienti sui quali far funzionare i propri prodotti, è fondamentale che questi siano in grado di essere scalabili al punto da non dover operare delle modifiche (o comunque attuarne di minime) ed essere comunque utilizzabili. Ciò porta anche a consistenti guadagni economici, contenendo i costi di produzione.

ISO/IEC 12207:2008: Ciclo di vita

Anche il software, come ogni altra attività umana, possiede un proprio ciclo di vita. Il lyfe cycle è una serie di fasi che descrive l'evoluzione di un programma: dalla nascita all'abbandono. Il ciclo di vita viene formalizzato nel documento ISO/IEC 12207:2008, "System and software engineering - Software life cycle processes".

Il life cycle viene descritto da tra gruppi di processi:

Primari

  • Acquisition (acquisizione)
  • Supply (fornitura)
  • Development (sviluppo)
  • Operation (esercizio)
  • Maintenance (manutenzione)
  • Destruction (dimissione)

di Supporto

  • Documentation (documentazione)
  • Configuration (configurazione)
  • Quality (qualità)
  • Verification (verifica)
  • Validation (validazione)
  • Joint review (revisione congiunta)
  • Audit (revisione di controllo)
  • Problem resolution (risoluzione problemi)
  • Usability (usabilità)
  • Product evaluation (valutazione prodotto)

Organizzativi

  • Management (gestione)
  • Infrastructure (gestione dell'infrastruttura)
  • Improvement (migliorie)
  • Human resource (risorse umane)
  • Asset Management (investimenti)
  • Reuse Program Management (riusabilità)
  • Domain Engineering (ingegnerizzazione)

Come si può osservare dalla classificazione sopra, l'attività aziendale di produzione software si compone di una quantità di cicli molto articolata; dunque un'azienda dovrà rispettare una grande mole di impegni lavorativi.

Misurazione del software

La qualità di un prodotto è determinabile tramite dei parametri di valutazione, i quali a loro volta necessitano che il prodotto a cui si riferiscono sia misurabile. Per misurare la qualità di un software bisogna quindi isolarne le caratteristiche di base, fornendo una metrica per ognuna. In molti casi, le metriche utilizzate per valutare la qualità derivano da statistiche effettuate direttamente sui programmi.

Per stabilire sistemi di misurazione efficienti per i prodotti software si utilizzano dunque delle tecniche specifiche chiamate metriche. Tra le più conosciute nel settore si trovano LOC e numero ciclomatico.

LOC

È una metrica dimensionale usata per calcolare la quantità, ovvero la lunghezza di un programma software. Precisamente, essa misura le linee di codice (Lines Of Code) presenti in un sorgente.

Il criterio di conteggio delle linee varia a seconda del linguaggio di programmazione utilizzato: mentre quelli a basso livello (come l'Assembly) hanno un'espressività quasi 1:1, cioè ogni linea di codice corrisponde quasi sempre anche ad un'istruzione effettivamente eseguibile, quelli ad alto livello hanno espressività molto maggiori in quanto è frequente che una linea di codice venga utilizzata, ad esempio, per l'indentazione piuttosto che per la scrittura di un'istruzione utile.

Numero ciclomatico

È la metrica di tipo strutturale (ovvero che si occupa della misurazione di un programma software dal punto di vista della sua organizzazione logica interna) più diffusa.

Dato il codice sorgente di un programma, è sempre possibile calcolare quanti percorsi logici può seguire il flusso delle istruzioni considerando i punti decisionali contenuti (ovvero le strutture di controllo condizionali come if-then, if-then-else, switch-case, ecc...).

Dunque un software strutturato può sempre essere ridotto ad un grafo diretto nel quale ogni nodo rappresenta un punto decisionale (cioè una struttura di controllo) e ogni arco identifica un cammino logico. Si ottiene così un grafo di controllo di flusso: il conteggio di tutti i possibili cammini dal nodo iniziale al nodo finale è il numero ciclomatico del programma.

Created By
Andrea Altomare
Appreciate

Report Abuse

If you feel that this video content violates the Adobe Terms of Use, you may report this content by filling out this quick form.

To report a Copyright Violation, please follow Section 17 in the Terms of Use.