Requisiti
Business
L'applicazione deve permettere di caricare un programma aggregato, visualizzarlo in un grafo 3D e permettere di eseguirlo. La compilazione del programma deve avvenire runtime, utilizzando un server esterno.
Vocabolario e Concetti
- Programma Aggregato: un programma aggregato è un programma distribuito che viene eseguito su un insieme di dispositivi che comunicano tra di loro. Ogni dispositivo esegue lo stesso programma, ma con vicini e parametri diversi.
- Grafo: un grafo è una struttura dati composta da nodi e archi, dove i nodi rappresentano i dispositivi e gli archi le comunicazioni tra di essi.
- Nodo: un nodo è un dispositivo che esegue un programma aggregato.
- Arco: un arco è una comunicazione tra due nodi.
- Player: il player è un componente che permette di controllare l'esecuzione del programma aggregato.
- Velocità della Simulazione: la velocità della simulazione è la velocità con cui il player esegue il programma aggregato.
- Parametri del Grafo: i parametri del grafo sono le caratteristiche del grafo iniziale, come il numero di nodi, il raggio di visibilità e la loro disposizione.
- Boilerplate: il boilerplate è il codice necessario per compilare il programma aggregato e farlo interagire con il grafo.
- Engine: l'engine è il programma aggregato compilato.
Modello di dominio
Il dominio è diviso in due parti principali: il grafo e l'animazione:
Il grafo è composto da nodi e archi, dove i nodi rappresentano i dispositivi e gli archi le comunicazioni tra di essi.
L'animazione è composta da comandi che permettono di controllare una qualsiasi tipologia di processo che può essere eseguito a step.
Requisiti Funzionali
Utente
- L'utente deve poter caricare un programma aggregato.
- L'utente deve poter visualizzare il grafo generato in 3d.
- L'utente deve poter controllare l'esecuzione del programma aggregato.
- L'utente deve poter decidere le dimensioni del grafo.
- L'utente deve poter interagire con l'applicazione tramite un'interfaccia grafica disponibile online.
- L'utente deve poter modificare i parametri del grafo iniziale.
- L'utente deve poter cambiare la visualizzazione del grafo da 3D a 2D.
- L'utente deve poter cambiare il colore dei nodi.
- L'utente deve poter scegliere tra una serie d' esempi di programmi aggregati predefiniti.
Sistema
- Il sistema deve poter usare Scastie per la compilazione del programma aggregato.
- Il sistema deve poter caricare codice direttamente dal proprio account Scastie.
- Il sistema deve poter gestire la visualizzazione realtime del grafo 3D generato.
- Il sistema deve poter gestire il player del grafo con funzioni di Play, Pausa e regolazione della velocità della simulazione.
- Il sistema deve poter gestire diverse configurazioni del grafo come il numero di nodi, il raggio di visibilità e la loro disposizione.
- Il sistema deve poter caricare molteplici programmi aggregati.
- Il sistema deve poter supportare più di 30 aggiornamenti al secondo.
Requisiti Non funzionali
- Affidabilità: l'applicazione deve essere stabile, evitando crash.
- Documentazione: l'intero progetto deve essere ben documentato, in modo da facilitare la comprensione del codice.
- Performance: l'applicazione deve essere veloce e reattiva, evitando prolungate attese per l'utente nello svolgimento delle azioni.
- Portabilità: l'applicazione deve essere disponibile su più piattaforme.
- Manutenibilità: il codice deve essere ben strutturato e facilmente manutenibile.
Requisiti Opzionali
- Possibilità di centrare il grafo automaticamente. ✅
- Possibilità di cambiare la visualizzazione da 3D a 2D, eliminando quindi la possibilità di ruotare la camera. ✅
- Creare un boilerplate basato su field4s ❌
- Possibilità di nascondere il boilerplate Scastie. ❌
Tecnologie ed Implementazione
Ambiente
- Scala 3.3.4
- ScalaJS 1.18.x
- JDK 21+
Librerie Principali
- Laminar 1.17.x
Testing
- MUnit 1.0.x
- Munit-scalacheck 1.1.x
- Cucumber 8.25.x
- Selenium 4.1.x
- ArchUnit 1.3.x
Compilazione del Programma Aggregato
- Scastie (embedded)
Formattazione e Qualità
- Scalafmt 2.5.x
- Scalafix 0.14.x
- Wartremover 3.2.x
CI/CD
- GitHub Actions
Documentazione e Deployment
- vite 6.x.x
- vitepress 1.x.x