ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS

Pagina creata da Francesco Graziano
 
CONTINUA A LEGGERE
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
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-2019
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
Mirko Gibin: Integrazione di Google Drive: modifiche collaborative online e in tempo
reale con ECM, Tesi di laurea, c Febbraio 2019.
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
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.

                                           iii
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
Ringraziamenti

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

                                             v
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
Indice

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

                                          vii
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
viii                                                                                                                                     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                                                                                                                                     51
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
Elenco 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

                                          ix
ECM Tesi di laurea - Università degli Studi di Padova - SIAGAS
x                                                            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 . . . . . . . . . . .       33
Capitolo 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

                                             1
2                                          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 in
1.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à

                                             7
8                      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 aziendali
10                   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 autenticazione
2.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

                                             15
16                             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. Seguendo
3.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 client
22                              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 pienamente
3.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