• Non ci sono risultati.

Capitolo 6: Validazione dei dati

N/A
N/A
Protected

Academic year: 2021

Condividi "Capitolo 6: Validazione dei dati"

Copied!
6
0
0

Testo completo

(1)

57

Capitolo 6: Validazione dei dati

Durante la realizzazione del progetto è stato fatto il testing dell’applicativo web. Il testing è un procedimento che fa parte del ciclo di vita del software ed è utilizzato per individuare le carenze di correttezza, completezza e affidabilità delle componenti software in corso di sviluppo. Consiste nell'eseguire il software da collaudare, da solo o in combinazione ad altro software di servizio, e nel valutare se il comportamento del software rispetta i requisiti.

Si precisa che il prodotto realizzato e descritto in questa tesi è stato realizzato in ambiente locale e non sarà destinato alla commercializzazione, quindi non è stato fatto un procedimento di testing molto tecnico o approfondito.

In precedenti versioni dell’applicativo web sono state individuate carenze nell’affidabilità perché quando venivano premuti dei pulsanti nella pagina web “Fermate e percorsi delle linee” c’erano dei bug oppure non venivano visualizzati i percorsi sulla mappa. Inoltre certe funzionalità richiedevano troppo tempo di esecuzione. Questi problemi hanno comportato diverse modifiche del codice e di realizzazione di nuove tabelle, come quella chiamata

all_sections, sul database per velocizzare l’applicativo.

Questo capitolo si concentra su alcuni test effettuati per verificare se alcuni parti del progetto realizzato siano corrette. Questi test provano a dare una risposta a questi due quesiti:

1. La tabella all_sections contiene il giusto numero delle sezioni di tutte le corse?

2. Le fermate più vicine a un punto d’interesse sono rappresentate con dei cerchi blu. Quest’ultimi hanno un raggio veramente proporzionale al numero di linee che servono una fermata?

Infine, nell’ultimo paragrafo verranno presentati degli esempi d’uso dell’applicativo.

6.1 La tabella all_sections

Questa contiene per ogni corsa, presente nella tabella all_trips, le sezioni del suo percorso. Ognuna di queste sezioni deve essere compresa tra due fermate servite dalla linea a cui si riferisce una corsa. Nonostante in all_trips siano presenti 123,069 corse, la tabella contiene

(2)

58

3,223,681 sezioni. Quindi è possibile che lo stesso identificativo di una corsa (trip_uid) compaia in diversi record.

La tabella è stata popolata con un comando Artisan creato col file PopulateSections.php che contiene un algoritmo nella funzione createSections che prende come input una sequenza di coordinate geografiche di punti, che rappresentano il percorso delle linee, e un’altra sequenza di coordinate geografiche delle fermate servite dalle corse. Restituisce come output le sezioni delle corse, cioè un sottoinsieme dei punti delle due sequenze, e le inserisce nella tabella.

Se l’algoritmo ha diviso tutti i percorsi nel modo giusto ci aspettiamo che per ogni corsa il numero delle sezioni presenti nella tabella all_sections sia pari al numero delle fermate servite meno uno.

Durante la realizzazione dell’algoritmo sono state create due tabelle di testing sul database con questi due comandi SQL:

select trip_uid, count(*) as count_sections

into test_sections

from all_sections

group by trip_uid;

select trip_uid, count(*) as count_stops

into test_stoptimes

from all_stop_times

group by trip_uid;

La tabella test_sections contiene, per ogni corsa, il numero delle sezioni create dall’algoritmo. Invece la tabella test_stop_times contiene la lunghezza delle sequenze delle fermate servite da ogni corsa. Entrambe le tabelle hanno 123,069 record.

Poi sono state eseguite queste interrogazioni:

select sec.trip_uid, st.count_stops, sec.count_sections

into test_join

from test_sections as sec join test_stoptimes as st on sec.trip_uid = st.trip_uid;

(3)

59

update test_join set diff = count_stops - count_sections;

select * from test_join where diff <> 1 order by diff asc;

per creare una tabella chiamata test_join attravero la giunzione, in base all’identificativo delle corse trip_uid, contenente i dati delle tabelle test_sections e test_stop_times. Quindi viene aggiunta la colonna diff che viene riempita con la differenza tra la lunghezza delle sequenze delle fermate servite e il numero delle sezioni per ogni corsa. Infine, si selezionano dalla tabella test_join le corse in cui il valore di diff è diverso da uno. Il risultato è una tabella vuota, ciò significa che, per ogni corsa presente nel database, il numero delle sezioni presenti nella tabella all_sections è pari al numero delle fermate della sequenza meno uno.

Inoltre l’attributo geom della tabella all_sections non contiene alcun campo vuoto per qualsiasi corsa, quindi ogni sezione ha una geometria corrispondente.

6.2 Le fermate più vicine al punto d’interesse

Per dimostrare che la dimensione di un qualsiasi cerchio blu è proporzionale al numero di corse che servono la fermata, prediamo come esempio la fermata chiamata “Portoferraio Calata Italia”.

(4)

60

Nella figura sopra è riportato uno screenshoot della mappa dell’applicativo e il Chrome DevTool [38] in cui è possibile vedere i dati della fermata che sono stati estratti dal database. I dati sono passati alla vista di questa pagina web con i metodi find_point_of_interest e

nearest_stops della classe MapController. Si nota, nella console del Chrome DevTool nella

parte destra della figura, che sono presenti i dati della fermata e le nove linee che la servono all’interno dell’array routes. Tali dati sono passati alla funzione create_stopMarker, della quale si riporta una sua parte nel frammento di codice qua sotto, il quale è presente nel codice della vista bus_stops.blade.php.

function create_stopMarker(stop, ind_stop) {

let marker, content, numRoutes; numRoutes = stop.routes.length;

console.log([stop, numRoutes]);

marker = L.circleMarker([stop.stop_lat, stop.stop_lon], { radius: numRoutes, color: '#6358a7', weight: 3, fill: true, fillColor: '#6358a7', fillOpacity: 0.7 });

Frammento 10: Sezione di codice della funzione create_stopMarker

Tale funzione contiene il codice sorgente del cerchio blue rappresentate una qualsiasi fermata presente nella mappa e tra i suoi parametri è presente la variabile stop che prende i dati di una fermata. Il comando console.log([stop, numRoutes]) permette di visualizzare sulla console i dati mostrati nella Figura 28. La variabile marker memorizza un oggetto della classe

L.circleMarker di Leaflet e al suo costruttore devono essere indicati le coordinate geografiche

della fermata [stop.stop_lat, stop.stop_lon] e le opzioni. Tra queste è presente la proprietà radius in cui va indicato il raggio del cerchio. Quest’ultimo è contenuto nella variabile numRoutes che memorizza la lunghezza dell’array routes ed è pari al numero delle linee che servono la fermata.

(5)

61

Per ispezione diretta dei codici delle funzioni find_point_of_interest, nearest_stops e

create_stopMarker la dimensione di qualsiasi cerchio blu è proporzionale al numero delle linee

che servono una fermata.

6.3 Esempi d’uso

In questo paragrafo mostreremo un esempio di analisi di accessibilità che può essere effettuata con l’applicativo web. Prendiamo come luogo d’interesse l’Istituto d’Istruzione Superiore Buontalenti-Cappellini-Orlando di Livorno nella figura qua sotto.

Figura 29: Analisi di accessibilità dell'IIS Buontalenti-Cappellini-Orlando

Prendiamo come ora quella compresa tra le 7 e l’8 di mattina del 13 novembre 2018 perché capita in un periodo in cui le scuole superiori sono molto frequentate dagli studenti. Il punto d’interesse, rappresentato dal marker nero, è circondato da 4 fermate che rientrano in una distanza inferiore a 125 metri. La fermata che ha il cerchio più grosso è servita da 7 linee. Cliccando sul pulsante “I percorsi delle linee attuali” di ognuna di queste quattro fermate è possibile individuare sulla mappa i percorsi delle linee che in quell’ora transitano nelle vicinanze della scuola. Nella figura notiamo che l’Istituto è raggiungibile da diverse zone della città e lo spessore dei percorsi fornisce un’informazione grafica sulla frequenza delle linee per ogni

(6)

62

sezione compresa tra due fermate. Cliccando su qualsiasi sezione si apre un popup che indica la frequenza tra due fermate; nella figura è aperto il popup del percorso con lo spessore maggiore che presenta in tutte le sezioni una frequenza di 8 corse.

Un’altra analisi interessante che l’applicativo web permette di fare è il confronto dell’accessibilità tra più luoghi d’interesse perché ogni volta che l’utente clicca sul link per visualizzare la mappa delle fermate più vicine si apre una nuova pagina web con la relativa mappa. Nella figura sotto sono mostrate due mappe con le fermate vicine a due istituti d’istruzione secondaria di due città: Livorno e Pisa. Notiamo che l’Istituto Cappellini-Buontalenti-Orlando di Livorno ha 4 fermate entro 125 metri; invece l’Istituto Superiore Galilei-Pacinotti presenta più fermate nel raggio di 500 metri ma nessuna dista 125 dall’Istituto. Però dalla mappa si nota che l’Istituto pisano dista circa 500 metri dalla stazione ferroviaria rendendo più agevole la mobilità degli studenti pendolari che tutte le mattine usano il treno per spostarsi nel tragitto casa-scuola.

Riferimenti

Documenti correlati

°Trovo facilmente le informazioni per partecipare alle iniziative di prevenzione e sicurezza sul lavoro

Segretariato Generale OIV DG per le politiche del personale, l'innovazione organizzativa, il bilancio – Tutte le Direzioni Generali UPD. Aggiornamento

Negli ultimi 4 anni (periodo 2007-2011), il valore degli investimenti effettuati per i lavori di ampliamento e riabilitazione delle infrastrutture delle acque reflue ammonta a quasi

INTERVENTI PLANIMETRICI DI ALLARGAMENTO DELLA SEDE STRADALE IN CORRISPONDENZA DELLE CURVE AI FINI DELLE VISUALI LIBERE E ISCRIZIONE VEICOLI. MARINEO

Al corso di nuoto organizzato per il mese di luglio nella piscina di Gaggio Montano si sono iscritti 25 ragazzi. c) Calcola la media aritmetica, trova la moda e la mediana dei dati.

(Art. 1) Preparazioni di barbiturici in associazione ad altri principi attivi, ad eccezione di quelle preparazioni ad azione antalgica che contengono quantità di

[r]

[r]