Qualità del software: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: Aggiungo: pt:Qualidade de software |
m Correggo dei wikilink. |
||
(61 versioni intermedie di 39 utenti non mostrate) | |||
Riga 1:
{{F|ingegneria del software|aprile 2011}}
Per '''qualità del software''' si intende la misura in cui un prodotto [[software]] soddisfa un certo numero di aspettative rispetto sia al suo funzionamento sia alla sua struttura interna. Gran parte della ricerca nel campo dell'[[ingegneria del software]] è dedicata, direttamente o indirettamente, al tema della qualità. In particolare, si è cercato di stabilire chiaramente cosa si intenda per qualità del software, definendo un insieme di
==Cos'è il software di qualità?==
===Classificazione dei parametri===
Tradizionalmente, i
===Parametri di qualità esterni===
====Correttezza====
Un programma o sistema software si dice
▲Un programma o sistema software si dice '''corretto''' se si comporta esattamente secondo quanto previsto dalla sua [[specifica dei requisiti]]. In termini più informali, un sistema è corretto se fa esattamente quello che è stato progettato per fare. Nell'ingegneria del software "classica" ([[anni 1960|anni '60]]-[[anni 1970|anni '70]]), lo sviluppo di software corretto veniva universalmente considerato l'obiettivo ''predominante'', a cui praticamente tutti gli altri parametri di qualità erano finalizzati. Molti moderni modelli di [[processo software]], viceversa, escludono la possibilità di sviluppare rispetto a una ''specifica'' stabilita a priori in modo definitivo e non ambiguo, e quindi, indirettamente, negano alla ''correttezza'' un valore pratico significativo. In ogni caso, la correttezza è una qualità ''assoluta'' (un sistema ''è'' corretto o ''non lo è'') e sostanzialmente impossibile da misurare (verificare); non è possibile ''stabilire con certezza'' che un sistema sia corretto.
Nelle metodologie di sviluppo e progettazione agili, si parla piuttosto di "[[soddisfazione del cliente]]", intendendo con questo che i requisiti iniziali potrebbero essere stati modificati, ma con il consenso e a piena soddisfazione del committente.
====Affidabilità====
{{vedi anche|
Un sistema è tanto più
Poiché l'affidabilità è concettualmente misurabile (una volta specificato un particolare modello, per esempio MTBF o una variante pesata in funzione della gravità dei fallimenti), questo parametro viene spesso considerato la controparte "realistica" della correttezza.
L'[[industria del software]] moderna, su applicazioni non critiche, tende a considerare
Controesempi di software affidabile (o chiari esempi di software inaffidabile).
Il [[Therac-25]] era una strumentazione medica usata agli inizi degli anni ottanta per trattare il cancro. L'unicità dell'apparecchiatura a quel tempo era il software, che monitorava la dose di radiazioni da emettere nel trattamento. Purtroppo un errore nel software causò l'emissione di dosi letali. L'errore si verifica così infrequentemente che morirono diverse persone prima di rendersi conto del problema.
====Robustezza====
{{vedi anche|
In termini generali, la
====Efficienza====
{{vedi anche|
Un sistema è
====Usabilità====
{{vedi anche|
Un sistema è facile da usare se un essere umano lo reputa tale.<br />
È una qualità soggettiva:
* dipende dal contesto
* dipende
Al di fuori di una visione macchinocentrica, va sottolineata l'esistenza di principi condivisi che permettono di valutare il livello di usabilità di un'applicazione, indipendentemente da fattori soggettivi. Valga come riferimento il noto studio di [[Jakob Nielsen]][http://www.useit.com/papers/heuristic/heuristic_list.html] {{Webarchive|url=https://web.archive.org/web/20121113142238/http://www.useit.com/papers/heuristic/heuristic_list.html |date=13 novembre 2012 }}, e quanto espresso dallo standard [[ISO]] 9241-10 sugli ''ergonomic requirement'' [http://web.tiscali.it/userware/standardiso9241.htm#parte%2010%20dell%27ISO%209241].
====Ecocompatibilità====
Un sistema è ecocompatibile se tiene in conto nel suo disegno l'impatto del suo esercizio sull'ambiente che lo circonda.
L'ecocompatibilità equivale all'efficienza del sistema ambiente di cui l'essere umano è parte.
====Scalabilità====
{{vedi anche|
Un sistema è scalabile se può essere adattato a diversi contesti con forti differenze di complessità (per esempio [[database]] molto piccoli o molto grandi) senza che questo richieda la riprogettazione dello stesso sistema. Solitamente, si richiede che le prestazioni di un sistema possano essere aumentate "semplicemente" fornendo al sistema stesso maggiori risorse di calcolo (processori più potenti, maggiori quantità di memoria, sistemi di memoria di massa più capienti o più veloci, e così via).
===Parametri di qualità interni===
====Verificabilità====
Un sistema è verificabile se le sue proprietà:
* correttezza
* affidabilità
sono facili da verificare.
Per aumentare il grado di verificabilità si fa uso di:
* tecniche di [[progettazione modulare]]
Riga 65 ⟶ 66:
====Manutenibilità====
Facilità di apportare modifiche a sistema realizzato.
In origine si pensava che la manutenzione corrispondesse solo al
Ormai il {{M|60|ul=%}} dei costi dipende proprio dalla manutenzione.
Per analizzare questi costi occorre suddividere in manutenzione:
* Correttiva
Riga 72 ⟶ 73:
* Perfettiva
La manutenzione correttiva
* Elimina gli errori presenti sin
* Elimina gli errori introdotti da precedenti interventi di manutenzione
* Rappresenta il {{M|20|u=%}} del totale della manutenzione
La manutenzione adattativa (o adattiva):
* Modifiche a seguito di cambiamenti
* Cambiamenti
* {{M|20|u=%}} del totale
La manutenzione perfettiva
* Modifiche per migliorare le qualità del software
* Introduzione di nuove funzionalità
* Miglioramento delle funzionalità esistenti
* È la parte più consistente (circa il {{M|60|u=%}} del totale)
La manutenibilità dipende da due aspetti
* Riparabilità per indicare ciò che consente di eliminare difetti
* Evolvibilità per indicare ciò che consente
====Riparabilità====
Un sistema è riparabile se la correzione degli errori è poco faticosa.
È una proprietà fondamentale di molti prodotti ingegneristici (automobili, computer, ecc...). Per questi prodotti la tecnica usata è quella di abbassare il prezzo e di favorire la sostituzione piuttosto che la riparazione. Perché ciò possa avvenire si utilizzano delle parti standard che possono essere cambiate con facilità.
Nel software la situazione è diversa.
* Non
* Non esistono componenti standard;
* Il costo non dipende dai pezzi ma solo dalla
La riparabilità si persegue attraverso la modularizzazione.
Non conta tanto il numero, ma piuttosto il come sono organizzati tra loro e al loro interno.
====Evolvibilità====
Il software, a differenza di altri prodotti ingegneristici, è teoricamente facilmente modificabile. Tuttavia:
* Non si fanno mai studi di analisi di fattibilità approfonditi
* Non si progettano le modifiche
Peggio ancora, i cambiamenti effettuati non sempre sono documentati per cui le specifiche non vengono aggiornate e ciò rende i cambiamenti futuri difficili da compiere.
È necessario prevedere sin
====Riusabilità====
Affine
Inizialmente si pensava al riuso del software. Oggi si riusa tutto:
* [[Specifiche]]
Riga 125 ⟶ 126:
Un sistema è portabile se è in grado di funzionare in ambienti diversi.
È diventato un aspetto fondamentale perché consente di avere vantaggi economici, in quanto si possono ammortizzare i costi trasportando
Nel caso delle applicazioni web è la chiave di volta.
Si usano strumenti e tecniche appositamente pensate per dare luogo
==Voci correlate==
* [[Ingegneria del software]]
* [[Paradigma di programmazione]]
* [[
* [[Regola del 90-90]]
{{Portale|ingegneria}}▼
== Altri progetti ==
[[Categoria:Ingegneria del software| Qualità del software]]▼
{{interprogetto|preposizione=sulla}}
[[Categoria:Gestione del software]]▼
== Collegamenti esterni ==
* {{Collegamenti esterni}}
▲{{Portale|ingegneria}}
|