Qualità del software
Caratteristiche
Si distinguono tra:
- Qualità ESTERNE: Percepibili dagli utenti
- Qualità INTERNE: Percepibili dagli sviluppatori
Le seconde servono a raggiungere le prime. Qualità esterne:
- Correttezza
- Affidabilità
- Robustezza
- Efficienza e Prestazioni
- Facilità d’uso
Qualità interne:
- Verificabilità
- Manutenibilità
- Riusabilità
- Portabilità
- ...
Correttezza
Un software è funzionalmente corretto se si comporta come stabilito nei suoi requisiti funzionali (functional requirements specification). Ciò presuppone l’esistenza di un documento di specifica dei requisiti. Va sottolineato che il termine requisiti funzionali si abbrevia nella forma requisiti, anche se abbiamo altri tipi di requisiti come quelli di prestazioni e di scalabilità.
Comunque deve essere possibile il confronto con i requisiti per verificare la correttezza. La specifica deve essere sufficientemente chiara e non ambigua, cosa abbastanza difficile perché si sarà descritta in un linguaggio naturale e, per questo, ambigua.
Affidabilità
Misura quanto l’utente può far affidamento sul software. E’ frequente oggi rilasciare software con malfunzionamenti per le prime versioni (software bacato). Ciò mostra chiaramente come il software sia ben lontano da altri prodotti ingegneristici perché un’auto, ad esempio, non si rilascia con dei malfunzionamenti, mentre se ciò avviene nel software questi sono accettati con rassegnazione. Solitamente l’affidabilità è definita in termini di mtbf (Mean Time Between Failures). Il software è peculiare. In genere i prodotti ingegneristici sono affidabili, nel caso del software la situazione è diversa:
- Aspettative minori
- Known Bugs
Correttezza vs affidabilità
La correttezza è una qualità assoluta, mentre l’affidabilità è una qualità relativa Se un sistema presenta degli errori
- Non è corretto;
- Potrebbe essere però affidabile
Se la specifica cattura tutti i requisiti un sistema corretto è affidabile. Se la specifica NON cattura i requisiti un sistema corretto potrebbe non essere affidabile.
Robustezza
Un sistema è robusto se si comporta in modo ragionevole in situazioni impreviste. Ad esempio quando vengono inseriti dati di input non corretti. La robustezza può essere corretta andando a colmare quelle lacune dei requisiti che appunto non hanno descritto il comportamento nel caso di situazioni anomale. La robustezza è difficilmente definibile formalmente. Se si potesse definire il concetto di comportamento ragionevole si potrebbe dire che la Robustezza è uguale alla Correttezza. Infatti se un requisito è nelle specifiche allora fa parte della correttezza, se è fuori allora fa parte della robustezza. Dipende dal contesto
- Chi usa il sistema ?
- Quali sono le sue capacità di adattamento ?
- Quanto è critico il buon funzionamento del software ?