SPRINT 1
Requirements
-
Suonare lo
smartbell -
Farsi misurare la febbre dallo
smartbell -
Entrare nella sala (ci sarà il sempre il
table libero) -
Sedersi al
table -
Compiere un'ordinazione (chiamare il
waiter e ordinare) - Consumare il drink
- Pagare il servizio
- Lasciare la stanza
-
Nella simulazione è presente un solo
client -
Il waiter deve poter madare l'ordinazione al
barman e portarla alclient quando è pronta -
Non si tenga conto degli stati del
table e della pulizia da parte delwaiter - Non si tenga conto del rispetto del maxstaytime
-
Il
client non compia azioni diverse da quelle elencate precedentemente
Requirement analysis
0 | WAITER |
L'entità |
|
1 | WAITER |
All'inizio il |
|
2 | WAITER |
Il | reach |
3 | WAITER |
Il | serve |
4 | WAITER |
Il | convoy |
5 | WAITER |
Il | waitingTime(0) |
8 | WAITER |
Il | take |
9 | WAITER |
Il | collect |
12 | BARMAN |
Il | orderReq |
13 | BARMAN |
Il | ready |
14 | CLIENT |
Il | notify |
15 | CLIENT |
Il | readyToOrder |
16 | CLIENT |
Il | order |
17 | CLIENT |
Il | exitReq |
23 | SMARTBELL |
Lo | |
24 | SMARTBELL |
Lo | tempResult |
25 | SMARTBELL |
Lo | checkAvail |
26 | SMARTBELL |
Lo | accept |
Nell'implementare (e poter testare) la possibilità del
- Rappresentare lo spazio
- Conoscere la posizione corrente del
waiter nello spazio - Spostarsi da un punto all'altro dello spazio
Rappresentare lo spazio
La rappresentazione dell'ambiente (mappa) è la base di conoscenza che racchiude le informazioni sulla posizione degli elementi nella stanza. Per quanto riguarda tutti gli elementi tranne il
Posizione corrente del waiter
Per quanto riguarda, invece, il
Pianificare i percorsi Infine per poter calcolare le mosse da eseguire per muoversi nell'ambiente sono possibili due strade:
- si potrebbe essere portati a ricorrere ad una più semplice implentazione "dummy" con percorsi prefissati
- si potrebbe affrontare sin da subito la progettazione di una soluzione in grado di calcolare i percorsi dinamicamente
TestPlans
Per formalizzare un primo set di test plans ed avere anche una base di partenza per la realizzazione di un planner si potrebbe suddividere il pavimento della tearoom in una griglia di R * C quadrati di lato L. Dove L è la dimensione più piccola possibile tale da contenere il robot.
Ogni cella può essere libera oppure occupata da un ostacolo.
A questo punto si può definire la posizione di ogni elemento nella mappa come una coppia di coordinate (R,C). Il planner calcolerà il percorso da eseguire dalla posizione corrente del
Questo concetto di mappa è stato già usato nella nostra software house, supponendo che, in ogni cella:
-
r significa "cella occupata dal waiter" -
x significa "cella occupata da un ostacolo" -
1 significa "cella nota come libera" -
0 significa "cella goal"
Da tutto ciò consegue che potrebbe essere utile far muovere il waiter di cella in cella definendo questo tipo di movimento "step".
Problem analysis
Dal punto di vista logico, il nostro sistema distribuito è composto da varie entità ognuna concepita come un attore, modellato come una FSM.
Sicuramente l'entità
Test plans
notify | Il |
Il |
tempResult | Lo |
Il |
checkAvail | Lo |
Lo |
waitingTime(0) | Il |
Il |
accept | Lo |
Il |
reach | Il robot |
Il robot |
convoy | Il |
Il |
readyToOrder | Il |
Il |
take | Il |
Il |
order | Il |
Il |
orderReq | Il |
Il |
ready | Il |
Il |
serve | Il |
Il |
exitReq | Il |
Il |
collect | Il |
Il |
convoy | Il |
Il |
Nuova interazione per l'ordinazione client
|
Quando il |
Project
Testing
Per motivi di testing, tutte le entità esterne al
- TestWaiterConvoyEntrance.kt verifica che il
waiter compia correttamente le azioni di reach, convoy all'ingresso e successivo ritorno alla home. - TestWaiterDrinkOrder.kt verifica che il
waiter compia correttamente le azioni di readyToOrder (che implica raggiungimento del tavolo delclient ), take, order e successivo ritorno alla home. - TestWaiterBringingDrink.kt verifica che il
waiter compia correttamente la serve (che implica che ilbarman gli abbia notificato una ready), e successivo ritorno alla home. - TestWaiterPaymentExit.kt verifica che il
waiter compia correttamente le azioni di collect, payment, convoy in uscita e successivo ritorno alla home. - TestWaiterComplessivo.kt esegue in successione i precedenti test,
simulando tutto il flow del
client all'interno del sistema.