ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
←
→
Trascrizione del contenuto della pagina
Se il tuo browser non visualizza correttamente la pagina, ti preghiamo di leggere il contenuto della pagina quaggiù
Università degli Studi di Padova
Dipartimento di Matematica "Tullio Levi-Civita"
Corso di Laurea in Informatica
Integrazione di Google Drive: modifiche
collaborative online e in tempo reale con
ECM
Tesi di laurea
Relatore
Prof. Francesco Ranzato
Laureando
Mirko Gibin
Matricola 1102450
Anno Accademico 2018-2019Mirko Gibin: Integrazione di Google Drive: modifiche collaborative online e in tempo reale con ECM, Tesi di laurea, c Febbraio 2019.
Sommario
Il presente documento descrive il lavoro svolto durante lo stage del laureando Mirko
Gibin presso l’azienda Sanmarco Informatica S.p.A. sotto la supervisione del tutor
aziendale Stefano Fardin.
Tale attività, svolta al termine della Laurea Triennale in Informatica dal 5 novembre
2018 al 11 gennaio 2019, ha richiesto un impegno di 320 ore.
Lo scopo dello stage era la realizzazione di un nuovo modulo di ECM, software per la
gestione documentale prodotto dall’azienda, per offrire agli utenti dell’applicativo la
possibilità di modificare in modo collaborativo i documenti qui caricati. Ciò è stato
reso possibile sfruttando il servizio Google Drive e la relativa suite per l’ufficio che
comprende Google Documenti, Google Fogli e Google Presentazioni.
Questo documento è così diviso:
• Capitolo 1: presentazione del contesto aziendale in cui si è svolto lo stage;
• Capitolo 2: presentazione del progetto di stage con i relativi obiettivi;
• Capitolo 3: descrizione dello svolgimento dello stage;
• Capitolo 4: valutazione retrospettiva dello stage.
iiiRingraziamenti
Vorrei ringraziare il Professore Francesco Ranzato, relatore della mia tesi, per l’aiuto e
il supporto fornitomi.
Ringrazio il mio tutor aziendale Stefano Fardin, che mi ha offerto questa opportunità,
e tutto il team, che mi ha accolto e guidato.
Desidero ringraziare di cuore i miei genitori per il loro grande sostegno e la loro infinita
pazienza.
Ringrazio tutti gli amici e i colleghi che mi hanno accompagnato in questo percorso, in
particolar modo Francesco, Giovanni e Federico.
E grazie anche a coloro che erano con me nei momenti di svago, specialmente Gianluca,
Fabio, Valentino e Sara.
Per concludere, uno speciale ringraziamento va a Valentina, sempre al mio fianco sia
nelle situazioni più belle che in quelle più dure. Grazie a te sono riuscito a trovare la
forza per superare tutti gli ostacoli.
Padova, Febbraio 2019 Mirko Gibin
vIndice
1 Contesto aziendale 1
1.1 L’azienda in generale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Il team di Discovery ECM . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Metodologia di sviluppo adottata . . . . . . . . . . . . . . . . . . . . . 2
1.4 Tecnologie di riferimento . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.1 Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4.2 Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5 Strumenti per lo sviluppo . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5.1 Sistemi operativi . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5.2 Ambienti di sviluppo . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5.3 Gestione dei progetti software . . . . . . . . . . . . . . . . . . . 5
2 Lo stage nella strategia aziendale 7
2.1 Il progetto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Discovery ECM per la gestione documentale . . . . . . . . . . . . . . . 7
2.3 Obiettivi aziendali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Obiettivi personali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 Vincoli tecnologici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.1 Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5.2 Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6 Analisi dei rischi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7 Pianificazione del lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3 Realizzazione del progetto 15
3.1 Formazione e ricerca . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.1.1 Progetto, tecnologie e strumenti . . . . . . . . . . . . . . . . . 15
3.1.2 Valutazione delle alternative . . . . . . . . . . . . . . . . . . . 15
3.1.3 Google Drive REST API . . . . . . . . . . . . . . . . . . . . . 16
3.1.4 Proof of Concept . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Progettazione dell’architettura . . . . . . . . . . . . . . . . . . . . . . 18
3.2.1 Visione complessiva . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.2 Backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.2.1 Le classi rest . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.2.2 Le classi service . . . . . . . . . . . . . . . . . . . . . 20
3.2.2.3 Le classi client . . . . . . . . . . . . . . . . . . . . . . 22
3.2.3 Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.3.1 La componente view . . . . . . . . . . . . . . . . . . . 23
3.2.3.2 La componente controller . . . . . . . . . . . . . . . . 23
viiviii INDICE
3.2.3.3 La componente service . . . . . . . . . . . . . . . . . 23
3.3 Implementazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.1 Sviluppo del modulo di autorizzazione . . . . . . . . . . . . . . 24
3.3.1.1 Gestione del codice di autorizzazione . . . . . . . . . 24
3.3.1.2 Gestione dei token . . . . . . . . . . . . . . . . . . . . 24
3.3.1.3 Persistenza delle credenziali . . . . . . . . . . . . . . . 25
3.3.2 Modifica dei documenti . . . . . . . . . . . . . . . . . . . . . . 25
3.3.2.1 Backend . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.2.2 Frontend . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.3 Creazione di un nuovo documento . . . . . . . . . . . . . . . . 26
3.3.4 Altre implementazioni . . . . . . . . . . . . . . . . . . . . . . . 27
3.4 Verifica e validazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4.1 Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4.2 Validazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4 Valutazione retrospettiva 31
4.1 Riscontro dei rischi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2 Raggiungimento degli obiettivi . . . . . . . . . . . . . . . . . . . . . . 32
4.2.1 Obiettivi aziendali . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2.2 Obiettivi personali . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.3 Conoscenze acquisite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.4 Divario tra università e lavoro . . . . . . . . . . . . . . . . . . . . . . . 35
4.5 Valutazione personale . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
A Protocollo OAuth 2.0 37
A.1 Storia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
A.2 Ruoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
A.3 Registrazione del client . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
A.4 Flusso del protocollo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
A.5 OAuth 2.0 con Google . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
B Schermate del prodotto 43
Glossario 47
Bibliografia 51Elenco delle figure
1.1 Logo di Sanmarco Informatica S.p.A. . . . . . . . . . . . . . . . . . . . 1
1.2 Rappresentazione del framework Scrum . . . . . . . . . . . . . . . . . 2
2.1 Diagramma delle attività - prima metà . . . . . . . . . . . . . . . . . . 14
2.2 Diagramma delle attività - seconda metà . . . . . . . . . . . . . . . . . 14
3.1 Logo di Google Drive . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Scherma di richiesta delle credenziali per l’utilizzo delle API Google . 17
3.3 Progettazione ad alto livello del modulo di integrazione con Google Drive 19
3.4 Diagramma delle classi rest . . . . . . . . . . . . . . . . . . . . . . . . 20
3.5 Diagramma delle classi service . . . . . . . . . . . . . . . . . . . . . . 21
3.6 Diagramma delle classi client . . . . . . . . . . . . . . . . . . . . . . . 21
3.7 Architettura frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
A.1 Flusso del protocollo OAuth 2.0 per l’autorizzazione . . . . . . . . . . 39
A.2 Flusso del protocollo OAuth 2.0 per il refresh dei token . . . . . . . . 39
A.3 Flusso del protocollo OAuth 2.0 con Google per un’applicazione web
server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
A.4 Richiesta autorizzazione da parte dell’applicazione client . . . . . . . . 41
B.1 Sezione per la creazione di un nuovo documento e relativo messaggio di
apertura dell’editor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
B.2 Pulsante di "avvio nuova modifica" presente nei documenti modificabili
e messaggi di conferma annullamento modifiche. . . . . . . . . . . . . 44
B.3 Pulsanti visualizzati quando è in corso una modifica e nome dell’utente
che l’ha avviata. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
B.4 Messaggio che conferma la concessione dell’autorizzazione da parte
dell’utente, con la quale permette ad ECM di modificare i file all’interno
di Drive. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
B.5 Pulsanti di gestione di un documento in creazione e messaggio visualiz-
zato prima di confermare l’annullamento. . . . . . . . . . . . . . . . . 45
B.6 Messaggio di errore relativo all’apertura di un link ad un documento la
cui modifica è stata chiusa per annullamento o check-in. . . . . . . . . 45
B.7 Operazione di check-in di un file in modifica. . . . . . . . . . . . . . . 46
ixx ELENCO DELLE TABELLE
Elenco delle tabelle
2.1 Tabella degli obiettivi aziendali . . . . . . . . . . . . . . . . . . . . . . 9
2.2 Tabella dei rischi individuati . . . . . . . . . . . . . . . . . . . . . . . 13
2.3 Tabella delle attività . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.1 Tabella dei rischi riscontrati . . . . . . . . . . . . . . . . . . . . . . . . 31
4.2 Tabella del raggiungimento degli obiettivi aziendali . . . . . . . . . . . 33Capitolo 1
Contesto aziendale
1.1 L’azienda in generale
Figura 1.1: Logo di Sanmarco Informatica S.p.A.
Fonte: www.sanmarcoinformatica.it
Ho svolto lo stage presso Sanmarco Informatica S.p.A., software house fondata nel
1984 che si occupa della progettazione e della realizzazione di soluzioni applicative a
supporto dei vari processi aziendali.
La sede principale, avente funzione commerciale e amministrativa, e il Centro di Ricerca
e Sviluppo, dove ho svolto lo stage, sono situati a Grisignano di Zocco, provincia di
Vicenza. A Reggio Emilia, Vimercate, provincia di Monza e della Brianza, e Tavagnac-
co, provincia di Udine, sono presenti delle filiali a supporto dei sistemisti. L’azienda
vanta un organico di oltre 400 dipendenti e collaboratori tra cui sistemisti, sviluppatori
software, grafici, addetti al marketing, addetti al personale e alla formazione e figure pro-
fessionali specializzate nell’organizzazione e gestione aziendale. Attualmente Sanmarco
Informatica segue circa 2000 aziende private italiane, europee ed extraeuropee.
1.2 Il team di Discovery ECM
Il team in cui sono stato inserito si occupa dello sviluppo e manutenzione del software
di gestione dei contenuti Discovery ECM (nel presente documento abbreviato in ECM ).
Questo prodotto permette la gestione di tutti i documenti aziendali digitalizzati con
l’obiettivo di abbattere i costi dovuti alla gestione della versione cartacea degli stessi.
È prevista anche l’archiviazione a norma dei contenuti che acquisiscono così valenza
legale e fiscale.
Altro progetto qui seguito è Discovery XChange, servizio che gestisce gli obblighi
12 CAPITOLO 1. CONTESTO AZIENDALE
normativi relativi alla fatturazione elettronica.
Di seguito parlerò degli strumenti, delle metodologie e delle tecnologie utilizzate
all’interno di questo team.
1.3 Metodologia di sviluppo adottata
L’azienda adotta una metodologia Agileg nello sviluppo dei propri prodotti. Al cliente
viene offerta la possibilità di personalizzazione, dunque la stretta collaborazione con
lo stesso diventa indispensabile ed è necessario reagire in modo rapido ed efficace ai
frequenti cambiamenti delle richieste. Nel periodo del mio stage ho avuto modo di
osservare come i requisiti di prodotto cambino velocemente anche a causa degli aggior-
namenti imposti dalle normative: archiviazione digitale dei documenti e fatturazione
elettronica hanno subìto numerose modifiche in ambito legislativo, alle quali l’azienda
ha dovuto adeguarsi in tempi brevi. Un approccio Agile allo sviluppo permette di
concentrare le risorse sulla realizzazione di software funzionante e di adattarsi velo-
cemente ai cambiamenti e alle nuove esigenze del cliente, mettendo in secondo piano
documentazione esaustiva, rigida pianificazione e negoziazione di contratti.
Framework Scrum
Nel team in cui sono stato inserito la metodologia Agile è utilizzata applicando il
frameworkg Scrum, il quale offre un insieme di regole che permettono di ottenere i
vantaggi precedentemente elencati offrendo al contempo una rappresentazione dell’a-
vanzamento generale dei lavori, adattandosi dunque alle necessità di un’azienda di
discrete dimensioni che riunisce le esigenze di numerosi stakeholderg .
Figura 1.2: Rappresentazione del framework Scrum
Fonte: https://www.scrum.org/resources/scrum-framework-poster
Secondo le regole di Scrum lo sviluppo del prodotto è guidato dai seguenti elementi:
• Product backlog: insieme di requisiti e definizione delle caratteristiche del
software di cui si deve occupare il team di Scrum;1.3. METODOLOGIA DI SVILUPPO ADOTTATA 3
• Sprint: un iterazione dello sviluppo della durata da 1 a 4 settimane durante la
quale non è possibile cambiare gli obiettivi. Lo scopo dello Sprint è realizzare un
incremento di prodotto potenzialmente rilasciabile.
• Incremento di prodotto potenzialmente rilasciabile: l’incremento di un
software consegnato alla fine di uno Sprint. Dovrebbe trovarsi in uno stato finito
e non richiedere ulteriore lavoro per essere incorporato nel prodotto finale;
Tipico di questo framework è la presenza dei seguenti ruoli:
• Team di sviluppo: gruppo di sviluppatori con organizzazione autonoma, re-
sponsabili dello sviluppo del software e della produzione della documentazione
essenziale necessaria. L’obiettivo del team è consegnare un incremento di prodotto
potenzialmente rilasciabile alla fine di uno Sprint;
• Product Owner: persona che rappresenta il cliente o uno stakeholder. Ha il
compito di definire i requisiti critici del prodotto assegnando delle priorità e
aggiorna il Product Backlog di conseguenza, accertandosi che il team produca
valore;
• Scrum Master: ha la responsabilità di trasmettere i valori e le regole di Scrum
e di assicurare la corretta esecuzione del processo. Si interfaccia con il Product
Owner per migliorare la gestione del Product Backlog e definire in modo chiaro
gli obiettivi, collabora con il team di Scrum allo scopo di creare prodotti di
valore e rimuovere gli ostacoli e le interferenze esterne non legate allo sviluppo
del prodotto, collabora con gli altri Scrum Masters per migliorare l’efficacia
dell’applicazione del framework a livello aziendale.
Durante lo stage ho avuto la possibilità di partecipare alle riunioni e agli eventi previsti
dal metodo Scrum, i quali sono volti a pianificare, monitorare e valutare l’avanzamento
dello sviluppo. Vengono di seguito elencati:
• Sprint Planning: riunione effettuata all’inizio di ogni Sprint in cui si pianifica
il lavoro da svolgere. Vi partecipa l’intero Scrum team analizzando Product
Backlog per definire quale incremento produrre nel prossimo Sprint;
• Daily Stand-up: riunione giornaliera della durata di 15 minuti circa in cui
ciascun membro del team di sviluppo comunica il lavoro svolto nel giorno lavo-
rativo precedente, gli obiettivi della corrente giornata lavorativa e indica se è
necessario un aiuto da parte di altri componenti. Ciò permette a tutto il team di
tenere traccia degli avanzamenti e di coordinare e organizzare le varie attività,
incentivando la collaborazione;
• Sprint Review: riunione che si svolge al termine di ogni Sprint per monitorare
l’incremento e adattare il Product Backlog. Vi partecipano sia lo Scrum team
che gli stakeholders al fine di valutare l’andamento dello sviluppo. Vengono
dimostrati i risultati ottenuti tramite una dimostrazione del prodotto (detta
Demo), analizzando ciò che è stato fatto o meno, i problemi riscontrati e le
note positive dello Sprint, eventuali cambiamenti di requisiti, budget o altro che
possano influire sullo sviluppo futuro. I risultati della Sprint Review vanno ad
aggiornare il Product Backlog e influiranno di conseguenza sulla successiva Sprint
Planning. Anche in questa riunione la collaborazione gioca un ruolo importante
per adattarsi alle nuove esigenze e cogliere le nuove opportunità;4 CAPITOLO 1. CONTESTO AZIENDALE
• Sprint Retrospective: riunione effettuata successivamente alla Sprint Review
durante la quale lo Scrum team fa un’autoanalisi per evidenziare gli aspetti
positivi e negativi riscontrati durante l’ultimo Sprint. La riunione viene svolta
in un modo informale, abbandonando temporaneamente i propri ruoli al fine
di esporre consigli, criticità o problemi senza doversi preoccupare della propria
posizione. Affrontare i problemi emersi e trovare punti di miglioramento è un
buon modo per cercare di mantenere alti livelli di collaborazione, coesione e
soddisfazione all’interno del team.
Altra attività non strettamente legata alla metodologia Agile a cui ho partecipato è
stata la Code Review, nella quale si è valutato il codice prodotto da ciascun membro
riconoscendo errori, criticità, elementi positivi e migliorie da apportare. Ciò permette a
ciascuno di aumentare il proprio bagaglio conoscitivo e produrre codice più manutenibile
e meno soggetto ad errori e inefficienze negli Sprint successivi.
1.4 Tecnologie di riferimento
1.4.1 Frontend
Come verrà approfondito nella sezione 2.5, per il frontend le tecnologie più utilizzate
sono JavaScript, il framework JavaScript AngularJs, HTML e CSS.
È previsto una nuova versione dell’interfaccia grafica basata sul framework Angular
7. Tale aggiornamento è attualmente in fase realizzazione con la previsione di miglio-
ramenti sia sul fronte della manutenibilità del codice che delle prestazioni e usabilità
dell’applicazione.
1.4.2 Backend
Come verrà approfondito nella sezione 2.5, per il backend la tecnologia più utilizzata è
Java grazie alla sua portabilità e alle sue numerose funzionalità e librerie. Lo sviluppo
in Java viene realizzato con l’ausilio di numerosi framework quali:
• Spring che permette ad esempio l’iniezione delle dipendenze e la gestione dell’au-
tenticazione;
• Jersey per la gestione dei servizi RESTg ;
• MyBatis per la gestione dei dati persistenti;
• JUnit, JMock e Selenium per la realizzazione dei test;
Per la gestione dei documenti viene utilizzato il software Alfresco Community Edition,
mentre i database utilizzati sono MySQL e SQLServer.
È prevista la sostituzione del framework MyBatis a favore di Hibernate per una migliore
gestione dei dati persistenti.
1.5 Strumenti per lo sviluppo
1.5.1 Sistemi operativi
L’azienda non impone vincoli sull’utilizzo dei sistemi operativi, il cui uso dipende dalle
preferenze degli sviluppatori o dalle necessità dei progetti. Nei server utilizzati in1.5. STRUMENTI PER LO SVILUPPO 5
azienda sono installati sia il sistema operativo Windows che Linux in modo da poter
testare i prodotti in entrambe le piattaforme ed essere pronti ad adattarsi quanto
più possibile alle esigenze dei clienti. Per il mio progetto ho utilizzato un computer
aziendale dotato di sistema operativo Windows e interagito principalmente con server
Windows.
1.5.2 Ambienti di sviluppo
Il team in cui sono stato inserito utilizza i seguenti strumenti per lo sviluppo:
• Eclipse: ambiente di sviluppo integrato utilizzato principalmente per la realiz-
zazione del backend di ECM. Per migliorare il lavoro sono stati aggiunti diversi
plugin, tra i quali i principali sono:
– Sonarlint: estensione che aiuta a migliorare la qualità del codice mentre
questo viene scritto. Vengono evidenziati i problemi del codice e poi proposti
la spiegazione del problema ed esempi di soluzioni. Il team si affida a questo
strumento per avere una buona base comune da seguire per scrivere codice
di qualità;
– Spring Tool Suite: estensione che semplifica la gestione di progetti che
utilizzano il framework Spring. Tra gli aiuti forniti vi è la segnalazione di
dipendenze mancanti o non esistenti quando queste vengono definite nei
relativi file XMLg .
• Visual Studio Code: editor di codice sorgente utilizzato nella realizzazione del
frontend di ECM ;
• MySQL Workbench: strumento grafico per la creazione, gestione e manuten-
zione di database MySQL;
1.5.3 Gestione dei progetti software
Apache Maven è uno strumento per la gestione di progetti software. Oltre ad
automatizzare la buildg Maven si occupa anche del soddisfacimento delle dipendenze
del progetto. La struttura di quest’ultimo è rappresentata in un file XML chiamato
POM (Project Object Model), nel quale vengono indicate informazioni come il nome
del progetto, la versione, i file di configurazione richiesti, gli sviluppatori che hanno
partecipato e il loro ruolo, le librerie e le dipendenze. Qualora fosse necessaria una
nuova libreria o una sua versione più aggiornata è sufficiente aggiornare il file XML.
Maven scaricherà in modo automatico le librerie dichiarate e si occuperà di soddisfare
tutte le dipendenze necessarie.Capitolo 2
Lo stage nella strategia
aziendale
2.1 Il progetto
Lo scopo dello stage è stato la realizzazione dell’integrazione con Google Drive del
documentale ECM per offrire agli utenti la possibilità di modifica contemporanea dei
documenti. L’utente che inizia una nuova modifica agisce dall’interfaccia grafica del
documentale e prosegue in Google Drive; al termine degli aggiornamenti può effettuare
il check-ing delle modifiche e creare così una nuova versione del contenuto.
Prima di questa integrazione, per poter effettuare una modifica nel documentale
era necessario scaricare il documento in locale, modificarlo con un opportuno editor
e ricaricarlo come nuova versione. Tale modalità poteva risultare limitativa e non
consente una collaborazione immediata. L’ostacolo maggiore si presentava nel caso di
utilizzo del documentale ECM da parte di terzi, incaricati nella gestione dei contenuti
per conto di altre aziende. In questo caso, alla richiesta di una modifica, le parti erano
costrette a scambiarsi reciprocamente il documento tramite email o altri strumenti.
Grazie all’integrazione con Google Drive, qualora fosse necessario aggiornare dei conte-
nuti, è sufficiente che l’utente incaricato della loro gestione avvii la modifica con Google
Drive e condivida il link del documento con il richiedente. Con solamente un browser e
un account Google è possibile aggiornare i contenuti, anche collaborando in tempo reale
con altre persone, senza dover uscire dal documentale e senza dover utilizzare editor
installati localmente. Una volta concluse le modifiche, tramite il check-in vengono
aggiornati il contenuto e la versione del documento presente all’interno di ECM.
2.2 Discovery ECM per la gestione documentale
Il team in cui sono stato inserito si occupa dello sviluppo e della manutenzione di
Discovery ECM, un’applicazione web dedicata alla gestione dei contenuti aziendali
in formato digitale (come suggerito dall’acronimo ECMg ). I documenti qui salvati
vengono organizzati attraverso le classi documentali, ovvero un insieme di metadati
come la tipologia del documento, la data di creazione, la data di validità, il nome e
l’azienda di appartenenza. Questa gestione permette l’indicizzazione dei documenti e
aumenta la facilità di reperimento dei contenuti desiderati grazie anche alla funzionalità
78 CAPITOLO 2. LO STAGE NELLA STRATEGIA AZIENDALE spotlight, che ricerca le parole chiave sia tra i metadati che nei dati delle risorse. Essendo un’applicazione web l’accesso avviene tramite browser, quindi da qualsiasi dispositivo che lo supporta. ECM permette la condivisione dei documenti sia all’interno dell’azienda che all’e- sterno, ad esempio verso i clienti e i fornitori, gestendo i permessi di accesso dei vari utenti e le operazioni da loro eseguibili su ogni contenuto. Oltre alla consultazione dei documenti è permessa la loro creazione, modifica, eliminazione e trasmissione, purché la classe documentale di appartenenza lo consenta (ad esempio una fattura ricevuta non può essere modificata). Le modifiche o le revisioni vengono automaticamente tracciate tramite versionamento. L’archiviazione dei documenti riguarda sia il ciclo attivog che il ciclo passivog e la relativa conservazione digitale, supportata sia in house che in outsourcing 1 , viene effettuata attraverso le procedure informatiche previste dalla normativa italiana, le quali aggiungono ai contenuti valenza legale e fiscale. Lo scopo di ECM è quindi quello di garantire l’autenticità, l’integrità e l’affidabi- lità dei documenti digitalizzati offrendo l’opportunità di abbattere i costi legati alla stampa, allo stoccaggio e all’archiviazione. Il modo di organizzare i documenti favorisce inoltre il rapido reperimento dei contenuti necessari e la conseguente riduzione del tempo richiesto per ottenere le informazioni desiderate. 2.3 Obiettivi aziendali L’azienda ha richiesto, nelle 320 ore di stage, un’implementazione funzionante del modulo descritto da utilizzare come base per miglioramenti o estensioni in vista di un futuro rilascio con il prodotto. Per raggiungere un risultato soddisfacente gli obiettivi individuati sono stati suddivisi in obbligatori, desiderabili e facoltativi, come riportato nella tabella 2.1. 1 La conservazione digitale in house avviene tramite l’utilizzo di sistemi propri dell’azienda, mentre in outsourcing viene affidata a enti terzi.
2.3. OBIETTIVI AZIENDALI 9
Obiettivi obbligatori
Studio dell’API Google Drive
Studio di AngularJs
Studio dell’architettura REST
Studio del protocollo OAuth 2.0
Realizzazione modulo autenticazione con Google OAuth 2.0 lato backend
Realizzazione modulo autenticazione con Google OAuth 2.0 lato frontend
Realizzazione modulo modifica documento con Google Drive lato backend
Realizzazione modulo modifica documento con Google Drive lato frontend
Obiettivi desiderabili
Studio del documentale ECM
Studio di MyBatis
Studio di Maven
Studio di Spring Framework
Realizzazione di test con JUnit e JMock
Realizzazione modulo creazione nuovo documento con Google Drive lato backend
Realizzazione modulo creazione nuovo documento con Google Drive lato frontend
Stesura documentazione codice
Obiettivi facoltativi
Studio di Alfresco Community
Stesura test con Selenium
Apprendimento metodologia Scrum
Inserimento lock del documento aperto in modifica
Gestione dei permessi di modifica del documento in base alla classe documentale
Gestione dei permessi di modifica del documento in base all’utente
Tabella 2.1: Tabella degli obiettivi aziendali10 CAPITOLO 2. LO STAGE NELLA STRATEGIA AZIENDALE
2.4 Obiettivi personali
Il mio obiettivo principale era di poter effettuare questa mia prima esperienza la-
vorativa all’interno di un team in un’azienda di discrete dimensioni e con diversi
anni di esperienza. Cercavo inoltre uno stage che mi desse la possibilità sia di ap-
plicare quanto studiato all’università, sia di acquisire nuove conoscenze e di mettere
alla prova la mia capacità di apprendimento di nuove tecnologie e metodologie di lavoro.
Il progetto di stage di Sanmarco Informatica offriva le opportunità da me deside-
rate insieme ad un argomento che ho trovato molto interessante: l’utilizzo delle APIg
di Google per la realizzazione di una nuova componente di un prodotto già esistente.
Ciò mi avrebbe consentito di analizzare del codice scritto da altri sviluppatori con più
esperienza e di dover adattare la mia soluzione a determinate esigenze e vincoli.
Per una buona riuscita dell’attività mi sono posto i seguenti obiettivi:
• Imparare a lavorare secondo le regole del framework Scrum;
• Individuare le mie lacune e risolverle il prima possibile, studiando prima in
modo autonomo e fissando in seguito i concetti con l’aiuto del team e del tutor
aziendale;
• Essere in grado di rapportarmi con il team al fine di scambiare esperienze,
conoscenze e punti di vista sulle varie tecnologie e sul metodo di lavoro;
• Approfittare di questa esperienza di stage per osservare i problemi che un’azienda
può dover affrontare e le modalità di risoluzione adottate;
• Comprendere l’architettura e la logica di un’applicazione web RESTfulg ;
• Compiere una buona analisi dei requisiti richiesti;
• Dare ampio spazio alla progettazione dell’architettura del software e anticipare
eventuali criticità;
• Realizzare un prodotto funzionante;
• Scrivere del codice comprensibile, ben documentato e semplice da estendere e
manutenere.
2.5 Vincoli tecnologici
Per lo sviluppo del modulo è stato necessario adottare le stesse tecnologie utilizzate
nello sviluppo del documentale.
2.5.1 Backend
L’applicativo è realizzato in linguaggio Java, che viene eseguito su un server Tomcat.
Il framework Jersey si occupa della comunicazione con il client che avviene tramite
chiamate REST. I dati persistenti sono gestiti da un database MySQL o SQLServer a
seconda delle esigenze del cliente e la loro gestione avviene attraverso il framework My-
Batis. Spring Framework è ampiamente utilizzato per la gestione delle dipendenze tra
le varie componenti e Spring Security per la realizzazione del sistema di autenticazione2.5. VINCOLI TECNOLOGICI 11 e controllo di accessi. I test di unità sono realizzati con JUnit e JMock. I test con l’automatizzazione del browser sono realizzati con Selenium. Il motore documentale su cui ECM si appoggia è Alfresco Community Edition. Di seguito il dettaglio delle tecnologie citate. Java : linguaggio di programmazione ad alto livello orientato agli oggetti e a tipizza- zione statica. Viene utilizzato principalmente per la sua indipendenza dalla piattaforma di esecuzione, il che favorisce la semplice realizzazione di applicazioni portabili. Il motto "write once, run everywhere" esprime uno dei principi fondamentali di Java e infatti la compilazione di un sorgente genera del codice chiamato bytecode interpretato dalla Java Virtual Machine (JVM ). Per ogni piattaforma su cui l’applicazione deve essere eseguita il codice sorgente e il relativo bytecode sono gli stessi mentre cambia l’implementazione della JVM, la quale interpreta le istruzioni del codice compilato generando le istruzioni macchina corrette per il dispositivo in cui è in esecuzione. Altri punti di forza sono la presenza di numerose librerie che aggiungono molteplici funzionalità e la sua progettazione volta a garantire sicurezza nell’esecuzione di codice su macchine remote. La versione utilizzata è la 7; Apache Tomcat : server web opensource che implementa le specifiche Java servletg . Ciò lo rende una valida piattaforma su cui eseguire le applicazioni web realizzate in Java; Jersey : framework opensource utilizzato per lo sviluppo di servizi RESTful in Java; Spring Framework : framework opensource per lo sviluppo di applicazioni in Java. Utilizzato principalmente per ridurre l’accoppiamento tra i vari oggetti. Grazie a Spring Framework le classi non hanno più la responsabilità dell’istanziazione e inizia- lizzazione delle proprie dipendenze: seguendo le istruzioni di un file XML, realizzato dal programmatore, gli oggetti vengono creati correttamente da Spring e iniettati dove richiesti; Spring Security : framework utilizzato per la realizzazione di sistemi di autentica- zione e autorizzazione nelle applicazioni Java; MyBatis : framework opensource per la persistenza dei dati nelle applicazioni. Questo framework associa ai metodi di una classe le rispettive operazioni SQLg , le quali sono mappate in appositi file XML, in modo da poterle riutilizzare. Ciò permette il disaccoppiamento tra l’applicazione e le interrogazioni del database; MySql : RDBMSg basato su logica e linguaggio SQL; SQLServer : RDBMS proprietario Microsoft che utilizza Transact-SQL, variante del linguaggio standard SQL; JUnit : framework utilizzato per realizzare i test di unità per il linguaggio Java;
12 CAPITOLO 2. LO STAGE NELLA STRATEGIA AZIENDALE JMock : libreria che si appoggia a JUnit utile nella definizione di oggetti mockg e del loro comportamento, da iniettare nelle dipendenze solitamente soddisfatte da Spring Framework; Selenium : suite per i test delle applicazioni web nei quali vengono automatizzate le operazioni eseguite dagli utenti; Alfresco Community : software opensource per la gestione di documenti. 2.5.2 Frontend Il client di Discovery ECM è realizzato da pagine HTML che definiscono la struttura, arricchite da apposite direttive interpretate da AngularJs che permettono di rendere la pagina interattiva e di modificarne il contenuto a seconda delle azioni dell’utente e dei dati da visualizzare. L’aspetto dell’applicazione è gestito da fogli di stile CSS mentre la gestione dei dati e l’interazione con il server è responsabilità di script realizzati in JavaScript e organizzati in moduli gestiti dal framework AngularJs. Di seguito vengono descritte in dettaglio le tecnologie citate. Javascript : linguaggio di programmazione ad alto livello interpretato e a tipizza- zione dinamica. È conforme alle direttive ECMAScriptg ed è il linguaggio web più utilizzato insieme ad HTML e CSS. In questo contesto il suo ruolo è quello di gestire il comportamento delle pagine web lato client, pertanto è molto utilizzato per realizzare applicazioni web interattive. La sua flessibilità ne ha permesso la diffusione anche lato server e in programmi desktop o mobile. AngularJs : framework opensource per applicazioni web a singola pagina sviluppato principalmente da Google. AngularJs legge le pagine HTML arricchite con appositi attributi, interpretati come direttive, le quali permettono di collegare la vista con il model rappresentato dalle variabili JavaScript. Alla modifica di queste variabili corrisponde l’aggiornamento dinamico della pagina web, la quale si adatta quindi alle operazioni dell’utente. Il framework supporta l’architettura Model-View-Controllerg , ma la sua flessibilità permette di adattarlo anche ad altri pattern. Con AngularJs l’applicazione può essere divisa in moduli in base alle varie funzionalità offerte. Ogni modulo offre un’interfaccia pubblica e nasconde la complessità interna composta ad esempio da controller e servizi; HTML : HyperText Markup Language è un linguaggio di markup utilizzato per creare pagine e applicazioni web. Il suo scopo è descrivere la struttura semantica di un documento web. La versione utilizzata è la 5; CSS : Cascading Style Sheets è un linguaggio usato per definire la formattazione e l’aspetto dei documenti web scritti con il linguaggio HTML. La versione usata è la 3. 2.6 Analisi dei rischi All’inizio dello stage ho individuato alcuni potenziali rischi che avrebbero potuto influenzare negativamente il progetto, pianificando come intervenire per evitarli o
2.7. PIANIFICAZIONE DEL LAVORO 13
affrontarli.
Nella tabella 2.2 vengono valutati gli impatti (colonna "Imp") che i rischi potreb-
bero produrre sul progetto e la loro probabilità (colonnea "Prob") di verificarsi. Come
indice viene utilizzata una scala suddivisa in: basso, medio, alto, critico.
Descrizione Strategia Imp Prob
Inesperienza relativa- Studio preventivo della documentazione e Alto Alta
mente ad alcuni lin- realizzazione di una prova di progetto per
guaggi capirne il funzionamento.
Inabilità con gli stru- Comprendere fin da subito gli strumenti ne- Basso Media
menti di lavoro. cessari e il loro funzionamento, chiedendo
chiarimenti e consigli ai membri del team.
Mancanza di supporto Pianificare la possibilità di lavori concomitan- Critico Media
da parte del team o del ti evitando lo stagnamento in punti di stallo
tutor a causa di altro che necessitino di supporto o spiegazioni.
lavoro urgente
Gestione del tempo non Effettuare una pianificazione settimanale di Alto Media
ottimale (causata an- massima degli impegni e adattarla giorno
che dai tempi di viag- per giorno in base all’esperienza maturata.
gio per raggiungere il
lavoro)
Inesatta comprensione Analizzare in modo completo il problema, Critico Media
del problema e realizza- studiare la documentazione delle tecnologie
zione di una soluzione ed eventuali esempi, realizzare una Proof of
inefficace Conceptg e progettare in modo preciso con
diagrammi UMLg .
Tabella 2.2: Tabella dei rischi individuati
2.7 Pianificazione del lavoro
In accordo con il tutor aziendale l’attività di stage è stata pianificata suddividendo le
320 ore previste come indicato nella tabella 2.3.14 CAPITOLO 2. LO STAGE NELLA STRATEGIA AZIENDALE
Attività Ore Descrizione Settimana
Formazione 40 Introduzione al progetto e studio delle 1
relative tecnologie.
Analisi e definizio- 15 Comprensione del problema e delle 2
ne degli obiettivi soluzioni.
Raccolta documen- 25 Ricerca della documentazione necessaria 2
tazione per comprendere come implementare le
soluzioni e raggiungere gli obiettivi.
Implementazione 90 Realizzazione dell’integrazione lato bac- 3-5
backend kend.
Implementazione 60 Realizzazione dell’integrazione lato fron- 6-7
frontend tend.
Sviluppo dei test 90 Esecuzione dei test di unità e di 3-8
integrazione necessari.
Tabella 2.3: Tabella delle attività
Le figure 2.1 e 2.2 rappresentano in un diagramma di Ganttg la suddivisione temporale
delle attività.
Figura 2.1: Diagramma delle attività - prima metà
Figura 2.2: Diagramma delle attività - seconda metàCapitolo 3
Realizzazione del progetto
3.1 Formazione e ricerca
Le prime due settimane, per un totale di 80 ore, sono state dedicate alla formazione e
alla ricerca. Nelle sezioni a seguire è descritto l’approccio utilizzato per il progetto.
3.1.1 Progetto, tecnologie e strumenti
Con la guida del tutor aziendale e del team ho compreso i valori di Scrum e studia-
to la struttura del documentale ECM, analizzando determinate scelte progettuali e
implementative e apprendendo quali componenti sarebbero stati di maggior interesse
nello sviluppo del modulo richiesto. I framework Maven, per la gestione dei progetti, e
Spring Framework per la gestione della dependency injectiong si sono rivelati fin da
subito fondamentali per la buona riuscita del progetto; di conseguenza ho dedicato
particolare attenzione al loro studio, creando dei piccoli progetti indipendenti per
comprenderne l’approccio e il funzionamento. Ho adottato una strategia simile anche
per approfondire le mie conoscenze di AngularJs. Nel realizzare questi esempi ho
utilizzato gli strumenti di sviluppo previsti apprendendone le funzionalità principali.
Il passo successivo è stata la ricerca di informazioni, documentazione ed esempi degli
strumenti e delle librerie utilizzabili per raggiungere il mio obiettivo. Nelle fasi iniziali
ho trovato difficoltà nel reperimento e nella comprensione di informazioni ed esempi in
quanto scarsi in numero, poco completi e ricchi di concetti non spiegati e a me nuovi.
La documentazione di Google si è rivelata, contrariamente alle mie aspettative, poco
strutturata, dispersiva e a volte incompleta o superficiale. Recuperare informazioni al
suo interno spesso si rivelava un’operazione lunga a causa della mancanza di un indice
completo e ciò mi ha spinto a creare dei documenti in cui organizzare le informazioni
ottenute e tenere traccia delle fonti più utili.
3.1.2 Valutazione delle alternative
L’obiettivo del progetto di stage era permettere la modifica dei documenti presenti
all’interno di ECM con la suite per l’ufficio di Google: Documenti, Fogli e Presentazioni.
Ciò poteva essere realizzato sfruttando dei servizi messi a disposizione da Google tramite
apposite API. L’idea di modifica di documenti mi aveva dapprima portato a valutare le
API Docs e Sheets, le quali si sono però rivelate insufficienti per i miei obiettivi. Queste
1516 CAPITOLO 3. REALIZZAZIONE DEL PROGETTO
permettevano l’automatizzazione di alcune operazioni di gestione dei contenuti o la
possibilità di elaborare i dati di un documento, mentre le mie esigenze erano orientate
verso il salvataggio e la condivisione dei documenti, lasciando la gestione del contenuto
all’utente finale.
Ho così individuato Google Drive REST come API da utilizzare: la piattaforma Google
Drive offre le funzionalità di condivisione e collaborazione e uno spazio in cui salvare
i documenti, mentre la relativa API fornisce un insieme di librerie che permettono
l’esecuzione di operazioni CRUDg sugli stessi. L’unica fonte di informazioni è stata la
documentazione ufficiale di Google, la quale fornisce anche esempi di utilizzo specifici
per vari linguaggi. Trovando questa documentazione carente in determinati punti
ho integrato con lo studio di altri progetti e guide disponibili online e, su consiglio
del tutor aziendale, ho analizzato il codice sorgente messo a disposizione da Alfresco
Community che aveva già implementato un’integrazione simile con Google Drive.
Come prima soluzione ho ipotizzato di salvare i documenti all’interno di uno spazio
Drive dell’azienda associato all’applicazione e condividerli con l’utente. Gli svantaggi
principali erano però legati alla quantità di spazio necessario e al trattamento e la
diffusione di dati sensibili. Ho quindi valutato e in seguito adottato una soluzione che
sfruttasse l’utilizzo dello spazio Google Drive dei singoli utenti che avrebbero avviato
una nuova modifica dal documentale. Ciò avrebbe delegato sia il problema dello spazio
di archiviazione che la gestione dei documenti aziendali.
3.1.3 Google Drive REST API
Figura 3.1: Logo di Google Drive
Google Drive REST API è un insieme di procedure che permettono di integrare un’ap-
plicazione con Google Drive. I metodi offerti consentono di effettuare operazioni CRUD
su file all’interno delle cartelle Google Drive degli utenti previa loro autorizzazione.
Ogni operazione viene eseguita tramite una chiamata REST all’API di Google, la quale
deve includere le chiave di autorizzazione e autenticazione fornite da Google secondo il
protocollo OAuth 2.0 descritto nell’appendice A.
Seguendo le direttive della documentazione ufficiale, tramite la sezione di gestione delle
API (Google developers console) ho attivato l’API Google Drive REST e registrato
un nuovo progetto relativo ad ECM, l’applicazione che avrebbe effettuato le chiamate
REST a Google. Questa sezione permette inoltre di monitorare il traffico, gli errori e
altri parametri di utilizzo delle API da parte delle applicazioni registrate.
Per il progetto creato è necessario attivare l’API desiderata e generare le credenziali
per la propria applicazione, come mostrato in figura 3.2. Seguendo il protocollo OAuth
2.0, tra le varie informazioni vengono anche richiesti gli URIg di reindirizzamento
autorizzati.
Terminata la procedura, Google genera un file JSONg contenente il codice identificativo
dell’applicazione client, la relativa password e gli URI da utilizzare per effettuare le
richieste di autenticazione, autorizzazione e ottenimento delle access token. Seguendo3.1. FORMAZIONE E RICERCA 17
Figura 3.2: Scherma di richiesta delle credenziali per l’utilizzo delle API Google
gli esempi presenti nella documentazione ufficiale ho realizzato un primo programma
elementare che richiede il consenso dell’utente per estrarre una lista dei nomi dei primi
dieci file presenti nel suo spazio di archiviazione Drive. Sfruttando questo esempio
come base ho sperimentato altre funzionalità per iniziare a comprendere le possibilità
offerte.
3.1.4 Proof of Concept
Terminate le sperimentazioni e maturate basi sufficienti, ho ritenuto opportuno realiz-
zare una Proof of Concept per dimostrare la fattibilità del progetto con le tecnologie
richieste. Grazie a questa attività ho identificato e valutato due possibilità a prima
vista parimenti fattibili: la realizzazione dell’integrazione interamente nel frontend con
Javascript o completamente nel backend con Java. La prima si è dimostrata presto
insostenibile per la mancanza di documentazione, la difficoltà nella gestione delle chiavi
di accesso e la persistenza delle informazioni necessarie. La seconda possibilità si è
invece rivelata adeguata e ho realizzato così una semplice applicazione che caricava
un file di prova in formato Open Document Spreadsheet, presente nel desktop, sul mio
Drive personale e lo apriva in modifica con l’applicazione Google Fogli.
In seguito alla presentazione della Proof of Concept al tutor aziendale e alla valutazione
di alcune scelte progettuali ho iniziato a definire l’architettura del prodotto.18 CAPITOLO 3. REALIZZAZIONE DEL PROGETTO 3.2 Progettazione dell’architettura In seguito allo studio del problema e della documentazione, dopo la realizzazione della Proof of Concept ho sviluppato una prima struttura generale dell’architettura del modulo. La prima bozza era caratterizzata dalla presenza di alcuni design patterng creazionali quali il Factory Patterng e il Builder Patterng , pensati principalmente per dividere le responsabilità di uso e di creazione delle dipendenze delle classi. In seguito alla revisione da parte del tutor aziendale ho abbandonato l’utilizzo dei pattern precedentemente indicati e ho utilizzato al loro posto la dependency injection in quanto successivamente, a livello implementativo, la creazione e l’iniezione delle dipendenze sarebbero state responsabilità di Spring Framework. Oltre a questo vantaggio, la struttura del modulo sarebbe stata più semplice, comprensibile e coerente con quella degli altri componenti di ECM. Data la mia scarsa esperienza con la progettazione di architetture software ho più volte avuto la necessità di tradurre alcune classi o metodi in pseudo-codice per rendermi effettivamente conto della complessità che il componente avrebbe raggiunto e per evidenziare alcune divisioni di responsabilità da tenere in considerazione. Con questo approccio ho potuto correggere e migliorare tempestivamente l’architettura e arginare il problema di un futuro eccessivo discostamento dell’implementazione. 3.2.1 Visione complessiva La figura 3.3 mostra il diagramma dei packageg e fornisce un’idea della progettazione ad alto livello. Il package docmenu contiene tutto ciò che riguarda il frontend: in linea di massima è strutturato in modo che le interazioni dell’utente con la view inneschino funzioni del controller che utilizza i service per effettuare chiamate REST al server. Il package ecm racchiude tutto ciò che forma il backend. Le richieste REST vengono gestite dalle classi rest che invocano i metodi corretti delle classi service. Queste classi si occupano di gestire tutta la logica sfruttando altri oggetti per delegare alcune responsabilità. Per l’interrogazione con il database vengono utilizzate classi dao, mentre le classi pojo ed entity 1 rappresentano oggetti che vengono elaborati dalle classi service e scambiati con le classi client. Queste ultime hanno la responsabilità di utilizzare i metodi offerti dall’API per effettuare le operazioni necessarie. Mi sono impegnato per realizzare l’architettura in modo da separare i compiti delle varie classi e rispettare il Single Responsability Principleg . Come si potrà vedere meglio in seguito, l’architettura è pensata per rispettare anche l’Interface Segrega- tion Principleg e il Dependency Inversion Principleg , concretizzati dalla preferenza all’utilizzo di molte interfacce specifiche rispetto a poche e generiche e all’adozione della dependency injection come pattern architetturale guidato dall’ottica dell’utilizzo di Spring Framework. Le dipendenze delle classi sono verso interfacce, ad eccezione dell’uso di oggetti util, pojo o entity. Di seguito esporrò gli elementi più interessanti e importanti dell’architettura. 1 Le classi dao (Data Access Object) si occupano dell’interazione con il database, le classi entity e pojo rappresentato un oggetto i cui attributi sono solitamente salvati in una tabella in database e avente unicamente metodi di set e get. Le classi util contengono solamente metodi di utilità.
3.2. PROGETTAZIONE DELL’ARCHITETTURA 19 Figura 3.3: Progettazione ad alto livello del modulo di integrazione con Google Drive
20 CAPITOLO 3. REALIZZAZIONE DEL PROGETTO
3.2.2 Backend
3.2.2.1 Le classi rest
Figura 3.4: Diagramma delle classi rest
Le classi rest utilizzano le annotazioni Jersey per definire il metodo HTTPg della
chiamata REST gestita e l’endpointg a cui sono collegate. Ho identificato due tipolo-
gie di chiamate: quelle inerenti all’autorizzazione dell’applicazione, soddisfatte dalla
classe GoogleConnectionRestService e quelle relative alle operazioni vere e proprie sui
documenti, gestite dalla classe GoogleFileManagerRestService. Queste classi hanno
unicamente lo scopo di fare da ponte tra frontend e backend: invocano il metodo della
classe service collegato alla chiamata REST e restituiscono il risultato dell’operazione.
Ogni altra logica è responsabilità delle implementazioni delle classi service da cui
dipendono.
3.2.2.2 Le classi service
Le classi service si occupano di gestire gran parte della logica di business. Nell’eseguire
le operazioni richieste possono rivolgersi ad altri service e ad oggetti dao, util, pojo o
entity e sfruttare le classi client per operazioni verso l’API.
Nella realizzazione dell’architettura ho individuato quattro necessità alle quali corri-
spondono altrettante interfacce e le relative implementazioni:
• GoogleConnectionService per la gestione del processo di autorizzazione;
• GoogleCredentialPersistenceService per la gestione delle operazioni verso da-
tabase inerenti alla persistenza e al recupero delle credenziali ottenute con
l’autorizzazione;
• GoogleFileManagerService per la gestione della logica operazioni CRUD sui
documenti sia lato Google Drive, sia lato documentale;
• GoogleFilePersistenceService per la gestione delle operazioni verso database
inerenti alla persistenza e al recupero delle informazioni sui documenti la cui
modifica è attiva.3.2. PROGETTAZIONE DELL’ARCHITETTURA 21
Figura 3.5: Diagramma delle classi service
Figura 3.6: Diagramma delle classi client22 CAPITOLO 3. REALIZZAZIONE DEL PROGETTO
3.2.2.3 Le classi client
Le classi client si occupano dell’interazione con l’API Drive REST. Come per le classi
rest e service, ho diviso le responsabilità di connessione da quelle di gestione dei
file. GoogleConnectionClient si occupa delle procedure di autorizzazione, verifica la
validità delle credenziali ed effettua l’aggiornamento delle token quando necessario.
Avvia inoltre la connessione con l’API attraverso la quale possono essere effettuate
le richieste. GoogleFileManagerClient si occupa invece di tutte le operazioni che
riguardano il caricamento di documenti in Drive o l’esportazione del loro contenuto.
La decisione di renderlo dipendente da GoogleConnectionClient è giustificata dalla
possibilità di riuso del codice e dalla semplificazione della sua logica interna. Infatti
tutte le operazioni sui file verso Google Drive necessitano della connessione gestita da
GoogleConnectionClient che si occupa, come già detto, di aggiornare automaticamente
le credenziali in caso di invalidità, senza dover richiedere ulteriori controlli o operazioni.
L’utilità delle classi client si estende anche all’incapsulamento delle procedure messe
a disposizione dall’API rendendo indipendente il resto dell’applicazione. In caso di
aggiornamenti dell’API è quindi sufficiente modificare unicamente queste componenti.
3.2.3 Frontend
Figura 3.7: Architettura frontend
La progettazione del frontend ha richiesto meno tempo del backend in quanto vi erano
meno operazioni da eseguire. La figura 3.7 mostra una semplificazione dell’architettura.
Il mio scopo era aggiungere funzionalità ad un modulo esistente e, con l’aiuto del team,
ho compreso come integrare il controller e la view ad esso collegati.
Ho comunque trovato alcune difficoltà nella realizzazione di questa architettura a causa
della mia scarsa esperienza nell’utilizzo delle tecnologie richieste e della necessità di
adattarmi a strutture e funzionalità esistenti poco organizzate e non propriamente
documentate.
Avendo ora maturato maggiore esperienza a riguardo, non posso ritenermi pienamente3.3. IMPLEMENTAZIONE 23 soddisfatto di questa architettura: era possibile dividere in modo migliore le responsa- bilità di modifica e creazione dei documenti e separare in oggetti diversi le funzioni invocate tramite interazione dell’utente dalle altre. 3.2.3.1 La componente view Le view di mio interesse erano composte da due file HTML, uno per la visualizzazione dell’anteprima di un documento e uno per il caricamento di un nuovo contenuto. A queste avrei aggiunto i pulsanti di modifica e creazione di un nuovo documento con Google Drive e li avrei collegati al controller per gestirne l’abilitazione e la disabilitazione, mantenendo così lo stato del client coerente con quello del server. Ad esempio, un mio obiettivo era la visualizzazione del pulsante di "avvio nuova modifica" solamente per i documenti modificabili e la sua disabilitazione in caso opposto o qualora fosse già attiva una nuova modifica. In tal caso i pulsanti di "annullamento", "check-in" o "continua modifica" avrebbero dovuto sostituirlo. Perché ciò potesse funzionare anche al riavvio dell’applicazione era necessario che la logica dei pulsanti fosse collegata, in qualche modo, al server. 3.2.3.2 La componente controller Per entrambe le view dovevo adattare un unico controller. Qui avrei inserito le funzioni che l’interazione dell’utente avrebbe attivato e le chiamate al componente service per ottenere dati dal server sui cui effettuare le elaborazioni ed aggiornare la componente view di conseguenza. Come pensato per il backend ho ritenuto opportuno dividere i compiti relativi all’autorizzazione e alla modifica dei documenti affidandoli a due oggetti diversi. 3.2.3.3 La componente service La componente service si sarebbe occupata unicamente di creare ed eseguire le chiamate REST al server sia per il processo di autorizzazione che per la gestione dei documenti, per poi restituire il risultato al controller. 3.3 Implementazione Una volta raggiunta un’architettura del software soddisfacente ho iniziato la sua implementazione. Il team aveva già iniziato a ristrutturare, migliorare e documentare il prodotto e mi sono quindi impegnato a produrre codice di qualità. A tal fine ho scelto sempre nomi di funzioni e variabili in modo accurato in base al loro significato nel contesto di utilizzo e ho rispettato le convenzioni di codifica adottate, tra le quali il nome di variabili e metodi in camelCaseg , il nome delle classi camelCase con l’iniziale maiuscola, le costanti rappresentate da lettere maiuscole, l’inserimento di uno spazio prima di una parentesi graffa e l’aggiunta di uno spazio attorno agli operatori. Con qualche eccezione sono sempre riuscito a mantenere lo stesso livello di avanzamento tra documentazione in Javadocg e codifica. Al termine di ogni realizzazione di incremento svolgevo un’attività di verifica volta a correggere la documentazione di componenti che avevano subìto modifiche.
Puoi anche leggere