Università degli Studi di Padova - SIAGAS

Pagina creata da Martina Rota
 
CONTINUA A LEGGERE
Università degli Studi di Padova - SIAGAS
Università degli Studi di Padova
    Dipartimento di Matematica ”Tullio Levi-Civita”
                    Corso di Laurea in Informatica

Analisi e confronto dei paradigmi di progettazione delle
                        API web
                               Tesi di laurea

Relatore                                               Laureando
Prof. Tullio Vardanega                               Mauro Fasolo

                         Anno Accademico 2019-2020
Università degli Studi di Padova - SIAGAS
Mauro Fasolo: Analisi e confronto dei paradigmi di progettazione delle API web, Tesi di laurea
triennale, ©Aprile 2020.
Università degli Studi di Padova - SIAGAS
Sommario

Il presente documento descrive il lavoro svolto durante il periodo di stage dal laureando Mauro
Fasolo presso l’azienda Diana E-Commerce Corporation S.r.l. di Torreglia (PD). Ho svolto lo
stage alla conclusione del percorso di studi della Laurea Triennale in Informatica per una du-
rata totale di 303 ore. Gli obiettivi da raggiungere rispondono alla necessità aziendale di con-
durre un’analisi comparativa dei paradigmi di design delle API web, sugli stili architetturali e
sulle pratiche utilizzate per svilupparle renderle sicure. Il primo capitolo presenta il contesto
organizzativo e produttivo dell’azienda ospitante. Il secondo capitolo discute quali problemi
l’organizzazione ha inteso affrontare con lo stage. Il terzo capitolo documenta lo svolgimento
dello stage, presentando le attività svolte per punti salienti ed eventuali difficoltà incontrate. Il
quarto ed ultimo capitolo contiene una valutazione retrospettiva dello svolgimento dello stage
rispetto agli obiettivi iniziali e alle conoscenze acquisite.

                                                 iii
Università degli Studi di Padova - SIAGAS
Indice
1 L’ azienda                                                                                                                           1
  1.1 La missione . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
       1.1.1 Caratteristiche dell’azienda . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
       1.1.2 Mercato di riferimento . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
  1.2 Visione agile . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
       1.2.1 Organizzazione dell’azienda .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
       1.2.2 Lo sviluppo software . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
       1.2.3 La manutenzione del software          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
  1.3 Tecnologie utilizzate . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6

2 Il PoC per diffondere il know-how                                                                                                     9
  2.1 La scelta dell’azienda . . . . . . . . . . . . . . . . . . . . . . . . .                                     .   .   .   .   .    9
       2.1.1 Obiettivi personali . . . . . . . . . . . . . . . . . . . . . .                                       .   .   .   .   .    9
       2.1.2 Perché ho scelto Diana Corp . . . . . . . . . . . . . . . . .                                         .   .   .   .   .   10
  2.2 Documentare con un PoC . . . . . . . . . . . . . . . . . . . . . .                                           .   .   .   .   .   10
       2.2.1 Un portale per la pubblicazione della documentazione . . . .                                          .   .   .   .   .   10
       2.2.2 Rendere la conoscenza accessibile . . . . . . . . . . . . . .                                         .   .   .   .   .   12
       2.2.3 Tecnologie utilizzate . . . . . . . . . . . . . . . . . . . . .                                       .   .   .   .   .   12
       2.2.4 Impatto del PoC nel breve periodo . . . . . . . . . . . . . .                                         .   .   .   .   .   14
  2.3 Lo stage in un’azienda agile . . . . . . . . . . . . . . . . . . . . . .                                     .   .   .   .   .   15
       2.3.1 Documentare per il team di sviluppo . . . . . . . . . . . . .                                         .   .   .   .   .   15
       2.3.2 Il software funzionante più che la documentazione esaustiva                                           .   .   .   .   .   16
       2.3.3 L’importanza di scrivere il codice di buona qualità . . . . . .                                       .   .   .   .   .   17
       2.3.4 Obiettivi dello stage . . . . . . . . . . . . . . . . . . . . .                                       .   .   .   .   .   17
       2.3.5 Utilità del PoC nel lungo periodo . . . . . . . . . . . . . .                                         .   .   .   .   .   18
  2.4 Vincoli di stage . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                     .   .   .   .   .   18
       2.4.1 Vincoli temporali . . . . . . . . . . . . . . . . . . . . . . .                                       .   .   .   .   .   18
       2.4.2 Vincoli tecnologici . . . . . . . . . . . . . . . . . . . . . .                                       .   .   .   .   .   18
  2.5 Strategie per il riutilizzo . . . . . . . . . . . . . . . . . . . . . . .                                    .   .   .   .   .   19
       2.5.1 Il PoC e la dimostrabilità . . . . . . . . . . . . . . . . . . .                                      .   .   .   .   .   19
       2.5.2 Fonti affidabili per il Copy&Paste . . . . . . . . . . . . . .                                        .   .   .   .   .   19
       2.5.3 La documentazione come strumento di riuso . . . . . . . .                                             .   .   .   .   .   20

3 Lo sviluppo del PoC                                                                                                                  21
  3.1 Il metodo di lavoro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                21
      3.1.1 Pianificazione delle attività . . . . . . . . . . . . . . . . . . . . . . .                                                21

                                              iv
Università degli Studi di Padova - SIAGAS
3.1.2 Revisioni di progresso . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
       3.1.3 Analisi e tracciamento dei requisiti . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
   3.2 Sviluppo del prodotto . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
       3.2.1 Analisi . . . . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   23
       3.2.2 Progettazione . . . . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
       3.2.3 Programmazione . . . . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
       3.2.4 Verifica e validazione . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36
       3.2.5 Rilascio del prodotto su Heroku . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
   3.3 Risultati ottenuti . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
       3.3.1 Copertura dei requisiti . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
       3.3.2 Copertura dei test . . . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
       3.3.3 Linee di codice e documenti prodotti         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
   3.4 Scenario d’uso . . . . . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44

4 Valutazione retrospettiva                                                                                                   47
  4.1 Valutazione rispetto agli obiettivi fissati . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
      4.1.1 Obiettivi fissati dallo stage . . . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
      4.1.2 Obiettivi raggiunti a fine stage . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
      4.1.3 Valutazione dell’organizzazione ospitante .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
      4.1.4 Valutazione personale . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
  4.2 Valutazione generale dell’esperienza . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
      4.2.1 Conoscenze e abilità maturate . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
      4.2.2 Valutazione personale . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
  4.3 Valutazione rispetto alle competenze richieste . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
      4.3.1 Competenze utilizzate durante lo stage . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
      4.3.2 Competenze mancanti . . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
      4.3.3 Valutazione personale . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50

Glossario                                                                                                                     53

Bibliografia                                                                                                                  61

                                              v
Università degli Studi di Padova - SIAGAS
Elenco delle figure
1.1    La catena del valore . . . . . . . . . . . . . . . . . . . . . . . . . . .                                             .   .   .   .   .    2
1.2    I servizi del commercio elettronico in rete . . . . . . . . . . . . . . . .                                            .   .   .   .   .    3
1.3    Lo sviluppo con Scrum . . . . . . . . . . . . . . . . . . . . . . . . .                                                .   .   .   .   .    5
1.4    L’orchestrazione dei sottosistemi del commercio in rete . . . . . . . . .                                              .   .   .   .   .    7
2.1    Il risultato dell’analisi dei paradigmi di progettazione . . . . . . . . . .                                           .   .   .   .   .   11
2.2    Architettura di integrazione . . . . . . . . . . . . . . . . . . . . . . .                                             .   .   .   .   .   12
2.3    Il codice interattivo per interagire con le WebAPI . . . . . . . . . . . .                                             .   .   .   .   .   16
3.1    Pianificazione delle attività di progetto . . . . . . . . . . . . . . . . . .                                          .   .   .   .   .   22
3.2    Casi d’uso del sistema web . . . . . . . . . . . . . . . . . . . . . . . .                                             .   .   .   .   .   24
3.3    Casi d’uso per le WebAPI Request-Response nel sistema web . . . . . .                                                  .   .   .   .   .   25
3.4    Casi d’uso per i protocolli e per le WebAPI Event-Driven nel sistema web                                               .   .   .   .   .   25
3.5    Il software design pattern MVC . . . . . . . . . . . . . . . . . . . . .                                               .   .   .   .   .   29
3.6    Il dialogo tra client e server per il paradigma Event-Driven . . . . . . . .                                           .   .   .   .   .   31
3.7    Architettura di sistema . . . . . . . . . . . . . . . . . . . . . . . . . .                                            .   .   .   .   .   32
3.8    Architettura headless . . . . . . . . . . . . . . . . . . . . . . . . . . .                                            .   .   .   .   .   44
3.9    Scenario di integrazione . . . . . . . . . . . . . . . . . . . . . . . . .                                             .   .   .   .   .   45

Elenco delle tabelle
3.2    Pianificazione degli Sprint . . . . .     .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22
3.4    Requisiti funzionali . . . . . . . .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
3.6    Requisiti di vincolo . . . . . . . .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
3.8    Test di unità . . . . . . . . . . . .     .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37
3.10   Test di integrazione . . . . . . . .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
3.12   Copertura dei requisiti funzionali .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
3.14   Copertura dei requisiti di vincolo .      .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
3.16   Risultato dei test di unità . . . . .     .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
3.18   Rapporto sui prodotti del tirocinio       .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
4.2    Obiettivi fissati . . . . . . . . . . .   .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48
4.4    Conoscenze e abilità maturate . . .       .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   49
4.6    Competenze acquisite . . . . . . .        .   .   .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50

                                                         vi
Università degli Studi di Padova - SIAGAS
1 L’ azienda

1.1      La missione

1.1.1     Caratteristiche dell’azienda
Diana E-Commerce Corporation, da ora in poi Diana Corp, è un’agenzia internazionale con
sede a Padova, Milano e New York, specializzata nella creazione, gestione e promozione di siti
per il commercio in rete nell’ambito della moda.
    L’attuale CEO Stefano Mocellini e la CCO Margherita Silvestri operano nel campo della
moda e della vendita in rete dal 2004. L’azienda Diana Corp nasce nel 2007, in seguito alla
realizzazione del sito di commercio elettronico per Gas Jeans [1].
    La nuova azienda progetta e realizza un flagship store in rete per i marchi di moda. Questo
punto di vendita al dettaglio è sviluppato con tecnologie pensate per la vendita online, in questo
modo, l’azienda offre ai clienti un sistema di commercio in rete. Attraverso la condivisione
dell’istanza del portale, Diana Corp utilizza un solo strumento per gestire le richieste di più
clienti.
    Diana Corp offre servizi per il commercio elettronico, sia a quelli che preferiscono una
soluzione pronta all’uso, sia a quelli che hanno un maggiore grado di autonomia nel mondo
del commercio elettronico e che sono alla ricerca di un’offerta personalizzata.

1.1.2     Mercato di riferimento
I servizi offerti da Diana Corp costituiscono i bulding blocks che ricorrono nelle organizzazioni
appartenenti al settore manifatturiero [2]. Organizzando i processi secondo il modello di catena
del valore, l’azienda offre linee di impresa distinte. Con la separazione dei processi l’azienda può
gestire: progetti che accompagnano i clienti nell’uso della piattaforma e progetti che richiedono
l’affiancamento del cliente nel suo processo di trasformazione digitale.

                                                 1
2   CAPITOLO 1. L’ AZIENDA

                                 Figura 1.1: La catena del valore
                     https://it.wikipedia.org/wiki/Catena_del_valore

    I servizi offerti da Diana Corp sono i seguenti: supporto IT, gestione del negozio in rete,
gestione dell’immagine del marchio, photoshooting, supporto clienti, logistica e gestione del mag-
azzino.
    I servizi offerti dall’azienda possono essere classificati in due tipologie:
    • i servizi gestiti, sono rivolti ai clienti che non hanno l’interesse o le competenze necessarie
      ad internalizzare le funzioni offerte da Diana Corp;
    • i servizi professionali, sono rivolti ai clienti che richiedono l’affiancamento del personale
      Diana Corp nel percorso di trasformazione digitale.
    Attraverso queste due linee di impresa, l’azienda modula l’offerta per le diverse tipologie di
cliente.
    Il cliente promuove e consegna il proprio bene attraverso il commercio elettronico in rete,
svolgendo le attività definite dai processi aziendali Diana Corp. Questi processi aziendali pos-
sono essere adottati dal cliente, sfruttando la piattaforma. L’azienda prevede l’adozione parziale
dei servizi con progetti personalizzati, quando il cliente ha maggiore autonomia e quando il suo
processo di trasformazione digitale è in corso.
    Il flagship store Diana Corp è il prodotto che meglio rappresenta il core business dell’azienda.
Con questo prodotto, l’azienda offre i servizi per la prima linea d’impresa. La pila software del
portale è realizzata con tecnologie che sono gestite da figure IT con professionalità specifiche. I
clienti che ancora non consegnano i propri beni, utilizzando il commercio elettronico, possono
intrecciare il proprio modello di impresa con la catena del valore Diana Corp e proporre le stesse
1.2. VISIONE AGILE           3

tipologie di servizio agli utenti finali. Il flagship store Diana Corp prevede la multitenancy, per
questa ragione un’attenta attività di analisi deve essere svolta per pianificare la corretta condivi-
sione delle risorse disponibili. Ogni servizio Diana Corp mette a disposizione le proprie risorse
per personalizzare la piattaforma.
     I servizi professionali Diana Corp rappresentano la seconda linea di impresa per i quali mette
a disposizione figure professionali specializzate. Queste figure affiancano il cliente trasmettendo
il loro know-how. Con le competenze acquisite il cliente completa la propria catena del valore e
consegna i beni attraverso il commercio elettronico in rete.
     Il cliente può richiedere una combinazione di servizi delle due linee di impresa e completare
la propria catena del valore.

                     Figura 1.2: I servizi del commercio elettronico in rete
                  https://ayaatechnologies.com/ecommerce-development/

1.2      Visione agile
Nella sezione a seguire, ho descritto l’organizzazione aziendale del reparto software. Diana Corp
adotta metodologie per la gestione dei progetti come Waterfall, Kanban e Scrum. Durante il
periodo di tirocinio, ho notato una forte relazione tra l’identità aziendale e l’impiego dei metodi
agili. I principi del manifesto Agile rispecchiano ,infatti, il modo di lavorare dell’azienda che
promuove: interazione tra gli individui, collaborazione e reattività al cambiamento.
4    CAPITOLO 1. L’ AZIENDA

1.2.1      Organizzazione dell’azienda
Ad ognuno dei servizi offerti da Diana Corp è associato un reparto. Le istanze di processo gener-
ate all’interno dei reparti, rappresentano gli anelli della catena del valore alla base dell’organizzazione
aziendale. Grazie al basso grado di accoppiamento dei reparti e dei servizi, Diana Corp rivende
i servizi delle due linee di impresa. Ad esempio, l’azienda può rivendere sevizi di photoshooting
senza richiedere l’intervento degli altri reparti.
     Il reparto IT progetta e realizza le funzionalità software della piattaforma, collaborando con
le figure professionali messe a disposizione dagli altri reparti Diana Corp. Il reparto IT è suddi-
viso in team:
     • il team di sviluppo effettua manutenzioni evolutive e correttive sui servizi con il quale
        l’utente finale interagisce;
     • il team di integrazione gestisce e definisce il dialogo applicativo tra i sottosistemi che com-
        pongono il sistema di commercio elettronico;
     • il team di rilascio installa le nuove versioni dei prodotti negli ambienti previsti dal ciclo di
        vita;
     • il team degli amministratori intercetta errori di sistema e problemi di performance. Gli
        amministratori segnalano errori e problemi di performance al team di sviluppo. Il team di
        sviluppo interviene sul prodotto e migliora la qualità del servizio;
     • il team sicurezza indica le pratiche da adottare per sviluppare i prodotti in modo sicuro.
        Il team segnala anche i problemi di sicurezza per i prodotti già rilasciati.
     Per coordinare le attività di progetto, i responsabili di progetto sono collocati in modo trasver-
sale rispetto ai reparti. Ai responsabili di progetto é demandato il controllo del Product Back-
log. Adottando i metodi agili, i responsabili pianificano le attività giorno per giorno, in questo
modo, l’azienda reagisce velocemente alle richieste dei clienti. La metodologia Agile, adottata
dal reparto IT, rende frequente e conviviale la comunicazione tra i membri del gruppo e, allo
stesso tempo, l’adozione della metodologia garantisce formalità nel processo di gestione.

1.2.2      Lo sviluppo software
Di seguito, illustro il processo di gestione di una commessa per un cliente che richiede l’erogazione
dei servizi gestiti attraverso il flagship store.
    Alla nuova commessa segue la creazione di un’istanza di progetto nello strumento di ges-
tione dei progetti. Le richieste effettuate dal cliente, vengono analizzate dai responsabili e dai
membri di progetto del reparto IT. Le attività definite per rispondere alle richieste del cliente,
vengono scomposte e inserite nel Product backlog. I membri del reparto IT tracciano gli at-
1.2. VISIONE AGILE            5

tributi delle attività come: la data di inizio, la data di fine, l’assegnatario e la priorità. Utilizzando
queste informazioni, i responsabili di progetto ne adattano la strategia di conduzione durante
uno Sprint.

                                Figura 1.3: Lo sviluppo con Scrum
                    https://it.wikipedia.org/wiki/Scrum_(informatica)

    Ambienti di sviluppo, collaudo e staging vengono preparati per accogliere la codebase del
nuovo tenant. Il team di rilascio si occupa di gestire il dislocamento della codebase, nei vari am-
bienti, quando vengono prodotti incrementi funzionali significativi.
    Nelle fasi iniziali di sviluppo del progetto, vengono coinvolte risorse dai team di sviluppo
e di integrazione. Le regole di usabilità, per soddisfare il cliente, sono individuate dal team di
sviluppo. Il team di integrazione, invece, scompone i flussi dati che regolano ordine, pagamento
e consegna del bene.
   Durante lo svolgimento del progetto vengono utilizzate tutte le cerimonie dello Scrum frame-
work.
    Gli Sprint vengono pianificati, tipicamente, con durata bisettimanale. All’inizio di ogni
giornata, i responsabili di progetto guidano gli incontri di progetto utilizzando gli strumenti
per la gestione delle attività. Le risorse partecipano agli incontri per il progetto al quale sono
state assegnate. Durante la giornata, i membri dei team IT coinvolti nel progetto portano a
termine le attività assegnate. Tutti i membri del reparto IT coinvolti nel progetto, utilizzano gli
strumenti di gestione per tracciare i progressi ottenuti durante lo svolgimento dei compiti. Al
termine della settimana, durante gli incontri di retrospettiva e di revisione, vengono effettuate
valutazioni sull’andamento del progetto. In quel momento, i membri di progetto propongono
soluzioni per migliorare l’efficienza degli Sprint successivi.
6    CAPITOLO 1. L’ AZIENDA

1.2.3      La manutenzione del software
La metodologia Agile viene utilizzata anche durante il processo di manutenzione. Sprint e stru-
menti per la gestione di progetto, vengono utilizzati per gestire le attività di manutenzione. Il
processo di manutenzione adotta una combinazione di Scrum e Kanban, per aumentare la reat-
tività nei confronti delle richieste del cliente.
     Il modello combinato prevede la presenza di una scrivania Kanban. Gli sviluppatori utiliz-
zano un modello di tipo pull per perdere in carico la richiesta. In questo modo, si semplifica
l’attività di pianificazione delle manutenzioni e vengono ridotti i tempi di risposta.
     La suddivisione del ciclo di vita dei prodotti software nelle varie fasi, aiuta a mitigare il ris-
chio di fallimento durante il rilascio di nuove funzionalità e di correzioni. Le funzionalità e le
correttive rilasciate dal reparto IT, attraversano sempre tutte le fasi del ciclo di vita. I clienti dei
progetti, affiancati dai responsabili di progetto, collaborano attivamente al processo di sviluppo
e rilascio. Dopo la fase di collaudo, i feeback del cliente vengono filtrati, valutati e lavorati dai
responsabili di progetto e dagli sviluppatori. Verifica e validazione vengono effettuate, insieme
al cliente, per stabilire cosa deve essere rilasciato negli ambienti di produzione.

1.3      Tecnologie utilizzate
Nel sistema sviluppato per offrire i servizi gestiti, i rivenditori e i gestori del magazzino trac-
ciano informazioni e dettagli su ordini, prezzi, livelli multipli di inventario, carrelli della spesa
abbandonati, posizioni di stoccaggio dei prodotti, tempi e costi di consegna. Alcune di queste
informazioni sono rilevanti per i consumatori che si aspettano di poterle trovare in uno spazio
dedicato come “i miei ordini” (almeno sul web o sul dispositivo mobile).
    Per offrire tutte le funzioni sopra descritte è quindi necessario disporre di un sistema di ges-
tione degli ordini. Il sistema di gestione degli ordini dell’azienda orchestra diversi sottosistemi.
Ogni sottosistema, a sua volta, è incaricato della risoluzione e della gestione di una parte dei
servizi offerti dall’intero sistema. Ad esempio, il sottosistema di spedizione della merce prende
in carico gli ordini di spedizione e traccia il percorso del bene fino alla consegna.
    L’azienda usa strumenti di integrazione, coinvolgendo i sottosistemi del commercio elettron-
ico, per completare l’evasione degli ordini. Ogni sottosistema espone API che possono essere
utilizzate per attivare le funzioni dello specifico sottodominio. Ad esempio, al momento del
pagamento della merce in carrello, possono essere invocate le API di un sottosistema come Pay-
Pal per gestire la transazione con la carta di credito.
1.3. TECNOLOGIE UTILIZZATE                  7

   Il sistema di integrazione può prelevare tutti i pagamenti effettuati con PayPal per confer-
mare quali ordini devono essere trasferiti al sottosistema di gestione e consegna della merce.

             Figura 1.4: L’orchestrazione dei sottosistemi del commercio in rete
                                     https:
//blog.clever-age.com/en/2018/04/30/oms-a-key-enabler-of-omni-channel-commerce/

     L’adozione della metodologia Agile e lo sviluppo di prodotti di alto profilo hanno spinto Di-
ana Corp ad utilizzare soluzioni software commerciali specificamente progettate per il mercato
di riferimento, concentrando quindi le proprie energie sulla qualità del prodotto da consegnare
al cliente.
     Diana Corp utilizza gli ambienti in cloud e i framework messi a disposizione da compagnie
come Salesforce, Atalassian e Dell, riducendo i costi associati alla gestione dell’hardware.
     Con riferimento alle numerose tecnologie utilizzate dall’azienda, è sembrato importante ri-
portare quelle che vengono maggiormente impiegate nei progetti per la gestione del commercio
in rete.

Jira
     Jira è un software appartenente alla suite Atlassian. Il sistema viene utilizzato dalle aziende
che, prevalentemente, adottano la metodologia di sviluppo Agile per organizzare i progetti e
dividere le attività in compiti assegnati ad ogni membro del progetto. In questa applicazione
il responsabile di progetto registra le attività da svolgere e le assegna ai membri del gruppo di
8    CAPITOLO 1. L’ AZIENDA

sviluppo. L’assegnatario ritroverà nella propria bacheca personale le varie attività da svolgere,
con tutte le informazioni di dettaglio come: descrizione, creatore, priorità, utenti assegnati, data
di conclusione, stato del compito (da fare, in corso, completato, da rivedere, ecc..), allegati e
commenti.
    L’applicazione viene utilizzata dai reparti che dialogano con il reparto IT, per tracciare l’andamento
dei progetti e per coordinare le attività e i compiti assegnati alle risorse.

Boomi
    Boomi è una piattaforma di integrazione cloud per il collegamento di applicazioni e dati
cloud e locali. Acquistata da Dell nel 2010, la piattaforma consente la progettazione di processi
di integrazione basati su cloud e il trasferimento dati tra applicazioni cloud e locali. Le API es-
poste dai sottosistemi, consentono a Boomi di definire oggetti sorgente e oggetti destinazione
per trasformare e trasferire le informazioni.
    La piattaforma viene utilizzata dall’azienda , per realizzare il dialogo tra i sottosistemi che
partecipano al flusso di commercio elettronico.

Salesforce
    Salesforce fornisce un servizio di gestione delle relazioni con i clienti (CRM). Salesforce pro-
pone, inoltre, una suite di applicazioni aziendali incentrate sul servizio clienti, sull’automazione
del marketing, sull’analisi e sullo sviluppo di applicazioni.
    B2C Commerce è un’applicazione, appartenente alla suite, che fornisce le risorse per lo sviluppo
dei siti di commercio elettronico in rete. L’applicazione, mette a disposizione librerie per l’integrazione
con sistemi terze parti e un ambiente cloud dove è possibile gestire il ciclo di vita dei prodotti.
    B2C Commerce è il framework utilizzato dal team di sviluppo Diana Corp, per realizzare le
vetrine dei clienti.

NetSuite
    NetSuite Inc. è una società americana di cloud computing che fornisce software e servizi per
la gestione: delle finanze aziendali, delle operazioni e delle relazioni con i clienti. I suoi software
e servizi sono personalizzati per le piccole, medie e grandi aziende con moduli per ERP , CRM,
e commercio elettronico.
    Diana Corp utilizza prodotti appartenenti alla suite, per gestire le risorse utilizzate dal com-
mercio elettronico.
Il PoC per diffondere il know-how
                                                                           2
2.1     La scelta dell’azienda

2.1.1     Obiettivi personali
Ho intrapreso il percorso di studi come studente lavoratore e concluderò questa esperienza du-
rante lo svolgimento dell’attività lavorativa. Attualmente mi occupo di sviluppo di applicazioni
web. Le motivazioni che mi hanno portato a svolgere il tirocinio, provengono dall’esperienza
lavorativa e dalla carriera di studente del corso di laurea.
    Durante la mia carriera di studente, ho sperimentato un metodo di apprendimento diverso
da quello acquisito con l’esperienza lavorativa. Il corso di laurea, mi ha insegnato ad essere più
consapevole dell’attività che svolgo. Nel percorso formativo mi sono stati presentati concetti
che applicherò nel mondo del lavoro e pertanto, voglio sfruttare lo stage per mettere in pratica
queste conoscenze e valutarne l’efficacia.
    Dall’esperienza lavorativa ho appreso che i concetti proposti dal corso di laurea, non sono
adottatati da tutte le aziende del settore informatico. Gli strumenti acquisiti durante il percorso
di studio mi hanno fornito gli strumenti per valutare le aziende tenendo conto di alcuni fattori,
tra cui il raggiungimento degli obiettivi e l’adeguamento ai metodi di lavoro riconosciuti dalla
comunità accademica. Indipendentemente dalla realtà lavorativa nella quale sarò impiegato,
confido che questi strumenti potranno essermi di aiuto nello scegliere le future opportunità di
lavoro e nel gestire i nuovi progetti che mi aspettano.
    Molte delle aspettative del tirocinio sono legate a quanto sopra descritto. La scelta dell’azienda
in cui svolgere il tirocinio doveva rispondere ai seguenti criteri:
     • lo svolgimento del tirocinio doveva condizionare in misura minima lo svolgimento dell’attuale
       attività lavorativa;
     • le tecnologie impiegate dall’azienda dovevano essere all’avanguardia;
     • i rapporti con il personale dovevano essere possibilmente conviviali per rendere l’esperienza
       di stage piacevole, oltre che professionale;

                                                9
10     CAPITOLO 2. IL POC PER DIFFONDERE IL KNOW-HOW

     • il personale con il quale avrei interagito doveva dimostrarsi qualificato per scambiare opin-
       ioni e per poter ricevere consiglio in caso di difficoltà;
     • i metodi e le pratiche dell’azienda dovevano essere molto vicine ai metodi e alle pratiche
       apprese durante il percorso di studio;
     • con il progetto di tirocinio volevo esplorare temi innovativi per aumentare le mie abilità;
     • l’esperienza di tirocinio doveva essere un’opportunità per far conoscere le mie abilità all’azienda,
       anche nella prospettiva di una possibile collaborazione;
     • infine, l’adozione dei metodi agili da parte dell’azienda avrebbe rappresentato un valore
       aggiunto.

2.1.2      Perché ho scelto Diana Corp
Per individuare l’azienda che mi avrebbe ospitato durante il tirocinio, ho portato a termine una
ricerca esplorativa. I candidati, scelti dal roster di aziende presenti a stage.it 2019, sono stati se-
lezionati e valutati utilizzando gli obiettivi personali. Alcune delle aziende presenti nella lista
sono state consigliate anche da ex colleghi di studio. Ho orientato la scelta del progetto su argo-
menti che avrei voluto approfondire nel mondo del lavoro.
    Ho valutato positivamente il colloquio conoscitivo con il tutor di Diana Corp poichè la pro-
posta del progetto di tirocinio era in linea con le mie competenze e consentiva l’approfondimento
di temi che ritenevo interessanti, dal punto di vista professionale.
    In conclusione, ho scelto Diana Corp, perché le caratteristiche dell’azienda e il progetto di
tirocinio, proposto dal tutor, erano in linea con le mie aspettative.

2.2      Documentare con un PoC

2.2.1      Un portale per la pubblicazione della documentazione
Come descritto nel capitolo §1, Diana Corp è un’azienda che crede nell’adozione dei metodi agili.
Il principio del manifesto Agile, “Working software over comprehensive documentation”, ispira la
strategia di gestione del progetto. Il Proof of concept (PoC), è la realizzazione di un certo metodo
o idea, al fine di dimostrarne la fattibilità o una dimostrazione in linea di principio. L’obiettivo
del PoC, è verificare che alcuni concetti o teorie, abbiano un potenziale pratico [3]. Il progetto
di stage è quindi un PoC.
     Durante lo svolgimento del tirocinio, ho pubblicato nel web il risultato del mio lavoro. Il
prodotto da me realizzato non consiste unicamente in una blackbox utilizzabile dagli utenti fi-
nali. Ho rilasciato il codice sorgente del prodotto, con licenza MIT, all’interno della piattaforma
2.2. DOCUMENTARE CON UN POC                      11

GitHub. In questo modo, il codice sorgente del prodotto può essere consultato liberamente da
tutti.
    L’argomento del progetto di stage risponde a necessità dell’azienda ospitante. Il flagship
store dell’azienda, può essere classificato come SaaS e il basso grado di accoppiamento delle com-
ponenti del sistema, è ottenuto attraverso l’esposizione di interfacce applicative dette WebAPI.
Gli sviluppatori software che operano sulla piattaforma devono scegliere WebAPI appropriate
per realizzare il dialogo tra le varie componenti poiché l’efficienza e l’efficacia delle funzionalità
sviluppate dipende dal corretto impiego delle stesse.
    Il prodotto da me realizzato, fornisce un’analisi e un confronto dei paradigmi di proget-
tazione delle WebAPI. L’ho concepito per aiutare gli sviluppatori a scegliere il paradigma di
progettazione, durante lo sviluppo della piattaforma. Request-Respose ed Event-Driven sono le
tipologie di paradigma da me presentate.

               Figura 2.1: Il risultato dell’analisi dei paradigmi di progettazione
                          https://webapi-analysis.herokuapp.com/

     Il prodotto non è rivolto unicamente agli sviluppatori del flagship store Diana Corp ma an-
che a sviluppatori che intendono integrare servizi terze parti. Il portale Microsoft Azure è un
esempio di prodotto terze parti utilizzato dall’azienda. Il portale Microsoft mette a disposizione
WebAPI per dialogare con i servizi del prodotto Office 365 che utilizza lo stile architetturale
REST per accedere agli eventi di calendario e ai messaggi di posta elettronica .
     Un altro argomento che ho affrontato con il PoC è la sicurezza delle WebAPI. In molti casi
gli sviluppatori devono progettare e costruire interfacce applicative per esporre i dati aziendali su
Internet. Ciò significa che, software esterni possono consultare i dati rilasciati da Diana Corp. In
12    CAPITOLO 2. IL POC PER DIFFONDERE IL KNOW-HOW

questo scenario, è necessario progettare le WebAPI in modo sicuro per proibire l’accesso alle
applicazioni non autorizzate. Nel prodotto sono documentate le pratiche da utilizzare per rag-
giungere questo obiettivo.

2.2.2      Rendere la conoscenza accessibile
La forma scelta, per presentare il risultato finale dello stage, è quella del sito web. Nella postazione
di lavoro degli sviluppatori è presente un calcolatore. Il sito web che ho costruito consiste in
una documentazione interattiva che può essere consultata dallo sviluppatore, durante lo svolgi-
mento dei propri compiti.
    Ho reso il sito web responsivo, in modo che gli sviluppatori possano consultare la documen-
tazione, anche dai dispositivi mobili. Questa caratteristica è vantaggiosa quando lo sviluppatore
è fuori sede e deve utilizzare strumenti diversi da quelli presenti nella postazione di lavoro.

2.2.3      Tecnologie utilizzate
Per il PoC ho impiegato le tecnologie utilizzate dagli sviluppatori Diana Corp. Ho adottato
un’architettura a microservizi. Adottando questo pattern, ho isolato le componenti della pila
software e ho semplificato la scrittura del codice.

                             Figura 2.2: Architettura di integrazione
2.2. DOCUMENTARE CON UN POC                     13

    Presento di seguito l’elenco delle tecnologie impiegate durante la realizzazione del PoC. Per
brevità, riporto unicamente gli elementi principali della pila software e ometto le librerie utiliz-
zate e i servizi di terze parti come Google Dialogflow.

Docker
    Docker è uno strumento progettato per semplificare la creazione, la distribuzione e l’esecuzione
di applicazioni con contenitori. I contenitori, isolano gli ambienti dei microservizi e le compo-
nenti, in questo modo, le componenti software possono essere raggruppate in un’unica appli-
cazione. Utilizzando i contenitori ho potuto trasportare la pila software su sistemi operativi
diversi.
    Laravel, Express.js, Docusaurus e PostgreSQL fanno parte dei contenitori che compongono
la pila software.

Laravel
     Laravel è un framework web PHP, gratuito e open source, per lo sviluppo di applicazioni
web con MVC. Elenco alcune delle caratteristiche di Laravel: un sistema di packaging modulare
con un gestore delle dipendenze dedicato, diverse modalità per accedere ai database relazion-
ali, orientamento verso lo zucchero sintattico; utilità che aiutano a distribuire e manutenere le
applicazioni.
     Ho utilizzato Laravel per progettare e implementare gli stili architetturali che ricorrono nel
paradigma di progettazione Request-Response.

Express.js
    Express.js è un framework per sviluppare applicazioni Javascript per l’interprete Node.js. Il
framework è open source e viene rilasciato con licenza MIT. È progettato per costruire appli-
cazioni web e WebAPI.
    Ho utilizzato Express per progettare e implementare gli stili architetturali che ricorrono nel
paradigma di progettazione Event-Driven.

Docusaurus
    Docusaurus è uno strumento per la pubblicazione di documentazione web, realizzato dalla
comunità open source di Facebook. Lo strumento è pronto all’uso e lo sviluppatore non deve
progettare e implementare l’infrastruttura per pubblicare i documenti. I prerequisiti per rilas-
ciare la documentazione sono: documenti scritti in markdown, una home page scritta in React
e alcune modifiche alla configurazione dello strumento.
14     CAPITOLO 2. IL POC PER DIFFONDERE IL KNOW-HOW

    Ho utilizzato Docusaurus, per pubblicare i contenuti statici risultato dell’analisi. Ho uti-
lizzato il supporto nativo React, per realizzare l’interazione tra l’interfaccia grafica web e le We-
bAPI.

PostgreSQL
    PostgreSQL è un potente database relazionale open source che utilizza ed estende il linguag-
gio SQL. PostgreSQL ha guadagnato una solida reputazione per: affidabilità, integrità dei dati,
solido set di funzionalità, estensibilità e dedizione della comunità open source.
    Ho utilizzato questo database relazione per supportare tutte le operazioni di lettura e scrit-
tura dalle WebAPI. Heroku metteva a disposizione un’ istanza del database relazionale senza
quindi essere obbligato ad installare il microservizio. In questo modo, si sono semplificate le
operazioni di dislocamento nell’ambiente di produzione.

Visual Studio Code
   Visual Studio Code è un editor di codice sorgente, sviluppato da Microsoft, per Windows,
Linux e macOS. Include il supporto per: debugging, controllo per Git, Syntax highlighting,
Snippet e refactoring del codice.
     Ho utilizzato questo IDE per scrivere il codice sorgente del sistema e per l’analisi statica.

2.2.4      Impatto del PoC nel breve periodo
Per consegnare il prodotto entro i tempi stabiliti ho dovuto fare delle scelte. La mappa dei tra-
guardi è stata suddivisa per separare quelli raggiunti da quelli raggiungibili dopo la data di con-
segna del prodotto.

Traguardi raggiunti
     Riporto l’elenco dei traguardi raggiunti al momento della consegna del prodotto
     • Progettazione e realizzazione dell’impianto di base e dell’architettura del sistema;
     • Analisi e realizzazione delle WebAPI per gli stili architetturali: REST, RPC, GraphQL e
       Webhook;
     • Analisi del protocollo WebSocket.

Traguardi futuri
     Riporto l’elenco dei traguardi che possono essere raggiunti nel breve periodo
2.3. LO STAGE IN UN’AZIENDA AGILE                             15

      • Progettazione e implementazione di un microservizio GraphQL per il supporto delle op-
        erazioni di tipo subscriptions;
      • Analisi e realizzazione delle WebAPI per lo stile architetturale gRPC;
      • Analisi del protocollo HTTP/2.

 2.3        Lo stage in un’azienda agile

 2.3.1        Documentare per il team di sviluppo
 La condivisione della conoscenza aziendale è importante per consentire l’intercambiabilità dei
 membri del gruppo. L’argomento del PoC è di interesse per l’azienda, perché molte delle at-
 tività ruotano intorno allo sviluppo e all’utilizzo delle WebAPI. I team, che curano lo sviluppo
 delle interfacce grafiche del sistema, utilizzano servizi che espongono i dati attraverso le WebAPI.
 Strumenti come Del Boomi, vengono utilizzati dall’azienda per prelevare e trasformare i dati
 provenienti dai servizi in rete.
      Il codice sorgente che ho rilasciato, può essere consultato dai programmatori per osservare
 il dialogo tra client e server. In questo modo, viene fornita documentazione: ai programmatori
 che utilizzano le WebAPI; ai programmatori che progettano e sviluppano nuove WebAPI.
 1 /* ** GitHub
 2    il frammento di codice dimostra come definire
 3    un 'endopoint Webhook . La WebAPI prevede l'utilizzo
 4    di HMAC per autorizzare la richiesta del client .
 5 */
 6 app . p o s t ( '/ webhook ' ,
 7    hmac ( c o n f i g . hmac . s e c r e t , {
 8         a l g o r i t h m : 'sha512 ' ,
 9         i d e n t i f i e r : 'HMAC ' ,
10         h e a d e r : 'authorization ' ,
11         m a x I n t e r v a l : c o n f i g . hmac . m a x I n t e r v a l
12    }) ,
13    ( r e q , r e s ) => {
14        wc . t o ( r e q . q u e r y . a p i _ k e y ) . e m i t ( 'message .sent ' , r e q . body . m e s s a g e ) ;
15        r e t u r n r e s . j s o n ( { " message " : "Great !" } ) ;
16    }) ;

                     Frammento 2.1: Frammento di codice sorgente del prodotto
16    CAPITOLO 2. IL POC PER DIFFONDERE IL KNOW-HOW

    L’adozione di nuovi paradigmi e stili architetturali può motivare la revisione dei contenuti
dell’analisi. Il prodotto è concepito per essere estensibile, nuovi documenti e funzionalità pos-
sono essere aggiunte per migliorare l’analisi.

2.3.2     Il software funzionante più che la documentazione esaustiva
Ogni progetto informatico è sicuramente incompleto fino a quando non viene corredato da una
documentazione esauriente. In un progetto informatico la documentazione è presente in tutte
le fasi del ciclo di vita. Nello sviluppo Agile non esiste una vera definizione di documentazione.
Dalla prospettiva di sviluppo, il codice deve essere ben documentato per facilitare l’evoluzione
del prodotto. Per gli utenti finali, è preferibile predisporre una documentazione orientata all’uso
del sistema [4].
     Il prodotto documenta il risultato dell’analisi e per questa ragione soddisfa sviluppatori e
utenti finali. L’usabilità del sito web soddisfa la richiesta dell’utente finale riproponendo paradigmi
di navigazione noti.

                 Figura 2.3: Il codice interattivo per interagire con le WebAPI
         https://webapi-analysis.herokuapp.com/docs/request-response/rest#
                             how-to-create-a-resource

   Le componenti interattive e il codice sorgente pubblicato su GitHub sono invece desti-
nate agli sviluppatori. Rilasciando il codice sorgente e inserendo componenti interattive nel
2.3. LO STAGE IN UN’AZIENDA AGILE                   17

prodotto, posso convincere gli sviluppatori dell’affidabilità dei concetti esposti.

2.3.3     L’importanza di scrivere il codice di buona qualità
Il reparto IT di Diana Corp, gestisce molte tipologie di prodotto diverse. Con buona proba-
bilità, il prodotto da me rilasciato, verrà gestito da membri dei team dell’azienda. Per questa
ragione, ho concepito il prodotto perché sia facile da manutenere.
     Per raggiungere questo obiettivo ho progettato il sistema utilizzando un’architettura a mi-
croservizi. L’adozione di questo pattern mi permette di ottenere questi vantaggi:
     • è meno probabile il manifestarsi di un problema che produca un blocco dell’intero sis-
        tema;
     • il sistema è facile da orchestrare nei diversi ambienti;
     • il codice sorgente è molto semplice e le operazioni di riscrittura sono meno rischiose;
     • il sistema è scalabile perché ognuno dei container Docker può essere dislocato su mac-
        chine diverse;
     • i diversi stili architetturali delle WebAPI sono localizzati in ambienti con linguaggi di pro-
        grammazione adatti alla gestione del paradigma di riferimento.
     I vantaggi ereditati dall’adozione di questa architettura interessano i team di sviluppo, gli
amministratori e i system integrator. Per sviluppare il prodotto, ho utilizzato dei framework di
tipo OOP. In questo modo, il prodotto eredita le caratteristiche e i principi di questo paradigma.
Grazie alle caratteristiche ereditate si semplificano le attività di manutenzione e di evoluzione.
Ho utilizzato Visual Code per effettuare l’analisi statica del codice sorgente e assicurarmi dell’assenza
di errori nel codice dovuti alla presenza di rami inutilizzati o a formalismi che rendono il pro-
cesso di interpretazione meno efficiente.

2.3.4     Obiettivi dello stage
Gli obiettivi fissati all’inizio dello stage hanno subìto delle correzioni in corso d’opera. In seguito
alla presentazione dell’analisi sui paradigmi Request-Response, il tutor ha suggerito l’approfondimento
dello stile architetturale GraphQL. Di seguito, riporto la versione aggiornata degli obiettivi dello
lo stage:

   1. Implementazione dell’impianto base di un PoC per presentare l’analisi dei paradigmi di
      progettazione delle WebAPI;
   2. Presentazione dei risultati dell’analisi sulle pratiche di sicurezza usate WebAPI;
   3. Presentazione dei risultati dell’analisi per il paradigma Request-Response;
18      CAPITOLO 2. IL POC PER DIFFONDERE IL KNOW-HOW

     4. Presentazione dei risultati dell’analisi, per il paradigma Event-Driven;
     5. Approfondimento dello stile architetturale GraphQL.

2.3.5       Utilità del PoC nel lungo periodo
Ho realizzato il prodotto per raggiungere gli obiettivi fissati dal progetto. Ho utilizzato compo-
nenti software che permettono l’estensione, non solo per il dominio di riferimento, ma anche
per un dominio più ampio.
    Se il dominio di riferimento del prodotto è la “documentazione dell’analisi sulle WebAPI in
modo interattivo”, posso dire che il prodotto può essere esteso nel dominio “documentazione
interattiva”. L’utilizzo del componente Docusaurus, semplifica la pubblicazione di un qualsiasi
documento scritto in markdown.
    Di seguito riporto alcuni possibili traguardi:
    • Pubblicazione di nuove tipologie di paradigma di progettazione;
    • Pubblicazione di nuovi stili architetturali;
    • Pubblicazione di documenti di analisi, per argomenti diversi dal dominio corrente.

2.4       Vincoli di stage

2.4.1       Vincoli temporali
L’Università ha fissato le date di inizio e di fine dello stage. Le ore totali di stage sono comprese
tra 300 e 320. L’azienda ospitante ha imposto altri vincoli temporali. Diana Corp prevedeva la
presenza nelle fasce orarie 9:00-13:00 e 14:00-18:00. Oltre a questo, il piano di lavoro preparato
dal tutor aziendale, pianificava le attività da portare a termine e le scadenze temporali.
    L’attuale datore di lavoro ha imposto l’ultimo vincolo temporale: lo svolgimento del tirocinio
non doveva condizionare le attività lavorative già pianificate. Per raggiungere questo obiettivo il
datore di lavoro ha concesso lunedì, mercoledì e venerdì come giornate da dedicare al tirocinio.
Per questa ragione, le ore di tirocinio sono state distribuite su un arco temporale di circa tre
mesi.

2.4.2       Vincoli tecnologici
L’azienda mi ha affidato un calcolatore con preinstallato il sistema operativo MacOS 10.7 e per-
tanto le attività di sviluppo venivano svolte su questa piattaforma. Il prodotto doveva essere un
2.5. STRATEGIE PER IL RIUTILIZZO                   19

sito web installato sulla piattaforma Heroku. Era quindi vincolante sviluppare un software web
utilizzabile dai maggiori browser.
    Oltre a questo, il dispiegamento del prodotto sulla piattaforma Heroku introduceva vincoli
a cascata. Heroku consentiva l’installazione di contenitori Docker e l’uso di Docker ha lo scopo
di semplificare lo sviluppo di sistemi a microservizi.

2.5      Strategie per il riutilizzo
2.5.1      Il PoC e la dimostrabilità
La scelta di implementare un prodotto consultabile in modo interattivo, rispetto alla tradizionale
documentazione “statica”, offre diversi vantaggi. L’adozione del PoC favorisce l’approfondimento
della teoria attraverso l’applicazione. A volte, la scelta del metodo per la risoluzione di un pro-
blema è guidata da vincoli temporali che possono obbligare lo sviluppatore ad adottare soluzioni
che hanno dimostrato di funzionare, rispetto a soluzioni più appropriate dal punto di vista
teorico. L’affiancamento di teorica e applicazione risolve questa criticità.

2.5.2      Fonti affidabili per il Copy&Paste
Il copia e incolla è un meccanismo efficace per il riutilizzo del codice. Il programmatore ottiene
parti di codice, utilizzando varie fonti e verifica se è corretto, efficiente, estensibile e personaliz-
zabile. Le fonti sono importanti per garantire la qualità e l’efficacia del risultato.
     Durante il periodo di tirocinio ho osservato che l’adozione dei metodi agili, porta gli svilup-
patori Diana Corp a comunicare con frequenza, condividendo informazioni a voce, via email
o con strumenti per la messaggistica istantanea. Frammenti di codice vengono trasmessi, uti-
lizzando questi canali, per esibire codice funzionante e riutilizzabile. Nella maggior parte dei
casi, il codice trasmesso non è pronto all’uso e deve essere verificato e personalizzato. Il metodo
di lavoro del gruppo di sviluppo, motiva la realizzazione di un sito di riferimento per tutti gli
sviluppatori.
     Ho inserito nel prodotto esempi di codice interattivo che possono essere modificati e verifi-
cati. Il codice interattivo realizza una comunicazione di tipo client server tra browser e WebAPI e
può essere modificato per simulare l’impatto di una modifica sul sorgente. La possibilità di mod-
ificare e verificare il risultato delle operazioni effettuate dal client aumenta la fiducia sull’utilità
della fonte.
     Ho inoltre sfruttato l’utility di sistema cURL per consentire un dialogo da terminale con le
WebAPI.
20     CAPITOLO 2. IL POC PER DIFFONDERE IL KNOW-HOW

 1   # Esempio di codice
 2   # il codice può essere il copiato e incollato nel terminale
 3   # per controllare la risposta delle REST WebAPI
 4   c u r l −− i n s e c u r e −X POST \
 5          'https :// webapi - analysis . herokuapp .com/api/rest/ movies ?' \
 6          'identifier = $identifier ' \
 7          '&title=Conan %20 the %20 barbarian ' \
 8          '&year =1982& duration =2h%209 min ' \
 9          '& director =John %20 Milius '
10          −H 'Authorization : Bearer $( JWT_TOKEN )' \
11          −H 'Accept : text/json ' \
12          −H 'Content -Type: application /x-www -form - urlencoded '
                      Frammento 2.2: Utilizzo delle WebAPI con cURL

     La scelta è ricaduta su cURL per le ragioni che riporto di seguito:
     • nelle postazioni di sviluppo Diana Corp è installato MacOS e l’utility cURL è presente
       tra le utility di base sistema operativo;
     • l’utilizzo di un comando da terminale semplifica l’utilizzo della funziona copia e incolla
       fornita dal sistema operativo;
     • il comando da terminale permette di osservare il risultato dell’operazione senza nessun
       tipo di formattazione, questa caratteristica permette allo sviluppatore di osservare il dato
       grezzo;
     • il comando cURL simula una comunicazione client-server minimale, è quindi utile nella
       progettazione from scratch.

2.5.3      La documentazione come strumento di riuso
Il riuso del codice permette di risparmiare tempo durante la scrittura del sorgente. Le attività
di programmazione sono semplificate e viene migliorata la leggibilità del codice che diventa più
corto e sintetico.
     Portali come Stackoverflow e php.org rilasciano porzioni di codice riutilizzabile che devono
essere personalizzate del programmatore. Inoltre, rilasciare frammenti di codice specifico per la
propria piattaforma semplifica le operazioni di personalizzazione.
     Il prodotto rilasciato a Diana Corp è modificabile e pertanto è possibile inserire all’interno
della piattaforma frammenti di codice pronto all’uso per le piattaforme di riferimento. In questo
modo potrebbero essere semplificate le attività di sviluppo per le piattaforme gestite da Diana
Corp.
Lo sviluppo del PoC
                                                                             3
3.1      Il metodo di lavoro
In questa sezione ho descritto la pratiche utilizzate per lo sviluppo del prodotto. Il piano di la-
voro, preparato dal tutor aziendale, elencava le attività che dovevano essere portate a termine per
rilasciare il prodotto. Trattandosi di un PoC erano previste: attività di approfondimento sugli
argomenti trattati, attività per lo sviluppo delle funzionalità e attività di revisione dei prodotti
rilasciati.
     Ho deciso di approfittare dell’esperienza di stage per sperimentare i metodi agili. In molte
occasioni, ho chiesto consigli al personale del reparto IT sulle pratiche da adottare per organiz-
zare la attività in modo efficiente.

3.1.1     Pianificazione delle attività
Il piano di progetto, preparato dal tutor, ha semplificato l’organizzazione delle attività e dei com-
piti che dovevo svolgere. Nel piano di lavoro erano riportate le attività che avrei dovuto portare
a termine.
     Ho adottato il metodo Scrum per gestire il progetto. Utilizzando il piano di progetto ho rag-
gruppato le attività in Sprint. Ho definito la date di conclusione degli Sprint per farle coincidere
con le date di revisione di progetto. In questo modo, ho potuto mostrare al tutor gli incrementi
raggiunti durante le sessioni di revisione.

  ID      Nome sprint                                                        Conclusione

         Studio e formazione sui paradigmi di progettazione delle
   S1                                                                        29 Novembre 2019
         WebAPI [5]

   S2     Architettura del sistema e funzioni di base                        6 Dicembre 2019

                                                21
22        CAPITOLO 3. LO SVILUPPO DEL POC

  ID        Nome sprint                                                     Conclusione

     S3     Analisi paradigma Request-Reponse e stili WebAPI                24 Dicembre 2019

     S4     Analisi paradigma Event-Driven e stili WebAPI                   24 Gennaio 2020

     S5     Approfondimenti, rilascio del prodotto e consegna finale        07 Febbraio 2020

                             Tabella 3.2: Pianificazione degli Sprint

     Ho trascritto le attività dal piano di progetto nello strumento di gestione e le ho organizzate
in Sprint. Ho considerato più impegnative le attività che richiedevano l’impiego di tecnologie
che non avevo mai sperimentato. Ho provveduto quindi a classificare gli Sprint tenendo conto
di questa caratteristica ed infine ho assegnato dei punteggi ad ogni Sprint sulla base delle quattro
categorie qui riportate:
     • UX - progettazione dell’esperienza utente
     • Design - progettazione e definizione delle immagini, dei colori, delle forme e della ti-
       pografia per migliorare l’usabilità e migliorare l’esperienza dell’utente
     • Front - sviluppo delle interazioni per l’interfaccia utente
     • Back - sviluppo componenti di accesso ai dati e logiche di business
     Con questo sistema di categorizzazione, ho assegnato punteggi più alti alle componenti
che richiedevano l’interazione con l’utente finale. Il dialogo bidirezionale, tra client e server,
prevedeva la definizione di nuovi componenti sviluppati con la libreria React per questa ragione
gli Sprint di sviluppo delle WebAPI Event-Driven avevano un peso maggiore, se paragonati agli
Sprint delle WebAPI Request-Response.

                       Figura 3.1: Pianificazione delle attività di progetto
3.2. SVILUPPO DEL PRODOTTO                    23

3.1.2      Revisioni di progresso
Durante l’intero svolgimento del tirocinio, il tutor ha periodicamente preso visione del lavoro
svolto e ha fornito suggerimenti di natura tecnica. Nel piano di lavoro redatto prima dell’inizio
dello stage, erano riportati i momenti in cui si sarebbero svolte le revisioni di progresso.
    Grazie a queste, ho potuto definire meglio i punteggi per le categorie UX e Design. Durante
tutta la durata del progetto, il tutor ha fornito molti suggerimenti che mi hanno aiutato a miglio-
rare la qualità del prodotto. Ho riprogettato il prodotto in più occasioni, perché incoraggiato a
trovare soluzioni sempre più efficaci ed eleganti.
    Con cadenza regolare, il tutor chiedeva una rapporto sullo stato di avanzamento dei lavori e
valutava il grado di raggiungimento degli obiettivi fissati.
    Le revisioni di progresso sono risultate fondamentali per migliorare la qualità del prodotto
e per risolvere problemi di natura tecnica.

3.1.3      Analisi e tracciamento dei requisiti
Ho derivato i requisiti dal piano di progetto e dalle interviste con il tutor. Il piano di progetto
è la fonte principale dei requisiti funzionali. Le interviste con il tutor sono la fonte dei requisiti
di vincolo.
     Ho utilizzato i requisiti per definire i test di verifica e di validazione del sistema. Ho definito
le date di inizio e di fine degli Sprint, utilizzando i requisiti. Il piano di lavoro indicava quali
incrementi funzionali avrei dovuto mostrare al tutor, durante le revisioni di progresso.
     Ho distribuito i requisiti individuati negli Sprint per valutare il grado di conformità del
prodotto e il raggiungimento degli obiettivi fissati. Durante ogni incontro di revisione, ho val-
idato il prodotto mostrando i requisiti soddisfatti, in questo modo, ad ogni revisione il tutor ha
potuto valutare il grado di completamento dell’intero prodotto.

3.2      Sviluppo del prodotto

3.2.1      Analisi
Ho derivato le interazioni degli utenti con il sistema dal piano di lavoro e dalle interviste con il
tutor. Di seguito riporto le funzionalità del sistema utilizzando i diagrammi dei casi d’uso.
    Durante le interviste il tutor ha proposto nuove funzionalità per migliorare l’esperienza utente.
Le pagine web del sito sono interattive e l’utente finale può simulare il funzionamento delle di-
verse WebAPI, utilizzando frammenti di codice. Per questa ragione il sistema mette a dispo-
24     CAPITOLO 3. LO SVILUPPO DEL POC

sizione dell’utente due tipologie di interazione con le WebAPI. La piattaforma web rende in-
oltre disponibili tutte le funzioni offerte dal sistema. L’utente può inoltre utilizzare un insieme
ridotto delle funzioni, con l’utility cURL.

Casi d’uso del sistema web
     Riporto di seguito i casi d’uso per il sistema web.

                             Figura 3.2: Casi d’uso del sistema web
3.2. SVILUPPO DEL PRODOTTO                25

Request-Response
  Di seguito ho rappresentato i casi d’uso del sistema web, dove l’utente interagisce con le
WebAPI di tipo Request-Response.

         Figura 3.3: Casi d’uso per le WebAPI Request-Response nel sistema web

Event-Driven
   Di seguito ho rappresentato i casi d’uso del sistema web, dove l’utente interagisce con le
WebAPI e i protocolli di tipo Event-Driven.

    Figura 3.4: Casi d’uso per i protocolli e per le WebAPI Event-Driven nel sistema web
26    CAPITOLO 3. LO SVILUPPO DEL POC

Casi d’uso per l’interfaccia da terminale
   L’interfaccia da terminale prevede tutti i casi d’uso già presentati per le WebAPI di tipo
Request-Respose. A questi casi d’uso si aggiunge il caso d’uso UC8.2 che permette l’invio dei
messaggi al componente chat per le WebAPI di tipo Webhook.

Requisiti
     I casi d’uso sono serviti per definire meglio i requisiti di sistema. Di seguito riporto i requi-
siti e le fonti utilizzate per derivarli. Ho classificato i requisiti con la notazione qui riportata. Il
codice utilizzato per classificare i requisiti è composto da un prefisso e da un numero che iden-
tifica, a sua volta, il requisito in modo univoco.
     Il prefisso è composto da due caratteri. Il tipo di requisito viene indicato con:
     • F il requisito è funzionale;
     • V il requisito è di vincolo.
     Il livello di obbligatorietà del requisito è identificato da:
     • O il requisito definito anche nel piano di progetto è obbligatorio per il committente;
     • D il requisito non è necessario ma rappresenta un valore aggiunto riconoscibile.

Requisiti f unzionali

     ID      Descrizione                                                               Fonte

             Il sistema deve consentire la consultazione del documento           Piano di progetto,
     FO1
             che riassume l’analisi sullo studio di cos’è una WebAPI                   UC1

            Il sistema deve consentire la consultazione del documento
                                                                                 Piano di progetto,
     FO2    che riassume l’analisi sui possibili business cases per le
                                                                                       UC2
            WebAPI

             Il sistema deve consentire la consultazione del documento
                                                                                 Piano di progetto,
     FO3     che riassume l’analisi sullo studio dei paradigmi di
                                                                                       UC3
             progettazione per le WebAPI

             Il sistema deve consentire la consultazione del documento
     FO4     che riassume l’analisi sulle pratiche da adottare per rendere        Interviste, UC4
             le WebAPI sicure
Puoi anche leggere