Riguardo alla suddivisione del progetto nei 4 gruppi vorrei esprimere la mia opinione ed illustrare la mia proposta.
Penso sia più naturale assegnare ad ogni gruppo analisi, progettazione, implementazione e verifica di un intero sistema anziché di un sottoinsieme di componenti appartenenti a sistemi diversi. L'assegnazione non è immediata perché, mentre i gruppi sono quattro, i requisiti del committente indicano che i sistemi da realizzare sono (soltanto) due: AVT e Simulatore. Secondo me conviene scomporre questi ultimi e descrivere così quattro sottosistemi.
Attraverso un'analisi generale ho elaborato una possibile scomposizione che cercherò di illustrare di seguito.
Il primo passo di suddivisione riguarda la GUI. I sistemi AVT e Simulatore non realizzano moduli per l'interfaccia grafica, offrono solo un'interfaccia nativa con le operazioni per l'utente. I sistemi GUI (esterni) realizzano una “human interface” facendo da tramite tra la persona fisica e l'interfaccia nativa dei sistemi AVT e Simulatore. (Nota: dato che l'AVT deve essere installato in un veicolo fisico la GUI dell'AVT dovrebbe essere, più verosimilmente, un terminale con schermo lcd e pulsanti. In ambito di simulazione tuttavia la GUI dell'AVT è anch'essa simulata e può quindi essere inclusa nel sistema GUI del Simulatore, il quale è realizzato come interfaccia grafica per Java).
Il secondo passo di suddivisione riguarda l'AVT. I sistema AVT è diviso in due sottosistemi: il sistema di Guida automatica e l'Interprete dei sensori. La Guida automatica fornisce le funzionalità all'utente elaborando informazioni di stato e agendo sul veicolo (attuatori). L'Interprete dei sensori fornisce alla Guida automatica le informazioni di stato elaborando le informazioni dei sensori del veicolo. (Nota: questi due sottosistemi realizzano la stessa logica per l'AVT discussa in aula secondo la quale il controllore della guida poteva astrarre dalla natura e configurazione dei sensori e viceversa. Dato che durante l'analisi del dominio era emersa una certa criticità riguardo all'interpretazione dei sensori, sembra ragionevole introdurre questo sottositema).
A questo punto abbiamo 4 sistemi (AVT-Guida automatica, AVT-Interprete sensori, Simulatore, GUI), ognuno dei quali ha bisogno di una realizzazione separata ma collaborativa attuata dai 4 gruppi. Per meglio identificare le interazioni tra le 4 parti e per stabilire a quale gruppo assegnare quale sistema si dovrebbe fare un analisi preliminare dei singoli sistemi.
La mia personale analisi (molto generale) si riassume nei seguenti schemi.
AVT-Guida automatica - Casi d'uso:
AVT-Guida automatica – Diagramma robustezza:
AVT-Interprete sensori – Casi d'uso:
AVT-Interprete sensori – Diagramma robustezza:
Simulatore – Casi d'uso:
Simulatore – Diagramma robustezza:
Note sul Simulatore: le associazioni con gli attori AVT-Guida automatica, AVT-Interprete sensori e Simulatore veicolo hanno molteplicità pari al numero di veicoli presenti nella simulazione. Il sistema ricopre il ruolo dell'attore Attuatori per il sistema AVT-Interprete sensori, dell'attore Sensori e GUI AVT-Guida automatica per il sistema AVT-Guida automatica.
Per il sistema GUI non è fondamentale un'analisi, si possono considerare i casi d'uso standard delle interfacce grafiche per Java.
Da questa analisi dei sistemi deriva il seguente schema a componenti che illustra le interazioni tra i sottosistemi:
Le interfacce (contratti) individuate sono 6 ma i contratti da definire sono 5 (escludendo Interfaccia Simulatore veicolo già fornita dal già realizzato Simulatore veicolo). Tuttavia alcune di queste interfacce dipendo da altre: un sottoinsieme dell'Interfaccia Simulatore deve fornire le funzionalità dell'Interfaccia AVT-Guida automatica e l'Interfaccia Attuatori deve uniformarsi alle funzionalità offerte dall'Interfaccia Simulatore veicolo.
Una una vista strutturale d'uso conseguente è:
Dato che i moduli da realizzare sono 4, ad ognuno di questi può essere assegnato un gruppo, in questo modo:
- AVT-Guida automatica --> Gruppo 1
- AVT-Interprete sensori --> Gruppo 2
- Simulatore --> Gruppo 3
- GUI --> Gruppo 4
E' possibile anche immaginare, a questo punto, l'interazione e le dipendenze tra i gruppi di lavoro.
Il gruppo 1:
- segue le richieste del committente, il quale definisce i requisiti per l'AVT e le funzionalità richieste dall'utente;
- stabilisce quali funzionalità il proprio modulo intende richiedere all'Interprete dei sensori e agli Attuatori (cercando di uniformarsi all'interfaccia del Simulatore veicolo);
- informa i gruppi 2 e 3 delle funzionalità delle quali intende richiedere l'implementazione, cioè, rispettivamente, acquisizione dello stato del veicolo e della strada, controllo degli attuatori;
- informa i gruppi 3 e 4 delle funzionalità fornite dalla guida automatica (che bisogna rendere accessibili in ambiente grafico).
Il gruppo 2:
- segue le richieste del gruppo 1 riguardo alle funzionalità di interpretazione dei sensori;
- stabilisce quali funzionalità richiedere ai Sensori;
- informa il gruppo 3 delle funzionalità sensoriali delle quali intende richiedere l'implementazione.
Il gruppo 3:
- segue le richieste del committente, il quale definisce i requisiti per il Simulatore e le funzionalità richieste dall'utente;
- segue le richieste dei gruppi 1 e 2 riguardo alle funzionalità di simulazione degli attuatori e dei sensori;
- informa il gruppo 4 delle funzionalità fornite dal simulatore (che bisogna rendere accessibili in ambiente grafico).
Il gruppo 4:
- considera le informazioni fornite dai gruppi 3 e 4 riguardo le funzionalità di interazione con l'utente.
Rappresentazione dei messaggi scambiati tra le parti del progetto:
Dato che i gruppi non sono bilanciati, proporrei questa assegnazione:
- Gruppo 1: 4 persone
- Gruppo 2: 3 persone
- Gruppo 3: 5 persone
- Gruppo 4: 4 persone
Concludendo:
Se dobbiamo dividerci il progetto tra tutti i gruppi io penso sia ragionevole organizzarci nel modo che ho illustrato.
Se invece la suddivisione risultasse troppo sbilanciata o se comunque l'interazione dei gruppi sembrasse troppo difficile da attuare, allora sarebbe preferibile rinunciare: istanziare 4 progetti paralleli e procedendo così come il corso aveva originariamente previsto.
Davide Cavagnuolo