Università degli Studi di Padova

Pagina creata da Pietro Paoletti
 
CONTINUA A LEGGERE
Università degli Studi di Padova
Università degli Studi di Padova
 Dipartimento di Matematica "Tullio Levi-Civita"
               Corso di Laurea in Informatica

 Studio e implementazione del front-end di
 un’applicazione web mediante il framework
                  Angular
                        Tesi di laurea triennale

Relatore
Prof. Lamberto Ballan

                                                              Laureanda
                                                   Bianca Andreea Ciuche
                                                                 1122193

                    Anno Accademico 2018-2019
Università degli Studi di Padova
Bianca Andreea Ciuche: Studio e implementazione del front-end di un’applicazione
web mediante il framework Angular, Tesi di laurea triennale, c 26 Settembre 2019.
Università degli Studi di Padova
Dedicato alla mia famiglia.
Università degli Studi di Padova
Sommario

Il presente documento ha lo scopo di riassumere il lavoro svolto durante il periodo di
stage accademico della laureanda Ciuche Bianca Andreea presso l’azienda Sync Lab
s.r.l. nel periodo tra il 27 maggio 2019 e 19 luglio 2019 della durata di circa 320 ore.
L’obiettivo dello stage è sviluppare un front-end attraverso l’utilizzo del framework
Angular per un’applicazione web riguardante scheduler per la ricerca di annunci
lavorativi.
Durante i due mesi di tirocinio, in primo luogo c’è stato l’apprendimento delle tecnologie
necessarie per poter iniziare l’implementazione del progetto con approfondimenti sul
framework Angular, in secondo luogo si è svolto lo sviluppo del front-end.

                                            v
Ringraziamenti

Innanzitutto, vorrei esprimere la mia gratitudine al Prof. Lamberto Ballan, relatore
della mia tesi, per l’aiuto e il sostegno fornitomi durante la stesura del lavoro.

Desidero ringraziare con profondo affetto la mia famiglia per aver creduto in me, per
il grande supporto e per essermi stata vicina in ogni momento durante gli anni di studio.

Infine ringrazio tutti i miei amici: quelli di quartiere, dell’infanzia, del liceo e dell’uni-
versità.

Padova, 26 Settembre 2019                                          Bianca Andreea Ciuche

                                             vii
Indice

1 Introduzione                                                                                                                              1
  1.1 Convenzioni tipografiche      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
  1.2 L’azienda . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
       1.2.1 Profilo aziendale      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
       1.2.2 Servizi . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   2
       1.2.3 Settori d’impiego      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   2

2 Descrizione dello stage                                                                                                                   3
  2.1 Il progetto . . . . .     . . .   . . . . . .             . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
  2.2 Lo stage . . . . . . .    . . .   . . . . . .             . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
  2.3 Obiettivi . . . . . . .   . . .   . . . . . .             . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
  2.4 Pianificazione . . . .    . . .   . . . . . .             . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
      2.4.1 Pianificazione      delle   settimane                 .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
      2.4.2 Pianificazione      delle   ore . . . .             . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6

3 Analisi dei requisiti                                                                                                                      7
  3.1 Casi d’uso . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
  3.2 UC0: Scenario iniziale . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
  3.3 UC1: Configurazione scheduler . . . .                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
  3.4 UC2:Visualizzazione risultati scheduler                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  3.5 Tracciamento dei requisiti . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
  3.6 Requisiti Funzionali . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
  3.7 Requisiti di Vincolo . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
  3.8 Requisiti di Qualità . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20

4 Tecnologie e strumenti utilizzati                                                                                                         21
  4.1 Introduzione . . . . . . . . . . . . . . . . . . .                            .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
  4.2 Ambiente di sviluppo . . . . . . . . . . . . . .                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
      4.2.1 Visual Studio Code . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
  4.3 Strumenti di versionamento . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
  4.4 Linguaggi e framework . . . . . . . . . . . . .                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
      4.4.1 Il framework Angular . . . . . . . . .                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
      4.4.2 Panoramica dell’architettura Angular                                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   24
      4.4.3 Alternative ad Angular . . . . . . . .                                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
      4.4.4 Typescript . . . . . . . . . . . . . . .                                .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
      4.4.5 Npm . . . . . . . . . . . . . . . . . . .                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
      4.4.6 JSON Server . . . . . . . . . . . . . .                                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
      4.4.7 Bootstrap . . . . . . . . . . . . . . . .                               .   .   .   .   .   .   .   .   .   .   .   .   .   .   29

                                                    ix
x                                                                                                                         INDICE

5 Progettazione                                                                                                                   31
  5.1 Struttura delle classi di Sync Lav . . . . . . . . .                        .   .   .   .   .   .   .   .   .   .   .   .   31
  5.2 User Experience . . . . . . . . . . . . . . . . . .                         .   .   .   .   .   .   .   .   .   .   .   .   32
      5.2.1 Target . . . . . . . . . . . . . . . . . . . .                        .   .   .   .   .   .   .   .   .   .   .   .   33
  5.3 User Interface . . . . . . . . . . . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   34
  5.4 Approfondimenti user experience e user interface                            .   .   .   .   .   .   .   .   .   .   .   .   35

6 Conclusioni                                                                                                                     37
  6.1 Consuntivo finale . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37
  6.2 Raggiungimento degli obiettivi      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37
  6.3 Conoscenze acquisite . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37
  6.4 Valutazione personale . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37

Glossary                                                                                                                          39

Acronyms                                                                                                                          41

Bibliografia                                                                                                                      43
Elenco delle figure

 1.1    Logo Sync Lab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                             1

 3.1    Scenario principale . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                           8
 3.2    UC1 configurazione scheduler . . . . . . . . . . . . . . . . . . . . . . .                                                              9
 3.3    Visualizzazione risultati scheduler . . . . . . . . . . . . . . . . . . . . .                                                          13

 4.1    Logo Visual Studio Code . . . . . . . .                        . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   21
 4.2    Logo Git . . . . . . . . . . . . . . . . .                     . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   22
 4.3    Logo Angular . . . . . . . . . . . . . .                       . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   23
 4.4    Architettura ad alto livello di Angular                        . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   24
 4.5    AppModule . . . . . . . . . . . . . . .                        . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   24
 4.6    AppComponent . . . . . . . . . . . . .                         . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   25
 4.7    Esempio del meccanismo two-way data                            binding             .   .   .   .   .   .   .   .   .   .   .   .   .   26
 4.8    Logo TypeScript . . . . . . . . . . . .                        . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   27
 4.9    Logo Npm . . . . . . . . . . . . . . . .                       . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   28
 4.10   Logo Json Server . . . . . . . . . . . .                       . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   28
 4.11   Logo Bootstrap . . . . . . . . . . . . .                       . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   29

 5.1    Diagramma delle classi     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
 5.2    User Experience . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   32
 5.3    User Interface . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
 5.4    Storytelling . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   35
 5.5    Heat Map . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36

Elenco delle tabelle

 3.1    Requisiti Funzionali . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                           18

                                                       xi
xii                                                           ELENCO DELLE TABELLE

      3.2   Requisiti di Vincolo . . . . . . . . . . . . . . . . . . . . . . . . . . . .   19
      3.3   Requisiti di Qualità . . . . . . . . . . . . . . . . . . . . . . . . . . . .   20
Capitolo 1

Introduzione

Questo capitolo consiste in una presentazione dell’azienda ospitente, Synclab, e in una
descrizione di alcune norme tipografiche usate per la stesura del documento.

1.1     Convenzioni tipografiche
Riguardo la stesura del testo, relativamente al documento sono state adottate le
seguenti convenzioni tipografiche:

   ∗ Gli acronimi, le abbreviazioni e i termini ambigui o di uso non comune menzionati
     vengono definiti nel glossario, situato alla fine del presente documento;

   ∗ I termini in lingua straniera o facenti parti del gergo tecnico sono evidenziati con
     il carattere corsivo.

1.2     L’azienda

                               Figura 1.1: Logo Sync Lab

1.2.1     Profilo aziendale
Sync Lab s.r.l. è una società di consulenza informatica fondata nel 2002 con sedi a
Napoli, Roma, Milano e Padova. Fin dai primi anni Sync Lab è rapidamente cresciuta
nel mercato Information and Communication Technology (ICT), consolidando i rapporti
con clienti e partner, raggiungendo un organico aziendale di oltre 200 risorse, una solida
base finanziaria e una diffusione sul territorio attraverso le sue quattro sedi. L’organico
aziendale è andato crescendo in modo continuo e rapido, in relazione all’apertura delle

                                            1
2                                                    CAPITOLO 1. INTRODUZIONE

varie sedi ed alla progressiva crescita delle stesse. La grande attenzione alla gestione
delle risorse umane ha fatto di Sync Lab un riferimento in positivo per quanti volessero
avviare o far evolvere in chiave professionale la propria carriera. Il basso turn-over
testimonia la voglia dei collaboratori di condividere il progetto comune, assumendo
all’interno di esso ruoli e responsabilità che solo un processo evolutivo così intenso può
offrire. I ricavi hanno avuto un incremento proporzionale alla crescita dell’azienda
beneficiando dell’approccio adattativo e diversificato al mercato.

1.2.2     Servizi
Sync Lab s.r.l. è un’azienda leader nella consulenza tecnologica, impegnata in un
processo continuo d’identificazione e messa in opera di soluzioni per i clienti finalizzate
alla creazione di valore. L’azienda supporta le esigenze d’innovazione di tutte le
organizzazioni ed in ogni settore di mercato nell’ambito Information Technology (IT),
con servizi in ambito
    ∗ Business Consultancy;
    ∗ Project Financing;

    ∗ IT Consultancy;
    Sync Lab ha come punti di forza la qualità dei servizi offerti (certificazioni ISO 9001,
ISO 14001, ISO 27001, OHSAS 18001) ed un’accurata gestione delle risorse umane.
L’approfondita conoscenza di processi e tecnologie, maturata in esperienze altamente
significative e qualificanti, fornisce l’expertise e il know-how necessari per gestire
progetti di elevata complessità, dominando l’intero ciclo di vita: Studio di fattibilità,
Progettazione, Implementazione, Governance e Post Delivery. L’offerta di consulenza
specialistica trova le punte di eccellenza nella progettazione di architetture software
avanzate, siano esse per applicativi di dominio, per sistemi di Sistema di supporti al
business (BSS), per sistemi d’integrazione (EAI/SOA) o per sistemi di monitoraggio
applicativo/territoriale. Il laboratorio RD (Ricerca e Sviluppo) dell’azienda è sempre
al passo con i nuovi paradigmi tecnologici e di comunicazione, ad esempio Big Data,
Cloud Computing, Internet of Things (IoT), Mobile e Sicurezza IT, per supportare
i propri clienti nella creazione ed integrazione di applicazioni, processi e dispositivi.
Le attività in ambito Educational ed RD hanno permesso di acquisire una profonda
conoscenza degli strumenti di finanza agevolata fruendone direttamente e interagendo
con enti di supporto ai progetti innovativi dei propri clienti. L’azienda, grazie alla rete
di relazioni a livello nazionale ed internazionale, ha ottenuto importanti finanziamenti
in progetti RD europei (FP7 e H2020).

1.2.3     Settori d’impiego
Sync Lab si sta sempre più specializzando in vari settori d’impiego: dal mondo banking
all’assurance con una nicchia importante nell’ambito sanità in cui vanta un prodotto
d’eccellenza per la gestione delle cliniche private. L’azienda inoltre ha recentemente
fondato una collegata Sync Security che si occupa espressamente del mondo della cyber
security e sicurezza informatica in generale.
Capitolo 2

Descrizione dello stage

Questo capitolo presenta la descrizione del progetto di stage e la stesura del piano di
lavoro stipulato assieme al relatore aziendale e revisionato dal relatore interno.

2.1     Il progetto
Il progetto di stage, denominato Sync Lav, consiste nell’implementazione di un’applicazione
web, la quale si occupa della gestione di scheduler per la ricerca di annunci lavorativi.
Attraverso l’applicazione è possibile configurare, in base alle proprie necessità e prefe-
renze, uno scheduler personalizzato e visualizzarne i risultati in una tabella, dove sono
specificati il nome dell’annuncio, la data di pubblicazione, l’azienda proponente, il link
della pagina d’origine dell’annuncio ed un testo di descrizione dell’annuncio. All’in-
terno del progetto l’obiettivo della stagista è sviluppare il front-end dell’applicazione
mediante il framework Angular, la parte di back-end è assegnata ad un altro membro
del progetto. In alcune fasi del progetto c’è la collaborazione tra i membri del gruppo
per far sì che le due parti, front-end e back-end, possano integrarsi senza problemi.

2.2     Lo stage
Lo stage si è svolto nella sede di Padova dell’azienda ospitante, Sync Lab, nell’arco
delle otte settimane previste nel piano di lavoro.
Nella prima parte dello stage è richiesto alla tirocinante di apprendere le tecnologie
necessarie per poter affrontare le fasi di analisi, progettazione e implementazione del
progetto. Le tematiche da acquisire sono le seguenti:
   ∗ Angular;
   ∗ JavaScript;
   ∗ TypeScript;
   ∗ Architettura MVVM/MVC;
   ∗ Studio di alcuni concetti relativi le tematiche di User/Customer Experience e
     User Interface tra cui:
        – Storytelling;

                                           3
4                                    CAPITOLO 2. DESCRIZIONE DELLO STAGE

         – User Centered Design, User Journey, Empathy Map;
         – User Flow ;
         – Analisi dei competitor e delle Persone;
         – Mouse Tracking;
         – Heat Map;
         – Click Map;
         – Responsive Web Design e Adaptive Web Design.
   La seconda parte dello stage consiste nello sviluppo effettivo della parte di front-end
per il progetto SyncLav, quindi nella sua progettazione e implementazione.

2.3      Obiettivi
Al termine del tirocinio la stagista dovrà aver prodotto un front-end tramite il framework
Angular, cercando di applicare i principi di User experience dove possibile.

Notazione
Si farà riferimento ai requisiti secondo le seguenti notazioni:
    ∗ O per i requisiti obbligatori, vincolanti in quanto obiettivo primario richiesto dal
      committente;
    ∗ D per i requisiti desiderabili, non vincolanti o strettamente necessari, ma dal
      riconoscibile valore aggiunto;
    ∗ F per i requisiti facoltativi, rappresentanti valore aggiunto non strettamente
      competitivo.
  Le sigle precedentemente indicate saranno seguite da una coppia sequenziale di
numeri, identificativo del requisito.

Obiettivi fissati
Il progetto si è posto come obiettivo l’adempimento dei seguenti requisiti:
    ∗ Requisiti obbligatori:
         – O01: Acquisizione competenze previste dal programma;
         – O02: Capacità di raggiungere gli obiettivi richiesti in autonomia seguendo
           il crono programma;
         – O03: Portare a termine le modifiche richieste con una percentuale di
           superamento degli item di collaudo pari al 50%;
    ∗ Requisiti desiderabili:
         – D01: Portare a temine le modifiche richieste dal cliente con una percentuale
           di superamento degli item pari all’80%;
    ∗ Requisiti facoltativi:
         – F01: Acquisizione competenze sulla libreria Hot-jar ed eventuale utilizzo;
2.4. PIANIFICAZIONE                                                                   5

2.4     Pianificazione
In questa sezione viene mostrata la pianificazione delle settimane e delle ore, per ogni
attività concordata con il relatore aziendale e il relatore interno.

2.4.1    Pianificazione delle settimane
   ∗ Prima Settima
        – Presentazione strumenti di lavoro per la condivisione del materiale di studio
          e per la gestione dell’avanzamento del percorso(Slack, Trello, ecc.);
        – Condivisione scaletta di argomenti;
        – Veloce panoramica su metodologie Agile/Scrum;
   ∗ Seconda Settima
        – Studio di JavaScript e TypeScript;

   ∗ Terza Settima
        – Studio teoretico dell’Architettura MVVM e di Angular;
   ∗ Quarta Settima
        – Studio di alcuni concetti relativi di User/Customer Experience e User
          Interface tra cui:
             ∗   Storytelling;
             ∗   User Center Design, User Journey, Empathy Map;
             ∗   User Flow ;
             ∗   Analisi dei competitor e delle Persone;
             ∗   Mouse Tracking;
             ∗   Heat Map;
             ∗   Responsive Web Design e Adaptive Web Design;
   ∗ Quinta, Sesta e Settima

        – Implementazione front-end tramite il framework Angular del progetto Sync
          Lav;
   ∗ Ottava Settima
        – Conclusione implemetazione front-end del progetto Sync Lav, collaudo e
          installazione in esercizio;
6                                CAPITOLO 2. DESCRIZIONE DELLO STAGE

2.4.2     Pianificazione delle ore

    Durata in ore   Descrizione dell’attività
         40         Formazione sulle tecnologie
         38         Studio di JavaScript/TypeScript
         38         Studio teorico dell’Architettura MVVM Angular e di
                    Angular
         38         Studio delle tematiche relative all’ User/Customer
                    Experience e User Interface
        110         Implementazione Font-End del progetto "SinglePageA-
                    pllication"
         12         Analisi del problema e del dominio applicativo
         10         Applicazione dei concetti User/Customer Experience e User
                    Interface
        38          Collaudo Finale
        30          Collaudo
         5          Stesura documentazione finale
         3          Consegna codice
     Totale ore                                  302
Capitolo 3

Analisi dei requisiti

Il presente capitolo ha come scopo la descrizione completa e precisa di tutti i casi d’uso
riguardanti il progetto Sync Lav. Tali informazioni sono state estrapolate dai colloqui
con il relatore aziendale.

3.1     Casi d’uso
Per lo studio dei casi d’utilizzo del prodotto sono stati creati dei diagrammi. I
diagrammi dei casi d’uso (in inglese Use Case Diagram) sono diagrammi di tipo UML,
dedicati alla descrizione delle funzioni o servizi offerti da un sistema, così come sono
percepiti e utilizzati dagli attori che interagiscono con il sistema stesso. L’attore per
tutti i casi d’uso è sempre l’utente generale.

                                            7
8                                         CAPITOLO 3. ANALISI DEI REQUISITI

3.2     UC0: Scenario iniziale

                            Figura 3.1: Scenario principale

    ∗ Attori: Utente generale;
    ∗ Descrizione: Attraverso la pagina iniziale l’utente generale può accedere alla
      pagina di configurazione scheduler oppure alla pagina di visualizzazione dei
      risultati scheduler cliccando i rispettivi pulsanti;
    ∗ Precondizione: L’utente si trova nella pagina iniziale dell’applicazione;
    ∗ Postcondizione:L’utente visualizza la pagina rispettiva al pulsante cliccato;

    ∗ Scenario principale:
        1. Configurazione scheduler (UC1);
        2. Visualizza risultati scheduler (UC2);
3.3. UC1: CONFIGURAZIONE SCHEDULER                                                9

3.3   UC1: Configurazione scheduler

                     Figura 3.2: UC1 configurazione scheduler

  ∗ Attori: Utente generale;
  ∗ Descrizione: L’utente generale può impostare una nuova configurazione dello
    scheduler di ricerca oppure visualizzare l’ultima configurazione dello scheduler
    impostata.
  ∗ Precondizione: L’utente si trova nella pagina di configurazione dello scheduler.
  ∗ Postcondizione: L’applicazione ha ricevuto le informazioni dall’utente in base
    all’operazione che vuole eseguire.
  ∗ Scenario principale:
      1. Inserimento chiave (UC1.1);
      2. Inserimento città (UC1.3);
10                                            CAPITOLO 3. ANALISI DEI REQUISITI

         3. Inserimento regione(UC1.5);
         4. Inserimento orario (UC1.7);
         5. Selezione data di inizio scheduler(UC1.9);
         6. Selezione ripetibilità(UC1.11);
         7. Salvataggio configurazione(UC1.12);
         8. Tornare indietro(UC1.14);
         9. Visualizzazione ultima configurazione(UC1.15);

UC1.1: Inserimento chiave
     ∗ Attori: Utente generale;

     ∗ Descrizione:L’utente generale può inserire la chiave.

     ∗ Precondizione: Il campo form riguardante la chiave è pronto per la configura-
       zione.

     ∗ Postcondizione: L’utente ha inserito la chiave.

     ∗ Scenario principale:

         1. L’utente ha selezionato il form per l’inserimento della chiave;
         2. L’utente inserisce il valore desiderato nel campo form della chiave;

     ∗ Estensioni:

         1. UC1.2 Visualizzazione messaggio d’errore;

UC1.3: Inserimento città
     ∗ Attori: Utente generale;

     ∗ Descrizione:L’utente generale può inserire la chiave.

     ∗ Precondizione:Il campo form riguardante la città è pronto per la configurazione.

     ∗ Postcondizione: L’utente ha inserito la città.

     ∗ Scenario principale:

         1. L’utente ha selezionato il form per l’inserimento della città;
         2. L’utente inserisce il valore desiderato nel campo form della città;

     ∗ Estensioni:

         1. UC1.4 Visualizzazione messaggio d’errore;
3.3. UC1: CONFIGURAZIONE SCHEDULER                                               11

UC1.5: Inserimento regione
  ∗ Attori: Utente generale;
  ∗ Descrizione:L’utente generale può inserire la regione.
  ∗ Precondizione: Il campo form riguardante la regione è pronto per la configura-
    zione.
  ∗ Postcondizione: L’utente ha inserito la regione.
  ∗ Scenario principale:
      1. L’utente ha selezionato il form per l’inserimento della regione;
      2. L’utente inserisce il valore desiderato nel campo form della regione;
  ∗ Estensioni:
      1. UC1.6 Visualizzazione messaggio d’errore;

UC1.7: Inserimento orario
  ∗ Attori: Utente generale;
  ∗ Descrizione:L’utente generale può inserire l’ora.
  ∗ Precondizione: Il campo form riguardante l’ora è pronto per la configurazione.
  ∗ Postcondizione: L’utente ha inserito l’ora.
  ∗ Scenario principale:
      1. L’utente ha selezionato il form per l’inserimento dell’ora;
      2. L’utente inserisce il valore desiderato nel campo form dell’ora;
  ∗ Estensioni:
      1. UC1.8 Visualizzazione messaggio d’errore;

UC1.9:Selezione data di inizio scheduler
  ∗ Attori: Utente generale;
  ∗ Descrizione: L’utente generale può inserire la data.
  ∗ Precondizione: Il campo form riguardante la data è pronto per la configurazio-
    ne.
  ∗ Postcondizione: L’utente ha inserito la data.
  ∗ Scenario principale:
      1. L’utente ha selezionato il form per l’inserimento della data;
      2. L’utente inserisce il valore desiderato nel campo form della data;
  ∗ Estensioni:
      1. UC1.10 Visualizzazione messaggio d’errore;
12                                         CAPITOLO 3. ANALISI DEI REQUISITI

UC1.11: Selezione ripetibilità
     ∗ Attori: Utente generale;
     ∗ Descrizione:L’utente generale può selezionare la ripetibilità desiderata.
     ∗ Precondizione: il campo form riguardante la ripetibilità è pronto per la
       configurazione.
     ∗ Postcondizione: L’utente ha selezionato la ripetibilità.

UC1.12: Salva configurazione
     ∗ Attori: Utente generale;
     ∗ Descrizione: Il sistema deve salvare la configurazione dello scheduler ricevuta.
     ∗ Precondizione: L’utente è nella pagina di configurazione scheduler e vuole
       salvare la configurazione inserita.

     ∗ Postcondizione: Il sistema ha salvato con successo la configurazione inserita.
     ∗ Estensioni:
         1. UC1.12 Visualizzazione messaggio d’errore;

UC1.14: Tornare indietro
     ∗ Attori: Utente generale;
     ∗ Descrizione:L’utente attraverso il rispettivo pulsante torna alla pagina iniziale.
     ∗ Precondizione: L’applicazione è pronta per tornare alla pagina iniziale.

     ∗ Postcondizione: L’utente generale si trova nella pagina iniziale.

UC1.15: Visualizzazione ultima configurazione
     ∗ Attori: Utente generale;
     ∗ Descrizione: L’applicazione deve mostrare l’ultima configurazione impostata
       dall’utente.
     ∗ Precondizione: L’utente ha già configurato almeno una volta lo scheduler.

     ∗ Postcondizione: L’utente visualizza l’ultima configurazione.
3.4. UC2:VISUALIZZAZIONE RISULTATI SCHEDULER                                       13

3.4   UC2:Visualizzazione risultati scheduler

                   Figura 3.3: Visualizzazione risultati scheduler

  ∗ Attori: Utente generale;

  ∗ Descrizione:L’utente generale imposta i filtri per la ricerca dello scheduler e ne
    visualizza i risultati in tabella.

  ∗ Postcondizione: L’applicazione ha ricevuto tutte le informazione e mostra in
    tabella i risultati dello scheduler.

  ∗ Scenario principale:

      1. Inserimento chiave (UC2.1);
      2. Inserimento città (UC2.3);
      3. Inserimento data di inizio(UC2.5);
      4. Inserimento data di fine (UC2.7);
      5. Visualizzazione risultati in tabella (UC2.9);
      6. Tornare indietro(UC2.10);

UC2.1: Inserimento chiave
  ∗ Attori: Utente generale;

  ∗ Descrizione:L’utente generale può inserire la chiave nella sezione riguardante i
    filtri:
14                                         CAPITOLO 3. ANALISI DEI REQUISITI

     ∗ Precondizione:Il campo form riguardante la chiave è pronto per la configura-
       zione.
     ∗ Postcondizione: L’utente ha inserito la chiave nella sezione riguardante i filtri.
     ∗ Scenario principale:
         1. L’utente ha selezionato il form per l’inserimento della chiave;
         2. L’utente inserisce il valore desiderato nel campo form della chiave;
     ∗ Estensioni:
         1. UC2.2 Visualizzazione messaggio d’errore;

UC2.3: Inserimento città
     ∗ Attori: Utente generale;
     ∗ Descrizione:L’utente generale può inserire la città nella sezione riguardante i
       filtri;
     ∗ Precondizione:Il campo form riguardante la città è pronto per la configurazione.
     ∗ Postcondizione: L’utente ha inserito la città nella sezione riguardante i filtri;
     ∗ Scenario principale:
         1. L’utente ha selezionato il form per l’inserimento della città;
         2. L’utente inserisce il valore desiderato nel campo form della città;
     ∗ Estensioni:
         1. UC2.4 Visualizzazione messaggio d’errore;

UC2.5: Inserimento data inizio
     ∗ Attori: Utente generale;
     ∗ Descrizione:L’utente generale può inserire la data di inizio nella sezione riguar-
       dante i filtri;
     ∗ Precondizione: Il campo form riguardante la data è pronto per la configurazio-
       ne.
     ∗ Postcondizione: L’utente ha inserito la data di inizio nella sezione riguardante
       i filtri;
     ∗ Scenario principale:
         1. L’utente ha selezionato il form per l’inserimento della data di inizio;
         2. L’utente inserisce il valore desiderato nel campo form della data;
     ∗ Estensioni:
         1. UC2.6 Visualizzazione messaggio d’errore;
3.4. UC2:VISUALIZZAZIONE RISULTATI SCHEDULER                                        15

UC2.7: Inserimento data fine
  ∗ Attori: Utente generale;

  ∗ Descrizione:L’utente generale può inserire la data di fine nella sezione riguar-
    dante i filtri;

  ∗ Precondizione: Il campo form riguardante la data è pronto per la configurazio-
    ne.

  ∗ Postcondizione: L’utente ha inserito la data di fine nella sezione riguardante i
    filtri;

  ∗ Scenario principale:

      1. L’utente ha selezionato il form per l’inserimento della data;
      2. L’utente inserisce il valore desiderato nel campo form della data;

  ∗ Estensioni:

      1. UC1.10 Visualizzazione messaggio d’errore;

UC2.9: Visualizzazione risultati in tabella
  ∗ Attori: Utente generale;

  ∗ Descrizione:il sistema mostra i risultati in base ai filtri impostati dall’utente.

  ∗ Precondizione: Il sistema è pronto per mostrare i risultati in tabella.

  ∗ Postcondizione: L’utente visualizza i risultati in base ai filtri inseriti.

  ∗ Scenario principale:

      1. Visualizzazione annuncio in tabella(UC2.9.1);

UC2.10: Tornare indietro
  ∗ Attori: Utente generale;

  ∗ Descrizione: L’utente attraverso il rispettivo pulsante torna alla pagina iniziale.

  ∗ Precondizione: L’applicazione è pronta per tornare alla pagina iniziale.

  ∗ Postcondizione: L’utente generale si trova nella pagina iniziale.

UC2.9.1: Visualizzazione annuncio in tabella
  ∗ Attori: Utente generale;

  ∗ Descrizione: L’utente visualizza le informazione riguardanti l’annuncio d’inte-
    resse.

  ∗ Precondizione: Il sistema è pronto per mostrare le informazioni.
16                                           CAPITOLO 3. ANALISI DEI REQUISITI

     ∗ Postcondizione: L’utente ha visualizzato le informazioni d’interesse.

     ∗ Scenario principale:

         1. L’utente visualizza la data di pubblicazione dell’annuncio;
         2. L’utente visualizza il titolo dell’annuncio;
         3. L’utente visualizza il luogo di lavoro riguardante l’annuncio;
         4. L’utente visualizza il testo riguardante l’annuncio;
         5. L’utente visualizza il sito web riguardante l’annuncio;

3.5       Tracciamento dei requisiti
In seguito ad un’attenta analisi dei requisiti e degli use case effettuata sul progetto
con il supporto del tutor aziendale, è stata stilata la tabella che traccia i requisiti in
rapporto agli use case.
Per poterli distinguere in modo preciso è stata usata la seguente nomenclatura

                                  n on on on   o
                                 R A B XX . YY

dove:

     ∗ A: corrisponde a uno dei seguenti requisiti:

          – F: funzionale;
          – Q: di qualità;
          – P: di prestazione;
          – V: di vincolo.

     ∗ B: corrisponde a uno dei seguenti requisiti:

          – O: obbligatorio;
          – F: facoltativo;
          – D: desiderabile.

     ∗ XX: numero che identifica i requisiti;

     ∗ YY: numero progressivo che identifica i sottocasi, esso può, a sua volta, includere
       altri sottocasi.

    Nelle tabelle dei requisiti funzionali, di vincolo e di qualità, sono riassunti i requisiti
e il loro tracciamento con gli use case delineati in fase di analisi.
3.6. REQUISITI FUNZIONALI                                                             17

3.6   Requisiti Funzionali

    Id
             Descrizione                                                              Use Case
 Requisito
             L’applicazione deve permettere all’utente generale di poter
   RFO1                                                                                 UC0
             accedere alla pagina iniziale
             L’applicazione deve permettere all’utente generale di poter
   RFO2                                                                                 UC0
             accedere alla pagina di configurazione dello scheduler
             L’applicazione deve permettere all’utente generale di
   RFO3                                                                                 UC1
             configurare lo scheduler
             L’applicazione deve permettere all’utente generale di
   RFO4                                                                                UC1.1
             inserire la chiave per la configurazione dello scheduler
             Il sistema deve permettere all’utente generale di inserire
   RFO5                                                                                UC1.3
             la città per la configurazione dello scheduler
             Il sistema deve permettere all’utente generale di inserire
   RFO6                                                                                UC1.5
             la regione per la configurazione dello scheduler
             L’applicazione deve permettere all’utente generale di
   RFO7                                                                                UC1.7
             configurare l’ora per la configurazione dello scheduler
             L’applicazione deve permettere all’utente generale di
   RFO8                                                                                UC1.9
             selezionare la data per la configurazione dello scheduler
             L’applicazione deve permettere all’utente generale di se-
   RFO9      lezionare la ripetibilità dello scheduler in base alla data               UC1.11
             impostata
             L’applicazione deve permettere all’utente generale di
  RFO10                                                                                UC1.12
             salvare la configurazione dello scheduler
             L’applicazione deve permettere all’utente generale di
  RFO11                                                                                UC1.14
             tornare alla pagina iniziale
             L’applicazione deve mostrare all’utente l’ultima configura-
  RFF12                                                                                UC.15
             zione impostata, se esistente
             L’utente deve visualizzare i messaggi degli errori che si
                                                                                  UC1.2 UC1.4 UC1.6
  RFD13      verificano durante la compilazione della configurazione
                                                                                 UC1.8 UC1.10 UC1.13
             dello scheduler
             L’applicazione deve permettere all’utente generale di vi-
  RFO14      sualizzare i risultati della configurazione dello scheduler in             UC2
             una tabella
             L’applicazione deve permettere all’utente generale di
  RFO15                                                                                 UC2
             inserire i filtri per la visualizzazione dei risultati in tabella
             L’applicazione deve permettere all’utente generale di
  RFO16      inserire la chiave nella sezione filtri della pagina di                   UC2.1
             visualizzazione dei risultati
             L’applicazione deve permettere all’utente generale di inseri-
  RFO17      re la città nella sezione filtri della pagina di visualizzazione          UC2.3
             dei risultati
             L’applicazione deve permettere all’utente generale di in-
  RFO18      serire la data di inizio nella sezione filtri della pagina di             UC2.5
             visualizzazione dei risultati
18                                      CAPITOLO 3. ANALISI DEI REQUISITI

    Id
             Descrizione                                                           Use Case
 Requisito
             L’applicazione deve permettere all’utente generale di in-
     RFO19   serire la data di fine nella sezione filtri della pagina di            UC2.7
             visualizzazione dei risultati
             L’applicazione deve permettere all’utente generale, nella
     RFO20   pagina di visualizzazione dei risultati dello scheduler, di            UC2.9
             visualizzare i risultati in una tabella
             L’applicazione deve permettere all’utente generale, nella
     RFO21   pagina di visualizzazione dei risultati dello scheduler, di            UC2.9.1
             visualizzare il titolo dell’annuncio
             L’applicazione deve permettere all’utente generale, nella
     RFO22   pagina di visualizzazione dei risultati dello scheduler, di            UC2.9.1
             visualizzare la data di pubblicazione dell’annuncio
             L’applicazione deve permettere all’utente generale, nella
     RFO23   pagina di visualizzazione dei risultati dello scheduler, di            UC2.9.1
             visualizzare il luogo di lavoro
             L’applicazione deve permettere all’utente generale, nella
     RFO24   pagina di visualizzazione dei risultati dello scheduler, di            UC2.9.1
             visualizzare l’azienda che ha proposto l’annuncio di lavoro
             L’applicazione deve permettere all’utente generale, nella
     RFO25   pagina di visualizzazione dei risultati dello scheduler, di            UC2.9.1
             visualizzare il sito web riguardante l’annuncio di lavoro
             L’applicazione deve permettere all’utente generale, nella
     RFO26   pagina di visualizzazione dei risultati dello schedule,r di            UC2.9.1
             visualizzare il testo che riassume l’annuncio di lavoro
             L’applicazione deve permettere all’utente generale, nella
             pagina di visualizzazione dei risultati dello scheduler, di vi-   UC2.2 UC2.4 UC2.6
     RFD27
             sualizzare gli eventuali errori commessi nella compilazione             UC2.8
             dei form nella sezione dei filtri
                                Tabella 3.1: Requisiti Funzionali
3.7. REQUISITI DI VINCOLO                                                19

3.7   Requisiti di Vincolo

         Id
                  Descrizione
      Requisito
                  L’applicazione deve essere sviluppata utilizzando il
        RVO1
                  framework Angular
        RVO2      L’applicazione va testata tramite Json-server
                  L’applicazione va sviluppata utilizzando la libreria
        RVF3
                  Bootstrap
        RVF4      L’editor di riferimento è Visual Studio Code
                  L’applicazione deve essere sviluppata utilizzando il
        RVO5
                  linguaggio di programmazione TypeScript
                      Tabella 3.2: Requisiti di Vincolo
20                                     CAPITOLO 3. ANALISI DEI REQUISITI

3.8   Requisiti di Qualità

         Id
                  Descrizione
      Requisito
                  L’interfaccia grafica deve rispettare le indicazioni suggerite
       RQO1
                  dall’azienda
                  La stagista deve rispettare i tempi fissati nel piano di
       RQO2
                  lavoro
       RQD3       Il sito deve favorire la User Interface e la User Experience
                  Lo sviluppo del front-end deve permettere una facile
       RQD4
                  integrazione con la parte di back-end
                       Tabella 3.3: Requisiti di Qualità
Capitolo 4

Tecnologie e strumenti utilizzati

In questo capitolo vengono presentate le tecnologie e gli strumenti utilizzati durante la
progettazione e lo sviluppo del front-end.

4.1     Introduzione
La maggior parte del progetto è focalizzata sul framework Angular, usato assieme
all’editor di codice Visual Studio Code. La scelta di utilizzare Angular per sviluppare
un’applicazione web è stata effettuata dal tutor aziendale invece la scelta delle altre
tecnologie sono state a carico della stagista.
L’utilizzo del framework Angular ha reso obbligatorio l’utilizzo di alcune tecnologie
integrate in esso come ad esempio il linguaggio di programmazione TypeScript e la
tecnologia NPM.
Di seguito è riportata una descrizione delle principali tecnologie e degli strumenti
utilizzati durante durante il periodo di stage.

4.2     Ambiente di sviluppo
Il percorso di stage è stato sviluppato su un sitema operativo Mac.

4.2.1    Visual Studio Code

                         Figura 4.1: Logo Visual Studio Code

                                           21
22                     CAPITOLO 4. TECNOLOGIE E STRUMENTI UTILIZZATI

Visual Studio Code è un editor di codice sorgente sviluppato da Microsoft per Windows,
Linux e macOS. Esso include supporto per il debugging, un controllo per Git integrato,
Syntax highlighting, IntelliSense, Snippet e refactoring del codice. Visual Studio Code
è basato su Electron, un framework con cui è possibile sviluppare applicazioni Node.js.
Durante il periodo di stage la stagista ha deciso di utilizzare come IDE Visual Studio
Code perchè:
     ∗ Supporta totalmente il framework Angular, facilitandone l’utilizzo;
     ∗ È completamente gratuito;
     ∗ È utilizzato nella maggior parte dei tutorial che sono stati seguiti per l’apprendi-
       mento.
     Valide alternative a Visual Studio Code sono:
     ∗ Web Storm, ottimo editor per Angular attraverso il quale è possibile compilare
       il codice TypeScript in JavaScript senza fare affidamento a plug-in esterni, però
       presenta lo svantaggio di essere a pagamento.
     ∗ Atom, è un editor di testo gratuito, sviluppato da GitHub che permette tutte le
       funzionalità degli altri editor di testo oltre ad un ambiente di sviluppo altamente
       personalizzabile.

4.3       Strumenti di versionamento
Git

                                   Figura 4.2: Logo Git

    Il versionamento del codice del progetto Sync Lav è avvenuto attraverso l’utilizzato
di una repository privata, versionata tramite il Version Control System (VCS) Git.
Il Version Control System (VCS) Git ha permesso a entrambi i sviluppatori di col-
laborare sullo stesso progetto mantenendo il codice in un unico posto e di gestire
un progetto mantenendo il controllo del codice sorgente e della sua storia. Per non
creare una situazione di confusione durante i merge è stato molto utile il servizio
Git Flow offerto da Git. Il Git Flow permette di avere un flusso organizzativo dei
branch, dei loro scopi e delle loro funzioni. Attraverso il Git Flow il ramo Master,
4.4. LINGUAGGI E FRAMEWORK                                                                 23

che rappresenta il codice attualmente in produzione, non viene mai modificato ma-
nualmente da nessuno. Pure il ramo Develop che rappresenta il ramo di sviluppo
non viene mai modificato. Le modifiche vengono inserite attraverso la creazione di
un Feature branch. Il Feature branch è un ramo che parte da Develop ed in esso
viene riunificato al termine della modifica dul codice. La particolarità dei Feature
branch è che, una volta chiusi, essi si andranno a riunire automaticamente sia in
Develop che in Master. Seguendo questo schema di sviluppo si evitano la maggior
parte delle complicazioni dovute ai merge e si mantiene un flusso sufficientemente solido.

4.4      Linguaggi e framework
4.4.1     Il framework Angular

                                Figura 4.3: Logo Angular

    Per lo sviluppo del front-end è stato utilizzato Angular, uno dei framework più uti-
lizzati nella creazione di applicazioni web open source. Il linguaggio di programmazione
di Angular è TypeScript mentre per la versione precedente, AngularJS, è JavaScript.
    Le applicazioni sviluppate in Angular vengono eseguite interamente dal web browser
dopo essere state scaricate dal web server. Questo comporta il risparmio di dover
spedire indietro la pagina web al web server ogni volta che c’è una richiesta di azione
da parte dell’utente.
Il codice generato da Angular gira su tutti i principali web browser moderni quali
Chrome, Miscrosoft Edge, Opera, Firefox, Safari ed altri. Angular è stato progetta-
to per fornire uno strumento facile e veloce, per sviluppare applicazioni che girano
su qualunque piattaforma inclusi smartphone e tablet, infatti le applicazioni web in
Angular in compilazione con il toolkit open sourse Bootstrap diventano responsive,
ossia il design del sito web si adatta in funzione alle dimensioni del dispositivo utilizzato.

    La creazione dell’ambiente di sviluppo per la realizzazione di un nuovo progetto
è un’operazione che potrebbe risultare complicata a causa della quantità di pachetti
software da integrare e per la definizione di diversi aspetti che potrebbero cambiare
nel tempo. Perciò per semplificare l’attività di setup iniziale dell’ambiente di sviluppo,
il team di Angular ha sviluppato Angular CLI, un ambiente a riga di comando per
creare la stuttura di un’applicazione Angular già configurata.
24                   CAPITOLO 4. TECNOLOGIE E STRUMENTI UTILIZZATI

4.4.2    Panoramica dell’architettura Angular
Angular è composto da diversi elementi che messi insieme formano un’applicazione, di
questi i principali sono i moduli, i componenti e i servizi.

                  Figura 4.4: Architettura ad alto livello di Angular

Moduli
I moduli possono essere considerati come i mattoni di un’applicazione Angular che
forniscono un’ambiente di compilazione per i componenti. Ogni applicazione contiene
un modulo radice, considerato il punto di partenza dell’applicazione, che caricandosi
permette l’avvio di tutti i componenti dell’applicazione.
Ciascun modulo può importare funzionalità di altri moduli ed esportare le proprie
funzionalità. L’organizzazione del codice in moduli aiuta nella gestione di codice
complesso e favorisce la riusabilità.
Per riuscire a comprendere meglio il concetto di modulo viene riportato il codice
dell’AppModule generato da Angular CLI.

                               Figura 4.5: AppModule
4.4. LINGUAGGI E FRAMEWORK                                                               25

  Come si può osservare un modulo è una classe identificata da un decoratore
@NgModule, che specifica diverse proprietà:

   ∗ declaration: specifica i componenti che appartengono al modulo;
   ∗ imports: contiene i moduli necessari per i componenti dichiarati;
   ∗ providers: dichiara tutti i servizi per renderli accessibili in tutte le parti dell’ap-
     plicazione;

   ∗ bootstrap: specifica la vista principale dell’applicazione;

Componenti
I componenti definiscono le viste della nostra applicazione, un insieme di elementi
schermo tra i quali Angular sceglie durante l’esecuzione e modifica in base al codice e
alla logica del programma. In un’applicazione Angular esiste sempre un componente
radice che contiene la struttura base del sito e che per convenzione prende il nome
di AppComponent. Ogni componente definisce una classe che contiene i dati e la
logica dell’applicazione ed è associato a un modello HTML che definisce una vista da
visualizzare. Per riuscire a comprendere meglio il concetto di modulo viene riportato il
codice dell’AppComponent generato da Angular CLI.

                              Figura 4.6: AppComponent

    Anche la classe component contiene un decoratore, @Component, che la identifica e
di cui specifica le seguenti proprioetà:
   ∗ selector : selettore che comunica ad Angular la creazione e l’inserimento di
     un’istanza di questo componente ovunque trovi il tag corrispondente nel file
     HTML;

   ∗ templateUrl : percorso relativo al modulo del file HTML di questo componente;
   ∗ styleUrls: percorso relativo al modulo del file CSS di questo componente.
26                      CAPITOLO 4. TECNOLOGIE E STRUMENTI UTILIZZATI

Two-way data binding

                Figura 4.7: Esempio del meccanismo two-way data binding

    Nell’immagine riportata si può notare un meccanismo molto importante supportato
da Angular, il two-way data binding, utilizzato per far comunicare un componente con
il proprio template. Il two-way data binding è composto da:

     ∗ Event binding: aggiornamento dei dati applicativi in seguito ad azioni di input
       dell’utente;
     ∗ Property binding: interpolazione dei dati di un componente visualizzabili nella
       view.

Servizi
I componenti usano i servizi, i quali forniscono specifiche funzionalità che non sono
direttamente collegate con le viste come ad esempio la gestione della comunicazione
con i server e il recupero dei dati da esso. Tali servizi vengono iniettati nei componenti
come delle dipendenze, rendendo il codice modulare, riutilizzabile ed efficiente. Ogni
servizio utilizza il decoratore @Injectable che permette ai componenti di includere il
servizio per poterlo utilizzare.

Dependency injection
Il meccanismo di dependency injection è un Design pattern della Programmazione
orientata agli oggetti il cui scopo è quello di semplificare lo sviluppo e migliorare la
testabilità di software di grandi dimensioni.
Angular include un suo meccanismo di dependency injection davvero solido e molto
flessibile, il cui utilizzo si riassume in tre semplici passi: si crea il servizio, si definisce
un injector e si inietta la dipendenza dove necessario. Le dipendenze vengono iniettate
definendole nei parametri del costruttore di un componente, queste dipendenze vengono
poi fornite al componente solamante quando la classe viene istanziata.

Vantaggi e svantaggi
Ho trovato molto utile l’utilizzo del framework Angular principalmente perchè impone
una logica chiara nell’organizzazione del codice, quindi c’è un rischio meno elevato
di andare in contro a codice confusionario e disordinato. È supportato dalla maggior
parte dei browser e comprende un grande numero di funzionalità aggiuntive utili che
possono essere integrate facilmente.
Uno svantaggio è presente nell’esperienza iniziale di utilizzo più complessa: per lanciare
un’applicazione è necessario installare la CLI, ed impostare un insieme di parametri.
Come detto in precedenza Angular è stato scritto utilizzando TypeScript, quindi è
necessario anche l’apprendimento di questo linguaggio. Nel complesso il framework
Angular fa utilizzo di molti elementi che ne facilitano l’utilizzo ma che rallentano la
4.4. LINGUAGGI E FRAMEWORK                                                            27

comprensione iniziale. Per evitare questo sforzo di apprendimento iniziale una libreria
molto diffusa nello lo sviluppo di applicazioni web è React.

4.4.3    Alternative ad Angular
Una delle principali e più diffuse tecnologie per lo sviluppo di web application è React.
React è una libreria JavaScript, open source sviluppata da Facebook nel 2013. React
consiste in un apprendimento più veloce e semplice e la principale differenza rispetto ad
Angular è che, essendo una libreria e non framework, oltre al core dobbiamo aggiungere
librerie di terze parti per realizzare specifiche parti delle nostre applicazioni.
Un’altra importante alternativa ad Angular è Vue.js, framework JavaScript opensource.
Vue.js è il più immediato da capire e il più facile da apprendere, persenta il vantaggio
di avere pagine web che si aggirano sui 2MB, sono le più leggere contro i 100Kb di
React e 500Kb di Angular. Ulteriore vantaggio è il passaggio da una versione alla
successiva il quale non crea pesanti problemi di compatibilità al contrario Angular.
Il principale svantaggio di Vue.js è che essendo così semplice da scrivere ed avendo
un’architettura poco complessa è più difficile da testarlo in modo automatico.

4.4.4    Typescript

                             Figura 4.8: Logo TypeScript

Essendo Angular scritto in TypeScript, per poter scrivere il codice dell’applicazione è
stato necessario l’apprendimento di questo nuovo linguaggio. TypeScript è un linguaggio
di programmazione open source sviluppato da Microsoft, che mira a facilitare lo sviluppo
di applicazioni su larga scala scritte in JavaScript. TypeScript rispetto a JavaScript
aggiunge i concetti di classi, moduli, interfacce, generics e la tipizzazione statica
opzionale. È un superset di JavaScript: tutto il codice JavaScript è codice TypeScript
valido quindi può essere aggiunto facilmente a qualsiasi progetto. Il codice TypeScript
sviluppato viene successivamente ricompilato in JavaScript per poter essere interpretato
da browser o app.
28                    CAPITOLO 4. TECNOLOGIE E STRUMENTI UTILIZZATI

4.4.5     Npm

                                Figura 4.9: Logo Npm

    Node Package Manager (NPM) è il principale software utilizzato per gestire i moduli
di Node.js e consente di condividere il codice per problemi tipici tra gli sviluppatori
JavaScript. La filosofia alla base di NPM è quella che se un problema è stato già
risolto da altri programmatori non ha senso doverlo sviluppare per conto proprio, è
possibile utilizzare la soluzione condivisa messa a disposizione di tutti. NPM oltre
a consentire il riuso del codice, consente di tenerlo costantemente sotto controllo in
modo da aggiornarlo se dovesse essere migliorato. NPM suddivide il codice in package
o moduli. Un package è una directory che contiene uno o più file messi insieme ad un
file chiamato package.json, che contiene dei dati relativi al pacchetto. In generale una
tipica applicazione è costituita da decine o migliaia di package.
Npm è utilizzato dal framework Angular nello sviluppo di Angular CLI, la quale
permette di avere un’applicazione Angular già configurata.

4.4.6     JSON Server

                             Figura 4.10: Logo Json Server

Nella prima fase della progettazione per non rallentare o bloccare lo sviluppo del
front-end a causa della mancanza di un back-end è stato necessario creare una fake api
rest con Json Server. L’utilizzo di Json server è stato consigliato dal tutor aziendale e
attraverso questo si sono simulate le chiamate GET e POST necessarie.
Json server è risultato uno strumento che ha facilitato l’esecuzione del lavoro inoltre è
configurabile in maniera veloce e chiara ed è facile da usare.
4.4. LINGUAGGI E FRAMEWORK                                                             29

4.4.7     Bootstrap

                             Figura 4.11: Logo Bootstrap

Bootstrap è il framework più famoso per lo sviluppo di siti web responsive e applicazioni
mobile. Esso contiene modelli di progettazione basati su HTML, CSS e JavaScript.
Inoltre è molto vantaggioso scegliere Bootstrap sin dall’inizio in quanto permette di
creare molto velocemente la struttara base del front-end.
In seguito all’indicazione da parte del tutor aziendale sull’utilizzo di questo framework,
la configurazione e l’utilizzo sono risultati molto semplici, inoltre è un buon punto di
riferimento quando non si sa bene come configurare un determinato elemento.
Bootstrap è molto più leggero degli altri framework e ha un design originale e semplice.
Attraverso l’utilizzo di Bootstrap si ha un responsive design, cioè un design che si
adatta dinamicamente a qualsiasi dispositivo e ciò è di fondamentale importanza per
questa fase storica che vede gli utenti navigare sul web da dispositivi molto diversi,
che vanno dal computer di casa allo smartphone di ultima generazione, passando per i
vari tablets. Infatti il responsive design è diventato praticamente obbligatorio.

   Importanti alternative a Bootstrap sono i framework Foundation e Semantic UI.

   ∗ Foundation è un css framework open source molto stabile e leggero, il più cono-
     sciuto a seguire di Bootstrap, esso è uno strumento adatto per la realizzazione
     di layout responsive. Uno dei suoi vantaggi è la versatilità: esso è ottimo per la
     realizzazione di template per email, web app mobile first e siti web.

   ∗ Semantic UI, come suggerisce il nome, è un framework che ha lo scopo di
     rendere il processo di creazione dei siti Web più semantico. La sua principale
     caratteristica è quindi di avere un codice molto leggibile chiamato human friendly
     HTML. Semantic UI presenta, a differenza di Bootstrap, una struttura dei
     componenti molto più complessa a causa della molteplicità dei stili che mette a
     disposizione e che può creare confusione.
Capitolo 5

Progettazione

In questo capitolo viene presentata la struttura delle classi creata durante la fase di
progettazione e viene dato un riassunto dei concetti appresi, utili per il design dell’in-
terfaccia grafica.

5.1     Struttura delle classi di Sync Lav
Dopo uno studio approffondito di Angular e le indicazioni ricevute dal tutor interno è
iniziata la progettazione delle classi, durante la quale, in alcuni momenti , c’è stato un
confronto con l’altro membro del progetto sugli aspetti di comune interesse.
    Infine si è giunti al seguente diagramma che rappresenta la stuttura principale delle
classi del front-end.

                           Figura 5.1: Diagramma delle classi

                                           31
32                                                  CAPITOLO 5. PROGETTAZIONE

   Come si può osservare dalla figura la classe AppModule è composta principalmete
da tre classi che rappresentano tre componenti:

     ∗ La classe PaginaIniziale la quale si occupa di permettere l’accesso alle altre
       due pagine del sito;

     ∗ La classe ConfigurazioneScheduler la quale, come si può intuire dal nome, si
       occuppa della configurazione dello scheduler, quindi della compilazione dei campi
       form neccessari e successivamente gestisce il salvataggio della configurazione
       impostata. Il salvataggio e l’invio dei dati al server avviene attraverso l’iniez-
       zione della classe servizio SchedulerService mediante l’utilizzo della depencency
       injection;

     ∗ La classe RisultatiScheduler è composta da una sezione di configurazione dei
       filtri da applicare a una tabella sottostante che mostra i risultati dello scheduler.
       La classe si occupa dell’invio della configurazione dei filtri allo server, e della
       ricezione degli annunci da mostrare in tabella. La comunicazio con il server
       avviene attraverso l’utilizzo dalla classe servizio AnnunciServer, anche questa
       iniettata nella classe RisultatiScheduler mediante l’utilizzo della dependency
       injection.

5.2       User Experience

                               Figura 5.2: User Experience

    Con il termine User Experience (esperienza d’uso) s’intende ciò che una persona
prova durante l’utilizzo di un sito web, un insieme complesso tra esperienza, emozioni
e sensazioni che si percepiscono durante la navigazione in un sito web.
A determinare la User Experience concorrono diversi fattori: l’usabilità del sito web, il
design e la grafica, l’accessibilità, la strategia di comunicazione, i contenuti ed anche
la Search Engine Optimization (SEO), indispensabile per far sì che il sito web sia
rintracciabile sui motori di ricerca.
L’obiettivo finale che si cerca di raggiungere attraverso la User Experience è quello di
5.2. USER EXPERIENCE                                                                   33

migliorare l’esperienza dell’utente fornendogli esattamente ciò che desidera in modo
rapido senza correre il rischio di andare in contro a complicazioni che potrebbero
generare frustrazione nell’utente e successivo abbandono del sito.
   Un sito web capace di assicurare una User Experience positiva deve possedere delle
caratteristiche ben precise. In particolare, il sito web deve essere:
   ∗ Usabile: L’utente deve riuscire a navigare con facilità, raggiungendo i suoi
     obiettivi senza difficoltà.

   ∗ Accessibile: Il sito deve essere comprensibile a tutte le categorie di utenti in
     ogni punto della sua struttura e in qualsiasi momento.
   ∗ Funzionale: Sia lo sviluppatore sia l’utente deve essere in grado, attraverso il
     sito, di raggiungere i proprio obiettivi.

   ∗ Attraente: L’estetica del sito deve essere bella e piacevole alla vista dell’utente.
     Un sito che possiede tutte le caratteristiche necessarie per regalare un’ottima
     esperienza d’utente ma non è attrante, nei maggiori dei casi, non trasmette
     sensazioni positive all’utente.
   ∗ Utile: L’utente attraverso la navigazione nel sito deve ottenere un ricavo,
     qualcosa di concreto e utile altrimenti è improbabile il ritorno sullo stesso sito.
   ∗ Completo: Un sito incompleto crea disorientamento, quindi la struttura del
     sito e tutte le informazioni che vengono offerte devono essere complete ottenendo
     così la fiducia di chi lo utilizza.
   ∗ Chiaro: L’utente deve impiegare poco tempo per comprendere dove si trova,
     l’utilità del sito e cosa questo gli può offrire.
   ∗ Rintracciabile: Per essere rintracciabile il nostro sito deve comparire tra i primi
     10 risultati di una ricerca sul browser, la quale contiene le parole chiave del sito.
   ∗ Interattivo: Un sito web per riuscire a trasmettere una buona user experience
     deve riuscire a diminuire le distanze tra lo sviluppatore e l’utente, cercando ad
     esempio di consentire un dialogo per risolvere velocemente eventuali difficoltà o
     richieste.

5.2.1    Target
Per riuscire a offrire una buona user exerience lo sviluppatore ha il fondamentale
compito di indentificare la categoria di utenti(target) che andranno ad utilizzare il suo
sito. Questo aspetto è importante per riuscire a soddisfare tutti i bisogni e le richieste
dell’utente e rispondere a tutte le domande che ci si può porre durante la progettazione
come ad esempio: Di cosa ha bisogno? Cosa desidera? Cosa si aspetta di trovare sul
sito web? E cosa no? Come si può soddisfarlo? E come si può sorprendere? In poche
parole l’utente è il soggetto del sito web e tutto ruota attorno ad esso.
Puoi anche leggere