LABORATORIO DI SISTEMI SOFTWARE
Introduction - Tea-room COVID-19
Remember our motto:Il manager di una sala da the (tearoom) vorrebbe regolare l'accesso al servizio impiegando un DDR robot (waiter).
La tearoom è una stanza rettangolare che include:
- una porta di entrata (entrancedoor) per entrare nella stanza ed una di uscita (exitdoor) per uscire;
- un numero N (N=2) di tavoli (teatable);
- una servicearea che include a sua volta un servicedesk al quale lavora un barman;
- una hall provvista di un presencedetector, ad esempio un dispositivo (come un sonar) che può rilevare la presenza di una persona (o di qualche altra entità) davanti a se.
User stories
Come cliente:- Intendo segnalare (notify) il mio interesse nell' accedere (entering) ad una sala da tè sicura(safe tearoom), sedermi (sitting) a un tavolo libero, ordinare (ordering) del tè, consumarlo (consuming) (entro un certo tempo massimo maxstaytime) pagando (paying) il servizio con la mia carta di credito ed infine lasciare (leaving) la sala.
- Per safe tearoom, intendo una sala da tè con tavoli da tè puliti ed appositamente distanziati; nella stanza sono presenti clienti aventi temperatura corporea inferiore a 37.5 gradi centigradi.
- Posso segnare il mio interesse interagendo con il campanello smart (smartbell) posizionato vicino all'ingresso (entrancedoor) che misurerà automaticamente la mia temperatura corporea e manderà una richiesta al cameriere (waiter), assegnandomi un identificativo univoco (clientidentifier).
- Se la mia temperatura corporea è idonea, ma la mia richiesta non può essere soddisfatta immediatamente (visto che la stanza è piena), sarò informato (informed) dal waiter su qual è il massimo tempo di attesa.
- Intendo poter visualizzare lo stato corrente (current state) della tearoom usando un browser connesso ad un server web associato all'applicazione.
Requirements
Il waiter deve eseguire le seguenti attività:- accettare (accept) la richiesta di un cliente di entrare nella tearoom se è presente almeno un tavolo (teatable) nello stato tableclean, i.e. il tavolo è libero ed è stato propriamente pulito.
- informare (inform) il cliente del tempo massimo di attesa se non è presente nessun tavolo in stato tableclean.
- raggiungere (reach) l'entrata (entrance door) e accompagnare (convoy) il cliente al tavolo selezionato.
- prendere (take) l'ordine del cliente e trasmetterlo (utilizzando un dispositivo wifi) al barman.
- servire (serve) il cliente quando il barman informa che il drink richiesto è pronto.
- riscuotere (collect) il pagamento.
- accompagnare (convoy) il cliente alla exit door quando ha finito la consumazione o quando il maxstaytime è scaduto.
- pulire (clean) il tavolo appena liberato dal cliente.
- stazionare (rest) nella home quando non c'è niente da fare.
Optional Requirements: solo un cliente nella hall
Il waiter deve aprire la exitdoor solo quando la hall è libera, i.e. non deve aprire la porta se la hall è già occupata da un cliente in attesa di entrare dalla entrancedoor.Requirement analysis
- Dai requisiti emerge che si dovrà realizzare un sistema distribuito composto dalle seguenti entità:
waiter teatable1 teatable2 smartbell presencedetector barman manager client
waiter e quello dellosmartbell , mentre invece ilmanager ed ilclient saranno persone fisiche, tuttavia per poter simulare agevolmente il sistema è utile introdurre le entità corrisponenti come attori. Sarà quindi utile introdurre, ad esempio, unclientsimulator che impersonifichi "via software" le attività del client. Un discorso simile vale per ilbarman che sarà visto dalwaiter come un servizio. - Movimenti del waiter:
- L'entità
waiter deve poter essere in grado di muoversi autonomamente tra i punti home, servicedesk, table1, table2, entrancedoor, exitdoor - All'inizio il
waiter si trova nel punto home e ci ritorna quando non ha più task da svolgere - Il
waiter deve poter raggiungere l'entrata (reach) e accompagnare (convoy) ilclient altable - Il
waiter deve poter andare dalbarman a ritirare il drink e portarlo altable delclient (serve) - Il
waiter deve poter accompagnare (convoy) il cliente alla exitdoor
- L'entità
- Stati dei table:
- I
table sono delle entità che possono essere occupate da deiclient - I
table possono trovarsi in tre stati diversi: - All'inizio i
teatable sono clean. Quando sono in questo stato sono pronti per essere occupati da unclient - Dopo che un
client libera unteatable , ilwaiter deve tornare a pulirlo nuovamente affinchè sia di nuovo clean
- I
- Funzionalità dello smartbell:
- Lo
smartbell deve presentare un'interfaccia con cui ilclient deve poter richiedere di poter entrare (notify) nella tearoom - Lo
smartbell deve poter misurare la temperatura corporea alclient e verificare che sia al disotto dei 37.5 gradi centigradi - Lo
smartbell deve poter mandare un messaggio di richiesta alwaiter all'arrivo di un nuovo cliente - Lo
smartbell deve presentare alclient l'esito di tale richiesta
- Lo
- Interazioni waiter-barman-client:
- Il
waiter in risposta alla richiesta ricevuta tramite losmartbell deve poter far sapere alclient se può entrare (accept) oppure se deve aspettare un certo tempo (inform) che vi sia un tavolo pulito - Il
waiter deve poter tener conto di quanto tempo unclient sia stato al tavolo affinchè non ci resti più di maxstaytime - Qualora non ci siano tavoli puliti disponibili (cleaned) il
waiter deve poter stimare il massimo tempo di attesa per averne uno - Il
waiter deve poter prendere (take) l'ordine dal cliente e trasmetterlo albarman - Il
barman deve poter notificare alwaiter che il drink è pronto - Il
waiter deve far pagare (collect) ilclient quando ha finito di consumare oppure è scaduto il maxstaytime - Il
client deve poter richiamare ilwaiter per avvertirlo che ha finito di consumare - Il
waiter deve poter pulire (clean) untable quando è sporco
- Il
- Ad ogni
client che passa il test della temperatura viene assegnato un identificativo univoco (clientidentifier) - All'interno della tearoom posso esserci al massimo N clienti contemporaneamente (N=numero tavoli=2)
- Bisogna rendere disponibile un'interfaccia web da cui il
manager deve poter controllare lo stato corrente della tearoom: deve essere infatti possibile in ogni momento conoscere lo stato corrente della stanza
Una descrizione formale di questo modello si può trovare in tearoom.qak
Problem analysis
- Data la natura distribuita del problema risulta particolarmente conveniente utilizzare l'infrastruttura QAK, già disponibile nella nostra software house, poichè si presta molto bene ad essere usata in questo tipo di situazioni. Inoltre permette una rapida prototipazione.
- Essendo che le entità elencate nei requisiti devono svolgere le loro attività in parallelo interagendo tra loro scambiandosi messaggi e agendo in conseguenza dei messaggi ricevuti, risulta opportuno modellarle come QActor
- Per potersi muovere tra i vari punti della stanza il
waiter deve conoscerne la conformazione e la posizione di se stesso e degli altri punti: ciò implica che questa informazione gli debba essere fornita all'inizio o ilwaiter debba poterla ricavare tramite opportuni sensori - Dovendosi muovere autonomamente emerge che il
waiter debba essere in grado di pianificare ed eseguire il percorso tra i vari punti della stanza evitanto anche di andare a sbattere, evitare le collisioni comporta l'uso di un sonar - Dai requisiti emerge che un
table possa trovarsi nei seguenti stati: "libero e clean", "libero e ancora da sanificare", "occupato da unclient " - Lo
smartbell per poter misurare la temperatura deve essere equipaggiato con un sensore - Dovendo inoltrare la richiesta di accesso dei
client alwaiter potrebbe essere direttamente losmartbell a generare e assegnare gli identificativi univoci dei clienti - Il
waiter deve poter conoscere lo stato deitable - Per far rispettare il maxstaytime il
waiter deve tener traccia del tempo trascorso da quanto unclient si è seduto altable - Dai requisiti segue che ci debba essere un qualcosa che tenga traccia in tempo reale dello stato della stanza (ad esempio, potrebbe essere direttamente uno degli attori o aggiungere un elemento apposito)
Interazione ingresso client
|
Il |
Interazione ordinazione client
|
Il |
Interazione richiesta uscita client
|
Il |
Interazione pagamento client
|
Il |
Una descrizione formale di questo modello si può trovare in tearoom.qak
In fase di analisi sono emersi delle problematiche critiche che saranno affrontate più nel dettaglio nei successivi sprint:
- Generare e immagazzinare i clientidentifier e dare definizione più precisa dell'interazione fra gli attori e lo
smartbell . - Valutare da quando viene misurato il maxstaytime e comprendere chi si deve occupare di tenere il conteggio del tempo trascorso.
- Comprendere come tenere la hall in sicurezza utilizzando il presencedetector (Evitando così gli assembramenti).
- Definire formalmente cosa si intende per "lo stato della stanza": quali caratteristiche includervi? Oltre a ciò, decidere come e dove conservare queste informazioni: distribuirle su tutto il sistema o centralizzarle?
Test plans
Essendo ogni entità modellata come automa a stato finito, una strategia percorribile per fare testing potrebbe essere quella di determinare se i cambiamenti di stato siano avvenuti
come ci si aspetterebbe dopo ogni relativo messaggio.
A tal proposito è necessario identificare univocamente uno stato e poter verificare lo stato corrente di ogni entità.
Nel file tearoom.qak è stata data una definizione formale del modello, in cui si può vedere
la relazione fra stati e messaggi.
Il piano di testing deve essere progettato per verificare tutte queste condizioni.
Piano di lavoro
Dalla analisi preliminare del sistema risulta necessario pianificare un piano di lavoro architettato in sprint,
di seguito riportati.
|
|
|
SPRINT 1 |
Si occupa della modellazione del sistema nell'ipotesi in cui operi un solo |
La scelta di questo primo sprint è motivata dalla volontà di simulare un primo scenario di base che preveda una interazione "controllata" e "prevista" del sistema, in modo da aggiungere nei successivi sprint i casi imprevisti. |
SPRINT 2 | Si occupa della definizione dello stato della stanza. Questo sprint aggiunge al primo sprint una descrizione degli elementi della stanza, introducendo il concetto di architettura esagonale. Inoltre in questo sprint si inizia a costruire il pannello di controllo da fornire al manager. | Dopo aver verificato le funzionalità base del sistema è necessario iniziare a dare una forma a quella che sarà l'architettura finale. |
SPRINT 3 |
Si occupa della concorrenza fra |
Dopo aver costruito una prima versione dell'architettura finale, aggiungiamo al sistema ulteriori casi d'uso con lo scopo di avvicinarlo sempre più al prodotto finale richiesto. |
SPRINT 4 | Deployment del sistema e impiego di robot fisici oltre che del virtual robot fornito. Possibilità di interrompere alcuni task per riprenderli in seguito. | Questo sprint finale rende il sistema pronto per essere consegnato al cliente e ne dimostra il funzionamento su dei DDR reali. |