Università degli Studi di Padova
Dipartimento di Matematica
Corso di Laurea in Informatica
Tesi di Laurea
Tecnologie Google a supporto delle
aziende del settore manifatturiero e
logistico
Laureando
Relatore
Gabriele Spiga
Massimo Marchiori
Gennaio 2014
Alla mia famiglia
Abstract
Il seguente documento ha lo scopo di illustrare il lavoro di stage compiuto presso
l’azienda Nextep srl fornendo una descrizione dettagliata dei due progetti che sono
stati realizzati in collaborazione con lo studente Enrico Brunelli, riportando le
tecnoligie adottate e le scelte implementative più significative.
Per evitare ripetizioni tutti i termini presenti nel documento sono contrassegnati
dall’appendice |g| e riportati nella sezione Glossario alla loro prima occorrenza.
Indice
1 Introduzione
1.1 Profilo Aziendale . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Descrizione del progetto di stage . . . . . . . . . . . . . . . . . . . .
1.2.1 Progetto 1: Applicazione per la navigazione del database
dell’inventario prodotti . . . . . . . . . . . . . . . . . . . . . .
1.2.2 Progetto 2: Applicazione per il calcolo di percorsi e ricerca
punti di interesse . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Metodologia di sviluppo . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.1 Il metodo scrum . . . . . . . . . . . . . . . . . . . . . . . . .
1.4 Obiettivi del progetto . . . . . . . . . . . . . . . . . . . . . . . . . .
3
4
5
6
2 Sistema per la navigazione del database dell’inventario prodotti
2.1 Descrizione del contesto . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1 Tipologia di utente . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Casi d’uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Classificazione dei requisiti . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Vincoli tecnologici generali . . . . . . . . . . . . . . . . . . .
2.2.2 Ambito utente non autenticato . . . . . . . . . . . . . . . . .
2.2.3 Ambito utente autenticato . . . . . . . . . . . . . . . . . . . .
2.3 Tecnologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 La piattaforma Google App Engine . . . . . . . . . . . . . . .
2.3.2 La tecnologia REST . . . . . . . . . . . . . . . . . . . . . . .
2.3.3 Strumenti di sviluppo . . . . . . . . . . . . . . . . . . . . . .
2.3.4 Principali tecnologie utilizzate . . . . . . . . . . . . . . . . .
2.4 Progettazione del sistema . . . . . . . . . . . . . . . . . . . . . . . .
2.4.1 Design Pattern utilizzati . . . . . . . . . . . . . . . . . . . . .
2.4.2 Specifica del Back end . . . . . . . . . . . . . . . . . . . . . .
2.4.3 Specifica del Front end . . . . . . . . . . . . . . . . . . . . . .
2.5 Test di sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7
8
9
14
14
15
15
17
17
19
20
20
25
25
30
39
40
3 Applicazione per il calcolo di percorsi e ricerca punti di interesse
3.1 Descrizione del contesto . . . . . . . . . . . . . . . . . . . . . . . . .
3.1.1 Tipologia di utente . . . . . . . . . . . . . . . . . . . . . . . .
44
44
45
7
1
1
1
2
3.2
3.3
3.4
3.5
3.1.2 Casi d’uso . . . . . . . . . . . . .
Classificazione dei requisiti . . . . . . .
3.2.1 Requisiti Obbligatori . . . . . . .
3.2.2 Requisiti Desiderabili/Opzionali
Tecnologie . . . . . . . . . . . . . . . . .
3.3.1 Google Maps API . . . . . . . .
3.3.2 Tecnologie utilizzate . . . . . . .
Progettazione del sistema . . . . . . . .
3.4.1 Design Pattern utilizzati . . . . .
3.4.2 Specifica del Back end . . . . . .
3.4.3 Specifica del Front end . . . . . .
Test di sistema . . . . . . . . . . . . . .
4 Valutazioni retrospettive
4.1 Obiettivi . . . . . . . . . . . . . . . .
4.1.1 Obiettivi minimi dello stage .
4.1.2 Obiettivi massimi dello stage
4.1.3 Obiettivi formativi . . . . . .
4.1.4 Possibili sviluppi futuri . . .
4.1.5 Conoscenze acquisite . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
46
52
52
53
54
54
57
58
58
58
66
68
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
71
71
71
72
72
73
73
Glossario
75
Bibliografia
79
Elenco delle figure
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
2.16
2.17
2.18
Caso d’uso: Autenticazione Utente Non Google . . . . . .
Autenticazione Utente Google . . . . . . . . . . . . . . . .
Sezione di interazione con il sistema . . . . . . . . . . . .
Sezione di interrogazione al database . . . . . . . . . . . .
Sezione amministrativa . . . . . . . . . . . . . . . . . . . .
Struttura generale di Google App Engine . . . . . . . . .
Struttura dell’architettura REST . . . . . . . . . . . . . .
Struttura generale del design pattern MVC . . . . . . . .
Struttura del design pattern Data Access Object . . . . .
Struttura del design pattern Command . . . . . . . . . . .
Struttura del design pattern Abstract Factory applicato al
Struttura del Controller . . . . . . . . . . . . . . . . . . .
Struttura del design pattern command . . . . . . . . . . .
Struttura del package Managers . . . . . . . . . . . . . . .
Struttura del package Factory . . . . . . . . . . . . . . . .
Struttura del package DataModel . . . . . . . . . . . . . .
Struttura del package DataStoreAccess . . . . . . . . . . .
Struttura del front end . . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
sistema
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
3.10
3.11
Pagina iniziale del sistema . . . . . . . . . . . . . . . . . . .
Ricerca del percorso su strada tra due località . . . . . . . .
Visualizzazione risultati ricerca percorso . . . . . . . . . . .
Ricerca fascia tariffaria . . . . . . . . . . . . . . . . . . . . .
Ricerca elenco distanze chilometriche . . . . . . . . . . . . .
Visualizzazione risultati della ricerca distanze chilometriche
Struttura della componente Controller . . . . . . . . . . . .
Struttura del design pattern command . . . . . . . . . . . .
Struttura del package Managers . . . . . . . . . . . . . . . .
Struttura del package DataModel . . . . . . . . . . . . . . .
Struttura del front end . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
10
11
12
13
17
19
25
27
28
29
30
33
35
36
37
38
39
.
.
.
.
.
.
.
.
.
.
.
46
47
48
49
50
51
58
61
63
64
66
Elenco delle tabelle
2.1
2.2
2.3
2.4
Progetto
Progetto
Progetto
Progetto
1
1
1
1
-
Vincoli tecnologici generali . .
Ambito utente non autenticato
Ambito utente autenticato . .
Test di sistema . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14
15
16
42
3.1
3.2
3.3
Progetto 2 - Requisiti obbligatori . . . . . . . . . . . . . . . . . . . .
Progetto 2 - Requisiti Opzionali e Desiderabili . . . . . . . . . . . . .
Progetto 2 - Test di sistema . . . . . . . . . . . . . . . . . . . . . . .
53
53
70
CAPITOLO 1. INTRODUZIONE
Capitolo 1
Introduzione
In questo primo capitolo verrà illustrato il contesto generale dell’azienda proponente lo stage e le motivazioni che hanno portato alla realizzazione dello stesso, oltre
ad una breve descrizione dei due progetti affrontati che saranno approfonditi nei
capitoli successivi. Nel secondo capitolo sarà analizzato nel dettaglio il primo dei
due progetti da me affrontati in collaborazione con Enrico Brunelli, compagno del
corso di studi, mettendone in luce le principali caratteristiche e funzionalità oltre
alle scelte implementative più significative.
Il Capitolo 3 conterrà la descrizione del secondo progetto da noi realizzato secondo
le modalità sopra citate ed il Capitolo finale sarà dedicato alle conclusioni, in
particolare alle considerazioni personali sullo stage e sui possibili sviluppi futuri delle
due applicazioni.
1.1
Profilo Aziendale
Lo stage ha avuto luogo presso l’azienda Nextep srl di Carmignano di Brenta
(PD), facente parte del gruppo Allos Spa assieme a Zero12 Srl.
L’azienda, fondata nel 2000, opera nel settore dell’informatica e della comunicazione
ed è specializzata nelle attività di progettazione, realizzazione e gestione di web sites,
web applications e piattaforme di e-commerce|g| , oltre a fornire servizi di consulenza
di web marketing|g| e web analytics|g| .
L’azienda si occupa inoltre della rivendita di servizi a canone come domini, servizi di
cloud computing|g| e SaaS|g| , piattaforme di video streaming e Google Apps|g| , oltre
alla gestione e manutenzione di un gran numero di siti web.
1.2
Descrizione del progetto di stage
L’idea che sta alla base del progetto di stage proposto dall’azienda deriva dalla
necessità di analizzare le potenzialità dei servizi e le tecnologie offerte da Google|g| e
Pagina 1 di 79
1.2. DESCRIZIONE DEL PROGETTO DI STAGE
verificarne l’idoneità al loro impiego per lo sviluppo di applicazioni e siti web che
riescano a soddisfare appieno le richieste dei clienti, nello specifico alcune aziende
operanti nel settore metalmeccanico e dei trasporti.
L’azienda ha ricevuto diverse richieste da parte dei propri clienti riguardo alla
possibilità di integrare servizi già esistenti con funzionalità offerte dalle tecnologie
Google, come ad esempio Maps|g| , Drive|g| e GMail|g| per adattarli alle loro esigenze,
le quali possono essere riassunte nei seguenti punti:
• Integrazione dei dati con database esistenti tramite architetture REST|g|
• Applicazione per il calcolo di percorsi stradali e ricerca di punti di interesse
• Processi di condivisione delle informazioni per ufficio commerciale/customer
Service
• Mantenimento della documentazione inerente qualità e sicurezza aziendale
L’obiettivo minimo dello stage è stato lo sviluppo di almeno uno di questi punti
e la conseguente realizzazione di un prodotto che ne soddisfi le specifiche. Durante il
periodo di stage si è scelto di approfondire due dei punti precedentemente elencati e,
in accordo con il tutor aziendale, sono state sviluppate due applicazioni utilizzando
vari tool che Google mette a disposizione ai programmatori.
Segue la descrizione del contesto dei singoli prodotti.
1.2.1
Progetto 1: Applicazione per la navigazione del database
dell’inventario prodotti
Il primo problema affrontato riguarda lo sviluppo di un’applicazione web che
permetta la navigazione dei dati presenti sul database|g| dell’azienda cliente e la sua
integrazione con alcuni servizi di Google: in particolare è richiesto che l’applicazione
consenta l’accesso allo staff e a determinati utenti previa autorizzazione dell’amministratore del sistema ed inoltre sia accedibile agli utenti per mezzo del proprio account
Google.
L’applicazione deve permettere agli utenti autorizzati di effettuare interrogazioni
al database dei componenti e di visualizzare i risultati, oltre a poter richiedere la
fornitura di una certa quantità di prodotti.
Le funzionalità principali del sistema sono le seguenti:
• Accesso tramite account Google: l’applicazione consente l’accesso agli
utenti provvisti di account Google, previa autorizzazione da parte dell’amministratore
• Accessibilità via web: il prodotto è accessibile e fruibile collegandosi alla
sua pagina web
Pagina 2 di 79
CAPITOLO 1. INTRODUZIONE
• Interazione con il database: l’applicazione consente agli utenti autenticati
di eseguire varie interrogazioni al database, ordinare i risultati secondo i criteri
desiderati, e visualizzare i dettagli di un singolo prodotto
• Richiesta di fornitura: è possibile richiedere la fornitura di una certa quantità
di merce mediante compilazione dell’apposita form
L’azienda necessitava soprattutto di una modalità di interazione con il database
semplice e veloce, in modo da diminuire il tempo necessario alla consultazione dell’inventario ed effettuare la richiesta di fornitura di un prodotto in tempi brevi.
L’integrazione con i Google accounts è stata presa in considerazione in quanto l’azienda fa uso di un dominio Google Apps for Business: era pertanto preferibile l’accesso
al sistema tramite login utilizzando le credenziali del proprio account.
1.2.2
Progetto 2: Applicazione per il calcolo di percorsi e ricerca
punti di interesse
Il secondo prodotto sviluppato è un’applicazione web sviluppata mediante l’uso
delle API|g| di Google Maps|g| che consente all’utente la ricerca di percorsi, distanze
e punti d’interesse e di visualizzare i risultati direttamente sulla mappa.
Il contesto di utilizzo del prodotto è situato in un ambito aziendale, nello specifico
un’azienda di trasporti: l’idea è nata dall’esigenza dell’azienda di fornire in tempi
rapidi al cliente l’elenco delle distanze chilometriche tra una località ed il resto
dei capoluoghi di provincia italiani in modo da poter essere informato sulle tariffe
applicabili al trasporto di merci lungo un determinato percorso.
L’azienda è inoltre interessata al calcolo di percorsi tra due punti e la ricerca di
punti d’interesse lungo il percorso; nello specifico, si desidera ricercare la presenza di
aziende clienti ad una certa distanza dal percorso e visualizzarne la posizione ed i
dettagli sulla mappa.
Le funzionalità principali del prodotto sono riassunte nei seguenti punti:
• Utilizzo del servizio Google Maps: l’applicazione consente di interagire
con varie funzionalità messe a disposizione dal servizio Maps di Google
• Calcolo di un percorso tra due località: è possibile visualizzare un percorso tra due località e relativi dettagli, come eventuali aziende clienti nelle
vicinanze
• Calcolo delle distanze chilometriche: è possibile ottenere l’elenco delle
distanze chilometriche su strada tra una località e tutti i capoluoghi di provincia
italiani
• Accessibilità via web: il prodotto è accessibile e fruibile collegandosi alla
sua pagina web
Pagina 3 di 79
1.3. METODOLOGIA DI SVILUPPO
• Download dei risultati: l’applicazione consente agli utenti di scaricare i
risultati di una ricerca in un formato utilizzabile nei più diffusi editor di fogli
di calcolo
1.3
Metodologia di sviluppo
L’azienda Nextep srl utilizza il metodo agile, nello specifico lo Scrum, per lo
sviluppo di gran parte dei propri prodotti, che consente di produrre in breve tempo
versioni di prodotto funzionante per tenere aggiornato il cliente e rispondere prontamente alle sue esigenze.
La metodologia agile è nata nei primi anni del Duemila con l’obiettivo di ridurre i
tempi di sviluppo del software ed il rischio di fallimenti che affliggono gran parte dei
progetti: basandosi sulla produzione di piccole parti di software in un breve lasso
di tempo si ha un maggior controllo su eventuali difetti che possono essere corretti
tempestivamente evitando sostanziali perdite di tempo e risorse.
Lo sviluppo del prodotto è formato da un certo numero di iterazioni, che comprendono analisi dei requisiti, progettazione e sviluppo di una parte del prodotto finale,
con l’obiettivo di mantenere costantemente aggiornato il committente, il quale può
verificare di persona lo stato di avanzamento del prodotto e fornire dei feedback1
agli sviluppatori: si ottiene così un maggior controllo e reattività nel caso in cui si
verifichi una variazione dei requisiti in corso d’opera.
Il metodo agile si fonda sui seguenti principi:
• Le risorse più importanti del progetto sono le persone e le loro relazioni
• Il software funzionante è più importante della documentazione, che passa in
secondo piano e si limita al minimo indispensabile
• L’obiettivo primario è la soddisfazione del cliente, conseguibile con una costante
collaborazione
• È necessario essere reattivi ed adattarsi alle esigenze di cambiamento per far
parte del team di sviluppo
Uno degli obiettivi dello stage era quello di mettere in gioco lo studente consentendo di sperimentare in prima persona il metodo agile, che al giorno d’oggi è molto
diffuso nell’ambito dello sviluppo del software: per questo motivo, uno dei principali
obiettivi è stato quello di ottenere il prima possibile una versione funzionante del
prodotto richiesto dal committente in modo da poterlo coinvolgere e rispondere
prontamente alle sue esigenze.
1
Il processo per cui l’effetto risultante dall’azione di un sistema si riflette sul sistema stesso per
variarne o correggerne opportunamente il funzionamento: in questo caso si intendono commenti e
considerazioni sulla parte di software finora sviluppata con lo scopo di correggerne eventuali errori e
migliorarla
Pagina 4 di 79
CAPITOLO 1. INTRODUZIONE
1.3.1
Il metodo scrum
Lo Scrum è un metodo di sviluppo agile, iterativo e incrementale, per la gestione
di progetti software basato su su tre punti: Sprint, Backlog e Scrum Meeting.
Gli sprint sono la parte principale della metodologia Scrum e corrispondono ai blocchi
di lavoro in cui il progetto viene diviso e al termine dei quali viene prodotta una
versione non completa ma funzionante del prodotto.
Il backlog e una lista di requisiti ordinata secondo dei parametri, mentre gli Scrum
Meeting sono degli incontri giornalieri interni al team di sviluppo della durata di
15-20 minuti. Questo modello di sviluppo si adatta molto velocemente alle esigenze
dei clienti, che notoriamente non hanno idee ben chiare e definite sul prodotto che
desiderano ed è quindi alta la probabilità di modifica dei requisiti in corso d’opera,
che verrà pianificata e realizzata a partire dallo sprint successivo.
Di conseguenza, dopo un’iniziale studio e valutazione degli strumenti e le tecnologie
di Google che avrebbero potuto essere utilizzate nello sviluppo delle applicazioni, il
lavoro è stato suddiviso nelle seguenti attività per ogni sprint:
• Analisi dei requisiti: con lo scopo di produrre nel più breve tempo possibile
un prototipo del prodotto finale si sono fissati i requisiti minimi da soddisfare
• Progettazione: il sistema e le sue componenti è stato progettato in modo da facilitare la manutenzione e aggiunta di funzionalità successive al soddisfacimento
dei requisiti minimi individuati dall’analisi
• Codifica: l’attività di codifica ha avuto il compito di realizzare il sistema
secondo le specifiche della progettazione
• Documentazione: coerentemente con la filosofia dei metodi agili è stata
prodotta la documentazione di supporto che comprende Analisi dei Requisiti e
Specifica Tecnica
• Verifica: della documentazione e del codice prodotto
Questo metodo risulta particolarmente efficace quando il team di sviluppo è composto da personale dinamico capace di adattarsi ad inevitabili cambiamenti, anche
radicali, dei requisiti in corso d’opera che possono derivare dalla continua interazione
con il committente, aspetto da non sottovalutare in quanto il coinvolgimento del
cliente può contribuire alla buona riuscita del progetto limitando i rischi di fallimenti,
consentendo la modifica del prodotto in fase di sviluppo in tempi rapidi.
I metodi agili presentano tuttavia alcuni aspetti negativi come la scarsa documentazione a supporto del progetto, essendo l’attenzione focalizzata sullo sviluppo di
versioni di prodotto funzionanti piuttosto che sui documenti.
Questo può comportare problematiche di manutenzione nel caso sia necessaria l’aggiunta di nuove funzionalità.
Pagina 5 di 79
1.4. OBIETTIVI DEL PROGETTO
1.4
Obiettivi del progetto
Lo stage proponeva il raggiungimento di vari obiettivi tra i quali:
• Obiettivi formativi per lo studente
– Migliorare le capacità di lavoro all’interno di un team
– Apprendimento di nuove tecnologie
– Apprendimento della metodologia di lavoro Scrum
• Obiettivi minimi del progetto
– Studio dell’idoneità delle Google Apps a supporto dei processi dell’azienda
cliente
– Sviluppo del prototipo dell’applicazione, in modo da soddisfare almeno
una delle quattro richieste elencate in precedenza
• Obiettivi massimi del progetto
– Sviluppo di funzionalità aggiuntive al prodotto
Un ultimo obiettivo opzionale riguardava l’approfondimento di un altro dei quattro punti elencati in sezione 1.2 qualora si fosse riuscito a completare in tempi
relativamente brevi lo sviluppo del primo progetto affrontato: questo è stato reso
possibile dal fatto che il team di sviluppo era composto da due persone oltre al
costante supporto offerto dal personale di Nextep.
Nei capitoli successivi verranno analizzati nel dettaglio i due progetti realizzati, mettendo in evidenza le tecnologie utilizzate e le scelte implementative più
significative.
Pagina 6 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
Capitolo 2
Sistema per la navigazione del
database dell’inventario prodotti
2.1
Descrizione del contesto
In questo capitolo verranno descritte nel dettaglio le attività svolte per lo sviluppo
del primo punto riportato in sezione 1.2, ovvero:
Integrazione dei dati con database esistenti tramite architetture REST
In particolare è stato richiesto lo sviluppo di un’applicazione web che permettesse la
navigazione dei dati presenti nel database del committente come riportato in sezione
1.2.1.
Il suo impiego è collocato in un ambito aziendale e lavorativo ed è ad uso esclusivo
dell’azienda del cliente, pertanto è stato necessario proibire l’accesso al sistema da
parte diutenti non autorizzati.
Segue l’elenco delle principali caratteristiche richieste:
• Necessità di integrare il servizio offerto dall’applicazione con gli account Google
dei dipendenti dell’azienda, in modo da potervi accedere e interagirvi senza
effettuare il login al sistema secondo il metodo tradizionale1 .
• Implementazione di un’area riservata all’amministratore del sistema dedicata
alla gestione degli account utente e dei permessi di accesso all’applicazione
• Implementazione di un sistema di navigazione dei dati del database aziendale,
con la possibilità di visualizzare i dettagli tecnici di un singolo prodotto ed
effettuare richieste di fornitura all’ufficio addetto
L’obiettivo assegnato al team di sviluppo è stato quello di analizzare il problema,
producendo il documento Analisi dei Requisiti, progettare e realizzare un prototipo
funzionante del sistema che implementasse tutti i punti riportati nel precedente elenco.
1
Inserimento di username e password previa registrazione al sistema
Pagina 7 di 79
2.1. DESCRIZIONE DEL CONTESTO
2.1.1
Tipologia di utente
La necessità di dedicare una sezione relativa alla gestione degli account e dei
premessi d’accesso ha portato alla distinzione tra due categorie di utenti:
• Utente Generico: Si definisce Utente Generico un utente che ha accesso al
sistema, suddiviso ulteriormente in due sottocategorie:
– Utente Google: Utente provvisto di account Google che può utilizzare
per effettuare l’accesso
– Utente Non Google: Utente non provvisto di account Google che
può accedere al sistema con le credenziali precedentemente fornitegli
dall’Utente Amministratore
• Utente Autenticato: Si definisce Utente Autenticato un generico utente che
ha il permesso di accedere al sistema ed interagire con le sue funzionalità
• Utente Amministratore: Si definisce Utente Amministratore un utente provvisto di privilegi di Amministratore che gli consente di accedere a funzionalità
aggiuntive rispetto a quelle di un Utente Autenticato, come ad esempio:
– Aggiungere nuovi account utente o rimuovere quelli esistenti
– Gestione dei premessi d’accesso al sistema
– Visualizzazione dei log delle attività
Pagina 8 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
2.1.2
Casi d’uso
Di seguito sono riportati i casi d’uso principali identificati per il progetto, con
particolare attenzione alle due modalità d’accesso al sistema, le modalità di interazione
con il database e la sezione amministrativa.
Ambiente Utente Generico
UCGe 1.1.1: Login non Google
Figura 2.1: Caso d’uso: Autenticazione Utente Non Google
Attori principali: Utente Non Google
Attori secondari: /
Precondizione: Il sistema propone la schermata di autenticazione per Utenti non
provvisti di account Google
Postcondizione: Il sistema ha riconosciuto come validi i dati inseriti
Scenario principale: L’Utente Non Google si trova nella sezione relativa al login e:
• Inserisce indirizzo e-mail (UCGe 1.1.1.1)
• Inserisce la password (UCGe 1.1.1.2)
• Il sistema riconosce l’utente come autenticato
Scenario secondario: I dati inseriti dall’utente non sono validi, pertanto:
• L’autenticazione non va a buon fine
• Il sistema lo segnala all’utente
Pagina 9 di 79
2.1. DESCRIZIONE DEL CONTESTO
UCGe 1.1.2: Login con account Google
Figura 2.2: Autenticazione Utente Google
Attori principali: Utente Google
Attori secondari: /
Precondizione: Il sistema propone la schermata di autenticazione per Utenti
provvisti di account Google
Postcondizione: Il sistema ha riconosciuto come validi i dati inseriti
Scenario principale: L’Utente Google si trova nella sezione relativa al login e:
• Può inserire indirizzo e-mail del proprio account Google(UCGe 1.1.2.1)
• Può inserire la password del proprio account Google (UCGe 1.1.2.2)
• Può effettuare l’accesso diretto se è attiva nel browser la sessione del proprio
account Google (UCGe 1.1.2.3)
• Il sistema riconosce l’utente come autenticato
Pagina 10 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
Scenario secondario: I dati inseriti dall’utente non sono validi, pertanto:
• L’autenticazione non va a buon fine
• Il sistema lo segnala all’utente
Ambiente Utente Autenticato
Di seguito sono riportati i casi d’uso relativi all’ambiente Utente Autenticato
UC 1: Interazione con il sistema
Figura 2.3: Sezione di interazione con il sistema
Attori principali: Utente Autenticato
Attori secondari: Utente Amministratore
Precondizione: Il sistema ha riconosciuto l’Utente e propone le proprie funzionalità
Postcondizione: Il sistema ha permesso l’interazione all’Utente Autenticato
Scenario principale: L’Utente Autenticato si trova nella pagina principale e può:
• Effettuare interrogazioni al database (UC 1.1)
• Effettuare il logout (UC 1.2)
Scenario secondario: L’utente è autenticato come Amministratore, pertanto oltre
alle azioni sopra elencate può:
• Accedere alla sezione di gestione degli utenti (UC 1.3)
• Visualizzare log di attività del sistema (UC 1.4)
Pagina 11 di 79
2.1. DESCRIZIONE DEL CONTESTO
UC 1.1: Interrogazione al database
Figura 2.4: Sezione di interrogazione al database
Attori principali: Utente Autenticato
Attori secondari: Utente Amministratore
Precondizione: Il sistema ha riconosciuto l’Utente e propone le proprie funzionalità
Postcondizione: Il sistema ha permesso l’interazione all’Utente Autenticato
Scenario principale: L’Utente Autenticato si trova nella pagina principale e può:
• Navigare il database inserendo parametri di ricerca oppure ordinando le colonne
della tabella (UC 1.1.1)
• Visualizzazione dettagli di uno specifico prodotto (1.1.2)
• Ordinare la fornitura del prodotto inserendone la quantità richiesta (1.1.3)
Scenario secondario: L’utente è autenticato come Amministratore, pertanto oltre
alle azioni sopra elencate può:
• Accedere alla sezione di gestione degli utenti (UC 1.3)
• Visualizzare log di attività del sistema (UC 1.4)
Pagina 12 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
UC 1.3: Sezione Amministrativa
Figura 2.5: Sezione amministrativa
Attori principali: Utente Amministratore
Attori secondari: /
Precondizione: L’Utente ha effettuato l’accesso come Amministratore
Postcondizione: Il sistema ha permesso l’interazione all’Utente Amministratore
Scenario principale: L’Utente Amministratore si trova nella sezione dedicata
all’amministrazione del sistema e può:
• Inserire un nuovo utente nel sistema (UC 1.3.1)
• Disabilitare temporaneamente l’accesso ad un determinato account (UC 1.3.2)
• Abilitare l’accesso ad un account precedentemente disabilitato (UC 1.3.3)
• Eliminare un account dal sistema (UC 1.3.4)
• Modificare la password di un utente (UC 1.3.5)
• Assegnare o revocare privilegi di amministrazione ad un utente (UC 1.3.6)
Pagina 13 di 79
2.2. CLASSIFICAZIONE DEI REQUISITI
2.2
Classificazione dei requisiti
Le seguenti tabelle riportano i principali requisiti individuati per l’applicazione.
La notazione utilizzata è la seguente:
<R><O><F|T><Ge|A|Ad>2 -X<.Y<.Z> >
Dove:
• R: Requisito
• O: Obbligatorio
• F: Funzionale
• T: Tecnologico
• Ge: Ambito utente generico
• A: Ambito utente autenticato
• Ad: Ambito utente amministratore
• X: Requisito di primo livello
• Y: Sotto-requisito
• Z: Sotto-requisito di un sotto-requisito
I requisiti sono così classificati:
2.2.1
Vincoli tecnologici generali
Codice
Requisito
ROT-1
Il sistema deve essere realizzato mediante l’uso di Google App
Engine
ROT-2
Il sistema deve essere integrato con il servizio Google Accounts
ROT-3
Il sistema deve interfacciarsi con il database del committente
senza duplicare i dati in un altro database
Tabella 2.1: Progetto 1 - Vincoli tecnologici generali
2
La sigla Ge-A-Ad può essere omessa in alcuni requisiti in quanto relativa a diversi ambiti di
utente
Pagina 14 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
2.2.2
Ambito utente non autenticato
Codice
Requisito
ROFGe-1
Il sistema deve consentire all’utente di autenticarsi
ROFGe-1.1
Il sistema deve consentire all’utente di autenticarsi sia tramite il suo account Google sia tramite l’account fornito
dall’amministratore del sistema
ROFGe-1.1.1
Il sistema deve consentire all’utente di autenticarsi inserendo le
proprie credenziali
ROFGe1.1.1.1
Il modulo di login deve richiedere all’utente l’indirizzo e-mail
ROFGe1.1.1.2
Il modulo di login deve richiedere all’utente la password
ROFGe-1.1.2
Il sistema deve consentire all’utente di autenticarsi mediante il
proprio account Google
ROFGe1.1.2.1
Il modulo di login Google deve richiedere all’utente l’indirizzo
e-mail
ROFGe1.1.2.2
Il modulo di login Google deve richiedere all’utente la password
ROFGe1.1.2.3
Il sistema deve consentire l’accesso all’utente Google se è attiva
una sessione nel proprio browser
Tabella 2.2: Progetto 1 - Ambito utente non autenticato
2.2.3
Ambito utente autenticato
Codice
Requisito
ROFA-1.1
Il sistema deve consentire all’utente di effettuare ricerche nel
database
ROFA-1.2
Il sistema deve consentire all’utente visualizzare i dettagli di un
prodotto
ROFA-1.3
Il sistema deve consentire all’utente effettuare l’ordinazione di un
prodotto
ROFA-1.3.1
Il sistema deve consentire all’utente di inserire la quantità di
prodotto desiderata
ROFA-1.2
Il sistema deve consentire all’utente di effettuare il logout
Pagina 15 di 79
2.2. CLASSIFICAZIONE DEI REQUISITI
ROFAd-1.3.
Il sistema deve consentire all’utente amministratore di gestire gli
account
ROFAd-1.3.1
Il modulo di gestione degli account permette all’amministratore
di inserire un nuovo utente nel sistema
ROFAd-1.3.2
Il modulo di gestione degli account permette all’amministratore
di disabilitare temporaneamente l’accesso all’applicazione ad un
utente
ROFAd-1.3.3
Il modulo di gestione degli account permette all’amministratore
di abilitare l’accesso all’applicazione ad un utente
ROFAd-1.3.4
Il modulo di gestione degli account permette all’amministratore
eliminare permanentemente un account dal sistema
ROFAd-1.3.5
Il modulo di gestione degli account permette all’amministratore
di modificare la password di accesso al sistema di un utente
ROFAd-1.3.6
Il modulo di gestione degli account permette all’amministratore
di assegnare o revocare i privilegi di amministrazione ad un utente
ROFAd-1.4
L’applicazione deve permettere all’amministratore di visualizzare
il log delle attività di sistema
Tabella 2.3: Progetto 1 - Ambito utente autenticato
Pagina 16 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
2.3
Tecnologie
In questa sezione sono riportate le principali tecnologie impegate dal team di
sviluppo per la realizzazione dell’applicazione e le motivazioni che hanno portato alla
loro scelta.
Lo scopo principale dello stage era di studiare e sperimentare le funzionalità dei tool
offerti da Google per lo sviluppo di applicazioni web, pertanto si è scelto di realizzare
il sistema utilizzando il servizio dell’azienda di Mountain View Google App Engine.
2.3.1
La piattaforma Google App Engine
Figura 2.6: Struttura generale di Google App Engine
Gogle App Engine (in sigla GAE) è una piattaforma di cloud computing disponibile come servizio PaaS|g| che consente l’esecuzione di applicazioni web nei Google
Data Center|g| offrendo numerosi vantaggi tra i quali la scalabilità automatica, che
esonera gli sviluppatori da oneri derivanti dalla gestione delle risorse hardware e
software dovute al crescere delle dimensioni e l’uso del sistema da parte degli utenti.
Pagina 17 di 79
2.3. TECNOLOGIE
La scelta di impiegare GAE come piattaforma di sviluppo e hosting dell’applicazione è stata dettata principalmente dai seguenti motivi:
• Interesse da parte dell’azienda nella sperimentazione del servizio allo scopo di
valutarne le potenzialità e limitazioni per eventuali usi futuri
• Pieno supporto e compatibilità con tutte le API dei servizi Google, come ad
esempio Contacts, Accounts e Maps
• Disponibilità di ambienti di sviluppo per applicazioni scritte in vari linguaggi
di programmazione tra cui Java, PHP e Python
Il servizio offerto è inizialmente gratuito, in quanto vengono messi a disposizione 1
GB per lo storage di dati e una potenza computazionale sufficiente per l’esecuzione di
applicazioni di medie e piccole dimensioni, che sono risultati adeguati allo sviluppo del
progetto; sono comunque presenti limitazioni nell’uso delle risorse della piattaforma
che, una volta superata la soglia fissata, è soggetto a tassazione da parte di Google.
L’uso di App Engine a mio avviso è molto valido nel caso in cui si vogliano evitare costi
di manutenzione (temporali ed economici) derivanti dalla scalabilità dell’applicazione
e sia necessario utilizzare le API di uno dei tanti servizi resi disponibili da Google: il
programmatore è però soggetto ad alcune costrizioni che verranno analizzate nella
sezione successiva.
Limitazioni dell’ambiente sandbox
Le applicazioni ospitate nei Data Center di Google vengono eseguite in un
ambiente sicuro ed isolato che limita l’interazione con il sistema operativo sottostante
rendendole indipendenti dall’hardware e dall’ubicazione del server nelle quali sono
ospitate.
Se da un lato questo garantisce un’elevata sicurezza dei dati, sono presenti numerose
limitazioni da tenere in considerazione:
• L’applicazione non ha accesso in scrittura al file system sottostante e pertanto
può solamente accedere ai file in lettura previo upload nel sistema utilizzando
il codice dell’applicazione fornito agli sviluppatori3
• L’accesso a sistemi esterni, come ad esempio database o altri computer, può
essere effettuato esclusivamente tramite richieste HTTP|g| e HTTPS al loro
URL|g| oppure mediante il servizio e-mail messo a disposizione dalle apposite
API.
• Come conseguenza del punto precedente lo storage dei dati deve essere effettuato
in uno dei servizi messi a disposizione da Google come App Engine Datastore|g| e
Google Cloud SQL|g|
3
Nel momento in cui un’applicazione web viene caricata e registrata presso la piattaforma App
Engine le viene assegnato un codice che la identifica univocamente
Pagina 18 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
Uno dei problemi principali riscontrati nella realizzazione del sistema è stata la
limitazione nell’accesso a sistemi esterni all’ambiente di App Engine: era richiesto
l’uso del database aziendale del committente per evitare di duplicare inutilmente i
dati nei servizi di storage sopra citati ma la connessione diretta non era un’opzione
possibile e di conseguenza è stato necessario trovare un punto di comunicazione.
Il problema è stato ovviato mediante l’implementazione di un web service che
permette di richiedere i dati necessari tramite la tecnologia REST: in questo modo,
l’applicazione può essere ospitata nei server di Google ma allo stesso tempo di
accedere al database dell’azienda ricevendo le informazioni utili.
Le motivazioni che hanno portato alla scelta di impiegare REST piuttosto che altre
modalità di comunicazione tra sistemi distribuiti sono analizzate di seguito.
2.3.2
La tecnologia REST
Il termine REST, acronimo di Representational State Transfer, è stato coniato
da Roy Fielding, uno dei principali autori del famoso HyperText Transfer Protocol,
nella sua tesi di dottorato nell’anno 2000.
Figura 2.7: Struttura dell’architettura REST
REST identifica un tipo di architettura software che permette la comunicazione
tra sistemi distribuiti nel World Wide Web ed è basato sul semplice uso del protocollo
HTTP senza utilizzare complessi meccanismi come CORBA|g| o SOAP|g| : per certi
versi si può affermare che l’intero web, essendo basato su HTTP, sia un esempio di
architettura fondata su questo principio.
Una delle caratteristiche fondamentali di REST è la risorsa, intesa come fonte di
informazione, che può essere acceduta tramite URI|g| dalle componenti della rete,
i client ed il server, i quali si scambiano una delle sue possibili rappresentazioni,
le quali comprendono una formattazione dei dati in formato SVG, CSV|g| , oppure
JSoN|g| .
Pagina 19 di 79
2.3. TECNOLOGIE
La scelta di impiegare questa tecnologia per implementare la comunicazione tra
la nostra applicazione ed i sistemi dell’azienda cliente è dovuta principalmente dai
seguenti fattori:
• REST è indipendente dal linguaggio di programmazione in cui i due sistemi
che vengono messi in comunicazione sono implementati
• I sistemi operativi installati sui client e sul server non sono rilevanti e non
interferiscono sul corretto funzionamento della tecnologia
• L’uso di HTTP permette il trasferimento di dati in formati comprensibili da
tutti e due i punti di comunicazione, come ad esempio JSoN
• L’accesso ai dati può essere effettuato semplicemente tramite richieste HTTP,
come ad esempio GET e POST, all’URL della risorsa
L’implementazione di un web service basato su REST ha permesso di risolvere il
problema di comunicazione tra la nostra applicazione ospitata sulla piattaforma App
Engine e il database del cliente basato su Microsoft SQL Server 2008, permettendo
l’accesso in lettura ai dati ad esso contenuti e di sviluppare così le funzionalità
richieste dal sistema.
2.3.3
Strumenti di sviluppo
Per lo sviluppo dell’applicazione si è scelto di utilizzare l’IDE|g| Eclipse in quanto
già conosciuto dai membri del team ed estendibile con il plug-in Pydev che offre
l’ambiente di sviluppo per linguaggio Python.
È stato inoltre ritenuto opportuno fare uso di un repository per il controllo di versione
e per facilitare il lavoro di gruppo: la scelta è ricaduta su Bitbucket, strumento già
utilizzato per progetti precedenti.
2.3.4
Principali tecnologie utilizzate
• Google App Engine: piattaforma di cloud computing per lo sviluppo e
hosting di applicazioni web gestite dai Google Data Center
– Vantaggi:
∗ Integrazione con tutti i servizi Google, incluse le librerie di API utilizzabili per implementare funzionalità standard come l’autenticazione
via email
∗ Scalabile: App engine offre una scalabilità automatica per le applicazioni a seconda del numero di richieste d’uso per quella applicazione,
allocando più risorse per gestire la domanda addizionale
∗ Hosting nei Google Data Center: gli sviluppatori sono esenti da oneri
relativi alla manutenzione del server
Pagina 20 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
∗ Supporto a diversi linguaggi di programmazione: App Engine supporta
vari linguaggi di programmazione come Java,Python,PHP
∗ Basi di dati: sono disponibili agli sviluppatori tre tipi di database a
seconda delle esigenze, tra cui App Engine Datastore (schemaless),
Google Cloud SQL (relazionale) e Google Cloud Storage (per grandi
moli di dati)
– Svantaggi:
∗ Ambiente sandbox: un’applicazione sviluppata in App Engine è soggetta a varie limitazioni, come ad esempio l’impossibilità di connettersi
a database esterni all’ambiente Google. L’applicazione può comunicare verso l’esterno solo tramite richieste HTTP e mediante i servizi
e-mail
• Python: linguaggio di programmazione ad alto livello orientato agli oggetti, adatto allo sviluppo di applicazioni distribuite, scripting, computazione
numerica e system testing.
– Vantaggi:
∗ Supportato da Google App Engine: il servizio Google mette a disposizione agli sviluppatori l’ambiente di sviluppo (SDK|g| ) per il
linguaggio Python
∗ Portabilità: il codice sorgente può essere interpretato ed eseguito sulla
gran parte delle piattaforme attualmente utilizzate, siano esse di casa
Apple (Mac) che PC (Microsoft Windows e GNU/Linux)
∗ Open source: Python può essere liberamente modificato secondo le
regole di una licenza pienamente open-source, ed il suo utilizzo è
completamente gratuito
∗ Semplicità d’uso: l’apprendimento di Python è immediato per programmatori che conoscono già altri linguaggi come Java o C++, e
consente di scrivere codice efficiente con minimo sforzo
– Svantaggi: Non sono stati riscontrati svantaggi degni di nota
• HTML|g| : linguaggio di markup ampiamente utilizzato per lo sviluppo di
pagine web
– Vantaggi:
∗ Standard: il linguaggio HTML è definito cone standard dal W3C|g|
∗ Browser: HTML è supportato dalla maggioranza dei browser web
– Svantaggi:
∗ Non sono stati riscontrati svantaggi significativi
• JavaScript: Linguaggio di scripting comunemente usato nei siti web
Pagina 21 di 79
2.3. TECNOLOGIE
– Vantaggi:
∗ Carico del server: Javascript permette di delegare script di calcolo a
livello client-side, diminuendo il carico di lavoro del server che può
essere impiegato in altre operazioni
∗ Pagine web dinamiche: Gli script JavaScript offrono la possibilità
di creare pagine web dinamiche reattive alle azioni dell’utente che le
utilizza
– Svantaggi:
∗ Disattivabile: L’esecuzione degli script può essere disattivata dal
browser dell’utente e in tal caso non si potrà usufruire di eventuali
funzionalità presenti
Pagina 22 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
• CSS3: Linguaggio impiegato per l’aspetto grafico dell’applicazione
– Vantaggi:
∗ Separazione: Si ritiene opportuno usare il CSS in quanto offre una
buona separazione tra presentazione e contenuto. Tale divisione
permette di avere file HTML più leggeri
∗ Manutenibilità: Pagine web che sfrutteranno il medesimo layout potranno appoggiarsi al medesimo file .css, con il vantaggio di apportare
eventuali modifiche una volta sola e non su tutti i rispettivi file .html
– Svantaggi:
∗ Supporto browser: Il CSS in versione 3 non è ancora pienamente
supportato da tutti i browser
• Jinja2: Linguaggio per la realizzazione di template integrabile con Python
– Vantaggi:
∗ Integrazione con Python: Jinja2 permette la realizzazione di template includendo parametri scritti in linguaggio Python e costrutti di
controllo all’interno del codice HTML
∗ Flessibile: il rendering dei template HTML può essere effettuato in
modo dinamico a seconda delle esigenze con parametri personalizzabili
– Svantaggi:
∗ Non sono stati riscontrati svantaggi significativi
• JQuery Data Tables: Plug-in per la libreria JavaScript JQuery
– Vantaggi:
∗ Navigazione tabelle: Data Tables permette la realizzazione di query
di ricerca su di una tabella in modo dinamico lato client diminuendo
il carico di lavoro del server, aumentando in modo significativo la
velocità della ricerca
∗ Personalizzabile: sono disponibili varie opzioni come impaginazione
automatica, filtri di ricerca, resize tabella automatico, sorting di
colonne in base al tipo di dato trattato
– Svantaggi:
∗ Non sono stati riscontrati svantaggi significativi
• Webapp2: Web framework per Python fornito da Google App Engine
– Vantaggi:
∗ Funzionalità: Webapp2 fornisce le API per la gestione delle sessioni
utente e autenticazione tramite account Google
Pagina 23 di 79
2.3. TECNOLOGIE
∗ MVC: webapp2 facilita la realizzazione dell’architettura del sistema
in MVC|g| fornendo la struttura e le funzionalità del controller
– Svantaggi:
∗ L’uso di webapp2 è limitato ad applicazioni sviluppate in Google App
Engine: un eventuale migrazione verso altre piattaforme comporterebbe un onere aggiuntivo per l’adattamento
Pagina 24 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
2.4
Progettazione del sistema
La presente sezione fornisce una definizione dettagliata dell’architettura del sistema attraverso un approccio top-down. Vengono inizialmente elencati e descritti i
design pattern|g| utilizzati, a seguire per ogni sotto-sistema viene presentata dapprima
la struttura dei componenti, poi vengono specificate le classi,ed infine di ogni classe
significativa si indicano metodi e campi dati. In questa sezione l’attenzione sarà
focalizzata sulla parte di sistema da me progettata e realizzate ovvero il back-end
dell’applicazione.
2.4.1
Design Pattern utilizzati
Design pattern architetturali
MVC
Figura 2.8: Struttura generale del design pattern MVC
• Descrizione: Il design pattern MVC è un pattern architetturale molto diffuso
in sistemi software object-oriented che permette di strutturare l’applicazione
mediante la separazione nelle tre componenti Model, View e Controller. In
questo modo si separano le parti che formano l’interfaccia grafica, con il quale
l’utente interagisce, dalle componenti che costituiscono la business logic
• Giustificazione: La scelta del MVC deriva dall’esigenza di fornire una
struttura all’applicazione aumentandone la manutenibilità e distribuendo
adeguatamente le responsabilità alle componenti
• Applicazione: Il design pattern MVC viene utilizzato nell’applicazione per
strutturare il codice scritto in linguaggio Python
• Conseguenze:Applicando questo design pattern si ottiene una separazione
netta tra la business logic e le componenti che si occupano di rendere i dati
comprensibili all’utente. L’applicazione viene dunque divisa in tre parti:
Pagina 25 di 79
2.4. PROGETTAZIONE DEL SISTEMA
– View: Rappresenta l’interfaccia grafica con il quale l’utente interagisce, e
comprende template HTML e fogli di stile CSS
– Controller: Componente che comunica con il front-end ricevendo l’input
dell’utente e restituendo alla view i risultati elaborati dal model
– Model: Rappresenta il modello dei dati sui quali il controller interagisce
e modifica in seguito alle richieste dell’utente. Include inoltre il database
App Engine Datastore dove vengono salvati i dati degli utenti ed i log
delle attività del sistema
L’architettura descritta, oltre a permettere una separazione tra le funzionalità dell’applicazione, aumenta la manutenibilità del prodotto in quanto ogni modifica ad
una delle componenti è circoscritta allo strato stesso influendo il meno possibile
all’esterno ed ottenendo un basso indice di accoppiamento tra le parti.
Essendo richiesta la realizzazione di un prototipo, si è ritenuto strutturare l’applicazione in modo tale da consentire l’aggiunta e la modifica di componenti in modo
agevole.
Pagina 26 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
Design pattern comportamentali
Data Access Object
Figura 2.9: Struttura del design pattern Data Access Object
• Descrizione: Questo design pattern permette di interfacciarsi in modo semplice e trasparente con un database. Data Access Object è un oggetto che
fornisce un’interfaccia astratta alla persistenza dei dati. Mappando le chiamate
dell’applicazione al livello di persistenza, fornisce alcune specifiche operazioni
sui dati senza esporre i dettagli della base di dati sottostante
• Giustificazione: L’utilizzo di questo design pattern minimizza le modifiche
da apportare all’applicazione nel caso in cui sia necessario modificare il meccanismo di persistenza dei dati o la base di dati stessa e nasconde i dettagli
relativi al salvataggio dei dati al resto dell’applicazione. Agisce infatti come un
intermediario tra l’applicazione e il database sottostante
• Applicazione: Tale design pattern è utilizzato nel livello dataStoreAccess del
Model
• Conseguenze: L’utilizzo di tale design pattern è garanzia di buona portabilità
dell’applicazione. Offrendo un buon livello di astrazione, si adatta a molti
linguaggi di programmazione, tipologie di software e tipi differenti di database
Pagina 27 di 79
2.4. PROGETTAZIONE DEL SISTEMA
Command
Figura 2.10: Struttura del design pattern Command
• Descrizione: Il design pattern Command rientra nella categoria dei design
pattern comportamentali e permette di isolare la porzione di codice che effettua
un’azione dal codice che ne richiede l’esecuzione. L’azione è quindi incapsulata
nell’oggetto Command. L’obiettivo è rendere variabile l’azione del client senza
però conoscere i dettagli dell’operazione stessa
• Giustificazione:L’uso del design pattern Command deriva dalla necessità di
poter variare l’azione richiamata da un client senza informare quest’ultimo
su tale variazione. L’interfaccia messa a disposizione dai Command pertanto
deve essere stabile e costante, variando solo l’implementazione effettiva delle
sottoclassi.Il controller infatti vuole poter inoltrare varie richieste, diverse tra
loro, allo strato inferiore, attraverso un’interfaccia unificata e comune alle
diverse richieste
• Applicazione: Questo design pattern è applicato nel lato server dell’applicazione, come collettore tra il controller e il livello model sottostante. Le classi
coinvolte, rispetto alla nomenclatura standard del pattern, sono le seguenti.
– Invoker: src.controller.main
– Command: src.model.command.Command
– ConcreteCommand: tutte le sottoclassi di Command definite nel file
src.model.command.Command
– Receiver: Classi contenute nel package src.model.managers quali usersManager,logManager,mailManager,productManager
• Conseguenze:L’applicazione di questo design pattern disaccoppia l’oggetto
che invoca un’operazione (src.controller.main) da quello che conosce come
portarla a termine (le sottoclassi di src.model.command.Command). Inoltre
risulta semplice estendere tale gerarchia per aggiungere nuovi comandi senza
modificare quelli esistenti
Pagina 28 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
Design pattern creazionali
AbstractFactory
Figura 2.11: Struttura del design pattern Abstract Factory applicato al sistema
• Descrizione:Fornisce un’interfaccia per la creazione di famiglie di oggetti
correlati o dipendenti senza specificare quali siano le loro classi concrete
• Giustificazione:L’uso di tale design pattern permette alla classe che richiede una determinata operazione di ottenere dalla classe factory un’istanza
dell’oggetto richiesto senza bisogno di invocare direttamente la classe concreta
• Applicazione: Questo design pattern è applicato nel lato server dell’applicazione nel package src.model.factory per la creazione di oggetti di tipo UsersModel
e LogModel.
– Client: src.model.managers.logManager e src.model.managers.usersManager
– Concrete factory 1: src.model.factory.UserFactory
– Concrete factory 2: src.model.factory.LogFactory
– Concrete Product 1: src.model.dataModel.UsersModel
– Concrete Product 2: src.model.dataModel.LogModel
Pagina 29 di 79
2.4. PROGETTAZIONE DEL SISTEMA
• Conseguenze: Applicando questo pattern le classi saranno indipendenti dalle
modalità di creazione, composizione e rappresentazione dei loro prodotti, consentendo la possibilità di cambiare, rimuovere o aggiungere famiglie di prodotti
utilizzate ed evitare alle classi che utilizzano gli oggetti la responsabilità della
loro istanziazione.
2.4.2
Specifica del Back end
Il back end è la parte di sistema che riceve i dati in ingresso dal front end e li
restituisce dopo l’elaborazione: nel sistema sviluppato è costituito principalmente da
moduli scritti in linguaggio Python. Segue la descrizione dei package del back-end
dell’applicazione.
Componente Controller
Figura 2.12: Struttura del Controller
• Descrizione: il package src.controller definisce le classi che rappresentano
il Controller dell’applicazione. La classe BaseHandler deriva da
webapp2.RequestHandler ed eredita tutti i metodi necessari alla gestione di
richieste da parte del front-end, fornendo inoltre un’implementazione della
gestione delle sessioni utente delle librerie fornite dal framework webapp2.
Il modulo main.py contiene tutte le classi controller (derivate da BaseHandler)
che gestiscono le varie richieste provenienti dalla view delegando alle classi del
Model l’elaborazione dei dati e fornendo alla View il risultato, oltre a gestire
le autorizzazioni alla visualizzazione delle pagine e l’apertura/chiusura delle
sessioni utente
• Componenti utilizzate: le classi del Controller comunicano con le classi
del package src.model.command per l’elaborazione dei dati e con la classe
TemplateLoader per il passaggio dei risultati e il rendering dei template
• Classi coinvolte:
– BaseHandler: fornisce un’implementazione dei metodi relativi alla creazione, cancellazione e verifica delle sessioni utente. Ogni classe del Controller
deriva da BaseHandler
Pagina 30 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
– TemplateLoader: classe che si occupa del rendering dei template HTML
che rappresentano le pagine che verranno visualizzate dall’utente. La
classe utilizza le librerie Jinja2, che permettono la creazione di template
dinamici contenenti campi dati e costrutti di controllo
– MainPage: gestisce la richiesta derivante dall’URL ’/’, controllando se sia
presente una sessione utente attiva ed eventualmente reindirizzando il
browser alla pagina di login, altrimenti al controller della homepage
– HomePage: gestisce la richiesta derivante dall’URL ’/home’, controllando
se sia presente una sessione utente attiva e conseguentemente l’autorizzazione dell’utente alla visualizzazione della pagina. in caso affermativo, la pagina verrà mostrata all’utente mediante la chiamata del metodo loadHomePageTemplate della classe TemplateLoader del package
src.view
– LoginGoogle: gestisce la richiesta derivante dall’URL ’/loginGoogle’,
delegando il controllo dell’input a CheckLogin. Questa classe si occupa
di gestire l’autorizzazione dell’account di un utente qualora decidesse di
accedere mediante il proprio account Google
– LoginPage: gestisce la richiesta derivante dall’URL ’/login’, affidando al metodo loadLoginPageTemplate della classe TemplateLoader il
caricamento della pagina
– AdminPage: gestisce la richiesta derivante dall’URL ’/admin’,controllando
se esiste una sessione utente attiva e successivamente se l’utente in questione dispone dell’autorizzazione a visualizzare la pagina, affidando infine
al metodo loadAdminPageTemplate della classe TemplateLoader il caricamento della pagina. Nel caso in cui l’utente non sia autorizzato, viene
reindirizzato alla pagina di errore
– RegistrationHandler: gestisce la richiesta derivante dall’URL ’/registration’, ricavando i dati inseriti dalla richiesta HTTP e delegandone l’elaborazione al corrispondente command che si occuperà di effettuare la registrazione di un nuovo utente, affidando infine al metodo loadAdminTemplate
della classe TemplateLoader il caricamento della pagina comunicando
all’utente il risultato dell’operazione
– DeleteAccountRequestHandler: gestisce la richiesta derivante dall’URL
’/delete’, ricavando i dati inseriti dalla richiesta HTTP e delegandone
l’elaborazione al corrispondente command che si occuperà di effettuare la cancellazione dell’account richiesto, affidando infine al metodo
loadAdminTemplate della classe TemplateLoader il caricamento della
pagina comunicando all’utente il risultato dell’operazione
– UpdateHandler: gestisce la richiesta derivante dall’URL ’/update’, ricavando i dati inseriti dalla richiesta HTTP e delegandone l’elaborazione
al corrispondente command, che si occuperà di effettuare la modifica ad
Pagina 31 di 79
2.4. PROGETTAZIONE DEL SISTEMA
un account e affidando infine al metodo loadAdminTemplate della classe
TemplateLoader il caricamento della pagina comunicando all’utente il
risultato dell’operazione
– CheckLogin: gestisce la richiesta derivante dall’URL ’/checkLogin’, delegando al corrispondente command la verifica delle credenziali dell’utente
distinguendo tra utente normale e utente Google. Nel caso in cui le
credenziali si rivelassero valide, verrà effettuato un controllo dell’autorizzazione all’accesso, verrà create una sessione per l’utente corrente ed
il browser verrà indirizzato nella pagina adatta, che può essere la home
oppure admin. Nel caso in cui le credenziali fossero non valide oppure
l’utente non disponga dell’autorizzazione, il browser verrà indirizzato nella
pagina i errore
– LogPage: gestisce la richiesta derivante dall’URL ’/log’, delegando al corrispondente command il caricamento del log delle attività dell’applicazione,
affidando infine al metodo loadLogTemplate della classe TemplateLoader
il caricamento della pagina
– LogoutHandler: gestisce la richiesta derivante dall’URL ’/logout’, cancellando la sessione dell’utente corrente che non potrà più accedere alle
pagine dell’applicazione senza effettuare nuovamente il login. Il browser
dell’utente verrà successivamente indirizzato alla pagina di login
– LogoutHandler: gestisce la richiesta derivante dall’URL ’/logout’, cancellando la sessione dell’utente corrente che non potrà più accedere alle
pagine dell’applicazione senza effettuare nuovamente il login. Il browser
dell’utente verrà successivamente indirizzato alla pagina di login
– WebServiceFailHandler: gestisce la richiesta derivante dall’URL ’/fail’,
che avviene nel caso in cui il tentativo di connessione al web service per
il recupero dei dati dal database aziendale fallisca, affidando al metodo loadFailTemplate della classe TemplateLoader il caricamento della
pagina corrispondente
Pagina 32 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
Componente Model
Command
Figura 2.13: Struttura del design pattern command
• Descrizione: il package src.model.command è costituito dal modulo command, contenente la definizione delle sottoclassi xxxCommand concrete. Ogni
sottoclasse concreta svolge una funzione specifica che varia dalla cancellazione
di un account alla registrazione, al recupero dei dati dal App Engine DataStore
o all’invio di e-mail di notifica
• Componenti utilizzate: le classi concrete di Command comunicano con le
classi del package src.model.managers, delegando lo svolgimento delle funzioni richieste. Inoltre, comunicano con la classe Controller del package
src.controller.Main inviando i risultati delle operazioni
• Classi coinvolte:
– LoginCommand: gestisce la richiesta di login, ricevendo dal controller le
credenziali dell’utente e delegando al corrispondente manager la loro
verifica. Nel caso in cui le credenziali si rivelassero corrette, verrà inoltre
chiamato il logManager corrispondente per la creazione del log di login
– RegisterCommand: gestisce la richiesta di registrazione, ricevendo dal
controller i dati del nuovo utente e delegando al corrispondente manager
il loro salvataggio. Nel caso in cui l’operazione vada a buon fine verrà
inoltre chiamato il logManager corrispondente per la creazione del log di
registrazione
– CheckAdminCommand: gestisce la richiesta di controllo di credenziali di
amministratore, ricevendo dal controller i dati dell’utente e delegando al
Pagina 33 di 79
2.4. PROGETTAZIONE DEL SISTEMA
corrispondente manager il loro controllo, restituendo infine il risultato dal
chiamante
– CheckAllowedCommand: gestisce la richiesta di controllo di credenziali
di accesso, ricevendo dal controller i dati dell’utente e delegando al corrispondente manager il loro controllo, restituendo infine il risultato al
chiamante
– EraseUserCommand: gestisce la richiesta di eliminazione di un account,
ricevendo dal corrispondente controller i dati dell’utente e delegando al
corrispondente manager l’eliminazione dal DataStore, restituendo infine il
risultato al chiamante
– UpdateCommand: gestisce la richiesta di modifica di un account, ricevendo
dal controller i dati dell’utente e delegandone al corrispondente manager
l’aggiornamento. Nel caso in cui la password dell’utente venga modificata, quest’ultimo viene notificato tramite un’ e-mail contenente la nuova
password, e viene creato il log corrispondente
– LoadProductsCommand: gestisce la richiesta di recupero dei prodotti,
delegando al corrispondente manager il completamento dell’operazione,
inviando infine al controller il risultato
– LogCommand: gestisce la richiesta di recupero della lista dei log, delegando
al corrispondente manager il completamento dell’operazione, inviando
infine al controller il risultato
– LogoutCommand: gestisce la richiesta di logout, delegando al corrispondente
manager il completamento dell’operazione, inviando infine al controller il
risultato
– GetUsersListCommand: gestisce la richiesta di recupero della lista degli
utenti, delegando al corrispondente manager il completamento dell’operazione, inviando infine al controller il risultato
– RequestMailCommand: gestisce la richiesta di fornitura di un prodotto,
delegando al corrispondente manager il completamento dell’operazione,
inviando infine al controller il risultato
Pagina 34 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
Managers
Figura 2.14: Struttura del package Managers
• Descrizione: il package src.model.managers è costituito dai moduli userManager,
logManager,mailManager,productManager, che come suggerito dal nome si
occupano di gestire le operazioni relative ad un determinato tipo di dato e
operazione
• Componenti utilizzate: le classi del package managers comunicano con le
classi del package src.model.factory per la costruzione del tipo di oggetto
richiesto e src.model.dataStoreAccess per il salvataggio/recupero dei dati
dal DataStore
• Classi coinvolte:
– UsersManager: la classe contiene tutti i metodi necessari alla gestione dei
dati degli utenti, come login, registrazione, update, verifica autorizzazioni,
verifica di privilegi di amministrazione. Il risultato dell’operazione viene
ritornato al corrispondente command
– LogManager: la classe contiene tutti i metodi necessari alla gestione dei
log, come la crezione di log di login, logout, registrazione nuovo utente,
aggiornamento di un account, modifica di password, eliminazione di un
account. Il risultato dell’operazione viene ritornato al corrispondente
command
– MailManager: la classe contiene tutti i metodi necessari alla gestione delle
e-mail, tra cui la mail di invito al sistema, email di cambio password o
di notifica cancellazione account e l’e-mail di richiesta di fornitura di un
prodotto
– ProductManager: la classe si occupa del recupero dei dati del database
contentente tutti i prodotti che l’applicazione permette di navigare. Il
recupero avviene tramite una chiamata RESTful al web service che espone
il servizio, ottenendo i dati in formato JSoN e restituendoli al chiamante
Pagina 35 di 79
2.4. PROGETTAZIONE DEL SISTEMA
Factory
Figura 2.15: Struttura del package Factory
• Descrizione: il package src.model.factory è costituito dal modulo factories,
che ha il compito di creare l’oggetto richiesto utilizzando i parametri che riceve
in ingresso
• Componenti utilizzate: le classi del package factory comunicano con le
classi del package src.model.dataModel che contengono la definizione del tipo
di dato da costruire
• Classi coinvolte:
– UserFactory: la classe si occupa della creazione di un oggetto di tipo
User, che rappresenta un utente contenente le sue credenziali e i diritti di
accesso
– LogFactory: la classe si occupa della creazione di un oggetto di tipo Log,
che rappresenta un log che registra l’attività richiesta, formata da un
oggetto di tipo DateTime e la descrizione testuale dell’evento
Pagina 36 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
DataModel
Figura 2.16: Struttura del package DataModel
• Descrizione: il package src.model.dataModel è costituito dai moduli usersModel,
dateTimeModel,logModel,exceptionsModel, ciascuna delle quali rappresenta
uno tra i vari tipi di dati manipolati dall’applicazione
• Componenti utilizzate: le classi del package dataModel non comunicano
con altre classi ma vengono solamente utilizzate dalle altre componenti
• Classi coinvolte:
– DateTime: la classe si occupa della rappresentazione di un oggetto di tipo
date e ora, che viene creato mediante librerie Python e successivamente
modificato impostando il fuso orario italiano e modificandone il formato
ottenendo: GG/MM/AAAA - hh:mm
– DuplicateError: la classe si occupa della rappresentazione di un errore
derivante dal tentativo di registrazione di un utente già presente nel sistema.
Contiene un campo dati value che contiene la descrizione dell’errore
– PasswordChange: la classe si occupa della rappresentazione di un’eccezione
relativa alla modifica della password di un utente
– Log: la classe si occupa della rappresentazione di un oggetto di tipo log,
che viene creato con un oggetto di tipo DateTime ed un oggetto di tipo
String contenente la descrizione dell’evento
– User: la classe si occupa della rappresentazione di un oggetto di tipo
User, il quale contiene i campi email, password, abilited, admin. Nel
caso si trattasse di un account Google, il campo password è vuoto, in
quanto non si deve permettere agli amministratori dell’applicazione di
poter modificare la password di un account personale di un utente
Pagina 37 di 79
2.4. PROGETTAZIONE DEL SISTEMA
DataStoreAccess
Figura 2.17: Struttura del package DataStoreAccess
• Descrizione: il package src.model.dataStoreAccess è costituito dai moduli
logStore ed usersStore, che fanno parte dell’implementazione del design
pattern Data Access Object e contengono i metodi necessari all’interazione con
l’App Engine Datastore
• Componenti utilizzate: le classi del package dataStoreAccess comunicano
con le componenti del package src.model.dataModel
• Classi coinvolte:
– UsersStore: la classe si occupa dell’interazione con la corrispondente
tabella nell’App Engine Datastore, salvando/recuperando i dati relativi
agli utenti dell’applicazione
– LogStore: la classe si occupa dell’interazione con la corrispondente tabella
nell’App Engine Datastore, salvando/recuperando i dati relativi ai log
delle attività
Pagina 38 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
2.4.3
Specifica del Front end
Il front end è la parte di un sistema che gestisce l’interazione con l’utente o con
sistemi esterni che producono dati di ingresso: in questa applicazione è costituito dai
template HTML, fogli di stile CSS, e script in JavaScript. A seguire la descrizione
della struttura del front end dell’applicazione
Componente View
Figura 2.18: Struttura del front end
• Descrizione template: I template sono scritti usando il linguaggio di markup HTML e al loro interno contengono costrutti implementati utilizzando
il template engine Jinja2, che permette l’inserimento dinamico di variabili e
blocchi di codice scritti in Python. Il rendering dei template viene effettuato
dal package src.controller, nella classe TemplateLoader che riceve i dati
elaborati dal back end da inserire nella pagina.
L’uso di Jinja2 permette di personalizzare una pagina a seconda del tipo di
utente a cui viene presentata, per esempio nella sezione Home si possono nascondere i link che puntano alle pagine di Amministrazione e Log nel caso in
cui l’utente non disponga di privilegi di amministratore
Pagina 39 di 79
2.5. TEST DI SISTEMA
• Descrizione script: Sono presenti degli script scritti nel linguaggio JavaScript
che si attivano per il controllo del corretto inserimento dei dati nelle form come
ad esempio la sintassi degli indirizzi e-mail.
La sezione amministrativa fa uso degli script nei file modifyUser.js e userType.js
che permettono l’attivazione/disattivazione dinamica delle form di inserimento
oppure di modifica degli account degli utenti.
Nella sezione principale dell’applicazione viene utilizzato il plug-in Data Tables
per le librerie JQuery di JavaScript per consentire all’utente la navigazione
della tabella ed effettuare ricerche a testo libero inserendo le query nell’apposito
box di ricerca.
Si tratta di un sistema particolarmente efficiente in quanto il server viene
interrogato una volta al caricamento della pagina, mentre le ricerche vegnono
effettuate lato client, velocizzando l’operazione e riducendo il carico di lavoro
del server evitando eventuali rallentamenti
2.5
Test di sistema
La presente sezione è dedicata alla descrizione dei test di sistema effettuati sull’applicazione, verificando il soddisfacimento di ogni requisito funzionale obbligatorio da
parte del prototipo al fine di aver completato con successo tutti gli obiettivi minimi
richiesti. La notazione utilizzata è la seguente:
<TS><Ge|A|Ad><Codice requisito>
Dove le sigle Ge,A,Ad indicano l’ambito Utente Generico, Utente Autenticato ed
Utente Amministratore rispettivamente.
Requisito
Codice test
Descrizione
Esito
ROFGe-1
TSGe-1
Si verifica che il sistema con- SUPERATO
senta all’utente di autenticarsi
ROFGe-1.1
TSGe-1
Si verifica che il sistema con- SUPERATO
senta all’utente di autenticarsi
sia tramite il suo account Google sia tramite l’account fornito dall’amministratore del
sistema
ROFGe-1.1.1
TSGe-1.1.1
Si vefica che il sistema de- SUPERATO
ve consenta all’utente di autenticarsi inserendo le proprie
credenziali
ROFGe1.1.1.1
TSGe 1.1.1.1
Si verifica che il modulo di
login consenta all’utente di
inserire l’indirizzo e-mail
SUPERATO
Pagina 40 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
SUPERATO
ROFGe1.1.1.2
TSGe-1.1.1.2
Si verifca che il modulo
di login consenta all’utente
di inserire la password la
password
ROFGe-1.1.2
TSGe-1.1.2
Si verifica che il sistema con- SUPERATO
senta all’utente di autenticarsi mediante il proprio account
Google
ROFGe1.1.2.1
TSGe-1.1.2.1
Si verifica che il modulo di lo- SUPERATO
gin Google richieda all’utente
l’indirizzo e-mail
ROFGe1.1.2.2
TSGe-1.1.2.2
Si verifica che il modulo di lo- SUPERATO
gin Google richieda all’utente
la password
ROFGe1.1.2.3
TSGe-1.1.2.3
Si verifica che il sistema de- SUPERATO
ve consenta l’accesso all’utente Google se è attiva una
sessione nel proprio browser
ROFA-1.1
TSA-1.1
Si verifica che il sistema con- SUPERATO
senta all’utente di effetuare
interrogazioni sul database
ROFA-1.2
TSA-1.2
Si verifica che il sistema con- SUPERATO
senta all’utente di visualizzare
i dettagli di un prodotto
ROFA-1.3
TSA-1.3
Si verifica il sistema consenta SUPERATO
all’utente effettuare l’ordinazione di un prodotto
ROFA-1.3.1
TSA-1.3.1
Si verifica che il sistema SUPERATO
consenta all’utente di inserire la quantità di prodotto
desiderata da ordinare
ROFA-1.2
TSA 1.2
Si verifica che il sistema
deve consenta all’utente di
effettuare il logout
ROFAd-1.3
TSAd-1.3
Si verifica che il sistema de- SUPERATO
ve consenta all’utente amministratore di gestire gli
account
SUPERATO
Pagina 41 di 79
2.5. TEST DI SISTEMA
ROFAd-1.3.1
TSAd-1.3.1
Si verifica che il modulo di ge- SUPERATO
stione degli account permetta
all’amministratore di inserire
un nuovo utente nel sistema
ROFAd-1.3.2
TSAd-1.3.2
Si verifica che il modulo di ge- SUPERATO
stione degli account permetta
all’amministratore di disabilitare temporaneamente l’accesso all’applicazione ad un
utente
ROFAd-1.3.3
TSAd-1.3.3
Si verifica che il modulo di ge- SUPERATO
stione degli account permetta
all’amministratore di abilitare l’accesso all’applicazione ad
un utente
ROFAd-1.3.4
TSAd-1.3.4
Si verifica che il modulo di ge- SUPERATO
stione degli account permetta
all’amministratore eliminare
permanentemente un account
dal sistema
ROFAd-1.3.5
TSAd-1.3.5
Si verifica che il modulo di ge- SUPERATO
stione degli account permetta
all’amministratore di modificare la password di accesso al
sistema di un utente
ROFAd-1.3.6
TSAd-1.3.6
Si verifica che il modulo di ge- SUPERATO
stione degli account permetta all’amministratore di assegnare o revocare i privilegi di
amministrazione ad un utente
ROFAd-1.4
TSAd-1.4
Si verifica che l’applicazio- SUPERATO
ne permetta all’amministratore di visualizzare il log delle
attività di sistema
Tabella 2.4: Progetto 1 - Test di sistema
Come si evince dalla tabella il prototipo dell’applicazione presenta delle funzionalità che soddisfano la totalità dei requisiti obbligatori prefissati.
Ulteriori funzionalità aggiuntive non sono state richieste durante il periodo di stage
e pertanto eventuali requisiti opzionali o desiderabili sono omessi.
Pagina 42 di 79
CAPITOLO 2. SISTEMA PER LA NAVIGAZIONE DEL DATABASE
DELL’INVENTARIO PRODOTTI
La relativa velocità con la quale il team di sviluppo ha portato a termine lo sviluppo
dl prototipo ha consentito di affrontare un nuovo progetto, approfondendo un altro
dei punti fissati in sezione 1.2, che verrà analizzato nel capitolo successivo.
Pagina 43 di 79
Capitolo 3
Applicazione per il calcolo di
percorsi e ricerca punti di
interesse
3.1
Descrizione del contesto
In questo capitolo verranno descritte nel dettaglio le attività svolte per lo sviluppo
del secondo punto elencati in sezione 1.2, ovvero:
Applicazione per il calcolo di percorsi stradali e ricerca di punti di interesse
L’idea che sta alla base del prodotto deriva dalla richiesta presentata all’azienda
Nextep da parte di una ditta che si occupa di trasporto merci su strada.
Come riportato in sezione 1.2.2, lo scopo principale era quello di calcolare in breve
tempo ed in modo efficiente le distanze in km che intercorrono tra una specifica
località ed i capoluoghi di provincia italiani, per consentire all’azienda di fornire ai
clienti informazioni sui costi di trasporto.
Il committente inoltre ha avanzato le seguenti richieste:
• Calcolo del percorso più breve che intercorre tra due località e relativa visualizzazione sulla mappa, con l’opzione di poterlo modificare se necessario
• Calcolo di punti di interesse nelle vicinanze del percorso a partire da un
determinato raggio di ricerca e relativa visualizzazione sulla mappa. Lo scopo
principale di questa funzionalità è quello di identificare eventuali aziende del
portfolio clienti del committente nel caso in cui il percorso selezionato passasse
nelle loro vicinanze per poterle contattare in modo agevole
• Ricerca di una località sulla mappa e visualizzazione delle fasce tariffarie
applicabili al trasporto merci a partire da quel punto.
Pagina 44 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
Il compito assegnato al team di sviluppo è stato quello di analizzare il problema,
producendo il documento Analisi dei Requisiti, oltre a progettare e realizzare un
prototipo funzionante del sistema che implementasse tutti i punti riportati nel
precedente elenco.
A seguito si riportano i risultati prodotti dall’attività di analisi dei requisiti.
3.1.1
Tipologia di utente
Si identifica un solo tipo di utente che potrà usufruire delle funzionalità del
prodotto, in quanto non vi è stata richiesta di limitare gli accessi all’applicazione ad
una determinata utenza; si tratta di una caratteristica che potrà essere implementata
in futuro qualora ce ne fosse la necessità.
• Utente: Si definisce Utente un utente che ha accesso al sistema e può interagire
con le sue funzionalità
La sezione successiva ha lo scopo di illustrare le operazioni che un Utente può
effettuare sul prodotto, per mezzo di diagrammi dei casi d’uso.
La notazione utilizzata si riferisce al linguaggio UML versione 2.0.
Pagina 45 di 79
3.1. DESCRIZIONE DEL CONTESTO
3.1.2
Casi d’uso
Di seguito sono riportato i casi d’uso identificati per il progetto, i quali definiscono
le azioni che un Utente può effettuare durante l’uso del prodotto.
UC 1: Pagina iniziale
Figura 3.1: Pagina iniziale del sistema
Attori principali: Utente
Attori secondari: /
Precondizione: Il sistema si trova nello stato iniziale ed è pronto a ricevere l’input
dell’Utente
Postcondizione: Il sistema ha permesso all’utente di eseguire l’operazione richiesta
Scenario principale: L’Utente si trova nella pagina principale e può:
• Ricercare un percorso tra due località (UC 1.1)
• Ricercare fasce tariffare da una località (UC 1.2)
• Ottenere elenco delle distanze chilometriche tra una località ed i capoluoghi di
provincia italiani (UC 1.3)
Pagina 46 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
• Visualizzare i risultati delle operazioni sulla mappa (UC 1.4)
Scenario secondario:/
L’Utente può in qualunque momento abbandonare il sistema.
UC 1.1: Ricerca di un percorso tra due località
Figura 3.2: Ricerca del percorso su strada tra due località
Attori principali: Utente
Attori secondari: /
Precondizione: Il sistema si trova nello stato iniziale ed è pronto a ricevere l’input
dell’utente
Postcondizione: Il sistema ha riconosciuto come validi i dati inseriti ed ha eseguito
le operazioni richieste, ovvero ha calcolato il percorso e visualizzato correttamente
sulla mappa. Se esistono punti di interesse lungo il percorso, questi verranno mostrati
sulla mappa tramite appositi marker
Scenario principale: L’Utente decide di ricercare il percorso tra due località e
quindi:
• Inserisce località di partenza (UC 1.1.1)
• Inserisce località di arrivo (UC 1.1.2)
• Inserisce raggio di ricerca di punti di interesse dal percorso (UC 1.1.3)
• Visualizza i risultati della ricerca (UC 1.1.4)
Scenari secondari: I dati inseriti dall’utente non sono validi, pertanto:
• Il sistema lo segnala all’utente che potrà ripetere l’operazione
Pagina 47 di 79
3.1. DESCRIZIONE DEL CONTESTO
UC 1.1.4: Visualizzazione dei risultati della ricerca percorso
Figura 3.3: Visualizzazione risultati ricerca percorso
Attori principali: Utente
Attori secondari: /
Precondizione: Il sistema ha elaborato la richiesta dell’utente e mostra a video il
risultato
Postcondizione: L’Utente ha svolto le operazioni disponibili
Scenario principale: Il sistema mostra a video i risultati del calcolo del percorso
tra due località e l’Utente può:
• Visualizzare il risultato sulla mappa (UC 1.1.4.1)
• Modificare il percorso in base alle sue esigenze(UC 1.1.4.2)
• Visualizzare i dettagli del percorso (durata, distanza) (UC 1.1.4.3)
• Visualizzare i dettagli di un punto di interesse che si trova nelle vicinanze del
percorso, se presente (UC 1.1.4.4)
Scenari secondari:/
Pagina 48 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
UC 1.2: Ricerca della fascia tariffaria da una località
Figura 3.4: Ricerca fascia tariffaria
Attori principali: Utente
Attori secondari: /
Precondizione: Il sistema si trova nello stato iniziale ed è pronto a ricevere l’input
dell’utente
Postcondizione: Il sistema ha riconosciuto come validi i dati inseriti ed ha eseguito
le operazioni richieste
Scenario principale: L’Utente decide di ricercare le fasce tariffarie da una località
e quindi:
• Inserisce località (UC 1.2.1)
• Visualizza i risultati della ricerca (UC 1.2.2)
Scenari secondari: I dati inseriti dall’utente non sono validi, pertanto:
• Il sistema lo segnala all’utente che potrà ripetere l’operazione
Pagina 49 di 79
3.1. DESCRIZIONE DEL CONTESTO
UC 1.3: Richiesta elenco delle distanze chilometriche da una località
Figura 3.5: Ricerca elenco distanze chilometriche
Attori principali: Utente
Attori secondari: /
Precondizione: Il sistema si trova nello stato iniziale ed è pronto a ricevere l’input
dell’utente
Postcondizione: Il sistema ha riconosciuto come validi i dati inseriti ed ha eseguito
le operazioni richieste
Scenario principale: L’Utente decide di ottenere l’elenco delle distanze chilometriche tra una località ed il resto delle province italiane e quindi:
• Inserisce località (UC 1.3.1)
• Visualizza i risultati della ricerca (UC 1.3.2)
Scenari secondari: I dati inseriti dall’utente non sono validi, pertanto:
• Il sistema lo segnala all’utente che potrà ripetere l’operazione
Pagina 50 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
UC 1.3.2: Visualizzazione risultati della ricerca distanze chilometriche
Figura 3.6: Visualizzazione risultati della ricerca distanze chilometriche
Attori principali: Utente
Attori secondari: /
Precondizione: Il sistema si trova nello stato iniziale ed è pronto a ricevere l’input
dell’utente
Postcondizione: Il sistema ha permesso all’utente di eseguire le operazioni disponibili
Scenario principale: Il sistema mostra a video i risultati del calcolo delle distanze
tra una località ed i capoluoghi di provincia italiani e l’Utente può:
• Navigare la tabella dei risultati (UC 1.3.2.1)
• Effettuare ricerche sulla tabella dei risultati (UC 1.3.2.2)
• Scaricare tabella dei risultati in formato CSV (UC 1.3.2.3)
Scenari secondari:/
Pagina 51 di 79
3.2. CLASSIFICAZIONE DEI REQUISITI
3.2
Classificazione dei requisiti
Si riportano le tabelle contenenti la classificazione dei requisiti adottata per il
progetto, suddivisi in due categorie:
• Obbligatori: funzionalità attese al sistema che devono essere necessariamente
implementate
• Desiderabili: funzionalità aggiuntive che possono essere integrate qualora ce
ne fosse tempo, che danno un valore aggiunto al prodotto
La notazione utilizzata è la seguente:
<R><O|D|Op><F|T>-X<.Y<.Z> >
Dove:
• R: Requisito
• O: Obbligatorio
• D: Desiderabile
• Op: Opzionale
• F: Funzionale
• T: Tecnologico
• X: Requisito di primo livello
• Y: Sotto-requisito
• Z: Sotto-requisito di un sotto-requisito
3.2.1
Requisiti Obbligatori
Codice
Requisito
ROF-1
Il sistema deve consentire all’utente di accedere alla pagina
principale tramite url
ROF-2
Il sistema deve consentire all’utente di effettuare la ricerca del
percorso tra due località
ROF-2.1
Il sistema deve consentire all’utente di inserire la località di
partenza
ROF-2.2
Il sistema deve consentire all’utente di inserire la località di arrivo
Pagina 52 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
ROF-2.3
Il sistema deve consentire all’utente di visualizzare i risultati del
calcolo del percorso tra due località
ROF-2.3.1
Il sistema deve consentire all’utente di visualizzare la durata del
viaggio
ROF-2.3.2
Il sistema deve consentire all’utente di visualizzare la lunghezza
del viaggio
ROF-3
Il sistema deve consentire all’utente di ottenere l’elenco delle
distanze su strada tra la località inserita e i capoluoghi di provincia
italiani
ROF-3.1
Il sistema deve consentire all’utente di inserire la località da cui
effettuare il calcolo delle distanze
ROF-3.2
Il sistema deve consentire all’utente effettuare il download
dell’elenco delle distanze
ROT-1
Il sistema deve utilizzare le API di Google Maps
ROT-2
Il sistema deve essere sviluppato utilizzando la piattaforma Google
App Engine
Tabella 3.1: Progetto 2 - Requisiti obbligatori
3.2.2
Requisiti Desiderabili/Opzionali
Codice
Requisito
RDF-1
Il sistema deve consentire all’utente di navigare la tabella dei
risultati del calcolo delle distanze da una località
RDF-2
Il sistema deve consentire all’utente di effettuare la ricerca di
aziende ad una determinata distanza dal percorso specificato
RDF-2.1
Il sistema deve consentire all’utente di inserire il raggio di ricerca
dal percorso
RDF-2.2
Il sistema deve consentire all’utente di visualizzare sulla mappa
le aziende presenti nelle vicinanze del percorso
RDF-2.3
Il sistema deve consentire all’utente di visualizzare sulla mappa i
dettagli dell’azienda selezionata
ROpF-1
Il sistema deve consentire all’utente di visualizzare le fasce
tariffarie per il trasporto a partire da una località
ROpF-1.1
Il sistema deve consentire all’utente di inserire la località
desiderata per il calcolo delle fasce tariffarie
Tabella 3.2: Progetto 2 - Requisiti Opzionali e Desiderabili
Pagina 53 di 79
3.3. TECNOLOGIE
3.3
Tecnologie
La presente sezione è dedicata alla descrizione delle tecnologie che il team ha
impiegato per la realizzazione del progetto e le ragioni che hanno contribuito a
valutare il loro impiego.
La maggioranza dei tool utilizzati è analoga a quanto riportato nel precedente capitolo,
in sezione 2.3, con alcune differenze dovute al cambio di contesto.
Coerentemente con lo scopo principale dello stage, ovvero lo studio delle potenzialità
delle tecnologie dell’azienda di Mountain View, e dati gli obiettivi fissati in precedenza,
si è scelto di utilizzare la tecnologia Google Maps per l’implementazione delle principali
funzionalità del prodotto.
Si è scelto di utilizzare la piattaforma App Engine in quanto fornisce una piena
compatibilità con le API di Maps e poter utilizzare i servizi di storage disponibili
per il salvataggio dei dati; per un maggior dettaglio, si rimanda alla sezione 2.3.1.
3.3.1
Google Maps API
Maps è un servizio offerto da Google che permette all’utente di inserire l’indirizzo
di una località e di visualizzarne la posizione sulla mappa, calcolare il percorso tra
due città secondo vari criteri e consultare le informazioni disponibili per le località
stesse, e molto altro.
L’azienda statunitense mette a disposizione degli sviluppatori una serie di API che
consentono l’integrazione del servizio nella propria applicazione, o sito web, e di
usufruire delle varie funzionalità offerte, come ad esempio Geocoding, Directions,
Distance Matrix.
L’utente che usa il prodotto avrà la sensazione di trovarsi di fronte all’applicazione
originale di Google, in quanto sono presenti tutte le features che la caratterizzano, a
partire dalla stessa grafica utilizzata per il rendering della mappa, la visualizzazione
dei percorsi e pop-up informativi, con l’aggiunta di alcune funzionalità come il calcolo
di punti d’interesse lungo un determinato percorso.
Google Maps presenta una vasta gamma di API che permettono di incorporare ogni
funzionalità del servizio originale nella propria applicazione web sito:
• Maps API JavaScript: incorpora una Google Map usando JavaScript,
permettendo di manipolarla aggiungendo contenuti attraverso numerosi servizi
• Google Earth API: permette di incorporare le funzionalità del famoso software che genera immagini virtuali della Terra utilizzando dati satellitari e
fotografie aeree
• Static Maps API: incorpora una semplice immagine di Google Maps, utilizzata prevalentemente nei siti web per includere la posizione di una località
senza consentire altre operazioni, come ad esempio la ricerca di percorsi
Per lo sviluppo del progetto si è scelto di sfruttare Google Maps JavaScript API
v3, in quanto si tratta della versione adatta alla loro integrazione in applicazioni
Pagina 54 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
web-based. La versione 3 di queste API è stata progettata per incrementare la loro
velocità ed usabilità, soprattutto nei dispositivi mobile, ma anche nelle tradizionali
applicazioni web. Tali API forniscono una serie di utilities per la manipolazione
di mappe e l’aggiunta di contenuti personalizzati attraverso una grande varietà di
opzioni, senza trascurare la robustezza dell’applicazione. A differenza della versione
precedente la versione 3 include le seguenti features:
• Riduzione della dimensione dei file JavaScript per la geocodifica e il calcolo dei
percorsi, aumentando le performance dell’intera applicazione
• Cambiamento de namespacing rendendolo più simile ai linguaggi di programmazione Object Oriented
• Eliminazione della richiesta delle API key per l’uso di Google Maps nell’applicazione, rendendolo gratuito
Si è scelto di utilizzare questo ramo della famiglia di API in quanto i servizi messi a
disposizione forniscono, oltre alla funzionalità di geocodifica, anche la funzione di
calcolo del percorso, la quale non è presente in altre versioni come per esempio Static
Maps API.
Servizi Utilizzati
L’applicazione impiega molti dei servizi messi a disposizione dalle API per
soddisfare i requisiti definiti in sezione 3.2 tra i quali:
• Geocoding service: permette di convertire un indirizzo, fornito in formato
testuale, nelle corrispondenti coordinate geografiche, mediante una chiamata
all’apposito web service: tali coordinate verranno utilizzate per identificare la
località nella mappa
• Directions service: permette il calcolo del percorso tra due indirizzi e la
corrispondente visualizzazione sulla mappa. Tale calcolo viene effettuato mediante la chiamata all’apposito web service, inviando i parametri richiesti come
ad esempio opzioni di pedaggio, passaggio per località intermedie (waypoint),
tipologia di veicolo impiegato (auto, mezzo pubblico, bicicletta) e altro ancora
• Distance Matrix: servizio che permette di calcolare le distanze effettive (non
in linea d’aria) tra punti della mappa. A differenza del Directions Service questo
permette il calcolo di più distanze per volta, restituito in forma di matrice
contenente fino a 100 elementi per richiesta
Pagina 55 di 79
3.3. TECNOLOGIE
L’uso delle suddette funzionalità è disponibile in modo completamente gratuito,
con alcune limitazioni che verranno analizzate di seguito. Le API del servizio Google
Maps sono state scelte per i seguenti motivi:
• Funzionalità: Permette di interagire con tutte le funzionalità offerte dal
servizio, come geolocalizzazione e calcolo di percorsi personalizzati
• Personalizzabile: le API offrono un elevato grado di personalizzazione per
quanto riguarda l’aspetto grafico delle componenti della mappa ed aggiunta di
nuove caratteristiche
Il secondo aspetto è stato molto importante in quanto è stato necessario implementare
delle funzioni di ricerca di punti di interesse, non forniti dalla API; tuttavia il servizio
presenta varie limitazioni, come riportato nella sezione successiva.
Problemi riscontrati
L’impiego dei servizi offerti da Google Maps API è soggetto a numerose restrizioni
imposte dalla casa di Mountain View al fine evitare un sovraccarico di richieste ai
web services che si occupano della gestione delle richieste.
Durante lo sviluppo dell’applicazione infatti il team ha riscontrato varie problematiche
dovute al ripetuto uso dei servizi necessari al corretto funzionamento del sistema,
principalmente riguardo al soddisfacimento dei requisiti inerenti al calcolo delle
distanze tra una località e tutti i capoluoghi di provincia d’Italia.
Essendo infatti richiesto il calcolo di circa 115 distanze per ogni singola località si
è dovuto usufruire del servizio Distance Matrix e sottostare a diverse limitazioni,
prima tra tutte il massimo numero di destinazioni inviabili per ogni chiamata al web
service, fissato a 25.
Per il calcolo richiesto è stata necessaria l’implementazione di una funzione che invia
i parametri al servizio in gruppi da 25 elementi: inoltre è stato necessario attendere
circa 2,5 secondi tra un invio dati e l’altro, per evitare di superare i limiti imposti.
Ne consegue che il tempo totale necessario per lo svolgimento dell’operazione è di
circa 12.5 secondi, essendo necessario l’invio di 5 richieste al web service.
Il problema tuttavia si presenta solo la prima volta che viene effettuato il calcolo
delle distanze da una nuova località: infatti il risultato viene salvato nell’App
Engine Datastore per poterlo velocemente recuperare qualora ve ne fosse la necessità,
evitando inutili chiamate al web service e lo spreco di risorse.
Il limite sopra citato può essere superato utilizzando la versione Google Maps API for
Business la quale consente, tra le altre cose, l’invio di più parametri al web service: il
loro uso non è stato ritenuto necessario per lo sviluppo del prototipo dell’applicazione.
Un altro problema riscontrato è dovuto ad una richiesta specifica del cliente, che
riguardava il calcolo di percorsi percorribili da mezzi di trasporto pesanti: ciò non è
stato possibile in quanto al momento le API di Google Maps non consentono tale
opzione. Di conseguenza si è deciso di utilizzare il normale servizio di calcolo percorsi
usando le automobili come veicolo di riferimento.
Pagina 56 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
3.3.2
Tecnologie utilizzate
Nello sviluppo dell’applicazione sono state utilizzate gran parte delle tecnologie
impiegate per la realizzazione del progetto precedente, pertanto per un’analisi dettagliata si rimanda alla sezione 2.3.4.
Segue la descrizione delle nuove tecnologie adottate.
• JQuery AJAX: Asynchronous JavaScript and XML: è ad oggi la tecnica più
utilizzata per sviluppare applicazioni web interattive, consentendo lo scambio di
dati tra client e server senza ricaricare la pagina, il quale avviene in background
tramite chiamata asincrona
– Vantaggi:
∗ Pagine web dinamiche: la tecnologia AJAX consente di sviluppare
pagine web che cambiano dinamicamente a seconda dell’input dell’utente. Ciò consente per esempio di creare siti web costituiti da una
sola pagina
∗ Scambio dati: l’uso di questa tecnologia semplifica la modalità di
scambio dati tra client e server
– Svantaggi:
∗ Navigazione: rende impossibile navigare il sito tramite i tasti Avanti
e Indietro del browser. Ciò può creare frustrazione nell’utente e non
rende possibile segnalare ad altre persone la pagina correntemente
visualizzata, in quanto le modifiche effettuate via Javascript non
vengono memorizzate
• RouteBoxer: libreria per il linguaggio JavaScript compatibile con le Google
Maps API, che permette di generare un set di coordinate che ricopre una
determinata area nelle vicinanze di un percorso calcolato mediante il servizio
Directions
– Vantaggi:
∗ Permette di tracciare una serie di rettangoli che coprono una determinata area nei dintorni di un percorso, permettendo la ricerca di un
punto conoscendone le coordinate geografiche
– Svantaggi: Non sono stati riscontrati svantaggi degni di nota
Pagina 57 di 79
3.4. PROGETTAZIONE DEL SISTEMA
3.4
Progettazione del sistema
La presente sezione fornisce una definizione dettagliata dell’architettura del sistema attraverso un approccio top-down, similarmente a quanto effettuato per il
progetto precedente in sezione 2.4 Inizialmente è riportato l’elenco dei design pattern
utilizzati con relativa descrizione e giustificazione, a seguire per ogni sottosistema
viene presentata dapprima la struttura dei componenti, poi vengono specificate
le classi,ed infine di ogni classe significativa si indicano metodi e campi dati. In
questa sezione l’attenzione sarà focalizzata sulla parte di sistema da me progettata e
realizzata ovvero il front-end dell’applicazione.
3.4.1
Design Pattern utilizzati
Il team di sviluppo ha scelto di riutilizzare gran parte dei design pattern impiegati
per la progettazione del precedente progetto, in quanto la struttura dei due sistemi è
molto simile e le tecnologie adottate sono in gran parte le stesse: si tratta in entrambi
i casi di applicazioni web sviluppate mediante Google App Engine e pertanto si è
ritenuto opportuno mantenere lo stesso stile architetturale, per quanto possibile.
Per una descrizione dettagliata si consiglia pertanto di consultare la sezione 2.4.1.
3.4.2
Specifica del Back end
Il back-end è la parte di sistema che riceve i dati in ingresso dal front end e
li restituisce dopo l’elaborazione. Nel sistema sviluppato il back end è costituito
principalmente da moduli scritti in linguaggio Python e la base di dati situata nell’App Engine Datastore ed il Blobstore. A seguire la descrizione dettagliata delle
componenti del sistema.
Componente Controller
Figura 3.7: Struttura della componente Controller
Pagina 58 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
• Descrizione: il package src.controller definisce le classi che rappresentano
il Controller dell’applicazione. La classe BaseHandler deriva da
webapp2.RequestHandler ed eredita tutti i metodi necessari alla gestione di
richieste da parte del front-end, fornendo inoltre un’implementazione della
gestione delle sessioni utente delle librerie fornite dal framework webapp2.
Il modulo main.py contiene tutte le classi controller (derivate da BaseHandler)
che gestiscono le varie richieste provenienti dalla view delegando alle classi del
Model l’elaborazione dei dati e fornendo alla View il risultato
• Componenti utilizzate: le classi del Controller comunicano con le classi
del package src.model.command per l’elaborazione dei dati e con la classe
TemplateLoader per il rendering dei template
• Classi coinvolte:
– BaseHandler: fornisce un’implementazione dei metodi relativi alla creazione, cancellazione e verifica delle sessioni utente. Ogni classe del Controller
deriva da BaseHandler
– TemplateLoader: classe che si occupa del rendering dei template HTML
che rappresentano le pagine che verranno visualizzate dall’utente. La
classe utilizza le librerie Jinja2, che permettono la creazione di template
dinamici contenenti campi dati e costrutti di controllo
– MainPage: gestisce la richiesta derivante dall’URL ’/’ reindirizzando il
browser alla pagina iniziale dell’applicazione
– ServeProvinceJsonHandler: gestisce la chiamata AJAX effettuata dal
client all’URL ’/serve/province.json’ restituendo al client il file JSoN
contenente l’elenco delle province d’Italia che verranno utilizzate per il
calcolo delle distanze
– Upload: crea la pagina che consente il caricamento di file nel Blobstore,
come il JSoN che contiene l’elenco delle province italiane o gli indirizzi
delle aziende
– UploadHandler: gestisce la richiesta di caricamento di un file nel Blobstore,
delegando l’esecuzione al rispettivo Command
– SearchFromOriginRequestHandler: gestisce la richiesta di ricerca nel
database del JSoN contenente l’elenco delle distanze tra una determinata
origine ed il resto delle province italiane, ricevendo un oggetto JSoN dal
client dove è specificata la località di origine da cercare. L’esecuzione
dell’operazione viene delegata al rispettivo Command
– StoreNewDistancesHandler: gestisce la richiesta di salvataggio nel database di un nuovo JSoN contenente l’elenco delle distanze tra una determinata origine ed il resto delle province italiane come risultato del
calcolo effettuato lato client mediante l’utilizzo delle API di Google Maps.
L’esecuzione dell’operazione viene delegata al rispettivo Command
Pagina 59 di 79
3.4. PROGETTAZIONE DEL SISTEMA
– DownloadCsvHandler: gestisce la richiesta di download del file in formato
CSV dell’elenco delle distanze tra una determinata città di origine ed il
resto delle province italiane. L’esecuzione dell’operazione viene delegata
al rispettivo Command
Pagina 60 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
Componente Model
Command
Figura 3.8: Struttura del design pattern command
• Descrizione: il package src.model.command è costituito dal modulo Command,
contenente la definizione delle sottoclassi xxxCommand concrete. Ogni sottoclasse concreta svolge una funzione specifica che varia dalla creazione di un file
in formato CSV al salvataggio e recupero di oggetti in formato JSoN dall’ App
Engine Datastore
• Componenti utilizzate: le classi concrete di Command comunicano con le
classi del package src.model.managers, delegando lo svolgimento delle funzioni richieste. Inoltre, comunicano con la classe Controller del package
src.controller.Main inviando i risultati delle operazioni
• Classi coinvolte:
– GetDistancesJsonCommand: gestisce la richiesta di recupero dalla base
di dati del file JSoN relativo alle distanze tra l’origine specificata ed il
resto delle province italiane, se presente. La chiamata al metodo execute
delega l’esecuzione dell’operazione al metodo getDistancesJson della
classe JsonManager
– SaveNewDistancesJsonCommand: gestisce la richiesta di salvataggio nella
base di dati del file JSoN contenente le distanze tra l’origine specificata ed
il resto delle province italiane, se presente. La chiamata al metodo execute
Pagina 61 di 79
3.4. PROGETTAZIONE DEL SISTEMA
delega l’esecuzione dell’operazione al metodo saveNewDistancesJson
della classe JsonManager
– GetAllProvincesJsonCommand: gestisce la richiesta di recupero dal Blobstore del file JSoN contenente l’elenco delle province italiane. La chiamata al metodo execute delega l’esecuzione dell’operazione al metodo
getAllProvincesJson della classe JsonManager
– SearchCsvCommand:gestisce la richiesta di recupero dal Blobstore del file in formato CSV contente l’elenco delle distanze da una determinata
origine e le province, nel caso fosse già stato creato e salvato. L’esecuzione dell’operazione viene delegata al metodo searchCsv della classe
CsvManager
– CreateCsvCommand: gestisce la richiesta di creazione del file in formato
CSV a partire dall’oggetto JSoN contente l’elenco delle distanze da una
determinata origine e le province italiane che verrà salvato nel Blobstore e sarà disponibile al download da parte degli utenti. L’esecuzione dell’operazione viene delegata al metodo createCsv della classe
CsvManager
– UploadUrlCommand: gestisce la richiesta creazione dell’URL per l’upload
di un file nel Blobstore da locale. L’esecuzione dell’operazione viene
delegata al metodo createUploadUrl della classe BlobStoreManager
– BlobUploadCommand: gestisce la richiesta di caricamento del file specificato
nel BlobStore. L’esecuzione dell’operazione viene delegata al metodo
uploadBlob della classe BlobStoreManager
Pagina 62 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
Managers
Figura 3.9: Struttura del package Managers
• Descrizione: il package src.model.managers è costituito dai moduli jsonManager,
csvManager,blobManager, che come suggerito dal nome si occupano di gestire
le operazioni relative ad un determinato tipo di dato e operazione
• Componenti utilizzate: le classi del package managers comunicano con le
classi del package src.model.storeAccess per il salvataggio/recupero dei dati
dal DataStore. Inoltre comunicano con i rispettivi command per il ritorno dei
dati. La classe JsonManager comunica inoltre con la classe BlobStoreManager
in quanto è richiesta la manipolazione di oggetti del Blobstore
• Classi coinvolte:
– JsonManager: la classe contiene tutti i metodi necessari alla gestione dei
file Json, come creazione e recupero dal Datastore di JSoN salvati in
precedenza. Il risultato dell’operazione viene ritornato al corrispondente
command
– CsvManager: la classe contiene tutti i metodi necessari alla gestione dei file
CSV, come la crezione ed il salvataggio di un nuovo file a partire da un oggetto JSoN, oltre alla ricerca di un eventuale file già presente nel Blobstore.
La classe CsvManager comunica inoltre con la classe BlobStoreManager
in quanto è richiesta la manipolazione di oggetti del Blobstore. Il risultato
dell’operazione viene infine ritornato al corrispondente command
– BlobStoreManager: la classe contiene tutti i metodi necessari alla gestione dei file contenuti nel Blobstore, oltre alla creazione dell’URL per il
caricamento di nuovi file da locale e la gestione dell’upload. La classe
ritorna al rispettivo command il risultato delle operazioni. La classe viene
inoltre utilizzata da JsonManager e CsvManager in quanto richiedono
l’interazione con il Blobstore
Pagina 63 di 79
3.4. PROGETTAZIONE DEL SISTEMA
DataModel
Figura 3.10: Struttura del package DataModel
• Descrizione: il package src.model.dataModel è costituito dai moduli distancesModel,
provinceModel,exceptionsModel, ciascuna delle quali rappresenta uno tra i
vari tipi di dati manipolati dall’applicazione
• Componenti utilizzate: le classi del package dataModel non comunicano
con altre classi ma vengono solamente utilizzate dalle altre componenti
• Classi coinvolte:
– Distances: La classe definisce il modello di dato relativo alla tabella delle
distanze chilometriche tra una specifica origin e il resto delle province
italiane, rappresentate dal campo destinations. La tabella, situata
nell’App Engine Datastore, contiene i relativi oggetti in formato JSoN,
per facilitarne il salvataggio ed il recupero per l’invio al client
– NotFoundException: la classe si occupa della rappresentazione di un’eccezione che si verifica nel caso in cui l’oggetto cercato nella relativa tabella
dell’App Engine Datastore non sia presente.
Pagina 64 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
DataStoreAccess
• Descrizione: il package src.model.storeAccess è costituito dai moduli
distancesAccess ed blobStoreAccess, che fanno parte dell’implementazione del design pattern Data Access Object e contengono i metodi necessari
all’interazione con l’App Engine Datastore ed il Blobstore rispettivamante
• Componenti utilizzate: le classi del package storeAccess comunicano con le
componenti del package src.model.distancesModel e src.model.exceptionsModel,
oltre ai database di cui si occupano. Inoltre restituiscono i dati ai rispettivi
manager
• Classi coinvolte:
– DistancesAccess: la classe si occupa dell’interazione con la corrispondente tabella nell’App Engine Datastore, salvando/recuperando gli oggetti
Json contenenti le distanze chilometriche tra città italiane
– BlobStoreAccess: la classe si occupa dell’interazione con il Blobstore,
salvando/recuperando i file e caricando i file che vengono inseriti da locale,
come per esempio l’elenco delle province italiane che viene usato per il
calcolo
Pagina 65 di 79
3.4. PROGETTAZIONE DEL SISTEMA
3.4.3
Specifica del Front end
Il front end è la parte di un sistema che gestisce l’interazione con l’utente o con
sistemi esterni che producono dati di ingresso: in questa applicazione è costituito dai
template HTML, fogli di stile CSS, e script in JavaScript. Segue la descrizione del
front-end dell’applicazione.
Componente View
Figura 3.11: Struttura del front end
• Descrizione template: I template sono scritti usando il linguaggio di markup
HTML che consente di definire la struttura degli elementi della pagina ed il loro
posizionamento. Nel caso specifico di questa applicazione, è presente il template
home.html che varia il contenuto dinamicamente a seconda dell’interazione
dell’utente grazie all’utilizzo di JavaScript, ed il template upload.html che
permette agli sviluppatori il caricamento di file nel Blobstore come ad esempio
l’elenco delle province italiane
Pagina 66 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
• Descrizione script: Gran parte delle funzionalità del prodotto sono implementate in linguaggio JavaScript in quanto vengono utilizzate le API di Google
Maps. Gli script gestiscono operazioni come il calcolo del percorso tra località,
la gestione dei punti d’interesse, il calcolo delle distanze chilometriche ed il
controllo dell’input dell’utente, oltre alle chiamate AJAX per il passaggio di
dati con il controller del back-end. Segue una descrizione degli script
– maps.js: qui viene inizializzata la mappa con le impostazioni di default
che viene mostrata all’utente al primo accesso all’applicazione ed inizializzate le funzioni necessarie al corretto funzionamento delle operazioni
che verranno effettuate, come ad esempio l’inizializzazione del servizio di
geocodifica google.maps.Geocoder ed il servizio per il calcolo dei percorsi
google.maps.DirectionsService, oltre alle librerie RouteBoxer per il
calcolo dei punti di interesse lungo un percorso
– placesModel.js: contiene la definizione di oggetti JavaScript per la
rappresentazione dei punti di interesse che vengono visualizzati sulla
mappa, in questo caso si tratta di aziende con relativo nome,indirizzo,
e-mail e coordinate geografiche, oltre alla funzione per estrarre i dati dal
JSoN ricevuto dal server e la creazione dell’oggetto place corrispondente
– route.js: qui sono presenti tutte le funzionalità che permettono di calcolare il percorso tra due località e visualizzare eventuali punti d’interesse
nelle sue vicinanze. Il calcolo del percorso viene effettuato mediante
l’invio di un oggetto request al servizio DirectionService delle API di
Google Maps. La chiamata al servizio è asincrona, pertanto è presente
una funzione di callback che viene invocata non appena il risultato del
calcolo è pronto. Successivamente vengono usate le librerie RouteBoxer
per la ricerca di eventuali punti d’interesse nelle vicinanze del percorso
appena calcolato: se vengono trovati, per ogni punto viene inizializzato un
marker con relativa infoWindow contenente le informazioni del luogo, ed
il tutto viene visualizzato sulla mappa. È presente inoltre la funzione per
il calcolo delle fasce chilometriche a partire da una determinata località
– checkInput.js: si occupa di catturare l’input dell’utente e controllare
il corretto riempimento dei campi, segnalando all’utente eventuali errori
come un campo vuoto o un valore non valido.Nel caso in cui i valori
siano validi viene invocata la funzione necessaria allo svolgimento dell’
operazione richiesta
– province.js: qui viene effettuato il calcolo delle distanze tra una località
e tutte le province italiane mediante l’utilizzo del servizio DistanceMatrix
delle API di Google Maps. La chiamata avviene specificando gli indirizzi
di origine e destinazione, la modalità di viaggio ed opzioni quali l’uso
di autostrade o altri passaggi a pagamento: si tratta di una chiamata
asincrona, per cui è presente una funzione di callback che viene invocata
non appena arriva il risultato, che viene poi inviato al server per il
Pagina 67 di 79
3.5. TEST DI SISTEMA
salvataggio nel database per futuri utilizzi, nel caso non fosse già presente
un file contenente quella specifica località di origine. Il risultato viene
inoltre mostrato sotto forma di tabella all’utente che potrà effettuare
eventuali ricerche, oltre a scaricarla nel formato CSV per utilizzarla
all’esterno dell’applicazione
• Nella sezione relativa alle distanze tra città viene utilizzato il plug-in Data Tables
per le librerie JQuery di JavaScript per consentire all’utente la navigazione
della tabella ed effettuare ricerche a testo libero inserendo le query nell’apposito
box di ricerca.
Si tratta di un sistema particolarmente efficiente in quanto le ricerche vegnono
effettuate lato client, velocizzando l’operazione e riducendo il carico di lavoro
del server evitando eventuali rallentamenti
3.5
Test di sistema
La presente sezione è dedicata alla descrizione dei test di sistema effettuati sull’applicazione, verificando il soddisfacimento di ogni requisito funzionale obbligatorio da
parte del prototipo al fine di aver completato con successo tutti gli obiettivi minimi
richiesti. La notazione utilizzata è la seguente:
<TS><Ob|D|Op><Codice requisito>
Dove:
• Ob: obbligatorio
• D: desiderabile
• Op: opzionale
Requisito
Codice test
Descrizione
Esito
ROF-1
TSOb-1
Si verifica che il sistema con- SUPERATO
senta all’utente di accedere alla pagina principale tramite
url
ROF-2
TSOb-2
Si verifica che il sistema deve SUPERATO
consenta all’utente di effettuare la ricerca del percorso tra
due località
ROF-2.1
TSOb-2.1
Si verifica che il sistema con- SUPERATO
senta all’utente di inserire la
località di partenza
Pagina 68 di 79
CAPITOLO 3. APPLICAZIONE PER IL CALCOLO DI PERCORSI E RICERCA
PUNTI DI INTERESSE
ROF-2.2
TSOb-2.2
Si verifica che il sistema con- SUPERATO
senta all’utente di inserire la
località di arrivo
ROF-2.3
TSOb-2.3
Si verifica che il sistema con- SUPERATO
senta all’utente di visualizzare i risultati del calcolo del
percorso tra due località
ROF-2.3.1
TSOb-2.3.1
Si verifica che il sistema con- SUPERATO
senta all’utente di visualizzare
la durata del viaggio
ROF-2.3.2
TSOb-2.3.2
Si verifica che il sistema de- SUPERATO
ve consentire all’utente di visualizzare la lunghezza del
viaggio
ROF-3
TSOb-3
Si verifica che il sistema con- SUPERATO
senta all’utente di ottenere l’elenco delle distanze su strada tra la località inserita
e i capoluoghi di provincia
italiani
ROF-3.1
TSOb-3.1
Si verifica che il sistema con- SUPERATO
senta all’utente di inserire la
località da cui effettuare il
calcolo delle distanze
ROF-3.2
TSOb-3.2
Si verifica che il sistema con- SUPERATO
senta all’utente di effettuare
il download della tabella delle
distanze in formato CSV
RDF-1
TSD-1
Si verifica che il sistema per- SUPERATO
metta la navigazione della tabella dei risultati del calcolo
delle distanze da una località
RDF-2
TSD-2
Si verifica che il sistema con- SUPERATO
senta all’utente di effettuare
la ricerca di punti di interesse
ad una determinata distanza
dal percorso specificato
Pagina 69 di 79
3.5. TEST DI SISTEMA
RDF-2.1
TSD-2.1
Si verifica che il sistema con- SUPERATO
senta all’utente di inserire l’area di ricerca di punti di
interesse dal percorso
RDF-2.2
TSD-2.2
Si verifica che il sistema con- SUPERATO
senta all’utente di visualizzare
sulla mappa i punti d’interesse trovati nelle vicinanze del
percorso
RDF-2.3
TSD-2.3
Si verifica che il sistema con- SUPERATO
senta all’utente di visualizzare sulla mappa i dettagli
dell’azienda selezionata
ROpF-1
TSOp-1
Si verifica che il sistema con- NON IMPLEsenta all’utente di visualizza- MENTATO
re le fasce tariffarie per il
trasporto a partire da una
località
ROpF-1.1
TSOp-1.1
Si verifica che il sistema con- SUPERATO
senta all’utente di inserire
la località desiderata per il
calcolo delle fasce tariffarie
Tabella 3.3: Progetto 2 - Test di sistema
Come si può notare nella tabella è stata soddisfatta la totalità dei requisiti
fissati durante l’attività di analisi, ad eccezione del requisito ROpF-1 che è stato
implementato parzialmente per questioni di tempo.
Il prototipo è stato completato in breve tempo grazie al riuso di diverse componenti
impiegate per lo sviluppo del progetto precedente e dalla dimestichezza acquisita dai
membri del team nell’uso delle tecnologie, oltre alla valida documentazione fornita
da Google a supporto delle API di Maps.
Pagina 70 di 79
CAPITOLO 4. VALUTAZIONI RETROSPETTIVE
Capitolo 4
Valutazioni retrospettive
Il presente capitolo ha lo scopo di valutare la mia esperienza di stage, confrontando
gli obiettivi prefissati con quelli raggiunti e le esperienze maturate.
4.1
4.1.1
Obiettivi
Obiettivi minimi dello stage
Gli obiettivi minimi dell’esperienza di stage, fissati in accordo con il tutor aziendale, si incentravano sullo studio delle tecnologie messe a disposizione da Google,
valutandone l’idoneità a soddisfare le esigenze di alcuni clienti dell’azienda Nextep e
sviluppando un prototipo di applicazione che concretizzi le idee raccolte.
Una delle richieste a cui l’azienda ha dato priorità era la realizzazione di un’applicazione web che permettesse la navigazione della base di dati del committente e
permettesse l’accesso a personale provvisto di un account Google, come già descritto
nel Capitolo 2: la grande disponibilità ed il costante supporto dimostrati dal personale
dell’azienda, oltre al fatto che il team di sviluppo era composto da due persone, ha
reso possibile il raggiungimento di questi obiettivi in tempi relativamente brevi.
Il risultato è un’applicazione web, attualmente disponibile nello stato di prototipo,
che offre la maggior parte delle funzionalità richieste ma lontana dal prodotto finito
in quanto utilizza molte tecnologie mai usate prima dell’azienda e pertanto richiede
ancora del lavoro per essere perfezionata e completata; in ogni caso, tutti gli obiettivi
minimi sono stati soddisfatti.
Pagina 71 di 79
4.1. OBIETTIVI
4.1.2
Obiettivi massimi dello stage
Gli obiettivi massimi fissati erano i seguenti:
• Sviluppo di funzionalità aggiuntive al prodotto
• Sviluppo di un altro dei punti elencati in sezione 1.2
Una volta completato il prototipo dell’applicazione si è ritenuto sufficiente il lavoro
svolto e pertanto non necessaria l’aggiunta di funzionalità aggiuntive da parte degli
stagisti, compito che è stato assegnato al personale di Nextep.
Di conseguenza è stato possibile focalizzarsi sul secondo obiettivo opzionale ed iniziare
l’approfondimento del secondo punto riportato in sezione 1.2, ovvero:
Applicazione per il calcolo di percorsi stradali e ricerca di punti di interesse
Gli obiettivi minimi fissati per il progetto erano analoghi a quelli del primo progetto,
ovvero l’applicazione delle tecnologie Google più idonee allo sviluppo del prodotto; il
risultato è un’altra web application, anch’essa disponibile nello stato di prototipo,
il cui completamento è stato affidato al personale dell’azienda ospitante in tempi
successivi al completamento dello stage.
È stata inoltre realizzata la documentazione di supporto per entrambe le applicazioni,
nello specifico Analisi dei Requisiti e Specifica Tecnica.
Tutti gli obiettivi prefissati sono stati raggiunti entro i tempi concordati.
4.1.3
Obiettivi formativi
Lo stage è un’opportunità offerta allo studente che ha la possibilità di essere
ospitato per un certo periodo di tempo in un’azienda ed essere inserito in un contesto
lavorativo, mettendo in pratica quanto imparato all’università. Gli obiettivi formativi
erano i seguenti:
• Migliorare le capacità di lavoro all’interno di un team
• Apprendimento di nuove tecnologie
• Apprendimento della metodologia di lavoro Scrum
L’esperienza di stage ha ampliato il mio bagaglio di conoscenze soprattutto riguardo
all’apprendimento di nuove tecnologie, primo tra tutti il linguaggio di programmazione Python, e mi ha permesso di acquisire dimestichezza nello sviluppo di applicazioni
web e l’impiego di alcune tecnologie di casa Google, come ad esempio la piattaforma
App Engine e le API di Google Maps.
Un altro aspetto da non sottovalutare è il miglioramento della capacità di lavorare
in team, già iniziato durante il corso di Ingegneria del Software, che è stato reso
possibile grazie al fatto di aver affrontato lo stage assieme ad un mio collega studente;
è stata quindi possibile una suddivisione dei compiti ed il costante confronto che ha
aggiunto valore all’esperienza di entrambi.
Pagina 72 di 79
CAPITOLO 4. VALUTAZIONI RETROSPETTIVE
4.1.4
Possibili sviluppi futuri
Le due applicazioni realizzate sono attualmente disponibili allo stato di prototipo:
sono presenti tutte le funzionalità minime richieste ed alcune opzionali a scopo
dimostrativo per i clienti ma si è ancora lontani dal prodotto finito.
L’aggiunta di nuove caratteristiche e miglioramenti è stata affidata al personale di
Nextep successivamente al periodo di stage, che avrà modo di usare i prototipi come
punto di partenza per l’evoluzione dei prodotti.
Alcune aggiunte che potrebbero essere effettuate sono:
• Progetto 1:
– Funzionalità di recupero password dimenticata
– Miglioramenti grafici generali
– Diminuzione dei tempi di caricamento
• Progetto 2:
– Implementazione del calcolo fasce tariffarie
– Miglioramenti grafici generali
– Diminuzione del tempo di calcolo delle distanze tra città
– Miglioramento dei pannelli informativi dei punti di interesse con l’aggiunta
di dettagli e possibilità di invio e-mail alle aziende
Si tratta di requisiti classificati come opzionali oppure richiesti in corso d’opera, ed
in accordo con il tutor aziendale si è deciso di delegarne l’eventuale implementazione
al personale nel periodo successivo allo stage.
4.1.5
Conoscenze acquisite
Come già ampiamente riportato nel documento, lo stage riguardava l’uso delle
tecnologie Google e lo sviluppo di applicazioni web.
Gran parte delle tecnologie impiegate mi erano sconosciute, come ad esempio il
linguaggio di programmazione Python e pertanto è stato necessario uno studio preliminare delle stesse per poter affrontare i progetti proposti.
Durante il corso di Ingegneria del Software ho avuto modo di iniziare ad apprendere
la struttura e le tecniche di sviluppo di web applications, cosa che ho potuto ulteriormente approfondire nel periodo di stage.
Una delle difficoltà inizialmente riscontrate è stato l’apprendimento in tempi brevi del
funzionamento dei tool offerti da Google, in quanto la qualità della documentazione
presente online è, a mio avviso, altalenante; per esempio, se le API di Google Maps
ed i tutorial sul funzionamento di App Engine sono completi e ricchi di esempi che
ne facilitano la comprensione, altri aspetti come la documentazione a supporto di
App Engine Datastore sono decisamente poco chiari e incompleti.
Pagina 73 di 79
4.1. OBIETTIVI
Per quanto riguarda i linguaggi di programmazione impiegati, la mia conoscenza
iniziale di Python era quasi nulla: la grande disponibilità della documentazione
presente nel sito ufficiale, unita alla relativa semplicità del linguaggio, mi ha permesso
di impararne le basi in tempi brevi. Inoltre, l’apprendimento di tecnologie in parte
sconosciute come ad esempio AJAX e Javascript si è rivelato proficuo grazie al supporto costante del personale di Nextep e alla grande disponibilità di documentazione
disponibile online.
Infine ho avuto modo di sperimentare in prima persona la metodologia di sviluppo
agile che ben si adatta a progetti di questo tipo, nei quali è richiesta la realizzazione
di prototipi in breve tempo.
Si tratta di un valore aggiunto ad una già completa e soddisfacente esperienza di
stage.
Pagina 74 di 79
Glossario
Glossario
App Engine Datastore: L’App Engine Datastore è un database schemaless che
fornisce un sistema di storage robusto e scalabile all’applicazione web ospitata nella
piattaforma App Engine. Garantisce transazioni atomiche e un sistema di query che
adotta un linguaggio simile a SQL.
API (Application Programming Interface): Insieme di procedure e funzionalità
disponibili al programmatore che consentono di svolgere un certo tipo di compito
all’interno di un programma: in generale il termine identifica le librerie software che
sono messe a disposizione in un determinato linguaggio di programmazione.
CORBA (Common Object Request Broker Architecture): Standard che
permette la comunicazione tra sistemi distribuiti su una rete indipendentemente dal
linguaggio di programmazione con i quali sono implementati.
CSV (Comma Separated Values): Formato di file basato su file testo usato per
l’esportazione e l’importazione di dati da un database ed impiegato prevalentemente
nei fogli di calcolo.
Database: Nell’ambito informatico il termine database (base di dati) indica un
archivio dati in cui le informazioni in esso contenute sono strutturate e collegate tra loro secondo un particolare modello logico e ne permettono la gestione
e interfacciamento dell’utente che può effettuare operazioni di interrogazione ed
inserimento/cancellazione di dati.
Design Pattern: Soluzione progettuale ad un problema ricorrente.Modello logico
da applicare per la risoluzione di un problema che può presentarsi in diverse situazioni
durante le fasi di progettazione e sviluppo del software.
E-commerce: Nell’ambito informatico identifica l’insieme delle applicazioni dedicate
alle transazioni commerciali tramite web.
Google (Azienda): Azienda statunitense che offre servizi online, famosa soprattutto
per il motore di ricerca Google e per il sistema operativo Android largamente usato
nei dispositivi mobile. Google fornisce inoltre una serie di servizi via web tra i quali
figurano Gmail, Google Maps, YouTube, Drive, Calendar.
Pagina 75 di 79
Glossario
Google Apps: Google Apps è un servizio offerto da Google che fornisce strumenti
di cloud computing pensati appositamente per l’uso in ambiti aziendali. I servizi
offerti si basano sugli stessi prodotti offerti da Google ai propri utenti, come GMail,
Drive e Docs.
Google Cloud SQL: Google Cloud SQL permette di usare database relazionali
nelle piattaforme cloud di Google: si tratta di un servizio che mantiene, gestisce
ed amministra i database dell’applicazione sviluppata su App Engine facilitando il
compito degli sviluppatori.
Google Data Center: Il principale centro dati di Google dove sono ospitati
alcuni dei server dell’azienda ed il maggiore centro di elaborazione delle risorse che
costituiscono i servizi di cloud computing.
Google Drive: Servizio di archiviazione e di web hosting offerto da Google, che
permette il file sharing e l’editing collaborativo dei documenti. Può essere utilizzato
collegandosi al sito web oppure tramite l’apposito software installato sul dispositivo.
Google Maps: Servizio messo a disposizione da Google, accessibile dal relativo sito
web, che consente la ricerca e la visualizzazione di mappe geografiche di buona parte
della Terra: tra le funzionalità offerte vi è la possibilità di ricercare singoli luoghi e
percorsi tra due località personalizzabili secondo varie opzioni.
Google Mail (GMail): Servizio gratuito di posta elettronica offerto da Google.
HTTP (HyperText Transfer Protocol): Protocollo di trasferimento di ipertesti
usato come principale sistema per la trasmissione d’informazioni tramite web, le cui
specifiche sono gestite dal World Wide Web Consortium (W3C).
IDE (Integrated Development Environment): Software che aiuta i programmatori nello sviluppo del codice sorgente di un programma.
JSoN (JavaScript Object Notation) : Formato di scambio dati usato in applicazioni distribuite client-server basato sul modello di rappresentazione degli oggetti
nel linguaggio JavaScript. Il suo uso è diffuso soprattutto per la semplicità in cui i
dati sono rappresentati e la sua compatibilità con la maggior parte dei linguaggi di
programmazione.
MVC (Model View Controller): Design pattern architetturale diffuso nello
sviluppo di sistemi software, in particolare nell’ambito della programmazione orientata
agli oggetti, in grado di separare la logica di presentazione dei dati dalla logica di
business, facilitando la manutenzione del prodotto e l’aggiunta di componenti.
PaaS (Platform-as-a-Service): Distribuzione di piattaforme di elaborazione come
servizio. È permesso sviluppare, testare, implementare e gestire le applicazioni
aziendali senza i costi e la complessità associati all’acquisto, la configurazione,
l’ottimizzazione e la gestione dell’hardware e del software di base.
Pagina 76 di 79
Glossario
SaaS (Software-as-a-Service): Modello di distribuzione del software applicativo
dove un produttore di software sviluppa e gestisce un’applicazione web che mette a
disposizione dei propri clienti tramite internet. Il cliente dell’applicazione dunque
non paga per il possesso del software ma per l’utilizzo del software stesso.
Servizi cloud (cloud computing): Insieme di tecnologie che permettono l’archiviazione e l’elaborazione di dati mediante l’uso di risorse hardware e software
distribuite e virtualizzate in rete secondo una tipica architettura client-server. Si
tratta tipicamente di un servizio offerto da un provider al cliente.
SDK (Software Development Kit): In campo informatico si indica con l’acronimo SDK un insieme di strumenti per lo sviluppo e la documentazione di
software.
SOAP (Simple Object Access Protocol): Protocollo per lo scambio di messaggi
tra componenti software, basato secondo il paradigma della programmazione orientata
agli oggetti, utilizzabile in molti protocolli di rete anche se principalmente viene
usato HTTP.
ReST (Representational State Transfer): Architettura software per i sistemi
di ipertesto distribuiti come il World Wide Web che riferisce ad un insieme di principi
di architetture di rete, i quali delineano come le risorse sono definite e indirizzate. Il
termine è spesso usato nel senso di descrivere ogni semplice interfaccia che trasmette
dati su HTTP senza un livello opzionale come SOAP o la gestione della sessione
tramite i cookie.
URI (Uniform Resource Identifier): Stringa che identifica univocamente nel
web una risorsa, che può essere un file di testo, un’immagine, un indirizzo di posta
elettronica, ecc. e le rendono disponibili a vari protocolli di comunicazione come
HTTP o FTP.
URL (Uniform Resource Locator): Si tratta di una specializzazione dell’URI, il
quale identifica una risorsa e fornisce mezzi per agire su di essa oppure per ottenere
una sua rappresentazione, descrivendo il suo meccanismo di accesso primario in una
rete.
W3C (World Wide Web Consortium): Organizzazione non governativa internazionale con lo scopo quello di sviluppare le potenzialità del World Wide Web,
stabilendo standard tecnici inerenti sia i linguaggi di markup che i protocolli di
comunicazione.
Web analytics: Attività di misurazione, raccolta e analisi dei dati tramite internet
con lo scopo di capire e ottimizzare l’uso del web. Non si tratta solo di uno strumento
per la misurazione del traffico web ma di un modo di effettuare ricerche di mercato
con la finalità di migliorare l’efficacia di un sito web.
Pagina 77 di 79
Glossario
Web marketing: Attività di marketing di un’azienda che sfrutta la rete per lo
studio del mercato e lo sviluppo di rapporti commerciali tramite Web, come ad
esempio negozi online.
Web service: Sistema software progettato per supportare l’interoperabilità tra
diversi elaboratori sulla stessa rete, ovvero in un contesto distribuito. L’applicazione
presenta un’interfaccia software che espone all’esterno il servizio associato ai client
che ne desiderano l’utilizzo, mediante lo scambio di dati tramite protocollo HTTP.
Pagina 78 di 79
Bibliografia
Bibliografia
[1] Home page di riferimento per gli strumenti e tecnologie Google:
https://developers.google.com/
[2] Approfondimenti su Google App Engine:
Dan Sanderson, Programming Google App Engine, Ed. O’Reilly
[3] Sito ufficiale di Python:
http://www.python.org/
[4] Manuale di introduzione al linguaggio Python:
Guido van Rossum, An Introduction to Python, Network Theory Ltd, 1 aprile 2003
[5] Documentazione ufficiale di Google App Engine:
https://developers.google.com/appengine/
[6] Documentazione ufficiale di Google Maps API JavaScript v3:
https://developers.google.com/maps/documentation/javascript/
[7] Pagina ufficiale di Eclipse:
http://www.eclipse.org/
[8] Pagina ufficiale di Bitbucket:
https://bitbucket.org
[9] Tutorial per la tecnologia REST:
http://rest.elkstein.org/
Pagina 79 di 79