Requisiti
Di seguito viene definita la vision del progetto ed i diversi requisiti che dovrà soddisfare.
Business
Si vuole sviluppare un simulatore di propagazione alluvionale in un contesto eterogeneo, caratterizzato da aree con diverse proprietà. Il simulatore deve permettere di verificare l'evoluzione di un'inondazione in un'area geografica, tenendo conto di vari fattori come la topografia del terreno, la presenza di edifici e le condizioni meteorologiche (precipitazioni, nuvole, sole ecc.).
Le principali finalità includono:
- Analisi del rischio: valutare l'impatto delle alluvioni su diverse tipologie di aree (case, piazze, campi, ecc.) e identificare le zone più vulnerabili, anche in base alle loro caratteristiche fisiche.
- Supporto alla pianificazione urbana: fornire strumenti per calcolare i danni e generare report utili per la gestione del territorio e la pianificazione di interventi futuri.
- Studio del comportamento dell'acqua: favorire la comprensione delle dinamiche di propagazione dell'acqua durante un'inondazione, fornendo dati utili per studi scientifici e ingegneristici.
Modello di dominio
Gli elementi principali del sistema sono:
- Cell: rappresenta una porzione della mappa con caratteristiche specifiche (es. tipologia di terreno, altitudine, presenza di ostacoli).
- Grid: rappresenta l'intera mappa, composta da un insieme di celle.
- Obstacle: elemento fisico contenuto in Cell che ostacola il flusso dell'acqua (es. edifici). Inoltre, Obstacle possiede un volume che incide sulla velocità di saturazione di una cella.
- Weather: rappresenta condizioni meteorologiche, come precipitazioni, sole e nuvole. Questi elementi compongono una mappa di precipitazioni che andrà valutata sul territorio.
- WaterFlow: rappresenta il movimento dell'acqua tra le celle in base ad altitudine e tipologia di terreno.
- SimulationState: lo stato completo della simulazione in un dato momento.
- SimulationParams: parametri configurabili della simulazione (es. dimensioni della griglia, soglie di allagamento).
- Report: riporta lo stato finale della mappa, fornendo dati relativi ai danni.
Funzionali
Utente
- L'utente deve poter interagire con l'applicazione tramite un'interfaccia grafica.
- L'utente deve poter creare una mappa:
- Manualmente, posizionando le celle in maniera autonoma.
- Randomicamente, con configurazioni generate automaticamente.
- Deve essere possibile avviare, mettere in pausa o interrompere la simulazione.
- L'utente deve poter osservare l'evoluzione della simulazione.
- L'utente deve poter visualizzare il livello dell'acqua e le celle sommerse in tempo reale.
- Deve essere possibile poter visualizzare report sui danni causati dall'alluvione.
Sistema
- Il sistema deve gestire il flusso dell'acqua tra le celle in base a regole fisiche semplificate (es. pendenza, tipo di terreno).
- Il sistema deve calcolare il livello di allagamento e aggiornare lo stato della simulazione ad ogni tick temporale.
- Il sistema deve fornire un modello di pioggia semplificato, che influisca sull'evoluzione della simulazione.
- Il sistema deve supportare la visualizzazione della mappa fornendo una GUI.
- Il sistema deve poter gestire errori ed avvisi.
- Il sistema deve consentire la personalizzazione dei parametri di simulazione (es. soglia di allagamento, dimensioni della griglia).
Non funzionali
- Estendibilità: il progetto deve favorire l'aggiunta di nuove funzionalità (es. nuovi tipi di celle o modelli di pioggia).
- Testabilità: devono essere presenti test unitari e di integrazione per verificare il corretto funzionamento del sistema.
- Usabilità: la GUI deve essere intuitiva e accessibile anche per chi non ha familiarità con il programma, con una curva di apprendimento minima.
- Portabilità: l'applicazione deve essere eseguibile su sistemi operativi differenti (Windows, macOS, Linux).
- Performance: l'applicazione deve poter eseguire in maniera fluida la simulazione (almeno 1 aggiornamento ogni mezzo secondo della mappa, a velocità normale), considerando una mappa di minimo 10x10 celle (requisiti minimi: 4GB di RAM, CPU Quad Core da 3.6 GHz).
Implementazione
- Linguaggio: Scala 3.3.6
- Testing: ScalaTest 3.2.19
- GUI: Scala Swing 3.0.0
- Build Tool: SBT 1.11.4
- Formattazione del codice: Scalafmt 3.9.9
- Analisi statica: Wartremover 3.4.0
- Coverage: Scoverage 2.3.1
- Documentazione: Scaladoc
- Immutabilità: il sistema deve sfruttare strutture dati immutabili, per gestire in maniera robusta lo svolgimento della simulazione.
Opzionali
- Controllo della velocità della simulazione, fornendo diverse modalità:
- Normale (x1)
- Fast (x2)
- Very Fast (x5)
- Ultra Fast (x10)
- Aggiunta di strutture di contenimento (dighe, canali) con caratteristiche specifiche in fase di creazione della mappa, in grado di modificare il flusso dell'acqua.
- Agenti "umani" (es. cittadini) che si muovono per mettersi in salvo modificando la progressione della simulazione.
- Analisi delle zone a rischio e generazione di report contenenti:
- Percentuale di mappa allagata
- Altezza media dell'acqua
- Percentuale di edifici danneggiati
- Rappresentazione della mappa con livello di allagamento per cella
- GUI dettagliata e intuitiva, suddivisa per tipo di informazione da mostrare.