In un’area metropolitana, un sistema di trasporto pubblico fornisce informazioni sui tempi di attesa degli autobus in tempo reale. Ogni fermata dell’autobus è dotata di un display che mostra i tempi di attesa stimati per tutte le linee di autobus che fermano in quel punto. Inoltre, gli utenti possono ottenere le stesse informazioni inviando un messaggio Telegram a un numero specifico inviando l’ID della fermata.
Il sistema è composto da diversi componenti:
<aside> ❓
Elencare i requisiti funzionali e non funzionali del sistema.
</aside>
| ID | Tipo (Funzionale, Non Funzionale) | Descrizione |
|---|---|---|
| 1 | F | Calcolare il tempo di arrivo stimato per un autobus a una fermata (per tutti gli autobus e fermate). |
| 1.1 | F | Mostrare le informazioni da F1 alla fermata dell’autobus. |
| 1.2 | F | Fornire le informazioni da F1 tramite BOT Telegram agli utenti che lo richiedono. |
| 1.3 | F | Ottenere la posizione geografica degli autobus. |
| 1.4 | F | Ottenere o stimare la velocità degli autobus. |
| 1.5 | F | Memorizzare la distanza tra le fermate degli autobus. |
| 1.6 | F | Calcolare il tempo stimato da fermata a fermata. |
| 1.7 | F | Calcolare la prossima fermata data l’attuale fermata e la linea dell’autobus. |
| 2 | F | Inviare e ricevere informazioni tra la fermata dell’autobus e il sistema centrale. |
| 3 | NF Precisione | Il tempo di arrivo stimato (R1) dovrebbe avere una precisione entro x% del tempo effettivo. |
| 4 | NF Privacy | I numeri di cellulare delle persone che richiedono informazioni tramite Telegram NON devono essere memorizzati dal sistema. |
| 5 | NF Usabilità | Il display alla fermata dovrebbe consentire agli utenti con vista normale di leggere le informazioni almeno da una distanza di z metri. |
| 6 | NF Prestazioni | I tempi di arrivo stimati devono essere aggiornati almeno ogni w secondi (w è legato a x di R2, se la precisione è di un minuto è inutile aggiornare ogni secondo). |
| 7 | NF Prestazioni | L’utente dovrebbe ricevere le informazioni via Telegram al massimo entro k secondi dall’invio del messaggio. |
<aside> ❓
Creare il glossario attraverso un class diagram UML. Si facciano le debite assunzioni fornendo una motivazione ove necessario e si inseriscano in ogni classe gli attributi principali.
Si assume che lo stesso sistema possa servire più compagnie (qualora si assumesse che il sistema sia della compagnia bus X, la classe BusCompany è superflua).
Una linea di autobus è una sequenza di fermate (ad esempio, la linea 13 ferma alle fermate 10, 3 e 24). Un autobus serve su una certa linea e in ogni momento ha una certa posizione. La linea dell’autobus definisce il percorso che l’autobus deve seguire e ha orari con i tempi di arrivo stimati a ciascuna fermata.
Ad esempio, per la linea 13:
Man mano che l’autobus si sposta, possono verificarsi ritardi; utilizzando la posizione attuale dell’autobus (dal GPS presente sull’autobus) e la distanza dalla prossima fermata, è possibile calcolare il tempo di arrivo stimato, ovvero il tempo di arrivo programmato sommato al ritardo.
Raccogliendo i tempi di arrivo effettivi di ogni autobus, è possibile ottenere tutti i ritardi e, eventualmente, modificare l’orario.
</aside>
<aside> ❓
Definire test Black Box per la seguente funzione, utilizzando classi di equivalenza e le boundary condition. La funzione determina se una pianta ha la priorità per essere trapiantata in un giardino botanico. La priorità viene data a piante giovani che sono state inserite nella lista di attesa quando erano molto piccole.
function hasPriority(growthDay: number, insertionDay: number): boolean
Input:
growthDay: giorno di crescita della pianta, espresso come numero di giorni dal 1 gennaio 2022 (corrisponde alla data di geminazione).insertionDay: giorno in cui la pianta è stata inserita nella lista di attesa per il trapianto, anch’esso espresso come numero di giorni dal 1 gennaio 2022.Output:
true se la pianta ha meno di 2 anni (730 giorni) e il trapianto è stato richiesto quando la pianta aveva meno di un anno (365 giorni).false altrimenti.Osservazioni:
Es.
hasPriority(639, 731) T → 978 - 639 = 339 giorni (meno di 730 giorni) e 731 - 639 = 92 giorni (meno di 365)
hasPriority(455, 913) F → 978 - 455 = 523 giorni (meno di 730 giorni) e 913 - 455 = 458 giorni (più di 365).
</aside>
growthDay e insertionDay con valori prima del 01/01/2022 sono invalidi (es. T(-3, 1000)).growthDay valido (0 <= growthDay <= 978) e insertionDay in diversi intervalli.