COSTRUIRE SOFTWARE SOLIDO E USABILE: TECNICHE E APPROCCI
Costruire software solido e usabile richiede un approccio integrato nel quale confluiscono diverse tecniche e strumenti. In questo workshop organizzato presso l’Associazione degli Industriali di Udine (“Confindustria”) e sponsorizzata da AICA e dall’Ordine degli Ingegneri di Udine, descriviamo come un orientamento ai bisogni dell’utente sia essenziale per creare prodotti usabili. “User centered” si può materializzare fin dall’analisi dei requisiti, costruendo profili utente, schede di personaggi (personas), modelli concettuali del problema e prototipi d’interazione.
La dimensione di solidità viene raggiunta adottando principi di progettazione Object-Oriented come l’Aperto-Chiuso (Open-Closed) e l’inversione delle dipendenze (Dependency Inversion), unitamente a tecniche di Design for Testability (asserzioni, tecniche di disaccoppiamento per garantire livelli di isolamento parziale e totale, anti-corruption layer, ecc.).
Solidità e usabilità influiscono rispettivamente sugli aspetti di qualità interna (la prima) ed esterna (la seconda). Entrambe hanno una relazione con il costo di gestione di un progetto software che però è influenzato da un terzo fattore: la distanza esistente tra problema e soluzione. Più i modelli dei requisiti e del problema hanno rappresentazioni diverse rispetto a quelli della soluzione implementata, più si crea una frattura tra analisi e progettazione. Il Domain-Driven Design costituisce un approccio utile per ridurre questa frattura, soprattutto nel caso di sistemi software basati su domini applicativi complessi e destinati ad essere manutenuti per molti anni.
L’ultimo contributo del workshop è porre l’accento sull’importanza di integrare un approccio basato sulle feature all’interno di un processo di gestione agile, senza però trascurare tecniche e principi di ingegneria del software di comprovata efficacia. Vengono quindi suggerite alcune metriche e alcuni strumenti per la misura oggettiva dei principali indicatori di manutenibilità e testabilità, a partire da un’analisi del prodotto finale di un progetto software: il codice sorgente.