Software Usabile e Solido
Cos’è?
Secondo la definizione dell’ISO, l’usabilità è la misura in cui un prodotto può essere usato da utenti specifici per ottenere obiettivi specifici con efficacia, efficienza e soddisfazione in contesti d’uso specifici.
- Sebbene datata come definizione (1998) è ancora molto utile perché lega l’usabilità, una proprietà difficile da materializzare, a indicatori di performance degli utenti che invece possono essere misurati o stimati in maniera abbastanza buona; ad esempio svolgendo un test con utenti.
- L’efficacia fa riferimento all’insieme degli obiettivi che si dovrebbero poter raggiungere, e gli errori nei risultati e nel percorso.
- L’efficienza è legata allo sforzo, al tempo, alla lunghezza del processo necessario per raggiungere quegli obiettivi con un certo livello di efficacia.
- La soddisfazione, rilevata mediante questionari (ad esempio il SUS; vedi anche la pagina di Perlman sui questionari per l’usabilità, oppure il Net Promoter Score), ha a che fare con una gamma di aspetti molto ampia, dalla gratificazione dai risultati ottenuti al piacere e coinvolgimento relativo al prIocesso necessario per ottenerli.
- Nota che l’usabilità dev’essere contestualizzata: invece di dire “questo prodotto è usabile”, occorre dire “questo prodotto è usabile in questo contesto d’uso per costoro e per fare queste cose”, dove il contesto incorpora vari aspetti quali la postura, l’ambiente fisico, quello sociale, i dispositivi di interazione, lo stato mentale.
D’altro canto, software solido è software che manifesta delle proprietà architetturali quali manutenibilità, adattabilità, estendibilità, riusabilità. Sono tutte proprietà importanti perché aumentano la velocità di sviluppo, riducendo sia il time-to-market che il costo. Più nello specifico, nel contesto del progetto orientato agli oggetti, SOLID è un acronimo attribuito a Michael Feathers che richiama i seguenti principi: Single responsibility, Open-closed, Liskov substitution, Interface segregation, and Dependency inversion. Questi principi rappresentano il nocciolo di ogni progetto orientato agli oggetti e sono i tool concreti mediante i quali si possono ottenere le proprietà menzionate sopra.