Un nuovo approccio alla progettazione del software per risolvere le complessità nella progettazione di sistemi
Spinti dall’esigenza di semplificare il difficile e costoso processo di progettazione del software, il progetto LIBPR (Liberating programming) ha osservato che i professionisti sono spesso in grado di descrivere il comportamento dei loro sistemi (prima, durante e dopo lo sviluppo) in modo chiaro e preciso, a prescindere che abbiano competenze di programmazione di computer. In quest’ottica, il team ha affrontato il problema rivisitando e trasformando radicalmente gli schemi accettati di come debba apparire un sistema di software ben progettato. Basandosi sull’invenzione iniziale del SBD (scenario-based programming) e il suo linguaggio visivo e basato su diagrammi LSC (live sequence charts), il team ha dimostrato come il software complesso può essere allineato con le descrizioni comportamentali che appaiono nei documenti dei requisiti e nei manuali utente. Invece dell’approccio di progettazione comune – in cui intricate serie di sequenze di comandi (programmi) devono essere accuratamente progettati per guidare il comportamento del sistema in modo che soddisfi le esigenze e i vincoli – nella programmazione basata su scenari i requisiti stessi sono completamente eseguibili, liberando quindi la programmazione da molti dei suoi vincoli tradizionali. I requisiti sono codificati in modo tale da permettere al computer di ispezionare ognuno di essi direttamente in ogni fase dell’esecuzione, e determinare il passo successivo in base a ciò che ritiene si debba, potrebbe o non dovrebbe fare a quel punto (il comportamento vietato diventa quindi parte del programma). I requisiti sono pertanto trasformati in programma tradizionale, sostituendolo in gran parte. Oltre a offrire modi rivoluzionari di strutturare e poi eseguire i programmi, questo approccio ha permesso modi nuovi e naturali di svolgere l’atto stesso di programmazione: su un simulatore o GUI del sistema lo sviluppatore innesca (“plays in”) le azioni che l’utente o l’ambiente presenterebbero al sistema, seguite dalle desiderate reazioni del sistema. La sequenza comportamentale registrata viene poi automaticamente trasformata nello scenario corrispondente. L’allineamento del programma con quello che pensano le persone del sistema permette inoltre la programmazione in linguaggio naturale (controllato). Ovvero, soggetta a regole grammaticali vincolanti, una frase come “quando l’utente preme il pulsante rosso, la luce si accende”, viene automaticamente analizzata e tradotta in uno scenario programmato formale eseguibile. Il sistema finale consiste quindi in una raccolta di tali frasi. Un importante vantaggio dell’approccio è la possibilità di codificare ogni nuovo requisito in maniera incrementale, con pochi o nessun cambiamento nelle specifiche esistenti, e di utilizzare strumenti specializzati per capire come il sistema si comporterà quando tutti gli scenari funzioneranno insieme come sistema. Il sistema ha anche sviluppato sofisticati algoritmi e strumenti basati su metodi come il model-checking, SMT solving e programme synthesis, per verificare l’esattezza dei programmi basati su scenari e per ripararli automaticamente quando vengono rilevati comportamenti indesiderati o scenari incompatibili. Questo lavoro includeva anche tecniche di verifica composizionale, in cui il sistema essenzialmente viene collaudato verificando i suoi scenari costitutivi. L’approccio basato su scenari è stato notevolmente ampliato dal team, oltre e al di là del linguaggio visivo LSC, fino a includere implementazioni in linguaggi informatici standard, tra cui Java, C, C++, C#, Erlang e JavaScript. L’applicabilità del SBP è stata dimostrata in una serie di applicazioni, tra cui l’automazione industriale, l’automobilistica e il controllo aereo, nonché i modelli biologici.