Info: Tempi di attesa mezzi pubblici

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:

  1. Fermata: È il punto specifico lungo il percorso degli autobus. Ogni fermata ha un ID univoco e può servire più linee di autobus. Dispone di un display che riceve e mostra i tempi di attesa dialogando con il sistema di calcolo attraverso connettività 5G.
  2. Linea Autobus: Rappresenta una linea di autobus che segue un percorso specifico e ferma in diverse fermate. Ogni linea comunica via 5G con il sistema centrale inviando dati sulla sua posizione attuale ottenuta tramite GPS.
  3. Sistema di Calcolo Tempi di Attesa: È responsabile del calcolo dei tempi di attesa degli autobus utilizzando dati in tempo reale (dal GPS degli autobus). Questo sistema aggiorna costantemente le informazioni per le fermate e risponde alle richieste SMS.
  4. Database: Memorizza informazioni sulle fermate, linee di autobus, orari programmati e dati in tempo reale.
  5. Sistema di Comunicazione Telegram: Gestisce l’invio e la ricezione di messaggi Telegram tra gli utenti e il sistema. Quando un utente invia un messaggio con l’ID della fermata utilizzando l’apposito Bot, il sistema risponde con i tempi di attesa.

Esercizio 1

<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.

Esercizio 2

<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>

Class diagram.svg

Esercizio 3

<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:

Output:

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>

Classi di Equivalenza

Boundary condition