Progettazione e sviluppo di un controller per la chat di un'applicazione mobile - Università degli Studi di Padova - SIAGAS

Pagina creata da Letizia Graziani
 
CONTINUA A LEGGERE
Progettazione e sviluppo di un controller per la chat di un'applicazione mobile - Università degli Studi di Padova - SIAGAS
Università degli Studi di Padova
               Dipartimento di Matematica
               “Tullio Levi-Civita”
               Corso di Laurea in Informatica

   Progettazione e sviluppo di un
      controller per la chat di
       un’applicazione mobile

Relatore                                              Autore
Prof. Gilberto Filè                             Sara Feltrin

                         Luglio 2019
Progettazione e sviluppo di un controller per la chat di un'applicazione mobile - Università degli Studi di Padova - SIAGAS
Sara Feltrin: Progettazione e sviluppo di un controller per la chat di un’applicazione
mobile, Tesi di laurea triennale, c Luglio 2019.
Progettazione e sviluppo di un controller per la chat di un'applicazione mobile - Università degli Studi di Padova - SIAGAS
Forse non è la felicità ciò che voglio
              Ma il percorso per raggiungerla
      Un alpinista che non vorrà quella vetta
             Ma solo il rischio di cadere giù
Forse non è la felicità - Fast Animals And Slow Kids
Progettazione e sviluppo di un controller per la chat di un'applicazione mobile - Università degli Studi di Padova - SIAGAS
Progettazione e sviluppo di un controller per la chat di un'applicazione mobile - Università degli Studi di Padova - SIAGAS
Ringraziamenti

Ringrazio il Prof. Gilberto Filè, relatore della mia tesi, per avermi seguito durante
la stesura del lavoro.

Desidero ringraziare con affetto i miei genitori, mio fratello Luca e i miei nonni
per il sostegno, il grande aiuto e per essermi stati vicini in ogni momento durante
gli anni di studio.

Un ringraziamento speciale va a tutto il team di Zextras S.r.l., che mi hanno
permesso di vivere questa bella esperienza in un settore dell’informatica così inte-
ressante.

Un ringraziamento speciale va a Marco, che più di tutti ha dovuto subirmi i miei
alti e i miei bassi, che ha sempre creduto in me anche quando io stessa non lo
facevo e mi ha sempre supportato in tutte le mie scelte, giuste o sbagliate che fossero.

Infine, non posso non ringraziare i miei amici e compagni di università per le
sessioni di studio e le serata passate assieme, con voi questi anni di università sono
volati.

Padova, Luglio 2019

Sara Feltrin
Progettazione e sviluppo di un controller per la chat di un'applicazione mobile - Università degli Studi di Padova - SIAGAS
Progettazione e sviluppo di un controller per la chat di un'applicazione mobile - Università degli Studi di Padova - SIAGAS
Sommario
Il presente documento ha lo scopo di descrivere l’attività di stage svolta presso
l’azienda Zextras s.r.l. con sede a Torri di Quartesolo (VI) dal 6 maggio al 28 giugno
2019. Il lavoro si è concentrato sulla progettazione e l’implementazione di una parte
dell’applicazione Team. Essa è un’app mobile di messaggistica istantanea creata
con lo scopo di fornire una rete di comunicazione tra i dipendenti di un’azienda
che utilizza la suite di prodotti Zextras per la posta elettronica e lo storage dei
file. In particolare, lo stage si concentra sull’implementazione del dettaglio delle
chat di gruppo. Le funzionalità principali richieste sono: la possibilità di modificare
topic e immagine delle chat di gruppo, la gestione dei partecipanti e l’accesso
diretto alle chat private con i vari membri del gruppo. Tale lavoro è sviluppato
per dispositivi mobile Apple utilizzando il linguaggio di programmazione nativo
Swift e l’IDE xCode. Quest’ultimo da la possibilità di sviluppare il codice sorgente,
costruire l’interfaccia grafica e implementare unit test e UI test senza l’ausilio di
altri strumenti.
Progettazione e sviluppo di un controller per la chat di un'applicazione mobile - Università degli Studi di Padova - SIAGAS
Indice

1 Introduzione                                                                                                                      1
  1.1 Organizzazione del documento . . . . . . . . . . . . . . . . . . . . .                                                        1
  1.2 Convenzioni adottate . . . . . . . . . . . . . . . . . . . . . . . . . .                                                      1
  1.3 Presentazione del progetto . . . . . . . . . . . . . . . . . . . . . . .                                                      2

2 L’azienda                                                                                                                        3
  2.1 Profilo dell’azienda . . . .    .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
       2.1.1 Zimbra . . . . . . .     .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
       2.1.2 Zextras Suite . . .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
  2.2 Metodo di lavoro . . . . .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
       2.2.1 Scrum . . . . . . .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
       2.2.2 Strumenti utilizzati     .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6

3 Organizzazione del progetto                                                                                                       9
  3.1 Motivo del progetto . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                     9
  3.2 Piano di lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                     9
  3.3 Pianificazione del progetto . . . . . . . . . . . . . . . . . . . . . . .                                                    10

4 Tecnologie utilizzate                                                                                                            11
  4.1 xCode . . . . . . . . . . .     .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
  4.2 Swift . . . . . . . . . . . .   .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
  4.3 Realm Database . . . . . .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
  4.4 SVProgressHUD . . . . .         .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
  4.5 Alamofire . . . . . . . . .     .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  4.6 Alamofire Image . . . . . .     .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  4.7 SwiftyJSON . . . . . . . .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  4.8 WebSocket . . . . . . . . .     .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  4.9 Firebase Cloud Messaging        .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14

5 Analisi dei requisiti                                                                                                            15
  5.1 Attori . . . . . . . . . . . . . . . . .                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
      5.1.1 Attori primari . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
      5.1.2 Attori secondari . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   15
  5.2 Casi d’uso principali . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  5.3 Requisiti . . . . . . . . . . . . . . . .                .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
      5.3.1 Principali requisiti funzionali .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
      5.3.2 Requisiti di vincolo . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18

                                              ix
x                                                                                                                                 INDICE

        5.3.3   Requisiti di qualità . . . . . . . . . . . . . . . . . . . . . . .                                                        18

6 Sviluppo                                                                                                                                19
  6.1 Gestione delle API . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
       6.1.1 HTTP . . . . . . . . . . .                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
       6.1.2 WebSocket . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
       6.1.3 Firebase Cloud Messaging                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
  6.2 Codifica del controller . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
       6.2.1 UX/UI Mockup Mobile . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
       6.2.2 ColorsPalette for Group .                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
       6.2.3 Interface builder . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   25
       6.2.4 Struttura dell’applicazione                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   26

7 Verifica e Validazione                                                                                                                  27
  7.1 Unit Test . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
  7.2 UI Test . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
  7.3 Test manuali . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
  7.4 Beta test . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
       7.4.1 Test Flight .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28

8 Conclusioni                                                                   29
  8.1 Valutazioni del prodotto finale . . . . . . . . . . . . . . . . . . . . . 29
  8.2 Valutazioni sull’esperienza di stage . . . . . . . . . . . . . . . . . . 30

A Descrizione dei casi d’uso                                                                                                              33
  A.1 UC1 - Visualizzazione dettaglio della chat di gruppo . . . .                                                    .   .   .   .   .   33
  A.2 UC2 - Modifica dell’immagine del gruppo . . . . . . . . . .                                                     .   .   .   .   .   33
  A.3 UC2.1 - Errore formato immagine non valido . . . . . . . .                                                      .   .   .   .   .   34
  A.4 UC3 - Modifica del topic del gruppo . . . . . . . . . . . . .                                                   .   .   .   .   .   35
  A.5 UC3.1 - Errore topic inserito troppo lungo . . . . . . . . .                                                    .   .   .   .   .   35
  A.6 UC4 - Modifica delle notifiche del gruppo . . . . . . . . . .                                                   .   .   .   .   .   36
  A.7 UC5 - Aggiunta di un nuovo partecipante al gruppo . . . .                                                       .   .   .   .   .   36
  A.8 UC6 - Visualizzazione della lista di tutti gli utenti Zimbra                                                    .   .   .   .   .   37
  A.9 UC7 - Selezionare più utenti da aggiungere alla chat . . . .                                                    .   .   .   .   .   38
  A.10 UC8 - Abbandonare la chat di gruppo . . . . . . . . . . .                                                      .   .   .   .   .   38
  A.11 UC9 - Visualizzazione della lista dei partecipanti alla chat                                                   .   .   .   .   .   39
  A.12 UC10 - Accesso alla chat privata . . . . . . . . . . . . . . .                                                 .   .   .   .   .   39
  A.13 UC11 - Ritorno al dettaglio della chat di gruppo . . . . . .                                                   .   .   .   .   .   40
  A.14 UC12 - Visualizzazione della lista dei media condivisi . . .                                                   .   .   .   .   .   41
  A.15 UC13 - Visualizzazione del dettaglio del media selezionato                                                     .   .   .   .   .   41
  A.16 UC14 - Visualizzazione della lista dei link condivisi . . . .                                                  .   .   .   .   .   42
  A.17 UC15 - Visualizzazione del dettaglio del link selezionato . .                                                  .   .   .   .   .   42

Glossary                                                                                                                                  43

Bibliografia                                                                                                                              49
Elenco delle figure

 2.1   Logo Zextras . . . . . . .    . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
 2.2   Logo Zimbra . . . . . . . .   . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
 2.3   Zextras Suite . . . . . . .   . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
 2.4   Diagramma funzionamento       Scrum       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
 2.5   Logo Bitbucket . . . . . .    . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
 2.6   Logo Jira . . . . . . . . .   . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
 2.7   Logo Confluence . . . . . .   . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
 2.8   Logo Jenkins . . . . . . .    . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   8
 2.9   Logo SourceTree . . . . .     . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   8

 4.1   Logo xCode . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
 4.2   Logo Swift . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
 4.3   Logo Realm . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
 4.4   SVProgressHUD . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
 4.5   Logo Alamofire . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
 4.6   Logo Firebase Cloud Messaging         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   14

 5.1   Diagramma dei casi d’uso . . . . . . . . . . . . . . . . . . . . . . .                                                16

 6.1   Protocollo HTTP . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
 6.2   Funzionamento di WebSocket . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
 6.3   Funzionamento Firebase . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
 6.4   Documento UX/UI Mockup Mobile                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
 6.5   Documento ColorsPalette for Group             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   24

 8.1   Esempio errore di localizzazione . . . . . . . . . . . . . . . . . . . .                                              30

                                        xi
Elenco delle tabelle

 3.1   Organizzazione del progetto in sprint . . . . . . . . . . . . . . . . .      10

 5.1   Requisiti funzionali . . . . . . . . . . . . . . . . . . . . . . . . . . .   18
 5.2   Requisiti di vincolo . . . . . . . . . . . . . . . . . . . . . . . . . . .   18
 5.3   Requisiti di qualità . . . . . . . . . . . . . . . . . . . . . . . . . . .   18

                                        xiii
CAPITOLO      1
Introduzione

1.1     Organizzazione del documento
Questo elaborato è organizzato come segue:

   • Capitolo 1: descrizione della struttura del documento e delle convenzioni
     adottate nella sua stesura;

   • Capitolo 2: introduzione dell’azienda ospitante, dei suoi prodotti nel mercato
     e del metodo di lavoro seguito al suo interno;

   • Capitolo 3: presentazione del progetto svolto durante questo stage, degli
     obiettivi raggiunti e come è stato pianificato il lavoro;

   • Capitolo 4: esposizione delle tecnologie che sono state studiate e adottate
     durante l’attività di stage;

   • Capitolo 5: elenco dei requisiti che l’azienda ha definito per il prodotto finale;

   • Capitolo 6: spiegazione delle scelte implementative e di design dell’applicazio-
     ne;

   • Capitolo 7: descrizione delle fasi di verifica e validazione del prodotto svolte;

   • Capitolo 8: conclusione con delle mie considerazioni sull’applicazione prodotta,
     sul lavoro svolto e il periodo di stage in generale.

1.2     Convenzioni adottate
Nella stesura del presente elaborato vengono adottate le seguenti convenzioni
tipografiche:

   • la prima occorrenza di termini tecnici, ambigui o di acronimi verrà marcata
     in corsivo e con la lettera g a pedice, in modo da indicare la sua presenza nel
     glossario, riportato alla fine del documento;

                                          1
2                                                CAPITOLO 1. INTRODUZIONE

    • i termini tecnici in lingua inglese non traducibili e non presenti nel glossario,
      verranno evidenziati in corsivo;

    • la prima occorrenza di un acronimo viene riportata con la dicitura estesa, in
      corsivo, e le lettere che compongono l’acronimo vengono riportate in grassetto.
      Ogni successiva occorrenza presenterà solo la forma contratta;

    • le parole chiave presenti in ciascun paragrafo ssono marcate in grassetto, così
      da consentirne una facile individuazione;

    • ogni termine corrispondente a nomi di file, componenti dell’architettura o
      codice viene marcato utilizzando un font a larghezza fissa;

    • i diagrammi Unified Modeling Language (UML) sono espressi seguendo lo
      standard 2.0.

1.3      Presentazione del progetto
Il progetto proposto dall’azienda per il lavoro di stage consiste nella progettazione e
nello sviluppo di un controllerG di una applicazione chat per dispositivi mobili, nello
specifico si tratta del controller che gestisce le informazioni della conversazione di
gruppo. Le funzionalità richieste nella schermata del dettaglio della chat di gruppo
sono: modificare avatarG e topicG del gruppo, abbandonare il gruppo, aggiungere
nuovi membri al gruppo, consultare la lista di tutti i partecipanti alla chat e infine
entrare nella conversazione, nuova oppure già avviata, con l’utente della lista che
si desidera premendo su di esso. La grafica dell’applicazione deve rispettare lo
stile del modulo Chat, già progettato dall’azienda, e seguire le linee guida per le
applicazioni iOSG . Tale prodotto viene sviluppato utilizzando l’IDEG xCode, un
ambiente di sviluppo progettato da Apple che grazie alla sua suiteG di strumenti
facilità lo sviluppo di applicazioni per sistemi iOS.
CAPITOLO      2
L’azienda

2.1      Profilo dell’azienda

                        figure 2.1: Logo dell’azienda Zextras

L’attività di stage descritta in questo elaborato è stata svolta presso l’azienda
Zextras s.r.l. che ha sede a Torri Di Quartesolo (VI). Questa società è nata nel
2011 con l’obiettivo di espandere le funzionalità della suiteG di prodotti offerti
da Zimbra, uno dei sistemi di collaborazione più diffusi al mondo che propone
diversi servizi, tra cui una propria posta elettronica, un calendario e un’agenda
contatti. Da questo proposito nasce Zextras Suite, un insieme di estensioni per
Zimbra Collaboration che migliorano i servizi già presenti e aggiungono funzionalità
importanti per favorire lo sviluppo di software. In pochi anni Zextras è riuscita
a rendere la propria suite di prodotti l’estensione professionale per Zimbra Open
Source più avanzata tra le soluzioni di collaborazione sul mercato. I loro prodotti
sono riconosciuti come ottimali anche dall’azienda proprietaria Synacor, e ciò si è
tradotto in una cooperazione per lo sviluppo di alcuni prodotti open sourceG e per
Zimbra Suite Plus. Ad oggi l’azienda presenta sedi secondarie in diversi paesi, quali
Francia, Brasile, Russia e Stati Uniti, oltre a possedere partner in tutto il mondo.

2.1.1     Zimbra

                        figure 2.2: Logo dell’azienda Zimbra

                                         3
4                                                      CAPITOLO 2. L’AZIENDA

Zimbra è un server di workgroupG open sourceG che mette a disposizione una suiteG
di software collaborativi che consentono di condividere documenti e attività. Di
base essa offre i seguenti servizi:

    • configurazione personalizzata;

    • gestione della posta elettronica;

    • rubriche, calendari e condivisione di file;

    • chat e chiamate vocali;

    • integrazione con i canali web;

    • privacy e alti livelli di sicurezza;

    • integrazione per i dispositivi mobili: oltre che mediante client Zimbra Web e
      attraverso i client di posta elettronica tradizionale, è possibile accedere alle
      e-mail, ai calendari e alle altre offerte da dispositivi mobile.

   Le funzionalità di Zimbra possono essere facilmente estese grazie alla possibilità
di creare ed aggiungere degli add-on chiamati zimletG , unendo le funzionalità del
software principale con servizi web o applicazioni di terzi.
   Zimbra è disponibile in due versioni:

    • Zimbra Open Source Edition: soluzione completamente open source, che offre
      un insieme ristretto di funzionalità standard;

    • Zimbra Network Edition: soluzione completa di tutte le funzionalità sia per
      l’amministratore di sistema sia per l’utente finale.

2.1.2     Zextras Suite
Zextras Suite è un add-on per Zimbra Collaboration: i suoi prodotti sono progettati
per espandere le funzioni di Zimbra Open Source Edition in maniera a se stante
rispetto i moduli Zimbra Network Edition. Infatti, tale soluzione software, non
è distribuito assieme ad alcun binario o sorgente sotto il copyrightG di Zimbra.
Le principali innovazioni che sono state portate nel mondo Zimbra riguardano la
sicurezza dei dati, la mobilità e la gestione dello storageG . La suite comprende i
seguenti prodotti:

    • Zextras Backup: modulo di backupG professionale che permette il salvatag-
      gio realtimeG dei dati;

    • Zextras Mobile: modulo per la gestione e sincronizzazione di email, contatti,
      eventi e task con qualsiasi device mobile tramite Exchange ActiveSyncG ;

    • Zextras Powerstore: modulo per la gestione avanzata di storage locali e
      remoti, così da ottimizzare i volumi dei dati Zimbra e risparmiare spazio
      attraverso la compressione e la deduplicazioneG ;
2.2. METODO DI LAVORO                                                                5

   • Zextras Admin: interfaccia amministrativa avanzata per monitorare gli
     utenti e le funzionalità di Zimbra, Zextras Suite e ogni altra zimletG ;
   • Zextras Chat: piattaforma client/server integrata in Zimbra per la messag-
     gistica istantanea e le videochat.
  Zextras Suite è un’estensione modulare per Zimbra Open Source che può essere
applicata secondo le proprie esigenze e, grazie alla sua duttilità, la rende la scelta
migliore per un uso professionale di Zimbra.

                       figure 2.3: Moduli della Zextras Suite

2.2      Metodo di lavoro
La necessità di sviluppare progetti particolarmente complessi che si unisce all’esigen-
za di mantenere una certa flessibilità e trasparenza, ha portato l’azienda ad adottare
un ciclo di sviluppo del software di tipo agileG , rispetto a metodi di managementG
più tradizionali incentrati sui processi di sviluppo ma non reattivi ai cambiamenti.
Questi, infatti, causerebbero una maggior dispersione di risorse, soprattutto nel
caso di una forte interazione con il cliente. La filosofia dello sviluppo agile si basa
su quattro pilastri fondamentali che la caratterizzano. Essi sono:
   • gli individui e le interazioni sono più importanti dei processi e degli strumenti;
   • è più importante avere del software funzionante rispetto ad avere una docu-
     mentazione esaustiva;
   • è più importante la collaborazione col cliente del rispetto dei contratti;
   • bisogna essere pronti a rispondere ai cambiamenti oltre che aderire alla
     pianificazione.
   Questi principi sono ampiamente condivisi dalla compagine aziendale, la quale
basa lo sviluppo dei propri prodotti sulla continua interazione con gli stakeholderG
e con i clienti.
6                                                      CAPITOLO 2. L’AZIENDA

2.2.1     Scrum
L’azienda, in particolare, utilizza il metodo ScrumG che, oltre ad essere uno dei
sistemi più diffusi, è particolarmente adatto a progetti complessi ed innovativi. Lo
Scrum prevede un modello di sviluppo iterativo nel quale ogni ciclo viene definito
sprint: esso è un periodo di tempo, solitamente di durata compresa tra 1 a 4
settimane, nel quale viene prefissata una lista di requisiti e funzionalità che devono
essere implementate in tale periodo. Questa lista di funzionalità e requisiti viene
definita prima in una Product BacklogG , documento che contiene tutti i requisiti
necessari per la realizzazione del progetto, e poi, periodicamente, in una Sprint
BacklogG , documento nel quale vengono definiti tutti i task da completare nei singoli
sprint.

          figure 2.4: Diagramma di funzionamento del metodo agile Scrum

L’azienda prevede sprint di due settimane e la fine di ognuno di essi coincide con
una release del software. Per gestire al meglio sprint e backlog di ogni progetto
vengono eseguite delle riunioni periodiche di diverse tipologie:

    • Sprint Planning: riunione che precede l’inizio del progetto in cui si stila la
      Product Backlog e si determina il numero e la durata degli sprint in base al
      tempo a disposizione e agli obiettivi. Viene inoltre definita la Sprint Backlog
      per il primo sprint;

    • Daily Scrum: breve confronto giornaliero che permette di sincronizzare i
      lavoro di tutto il team e di affrontare tempestivamente i problemi riscontrati;

    • Sprint Review: revisione al termine di ogni sprint che serve a valutare se gli
      obiettivi prefissati sono stati completati in modo esaustivo o se è necessario
      modificare la pianificazione del lavoro per lo sprint successivo;

2.2.2     Strumenti utilizzati
Zextras S.r.l. utilizza la suiteG Atlassian, composta da una serie di prodotti atti
al miglioramento dello sviluppo del software, della gestione dei progetti e della
collaborazione all’interno del team di lavoro.
2.2. METODO DI LAVORO                                                                 7

2.2.2.1    Bitbucket Cloud
Per il versionamentoG del software viene utilizzato BitBucket Cloud, un servizio di
cloud-hostingG per repositoryG GitG e per il controllo delle versioni. Permette di
eseguire tutte le operazioni di base di Git (è un servizio simile a GitHubG ) ed in più
consente un pieno controllo all’accesso in lettura e scrittura del codice. BitBucket
Cloud ha il vantaggio di consentire una gestione semplificata in quanto non è
necessario avere dei server locali nei quali installare Bitbucket server e mantenere
i propri repository. Inoltre permette l’integrazione con altri strumenti sviluppati
dall’azienda Atlassian, tra i quali Jira e Confluence.

                    figure 2.5: Logo del servizio Bitbucket Cloud

2.2.2.2    Jira
Jira è un prodotto di issue-trackingG che fornisce funzionalità quali tracciamento dei
bugG , rilevamento dei problemi e gestione di progetti. Questo software permettere
di scegliere il tipo di ciclo di sviluppo con cui si preferisce gestire il progetto: nel
caso dell’azienda Zextras si adatta perfettamente alla metodologia di lavoro scelta e
al sistema ScrumG , in quanto permette di gestire al meglio gli sprintG e le relative
backlogG .

                  figure 2.6: Logo del servizio di issue-tracking Jira

2.2.2.3    Confluence
Confluence è un software di collaborazione per la creazione di documenti che
permette di creare, organizzare e lavorare su materiale condiviso. Permette di
centralizzare le informazioni, tenere traccia di ogni modifica e, inoltre, supporta
una gestione granulare dei permessi di accesso ad ogni singolo file.

        figure 2.7: Logo del software per la gestione dei documenti Confluence

2.2.2.3.1 Jenkins Jenkins è uno strumento open sourceG per la continuous
integrationG e deploymentG . Con esso è possibile configurare uno o più lavori dove
ognuno di essi è composto da vari passaggi da svolgere per ottenere una buildG
corretta e funzionante del progetto che ci interessa. Inoltre terrà traccia tramite
una cronologia dell’andamento delle build, salverà l’output della console e quanti
successi/fallimenti ci sono stati, oltre a notificare, tramite email allo sviluppatore,
cosa è successo.
8                                                      CAPITOLO 2. L’AZIENDA

          figure 2.8: Logo del strumento per la continuous integration Jenkins

2.2.2.4    SourceTree
SourceTree è un’applicazione utilizzata per gestire GitG in modo facile e rapido e
che fornisce un’interfaccia grafica semplice e intuitiva. Il software è completamente
gratuito e integra perfettamente con le piattaforme di Git più utilizzate, come
BitBucket.

                     figure 2.9: Logo dell’applicazione SourceTree
CAPITOLO      3
Organizzazione del progetto

3.1      Motivo del progetto
Team, l’applicazione in cui è stato integrato il lavoro implementato durante lo
stage, si appoggia al software Chat, modulo sviluppato da Zextras disponibile
come zimletG su Zimbra, che richiede l’installazione di Zextras core. L’obbiettivo
dell’azienda è di ottenere al termine dello stage un prototipo dell’applicazione di
messaggistica con le stesse funzionalità dell’applicazione web:

   • verificare l’effettiva utilità del progetto;

   • studiare le migliori soluzioni progettuali per sviluppare un’applicazione mobile
     in linguaggio nativo, ambito non ancora affrontato dall’azienda;

   • validare le tecnologie proposte e, in caso, proporre nuove libreria da integrare
     per lo sviluppo;

   • ampliare e/o modificare le proprie User Experience (UX) guidelinesG in base
     alle differenze tra dispositivi mobile e desktop.

3.2      Piano di lavoro
Il progetto di stage proposto dall’azienda prevede un lavoro di 312 ore, così suddivise:

   • Formazione (40h): introduzione a Zimbra, Zextras, agli strumenti e alle
     procedure aziendali; inoltre viene dedicato del tempo alla formazione indivi-
     duale sulle tecnologie da utilizzare per lo sviluppo di applicazioni mobile in
     linguaggio nativo;

   • Progettazione UX (40h): studio delle guidelinesG fornite dal team di designer
     e applicazione di esse;

   • Progettazione architetturale (40h): progettazione dell’architettura client/-
     server necessaria per l’implementazione dell’applicazione seguendo le bozze
     dell’UX;

                                           9
10                        CAPITOLO 3. ORGANIZZAZIONE DEL PROGETTO

     • Implementazione (192): sviluppo di piccole applicazioni per apprendere il
       linguaggio Swift ed entrate in confidenza con i diversi strumenti da utilizzare;
       maggiore attenzione e impegno vengono riservati per lo sviluppo del controllerG
       da integrare nell’applicazione con lo scopo di aumentare e migliore le sue
       funzionalità.

3.3       Pianificazione del progetto
Dopo un primo periodo di formazione, viene pianificato in maggior dettaglio il
lavoro da svolgere. Le otto settimane di stage sono quindi suddivise in quattro sprint
di due settimane ognuno, riuscendo così a sincronizzare lo sviluppo dell’applicazione
con gli sprintG degli altri progetti seguiti dall’azienda. Al fine di seguire il metodo
lavorativo aziendale, viene associata una versione di releaseG del prototipo per
ognuno dei quattro sprint decisi.
   I quattro sprint sono stati così suddivisi:

        Sprint               Inizio                Fine                Release
            I               06/05/19             17/05/19                S1
           II               20/05/19             31/05/19                S2
          III               03/06/19             14/06/19               Beta
          IV                17/06/19             28/06/19              Release
                    table 3.1: Organizzazione del progetto in sprint
CAPITOLO      4
Tecnologie utilizzate

4.1      xCode
xCode è un ambiente di sviluppo integrato sviluppato da Apple per agevolare lo
sviluppo di software per Mac OS X. L’azienda ha scelto di utilizzare questo IDEG in
quanto lavora in congiunzione con Interface Builder, un toolG grafico che permette
di realizzare interfacce grafiche più velocemente e di gestirle in modo più semplice.
Inoltre è possibile espandere le capacità di questo IDE tramite l’installazione di
pluginG e offre l’integrazione con molteplici linguaggi di programmazione, tra cui
Swift.

                          figure 4.1: Logo dell’IDE xCode

4.2      Swift
Swift è un linguaggio di programmazione conciso, tipizzatoG , efficiente e facile da
imparare sviluppato da Apple e rilasciato nel 2014. Esso incorpora le caratteristiche
e funzionalità, ad esempio gli Optionals e le collezioni, appartenenti a vari linguaggi
di programmazione moderni, come C#, JavaScript, Python, Rust e Go. Rispetto
ad Objective-C,il suo predecessore, il codice risulta più conciso e leggibile, modifi-
candone la sintassi. È stato introdotto il concetto di type inference grazie al quale
non è necessario specificare esplicitamente il tipo di variabili e costanti se questo
può essere determinato dal contesto. Non è più necessario avere un header fileG
ed un implementation fileG separato per ogni classe, ma la definizione di queste
avviene in un unico file. Sebbene Swift non abbia ancora rimpiazzato del tutto
Objective-C, ne è stata preferita l’adozione poiché è un linguaggio più recente e
sul quale Apple stessa sta puntando molto. Inoltre si è deciso di utilizzare un

                                          11
12                                   CAPITOLO 4. TECNOLOGIE UTILIZZATE

linguaggio nativo per lo sviluppo dell’applicazione a causa dei precedenti risultati
non soddisfacenti ottenuti dall’azienda nel implementare questo tipo di applicazioni
sfruttando frameworkG cross-platformG .

               figure 4.2: Logo del linguaggio di programmazione Swift

4.3      Realm Database
Realm è un sistema open sourceG utilizzato per la gestione di un database. Esso
offre, tra le funzionalità di base, le operazioni CRUDG e la trasformazione di oggetti
del database in oggetti Swift in modo automatico. L’applicazione utilizza questa
libreria per la creazione e la gestione del database locale nel quale salvare gli utenti,
i messaggi e le conversazioni. L’azienda ha deciso di utilizzare Realm in quanto i
risultati delle query sono delle viste locali al threadG di esecuzione della versione
del database al momento della richiesta. Tale viste vengono aggiornate in modo
automatico ogni qual volta una transazione del database viene conclusa, indipen-
dentemente dal thread in cui viene eseguita, e, in questo modo, lo sviluppatore non
deve preoccuparsi di eventuali conflitti di accesso ai dati del database.

                        figure 4.3: Logo del framework Realm

4.4      SVProgressHUD
SVProgressHUD è una libreria per mostrare e gestire in modo semplice e altamente
personalizzabile un elemento grafico che indica l’attesa della risposta di una certa
attività. All’interno del progetto viene utilizzata, ad esempio, nel momento in
cui l’utente fa la richiesta di modifica del topicG di un gruppo oppure quando
aggiorna l’immagine della chat. Si è scelto di utilizzare questa libreria poiché la
sua personalizzazione si adattava alle UX guidelinesG definite per l’applicazione.

          figure 4.4: Esempio di progress bar costruita con SVProgressHUD
4.5. ALAMOFIRE                                                                      13

4.5      Alamofire
Alamofire è la libreria divenuta ormai standard de facto per quanto riguarda il
networkingG in Swift, fornendo in modo semplificato una serie di funzionalità per
accedere allo stackG di networking definito dai prodotti Apple. Tra le funzionalità
base troviamo la possibilità di concatenare tra loro metodi di richiesta e risposta,
la serializzazione automatica dei parametri e delle risposte in formato JSON e
metodi di utilità per l’autenticazione. Poiché in questo modo semplifica il lavoro del
programmatore, all’interno del progetto tutte le richieste alla rete vengono gestite
utilizzando questa libreria.

           figure 4.5: Logo della libreria Swift per il networking Alamofire

4.6      Alamofire Image
Alamofire Image è una libreria Swift, estensione della libreria Alamofire, che
semplifica la gestione e il download delle immagini. Il principale utilizzo di questo
software è il cachingG di immagini. All’interno del progetto viene utilizzata per
gestire le immagini di profilo di tutti gli utenti e dei diversi gruppi.

4.7      SwiftyJSON
SwiftyJSON è una libreria che semplifica la deserializzazioneG di oggetti JSON
in Swift, permettendo di disporre in serie vari tipi di oggetti come stringhe, array
e dizionari a partire da oggetti in formato JSON, oltre che fornire un insieme di
metodi utili per la modifica e la visita di JSONObject. Tra le funzionalità più
avanzate permette di creare metodi personalizzati per la deserializzazione di JSON
direttamente in classi Swift. L’utilizzo di questa libreria ha facilitato la gestione
dei JSON dati come risposta dalle chiamate API.

4.8      WebSocket
WebSocket è un protocolloG di messaggistica per la comunicazione bidirezionale su
connessioni TCPG . Una connessione di questo tipo nasce in modo molto simile a
una richiesta HTTPG , nella quale viene specificato dal clientG che si vuole utilizzare
questo tipo di protocollo. Sfruttando questo tipo di tecnologia si hanno risulti
più performanti rispetto ad altre soluzioni come il pollingG . Inoltre richiedono
meno banda poichè i messaggi di questo tipo non hanno necessità di alcun tipo di
14                                   CAPITOLO 4. TECNOLOGIE UTILIZZATE

intestazione, semplificando inoltre il loro utilizzo. Questo protocollo è utilizzato per
la comunicazione tra l’applicazione e il server di Zextras.

4.9      Firebase Cloud Messaging
Firebase Cloud Messaging(FCM) è un servizio sviluppato da Google che permette
di salvare e sincronizzare i dati elaborati da applicazioni web e mobile. L’azienda
ha deciso di integrarlo nel progetto poiché è in grado di aggiornare i dati istantanea-
mente e i dati immagazzinati sono replicati e sottoposti a backupG continuamente
rendendo l’applicazione sicura.
La chat utilizza sia WebSocket che FCM per la comunicazione tra applicazione
e server poiché essa ha prestazioni migliori ma non è disponibile in tutti i Paesi
mentre WebSocket lo è e questa dualità rende il software disponibile ovunque.

               figure 4.6: Logo del servizio Firebase Cloud Messaging
CAPITOLO       5
Analisi dei requisiti

5.1       Attori
La parte di progettazione prevista dallo stage inizia con lo studio e l’analisi dei
requisiti. Questa attività ha lo scopo di individuare quali sono gli attori coinvolti e
come essi partecipano all’interno dello scenario studiato.

5.1.1     Attori primari
L’analisi dei requisiti ha evidenziato due tipologie di attori primari: l’utente non
autenticato e l’utente autenticato.

5.1.1.1   Utente non autenticato
Con utente non autenticato si definisce un utente in possesso di credenziali per
accedere a Zimbra. Ciò vuol dire che si può accedere all’applicazione solamente se
si è in possesso di un’email e una password registrate nel server Zimbra.

5.1.1.2   Utente autenticato
Con utente autenticato si indica l’utente che, attraverso l’inserimento di email
e password, ha eseguito l’acceso a Team e può usufruire delle varie funzionalità
dell’applicazione.

5.1.2     Attori secondari
Il sistema prevede solamente un attore secondario che è il server Zimbra.

5.1.2.1   Server Zimbra
Un server Zimbra è un’istanziazione della suiteG di prodotti Zimbra al quale è
stata aggiunta la suite Zextras. Tramite esso è possibile accedere a tutti i dati del
profilo Zimbra così da mantenerli sincronizzati tra i vari dispositivi in cui l’utente è
autenticato.

                                          15
16                                       CAPITOLO 5. ANALISI DEI REQUISITI

5.2      Casi d’uso principali
Considerando lo scopo del progetto di stage e il metodo di lavoro utilizzato, i casi
d’uso e i requisiti, una volta definiti, sono rimasti pressoché immutati durante tutto
l’arco del progetto. Per l’identificazione dei requisiti funzionali sono stati delineati i
casi d’uso principali tramite le richieste dell’azienda e quelli di alto livello, in modo
da poter dare un quadro generale più chiaro del prodotto sviluppato. Il diagramma
seguente rappresenta il diagramma dei casi d’uso principali.

                         figure 5.1: Diagramma dei casi d’uso
5.3. REQUISITI                                                                          17

5.3     Requisiti
Ogni requisito è identificato da un codice che è così strutturato:
                  R{importanza}{tipo}{numero_vincolo}

   • "R" è prefisso di tutti i codici dei requisiti;

   • il primo valore rappresenta l’importanza: 0 se il requisito è obbligatorio, 1 se
     è desiderabile, 2 per gli opzionali;

   • il terzo valore indica il tipo: F per i requisiti funzionali, Q per quelli di qualità,
     P se prestazionale, V se di vincolo;

   • l’ultimo numero indica il numero del vincolo. La struttura numerica di
     quest’ultimo rispetta le stesse regole dei Casi D’Uso.

5.3.1    Principali requisiti funzionali

  Requisito      Descrizione
                 L’utente autenticato deve poter accedere al dettaglio della chat di
      R0F1
                 gruppo a cui sta partecipando.
      R0F2       L’utente autenticato deve poter modificare l’immagine del gruppo.
                 L’utente autenticato deve poter visualizzare un messaggio di errore
    R0F2.1
                 nel caso in cui il formato dell’immagine inserita sia errato.
      R0F3       L’utente autenticato deve poter modificare il topic del gruppo.
                 L’utente autenticato deve poter visualizzare un messaggio di errore
    R0F3.1
                 nel caso in cui sia inserito un topic troppo lungo.
                 L’utente autenticato deve poter abilitare e disabilitare le notifiche
      R1F4
                 del gruppo.
                 L’utente autenticato deve poter aggiungere un nuovo membro al
      R0F5
                 gruppo.
                 L’utente autenticato deve poter consultare la lista di tutti gli utenti
      R0F6
                 Zimbra.
                 L’utente autenticato deve poter selezionare più utenti da aggiungere
      R0F7
                 al gruppo.
      R0F8       L’utente autenticato deve poter abbandonare il gruppo.
                 L’utente autenticato deve poter consultare la lista dei partecipanti
      R0F9
                 alla chat.
                 L’utente autenticato deve poter visualizzare nella lista il nome di
    R0F9.1
                 ogni partecipante alla chat.
                 L’utente autenticato deve poter visualizzare nella lista lo status di
    R0F9.2
                 ogni partecipante alla chat.
                 L’utente autenticato deve poter visualizzare nella lista l’immagine
    R0F9.3
                 profilo di ogni partecipante alla chat.
                 L’utente autenticato deve poter visualizzare la chat privata del
      R0F10      membro del gruppo selezionato dalla lista dei partecipanti alla
                 chat.
18                                     CAPITOLO 5. ANALISI DEI REQUISITI

                 L’utente autenticato deve poter tornare al dettaglio della chat
      R0F11      uscendo dalla conversazione privata con il membro del gruppo
                 selezionato dalla lista dei partecipanti alla chat.
                 L’utente autenticato deve poter visualizzare la lista di media
      R2F12
                 condivisi nella conversazione di gruppo.
                 L’utente deve poter visualizzare in dettaglio il media selezionato
      R2F13
                 dalla lista.
                 L’utente autenticato deve poter visualizzare la lista dei link
      R2F14
                 condivisi nella conversazione.
                 L’utente autenticato deve poter visualizzare in dettaglio il link
      R2F15
                 selezionato dalla lista.
                           table 5.1: Requisiti funzionali

5.3.2     Requisiti di vincolo

     Requisito                             Descrizione
                  L’applicazione deve essere sviluppa con linguaggio nativo Swift,
       R0V1
                                             versione 5.
                   L’applicazione deve essere supportata da modello iPhone5 o
       R0V2
                                             superiore.
                  L’applicazione deve essere supportata da modelli di iPhone con
       R0V3
                     versione del sistema operativo maggiore uguale a iOS 10.
                    L’implementazione dell’interfaccia grafica deve utilizzare lo
       R0V4
                                     strumento di Auto Layout.
                           table 5.2: Requisiti di vincolo

5.3.3     Requisiti di qualità

     Requisito                               Descrizione
                 L’applicazione deve aggiornare i dati in tutti i dispositivi in cui è
       R0Q1
                                               installata.
                 L’interfaccia grafica dell’applicazione deve seguire quanto indicato
       R0Q2
                             dai documenti contenenti le UX guidelines.
                 La documentazione riguardante lo sviluppo dell’applicazione deve
       R0Q3
                               essere sempre aggiornata e disponibile.
                  L’applicazione mobile deve contenere le stesse funzionalità della
       R0Q4
                              corrispettiva applicazione web Teamwork.
                           table 5.3: Requisiti di qualità
CAPITOLO      6
Sviluppo

La codifica della parte di applicazione assegnatami per lo stage è stata preceduta
dall’attività di studio e comprensione dell’architettura generale di Team. Quest’ul-
tima è una applicazione di messaggistica istantanea pensata come integrazione
alla già presente suite di prodotti Zextras, con lo scopo di poter fornire le stesse
funzionalità dell’ambiente desktop in ambiente mobile. La sua progettazione ha
avuto inizio ad aprile da parte del team dedicato ed è stato necessario comprendere
la struttura del progetto e di quanto implementato per poter procedere con il lavoro
dello stage.

6.1      Gestione delle API
L’applicazione prevede l’utilizzo di tre canali per la comunicazione con il server,
ovvero: HTTPG , WebSocket and Firebase Cloud Messaging.

6.1.1     HTTP
Il protocolloG HTTP (HyperText Transfer Protocol) è un protocollo a livello appli-
cativo usato per la trasmissione di informazioni sul web in una tipica architetturaG
client-server. Questo protocollo è utilizzato nel contesto dell’applicazione per quasi
tutti i comandi del client e ogni richiesta viene autenticata attraverso un cookieG
standard. La trasmissione dei dati avviene mediante il sistema RESTG (Repre-
sentational State Transfer) che, a differenza di SOAPG , non aggiunge ulteriori
livelli per la trasmissione. Infatti le chiamate al server prevedono l’utilizzo di una
struttura ben definita degli UrlG , così da identificare in modo univoco una risorsa.
Quest’ultima restituita in risposta attraverso l’utilizzo dei metodi specifici, come
GET per il recupero dell’informazione e POST per la sua modifica.

                                         19
20                                                        CAPITOLO 6. SVILUPPO

figure 6.1: Scambio di informazioni tra server e client utilizzando JSON e il protocollo
            HTTP

6.1.2     WebSocket

Come avviene per l’applicazione web, il canale per le notifiche è implementato
sfruttando i WebSocket, in modo tale da notificare il clientG ogni qualvolta sia
necessario, evitando sprechi di batteria. Ogni connessione WebSocket inizia la
sua vita come una richiesta HTTPG . Tale richiesta è molto simile a tutte le altre
richieste salvo che nell’intestazione viene specificata un operazione di tipo Upgrade
che indica che il client vuole aggiornare la connessione ad un protocollo diverso,
in questo caso a WebSocket. Ad aggiornamento avvenuto si ha una connessione
di tipo WebSocket tra client e server: tale connessione riutilizza il canale creato
durante la fase iniziale tra le due e può essere utilizzato per le comunicazioni in
entrambe le direzioni.
    L’operazione di Upgrade viene così eseguita: il server applica un’operazione nota
(sia al cliente che al server) al valore della chiave Sec–WebSocket–Key presente nel-
l’header della chiamata per generare il valore della Sec–WebSocket–Accept . Il client
fa la stessa operazione sempre sul valore della stessa chiave Sec–WebSocket–Key, e,
se il valore ricevuto dal server coincide con il valore calcolato dal client la connessio-
ne può considerarsi come stabilita con successo e client e server possono cominciare
a comunicare.
6.1. GESTIONE DELLE API                                                              21

     figure 6.2: Scambio di informazioni tra client e server mediante WebSocket

6.1.3     Firebase Cloud Messaging

Diversamente dall’applicazione web, l’applicazione mobile utilizza anche Firebase
Cloud Messaging (FCM) per gestire l’invio e l’accodamento dei messaggi tra il
clientG e il server. Quando un messaggio è inviato dal server al client, il server invia
il messaggio a un server Google per le connessioni FCM. Quest’ultimo provvederà ad
inoltrare il messaggio al client quando l’applicazione è in esecuzione. Dal momento
che l’applicazione client può non essere sempre in esecuzione o connessa, il server
per le connessioni FCM accodano e salvano i messaggi prima di inoltrarli, in modo
tale che possano essere inviati quando l’applicazione client è raggiungibile. In
modo speculare questo avviene per i messaggi inviati dal client al server quando
quest’ultimo non è disponibile. Per questa ragione, a FCM non vengono affidate
notifiche di eventi in cui il tempo è un fattore determinante, come notificare se un
utente è online oppure offline, e quindi viene utilizzato insieme a WebSocket.
22                                                     CAPITOLO 6. SVILUPPO

               figure 6.3: Funzionamento di Firebase Cloud Messaging

6.2       Codifica del controller
La progettazione di User Experience (UX) e di User Interface (UI) viene fatta dal
team di designer che mette a disposizione dei programmatori le linee guida da
adottare per creare la grafica dell’applicazione, definendo quali elementi devono
essere presenti e in che modo devono essere rappresentati.
Lo scopo è quello di migliorare l’esperienza utente, fornendogli nel modo più semplice
e intuitivo ciò che gli serve. Inoltre è importante trovare il giusto accostamento
di forme e colori, oltre a posizionare bene le call to action, ovvero quei bottoni
che se selezionati portano l’utente in una nuova vista. Quindi grazie a una buona
progettazione è possibile guidare l’utente all’interno delle viewG , indicandogli con
chiarezza e precisione dove può trovare ciò che cerca esclusivamente attraverso
l’interfaccia.
Il materiale che viene fornito dai grafici è reperibile sulla piattaforma Confluence
nella sezione dedicata e i file principalmente usati sono i seguenti:

     • UX/UI Mockup Mobile;

     • ColorsPalette for Group.
6.2. CODIFICA DEL CONTROLLER                             23

6.2.1   UX/UI Mockup Mobile

             figure 6.4: Documento UX/UI Mockup Mobile
24                                                                     CAPITOLO 6. SVILUPPO

Con questo documento vengono rappresentate tutte le schermate che è possibile
trovare all’interno dell’applicazione e il flusso che deriva da ciascuna di esse. Si
inizia dalla schermata di login e, in seguito all’autenticazione, viene presentata
la viewG con la lista delle proprie conversazioni. Da qui hanno origine tre flowG
distinti: avviare una nuova conversazione, entrare in una delle conversazioni già
presenti ed entrare nell’area "impostazioni". Se l’utente sceglie di iniziare una
nuova conversazione, può scegliere se crearla singola o di gruppo. Nel caso della
conversazione singola, si seleziona la persona con cui si desidera comunicare e infine
si apre la chat con cui si può iniziare lo scambio di messaggi. Nel caso, invece, della
conversazione di gruppo, compare anche in questo caso la lista di tutti gli utenti in
cui si possono selezionare al massimo 10 membri e successivamente viene chiesto
di inserire immagine e topicG del gruppo. Premendo su "crea", viene istanziata la
conversazione e si può iniziare lo scambio di messaggi. Inoltre, sia da chat singole
che di gruppo, si può accedere al dettaglio della conversazione.
Se, invece, l’utente seleziona direttamente una conversazione dalla lista, si accede
ad una chat precedentemente avviata in cui vengono mostrati tutti i messaggi che
si sono scambiati. Anche in questo caso si può accedere al relativo dettaglio.
Infine, se l’utente sceglie di accedere alle impostazioni, può entrare nella view con il
dettaglio del proprio profilo, impostare le preferenze delle notifiche, entrare nella
sezione delle licenze che utilizza l’applicazione, visionare le informazioni relative
all’applicazione e infine procedere con il logout da Team.

6.2.2     ColorsPalette for Group

                                    #EF9A9A   RGB   rgb(239,154,154)

                                    #F48FB1   RGB   rgb(244,143,177)

                                    #CE93D8   RGB   rgb(206,147,216)

                                    #B39DDB   RGB   rgb(179,157,219)

                                    #9FA8DA   RGB   rgb(159,168,218)

                                    #90CAF9   RGB   rgb(144,202,249)

                                    #81D4FA   RGB   rgb(129,212,250)

                                    #80DEEA   RGB   rgb(128,222,234)

                                    #80CBC4   RGB   rgb(128,203,196)

                                    #A5D6A7   RGB   rgb(165,214,167)

                                    #C5E1A5   RGB   rgb(197,225,165)

                                    #E6EE9C   RGB   rgb(230,238,156)

                                    #FFE082   RGB   rgb(255,224,130)

                                    #FFCC80   RGB   rgb(255,204,128)

                                    #FFAB91   RGB   rgb(255,171,145)

                                                    1

                   figure 6.5: Documento ColorsPalette for Group
6.2. CODIFICA DEL CONTROLLER                                                           25

Questo documento elenca i colori che l’applicazione deve adottare per generare
l’avatarG degli utenti e dei gruppi sprovvisti di immagine, oltre che assegnarli
all’interno della chat ai diversi membri di un gruppo per facilitare la distinzione
dei messaggi appartenenti ad utenti diversi. Ogni colore viene rappresentato nella
tabella con una raffigurazione visiva e le sue relative codifiche in formato esadecimale
e RGBG .

6.2.3     Interface builder
xCode, l’IDEG scelto per implementare questo progetto, offre la possibilità di
costruire le interfacce grafiche attraverso l’uso di un interface builderG che facili-
tà al programmatore il compito di comporre e collegare le viewG relative a una
storyboard. Le view sono gli elementi che rappresentano una specifica schermata
dell’applicazione, come, per esempio, il dettaglio di una conversazione. Con story-
board, letteralmente "tavola della storia", si intende l’insieme di viste che definisce
un flusso di azione dell’applicazione. Nel caso specifico del lavoro svolto durante
lo stage, lo storyboard utilizzato è stato il "Conversation.storyboard" in cui sono
presenti diverse view: partendo dalla vista della conversazione, collegata al relativo
dettaglio di chat, fino alla schermata con la lista di utenti da poter aggiungere alla
conversazione.
Una delle funzionalità principali dell’interface builder è la gestione delle constraintG ,
ovvero dei vincoli a cui sono legati gli elementi grafici. Questi vincoli sono necessari
affinché gli elementi grafici mantengano la stessa disposizione e le stesse propor-
zioni indipendentemente dalla grandezza dello schermo del dispositivo in cui viene
installata l’applicazione e dall’orientamento in cui esso viene utilizzato.
26                                                       CAPITOLO 6. SVILUPPO

6.2.4     Struttura dell’applicazione
L’applicazione segue il patternG Model-View-Controller (MVC). Infatti per quanto
riguarda la business logicG , i dati necessari al funzionamento dell’applicativo vengo-
no recuperati dai server utilizzando WebSocket e/o Firebase e vengono memorizzati
all’interno di un database locale al dispositivo mobile. Per questo viene utilizzato
Realm (aggiungere riferimento) che grazie alla sua gestione automatica dei conflitti
che potrebbero nascere dalla modifica concorrente dei dati, semplifica il lavoro al
programmatore.
La View è costruita seguendo le linee guida fornite dagli UX/UI designer prima
di procede all’implementazione della logica del Controller. Essa rappresenta il
dettaglio della chat di gruppo che prevede l’utilizzo di una tabella con tre sezioni:
informazioni, impostazioni e partecipanti del gruppo. Le prime due sezioni sono
statiche, ovvero è fisso il numero di celle che le compongono, mentre la terza e ultima
sezione è dinamica, quindi il numero di celle cresce e/o diminuisce dinamicamente
in base al numero di partecipanti. Inoltre ogni cella è collegata ad una azione,
se questa la prevede: premendo la cella in cui compare il nome del gruppo viene
mostrato una finestra per modificarne il topic, cliccando su "Invita partecipanti"
si accede alla viewG con la lista di tutti gli utenti presenti in Team che si possono
aggiungere alla conversazione, con la cella con scritto "Abbandona il gruppo" si
può compiere l’omonima azione mentre selezionando uno dei membri della lista dei
partecipanti è possibile aprire la conversazione privata con quell’utente.
Infine il Controller si occupa di legare i dati della business logic con la loro rappre-
sentazione visiva. In particolare, questa componente dell’architettura ha il compito,
come citato prima, di recuperare i dati dal server, oltre che elaborarli e aggiornarli
in seguito a interazioni dell’utente con l’interfaccia grafica.
CAPITOLO      7
Verifica e Validazione

La parte conclusiva dello stage si è focalizzata sull’implementazione dei test au-
tomatici e, in parte, dei test manuali. La loro esecuzione, dando esito positivo, è
stata fondamentale per garantire il soddisfacimento dei requisiti concordati con
l’azienda oltre che alla correttezza del codice.

7.1      Unit Test
Gli unit test sono una parte dei test automatici che sono stati implementati e il
loro scopo è testare una singola componente del programma. Per creare dei test di
unità che siano indipendenti dalla connessione al server e dal loro stato, sono stati
implementati degli StubG che riproduco le risposte del server che si vogliono ottenere
nell’esecuzione di un determinato test. In questo modo è possibile concentrarsi
solamente nella porzione di codice scritta tralasciando gli errori che potrebbero
derivare da fattori esterni.
Gli unit test da me implementati hanno lo scopo di controllare che la manipolazione
e il salvataggio dei dati in locale avvenga nella maniera attesa, sia nel caso in cui i
dati siano corretti sia nel caso in cui l’inserimento non vada a buon fine. Inoltre vi
sono anche degli unit test che certificano le richieste che vengono fatte al server e
anche in questo caso, viene testano sia il successo che il fallimento della chiamata
all’APIG .

7.2      UI Test
Gli UI Test (User Interface Test) identifica i test che vengono eseguiti utilizzando
direttamente l’interfaccia grafica per verificare che non vi siano difetti nell’applica-
zione. Esistono diversi approcci per implementarli ed eseguirli, come ad esempio
l’approccio manuale e l’approccio "cattura e ripeti".
L’approccio manuale consiste nell’eseguire a mano di ogni singolo test e questo
comporta molti svantaggi: data la necessità dell’intervento di un operato umano,
si ha un maggiore impiego di tempo e una maggiore probabilità di errore rispetto
all’esecuzione di un test automatico.
L’approccio capture & replay prevede la cattura delle azioni che vengono fatte

                                          27
28                                   CAPITOLO 7. VERIFICA E VALIDAZIONE

dal tester e le codifica in istruzioni da eseguire. In questo modo è possibile poter
replicare la stessa sequenza di azioni ogni qualvolta che viene eseguito il test.
Gli UI test da me implementati, che seguono quest’ultimo approccio, hanno lo
scopo di testare la corretta sequenza di azioni e componenti utilizzate per eseguire
un determinato flowG . Ogni flow ha partenza dalla schermata di login che appare
quando viene installata l’applicazione per la prima volta e termina in una delle
successive schermate. In tal modo è possibile verificare in modo automatico il
raggiungimento di ogni vista eseguendo i passi corretti.

7.3      Test manuali
Infine ho eseguito una parte di test manuali per verificare la corretta impostazione
delle constraintG e il relativo autolayoutG . Per fare ciò ho utilizzato il simulatore
messo a disposizione da xCode che permette di eseguire l’applicazione su diversi
dispositivi. I dispositivi testati sono:
     • iPhone 5s;
     • iPhone 6;
     • iPhone 7;
     • iPhone 8 Plus;
     • iPhone X;
     • iPhone XS Max.
   Si è scelto di testare solo questi dispositivi mobili poiché offrono una gamma di
diverse dimensioni dello schermo sufficientemente ampia da ricoprire una grande
porzione dei smartphone attualmente in commercio.

7.4      Beta test
Con il rilascio della beta, inizia la fase di beta testing interno in cui l’applicazione è
stata rilasciata all’interno dell’azienda. Ciò è possibile utilizzando il software Test
Flight.

7.4.1     Test Flight
TestFlight è una piattaforma utilizzata per testare applicazioni non ancora presenti
nello storeG ufficiale, usufruibile da chiunque sia stato invitato a provare la beta.
Tramite questo programma si ha la possibilità di distribuire l’applicazione fino ad
un massimo di 25 persone. Grazie ai beta tester, gli sviluppatori riceveranno dati
concernenti lo stato dell’applicazione in funzione, insieme agli errori e i warningG
emersi, così da avere una overviewG generale del funzionamento dell’applicazione
su altri device. Inoltre i betaG tester possono inviare segnalazione e suggerimenti.
Dopo questa prima fase di testing interno, si procedere ad un testing esterno
arrivando successivamente a pubblicare l’applicazione nell’Apple Store.
CAPITOLO       8
Conclusioni

8.1      Valutazioni del prodotto finale

Il lavoro svolto durante il periodo di stage soddisfa a pieno tutti i requisiti definiti
dall’azienda nel piano di lavoro e si integra senza alcun problema con quanto
già implementato, sia del punto di vista grafico che da quello delle funzionalità
offerte. Gli elementi presenti nel dettaglio della chat di gruppo sono sufficienti
per un uso piacevole dell’applicazione, anche se non sono ancora presenti degli
elementi tra quelli definiti dai requisiti complessivi di Team, ovvero lo switch per
attivare e disabilitare le notifiche per la chat e gli share di immagini e link. Tale
mancanza è dovuta alle criticità riscontrate dal team back end nel strutturare le
adeguate chiamate API. Per questo motivo, il rilascio degli share, come quello
dell’impostazione delle notifiche, è previsto per la prossima release.
    Il team mobile è riuscito a progettare un’applicazione che possa essere usufruibile
e utile agli utenti della suite Zextras, andando a colmare un vuoto che è presente
nell’ambito della comunicazione tramite dispositivi mobili.
    Il team di UX/UI ha saputo definire un’interfaccia grafica che semplifica l’utilizzo
dell’applicazione, rispettando le linee guida utilizzate dalle app di messaggistica
mobile più famose, come WhatsApp e Telegram. Ciò permette di fornire all’utente
finale un’esperienza di utilizzo più piacevole e uniforme, oltre che semplificare
il mio lavoro di sviluppo, in quanto sono abituata ad utilizzare le piattaforme
precedentemente citate e quindi consapevole delle funzionalità offerte.
    Il prodotto, alla fine del mio stage, è ancora alla versione betaG : le funzionalità
di base sono infatti già implementate, ma il rilascio interno all’azienda ha fatto
emergere delle problematiche che non erano state evidenziate dal team mobile nella
fase di testing.

                                          29
Puoi anche leggere