Alberto Aimone M63001508 Valerio Di Domenico M63001465 Genny Fedele M63001422
NOTA: Questa procedura è specifica per sistemi Windows, per sistemi MacOs e Linux, si rimanda alla documentazione ufficiale per l'installazione di docker desktop( si allegano i link
MAC: https://docs.docker.com/desktop/install/mac-install/
Linux: https://docs.docker.com/desktop/install/linux-install/ )
Installazione Docker Desktop: se già installato correttamente sulla macchina passare al Passo 2
NOTA: sebbene il Windows Subsystem for Linux wsl2, una funzionalità che consente di eseguire un ambiente Linux all'interno del sistema operativo Windows garantendo la compatibilità tra Docker Desktop e Windows, normalmente venga installato e aggiornato durante l'installazione di Docker Desktop, vi sono casi in cui questo step non venga effettuato correttamente in maniera automatica (all'apertura di Docker è presente un messaggio di errore "WSL Error"), bisogna quindi installare manualmente wsl tramite gli step preliminari 0:
0a) avviare il prompt dei comandi 0b) digitare wsl --install e premere invio 0c) digitare wsl --update e premere invio 0d) riavviare la macchina
- recarsi alla pagina web ufficiale: https://www.docker.com/products/docker-desktop/
- cliccare su Download per il proprio sistema operativo (ad es. Download for Windows) per scaricare il setup eseguibile
- lanciare l'eseguibile e procedere all'installazione, è possibile completare l'installazione con le impostazione di default, anche senza effettuare la registrazione di un account e senza effettuare il login
- riavviare la macchina come richiesto al termine dell'installazione
- all'avvio di Docker Desktop nella sezione Settings -> General controllare che sia spuntata l'opzione "Use the WSL 2 based engine"
Installazione dell'applicazione su Docker:
- avviare Docker Desktop
- A. avviare lo script "installer.bat" eseguendo il file con doppio click (consentendo esclusioni al firewall se richieste). Saranno effettuate automaticamente le seguenti operazioni:
B. Se si utilizza un dispositivo con una distrubuzione Linux o MacOs, avvviare lo script "installazione_mac_linux.sh" anzichè "installer.bat". Dopodichè seguire il resto dei passi.
a) creazione della rete "global-network" comune a tutti i container. b) creazione del volume "VolumeT9" comune ai Task 1 e 9; creazione del volume "VolumeT8" comune ai Task 1 e 8 c) installazione di ogni singolo container.
NOTA: il container relativo al Task 9 ("Progetto-SAD-G19-master") si sospenderà autonomamente dopo l'avvio. Esso viene utilizzato solo per "popolare" il volume "VolumeT9" condiviso con il Task 1. Lo stesso vale per il container relativo al Task 8 ("Prototipo2.0"), usato per il volume "VolumeT8".
Configurazione container "manvsclass-mongo_db-1":
-
dalla sezione Containers di Docker Desktop trovare il gruppo di container "manvsclass" (relativo al Task 1) e cliccare la freccia a sinistra del nome del container per rivelare i due container mongo_db-1 e controller-1
-
cliccare su mongo_db-1
-
cliccare su exec per posizionarsi all'interno del terminale del container
-
digitare il comando "mongosh" e premere invio
-
digitare i seguenti comandi:
use manvsclass db.createCollection("ClassUT"); db.createCollection("interaction"); db.createCollection("Admin"); db.createCollection("Operation"); db.ClassUT.createIndex({ difficulty: 1 }) db.Interaction.createIndex({ name: "text", type: 1 }) db.interaction.createIndex({ name: "text" }) db.Admin.createIndex({username: 1})
NOTA: è possibile effettuare una copia di tutti i comandi e incollarli sull'exec, questi infatti verranno eseguiti correttamente in maniera sequenziale. Per incollare un testo sull'exec non è possibile usare la combinazione CTRL+V ma è necessario fare click del tasto destro del mouse -> Paste NOTA: si ricordi di premere invio dopo l'ultimo comando
- assicurarsi che siano nello stato Running tutti i container eccetto "progetto-sad-g19-master" e "prototipo2.0" che saranno correttamente nello stato Exited per quanto detto in precedenza. Nel caso vi sia qualche container non nello stato di Running è necessario selezionare il container tramite il quadratino alla sinistra del nome, dopodichè cliccare sul pulsante Start selected items rappresentato in alto a destra da un pulsante di Play.
L'intera applicazione è adesso pienamente configurata e raggiungibile sulla porta :80 Caricamento Classi da parte dell'amministratore:
NOTA: se già si è registrato precedentemente l'admin effettuare il login alla pagina http://localhost/login_Admin e saltare allo step 4
- aprire il proprio browser e recarsi su http://localhost/registraAdmin
- registrare i dati dell'amministratore
- al termine della registrazioni si verrà automaticamente reindirizzati su http://localhost/home_adm
- cliccare su + Add Class in alto
- inserire i dati sulla classe tenendo presente che è tassativo inserire nel Class name l'effettivo nome della classe (ad es. se il file Calcolatrice.java contiene la classe Calcolatrice, in Class name andrà indicato Calcolatrice)
- effettuare l'upload della file .java tramite il pulsante Scegli il file NOTA: sono presenti alcuni file già pronti all'upload nella cartella ClassiUT\Tests (ad es. Calcolatrice.java)
- cliccare upload
NOTA: a questo punto verranno generati in automatico i livelli di Evosuite e Randoop. A seconda della macchina che si utilizza e della complessità della classe caricata potrebbe essere necessario qualche secondo o minuto per permettere ad Evosuite e Randoop di completare l'esecuzione, munirsi di pazienza. È comunque possibile monitorare l'avanzamento tramite il controller del Task 1: per fare ciò è necessario recarsi su Docker nella sezione Containers, espandere il container del Task 1 "manvsclass" come fatto al Passo 3.1 e cliccare su "controller-1", qui è possibile visualizzare il log del container che riporterà l'output di avanzamento dell'upload della classe con la creazione della suite di test di Randoop ed Evosuite.
- al termine dell'upload automaticamente si verrà reindirizzati sulla home (http://localhost/home_adm) e si visualizzerà correttamente la nuova classe caricata
Avvio della partita da parte dello studente NOTA: se già si è registrato uno studente saltare allo step 4
- recarsi su http://localhost/login
- cliccare su "Non sei ancora registrato? Registrati."
- si verrà reindirizzati sulla pagina http://localhost/register in cui sarà possibile inserire i dati di registrazione; al termine dell'inserimento cliccare su "Invia"
- recarsi su http://localhost/login
- inserire Username e Password inseriti in fase di registrazione e cliccare su "Accedi"
- selezionare a sinistra una classe di test e a destra robot e livello da sfidare, dopodichè cliccare su Submit in basso a destra
- verrà visualizzato il report di riepilogo, cliccare su Submit in basso a destra
- si arriverà alla pagina di editor in cui è possibile usare i tool dell'editor e scrivere il codice nel riquadro in alto a sinistra o caricare un file di test tramite il pulsante Open File NOTA: sono presenti alcuni file già pronti nella cartella ClassiUT\Tests (ad es. TestCalcolatrice.java) tenere a mente che i file di test compatibili sono in formato Junit4
- è possibile cliccare il pulsante con il logo di evosuite "Run UserTest" per avviare la misura di coverage con Evosuite, oppure cliccare il pulsante J "Highlight Line" per evidenziare le righe di codice coperte con l'utilizzo del tool JaCoCo, infine è possibile cliccare sul pulsante Play di "Start Game" per terminare la partita
- al termine dell'elaborazione apparirà un alert con l'esito della partita e nella console in basso a destra saranno visualizzate tutte le misure di coverage relative al test scritto dall'utente; la console in basso a sinistra riporterà il log della compilazione
NOTA: a seconda della macchina che si utilizza e della complessità della classe under test e della classe test caricata potrebbe essere necessario qualche secondo o minuto per permettere di completare l'esecuzione, munirsi di pazienza. È comunque possibile monitorare l'avanzamento tramite Docker: per fare ciò è necessario recarsi nella sezione Containers, espandere il container del Task 7 "remoteccc" e cliccare su "app-1", qui è possibile visualizzare il log del container che riporterà l'output di avanzamento dell'esecuzione. Allo stesso modo è possibile visualizzare i log dei container legati a questa funzionalità (T5, T6)
Si è notato che sulla macchine sulle quali viene installato l'applicazione, con sistema operativo Windows 10 e Windows 11, all'avvio di Docker, si abbia bisogno di una buona quantità di RAM a disposizione, si è notato che una quantità di RAM inferiore a 8GB potrebbe dare problemi saltuari; possono capitare casi nel quale sul browser all'indirizzo http://localhost non sia presente alcuna pagina, in questi casi è necessario agire nei seguenti modi:
- aprire la finestra di Docker.
- se è presente la scritta "Docker Engine Stopped" cliccare con il tasto destro l'icona di Docker (su Windows in basso a destra nell'area di notifica delle icone sulla barra delle applicazioni) e cliccare "Restart". Se anche ciò non funziona terminare l'applicazione manualmente e riavviare Docker.
- può capitare che vengano terminati alcuni container che rimangono inattivi per un certo periodo di tempo, portandoli allo stato 'Exited', va quindi controllato il Passo 3.6
Per consigli su metologie e software di sviluppo, su come effettuare le modifiche ai vari sottosistemi si rimanda alla Documentazione completa T10-G37
NOTA: sono stati evidenziati solo gli elementi di particolare interesse
\---VolumeT8\app\FolderTree \---NomeClasse //Nome della cartella associata alla classe aggiunta +---NomeClasseSourceCode | \---NomeClasse.java | \---RobotTest \---EvoSuiteTest +---01Level | +---TestReport | | \---statistics.csv | \---TestSourceCode | \---evosuite-tests //All'interno della cartella evosuite-tests saranno presenti anche i file .class | +---NomeClasse_ESTest_scaffolding.java | \---NomeClasse_ESTest.java \---xxLevel +---TestReport | \---statistics.csv \---TestSourceCode \---evosuite-tests +---NomeClasse_ESTest_scaffolding.java \---NomeClasse_ESTest.java ----------------------------------------------------------------------------------------------------------------------------------------------------------- \---VolumeT9\app\FolderTree riassuntivo di quanto scritto qui \---NomeClasse //Nome della cartella associata alla classe aggiunta +---NomeClasseSourceCode | \---NomeClasse.java | \---RobotTest \---RandoopTest +---01Level | +---coveragetot.xml | +---RegressionTest_it0_livello1.java | \---RegressionTestX_itY_livelloZ.java \---xxLevel +---coveragetot.xml \---RegressionTestX_itY_livelloZ.java ----------------------------------------------------------------------------------------------------------------------------------------------------------- \---remoteccc-app-1\ClientProject +---src | +---main | | \---java | | \---ClientProject | | \NomeClasse.java //Nome del file associato alla classe aggiunta | \---test | \---java | \---ClientProject | \NomeClasseTest.java +---evosuite-report | \---statistics.csv //Report dei punteggi utente +---target | +---classes | | \---ClientProject | | \---NomeClasse.class | \---test-classes | \---ClientProject | \---NomeClasseTest.class \---site \---jacoco \---jacoco.xml