Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS

Pagina creata da Luigi Carboni
 
CONTINUA A LEGGERE
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
Università degli Studi di Padova
       Dipartimento di Matematica “Tullio
                  Levi-Civita”
              Corso di Laurea in Informatica

      Sviluppo web in ASP.NET MVC
                     Tesi di laurea triennale

Relatore
Prof. Tullio Vardanega

                                                        Laureando
                                                Michela De Bortoli

                  Anno Accademico 2016-2017
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
Michela De Bortoli: Sviluppo web in ASP.NET MVC, Tesi di laurea triennale, c
Settembre 2017.
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
Abstract

Questa tesi presenta il lavoro che ho svolto durante il tirocinio formativo effettuato
presso l’azienda Treenet S.r.l, della durata di 320 ore.
     Il primo capitolo, ‘Contesto aziendale’ , presenta l’azienda dove ho svolto il
tirocinio, i servizi che offre e le principali tecnologie che utilizza, e i processi interni
adottati nello sviluppo e nella manutenzione dei suoi prodotti.
    Il secondo capitolo, ‘Strategia aziendale’, descrive i problemi affrontati nello
stage, obiettivi e vincoli, e le motivazioni della scelta del tirocinio.
    Il terzo capitolo, ‘Resoconto del tirocinio’, descrive la pianificazione del tirocinio,
il metodo di lavoro adottato, i problemi progettuali, tecnologici e applicativi incontrati,
e i risultati ottenuti.
    Il quarto capitolo della tesi, ‘Valutazione retrospettiva’, descrive il grado di
soddisfacimento degli obiettivi stabiliti, le problematiche incontrate nel corso del
tirocinio, le conoscenze apprese e la distanza fra le competenze richieste dallo stage
e le conoscenze erogate dal corso di studi.

                                            iii
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
Indice

1 Contesto aziendale                                                                                                             1
  1.1 Treenet S.r.l. . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    1
  1.2 Prodotti e servizi . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
      1.2.1 Servizi . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    2
      1.2.2 Prodotti . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    3
  1.3 Processi produttivi . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    4
      1.3.1 Tecnologie utilizzate       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
      1.3.2 Norme . . . . . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
  1.4 Propensione all’innovazione       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9

2 Strategia aziendale                                                                                                           11
  2.1 Azienda e stage . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   11
  2.2 Scopo del progetto di stage .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   12
  2.3 Obiettivi del tirocinio . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   13
  2.4 Vincoli . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
      2.4.1 Vincoli tecnologici .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
      2.4.2 Vincoli metodologici        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   16
      2.4.3 Vincoli temporali . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
  2.5 Scelta del progetto di stage .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   17
      2.5.1 Obiettivi personali .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18

3 Resoconto del tirocinio                                                                                                       19
  3.1 Pianificazione . . . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
      3.1.1 Analisi dei rischi . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   19
      3.1.2 Interazioni con il tutor aziendale .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
      3.1.3 Diagrammi UML . . . . . . . . .                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   20
      3.1.4 Tecnologie adottate . . . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   21
  3.2 Lavoro svolto . . . . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
      3.2.1 Formazione . . . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
      3.2.2 Analisi dei requisiti . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
      3.2.3 Progettazione . . . . . . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36
      3.2.4 Codifica . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
      3.2.5 Verifica e validazione . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
      3.2.6 Altre attività . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   50
  3.3 Risultati raggiunti . . . . . . . . . . . .                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   51

4 Valutazione retrospettiva                                                                                                     53

                                            v
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
vi                                                                                                                     INDICE

     4.1   Soddisfacimento degli obiettivi .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   53
           4.1.1 Problematiche incontrate      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   54
     4.2   Bilancio formativo . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   55
     4.3   Preparazione accademica . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   56

Glossario                                                                                                                      57

Acronimi                                                                                                                       61

Bibliografia                                                                                                                   63
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
Elenco delle figure

 1.1    Logo di Treenet S.r.l. . . . . . . . . . . . . . . . . . . . . . . . . . .     1
 1.2    Funzionalità di Webstarter . . . . . . . . . . . . . . . . . . . . . . .      4
 1.3    Ciclo di vita del software nella metodologia Agile . . . . . . . . . .         5

 2.1    Stack tecnologici tra cui potevo scegliere nello sviluppo dell’applicazione 12
 2.2    Diagramma di Gantt delle attività pianificate . . . . . . . . . . . . 15

 3.1    CLR e libreria .NET . . . . . . . . . . . . . . . . . . . . . . . . . .        21
 3.2    Stack delle componenti del framework .NET . . . . . . . . . . . . .            22
 3.3    Design pattern MVC . . . . . . . . . . . . . . . . . . . . . . . . . .         24
 3.4    Struttura tipica di un progetto di tipo ”Applicazione Web” con
        pattern MVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .        25
 3.5    Struttura di Entity Framework . . . . . . . . . . . . . . . . . . . .          26
 3.6    Attori che interagiscono con l’applicazione intranet . . . . . . . . .         35
 3.7    Bozze grafiche della homepage del sito per dispositivi mobile, tablet
        e desktop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .      37
 3.8    Bozze grafiche per dispositivi desktop delle pagine interne . . . . . .        37
 3.9    Architettura ad alto livello dell’applicazione intranet . . . . . . . .        38
 3.10   Struttura dell’applicazione intranet . . . . . . . . . . . . . . . . . .       40
 3.11   Action methods di ToolsController legati alla View Label . . . . . .           40
 3.12   Homepage vista da dispositivo desktop (A) e mobile (B). Ho inserito
        lo slideshow di immagini nella homepage utilizzando gli appositi
        ShortCode. Le immagini e le transizioni sono gestibili dal cliente
        attraverso Webstarter. . . . . . . . . . . . . . . . . . . . . . . . . .       42
 3.13   Pagina della galleria dei prodotti (layout tablet e mobile). Le
        immagini e le relative descrizioni sono modificabili dal cliente. . . .        43
 3.14   Menu desktop/tablet (A) e mobile (B) . . . . . . . . . . . . . . . .           43
 3.15   Funzionalità di ordinamento campi e ricerca . . . . . . . . . . . . .         44
 3.16   Richiesta di autenticazione per visualizzare la pagina . . . . . . . .         44
 3.17   Esempi di interfacce: interfaccia della pagina del controllo garanzie
        (A), interfaccia della pagina del controllo di fattibilità (B), interfaccia
        della pagina di gestione etichette (C) . . . . . . . . . . . . . . . . .       45
 3.18   Username dell’utente autenticato . . . . . . . . . . . . . . . . . . .         45
 3.19   Creazione di un’etichetta . . . . . . . . . . . . . . . . . . . . . . . .      46
 3.20   Modifica di un’etichetta . . . . . . . . . . . . . . . . . . . . . . . .       46
 3.21   Metriche del codice (applicazione intranet) . . . . . . . . . . . . . .        48

                                          vii
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
viii                                                       ELENCO DELLE FIGURE

       3.22 Risultato di test di pagespeed svolto sull’applicazione n.1 utilizzando
            Gtmetrix (A) e Pingdom Website Speed Test (B) . . . . . . .               49
       3.23 Contenuti del Manuale Utente . . . . . . . . . . . . . . . . . . . . .    50
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
Elenco delle tabelle

 2.1   Attività pianificate . . . . . . . . . . . . . . . . . . . . . . . . . . .                     13

 3.1   Familiarità iniziale con le tecnologie .   . .   . . . . . . . .   .   .   .   .   .   .   .   20
 3.2   Lavoro svolto . . . . . . . . . . . . .     . .   . . . . . . . .   .   .   .   .   .   .   .   30
 3.3   Copertura dei requisiti - Applicazione      n.1   (interfaccia)     .   .   .   .   .   .   .   51
 3.4   Copertura dei requisiti - Applicazione      n.2   . . . . . . . .   .   .   .   .   .   .   .   51
 3.5   Copertura dei requisiti - Webstarter .      . .   . . . . . . . .   .   .   .   .   .   .   .   52

 4.1   Obiettivi definiti nel Piano di Lavoro . . . . . . . . . . . . . . . . .                        54
 4.2   Obiettivi definiti nel corso del tirocinio . . . . . . . . . . . . . . . .                      54
 4.3   Familiarità finale con le tecnologie . . . . . . . . . . . . . . . . . . .                     55

                                         ix
Universit'a degli Studi di Padova - Sviluppo web in ASP.NET MVC - Dipartimento di Matematica "Tullio Levi-Civita" - SIAGAS
Capitolo 1

Contesto aziendale

Questo capitolo descrive brevemente l’azienda presso cui ho svolto il mio tirocinio, le
tecnologie di cui essa fa uso e la tipologia di clientela a cui si rivolge, i suoi processi
produttivi e la sua propensione all’innovazione.

1.1      Treenet S.r.l.
Treenet S.r.l. è una piccola impresa che lavora nel campo dell’Information and
Communication Technology (ICT) dal 2001 e ha sede a Montebelluna, in provincia
di Treviso. La sua clientela è principalmente compresa da piccole e medie imprese
del settore privato.
   Tra i servizi offerti dall’azienda, quello più frequentemente richiesto è lo sviluppo
di soluzioni software su misura, specialmente applicazioni che supportano i clienti
nelle loro attività.

                           Figura 1.1: Logo di Treenet S.r.l.

   Treenet è organizzata in due divisioni, web agency, che si occupa di creazione
e pubblicizzazione di contenuti digitali, e informatica. Si divide ulteriormente
nelle seguenti aree di competenza, che si adoperano per fornire i servizi offerti
dall’azienda:

   ∗ Amministrativa

   ∗ Commerciale

   ∗ Sviluppo software

   ∗ Sviluppo web

   ∗ Web marketing e Search Engine Optimization (SEO)

                                            1
2                                         CAPITOLO 1. CONTESTO AZIENDALE

    ∗ Design e grafica

    ∗ Sistemistica e assistenza clienti

   Un singolo dipendente ha la possibilità di lavorare in diverse aree di competenza,
tenendo conto della sua formazione. Progetti di portata ridotta che comprendono sia
attività di web design che attività di sviluppo web e software vengono comunemente
assegnati a una sola risorsa, ed è richiesta l’applicazione di pratiche di accessibilità
e usabilità fin dalla fase di design, realizzando layout diversi per dispositivi di varia
grandezza e seguendo i principi di design responsive e mobile-first.
   La presenza di competenze trasversali permette una maggiore flessibilità nelle
attività svolte all’interno dell’azienda, facilita l’interazione fra membri del team
di diversa specializzazione, e permette di stimare tempistiche e limiti nel design o
in aree diverse dello sviluppo. Questo è uno dei motivi che mi hanno influenzato
maggiormente nella scelta del tirocinio.

1.2      Prodotti e servizi
1.2.1     Servizi
I servizi offerti da Treenet sono i seguenti:

    ∗ Sviluppo software, in particolare software custom realizzato appositamente
      per i singoli clienti

    ∗ Consulenza su scelte progettuali, definizione dei requisiti, stima di costi e
      tempistiche e scelta delle tecnologie da utilizzare nei progetti

    ∗ E-commerce, servizio offerto da due prodotti aziendali non-custom, Web-
      starter e TreeComm

    ∗ Web marketing e SEO: pubblicizzazione di contenuti digitali su motori di
      ricerca e social network

    ∗ Design, grafica e fotografia: web design, realizzazione di icone e logo
      aziendali, brochure, biglietti da visita, servizi fotografici per aziende, ecc.

    ∗ Web development: realizzazione di applicazioni web in ambiente Microsoft
      in ASP.NET MVC o utilizzando il CMS aziendale, o in ambiente Linux
      utilizzando lo stack Linux, Apache, MySQL, PHP (LAMP)

    ∗ Assistenza tecnica e sistemistica, offerta gratuitamente per 60 giorni
      dalla pubblicazione del prodotto, o in presenza di un contratto di assistenza

    ∗ Formazione del cliente sull’utilizzo del software sviluppato adatta anche a
      clienti senza un background tecnico

    ∗ Gestione di server e reti aziendali, effettuata sia remotamente grazie a
      sistemi di monitoraggio, sia tramite interventi in sede
1.2. PRODOTTI E SERVIZI                                                              3

   L’azienda fa prevalentemente uso di prodotti e tecnologie Microsoft, questa
decisione è soprattutto motivata dalla possibilità di avvalersi di certificazioni e
supporto. Nonostante ciò, l’azienda sviluppa anche in ambiente Linux, facendo uso
dello stack LAMP.
   I tecnici che si occupano di sviluppo software e di assistenza e formazione dei
clienti possiedono certificazioni Microsoft e/o di altri partner tecnologici. L’azienda
ha inoltre stretto partnership con diversi fornitori tra cui Microsoft, IBM e HP.

1.2.2     Prodotti
Il market share di Treenet è composto principalmente da piccole e medie aziende
locali e micro-enterprise, prevalentemente private, con esigenze spesso simili ma
anche molto specifiche. Si occupa quindi di commercio Business-to-business (B2B),
effettuato tra imprese e non consumatori finali. I prodotti più frequentemente
sviluppati, come precedentemente menzionato, sono applicazioni web e software
custom. Il numero di prodotti off-the-shelf offerti dall’azienda è quindi ridotto.
   Il principale prodotto non-custom dell’azienda è il Content Management System
(CMS) aziendale, Webstarter.

Webstarter
Webstarter permette la creazione di siti web personalizzati per i singoli clienti
attraverso una struttura composta da moduli attivabili e disattivabili secondo le
specifiche concordate.

                       Figura 1.2: Funzionalità di Webstarter
4                                       CAPITOLO 1. CONTESTO AZIENDALE

   È inoltre possibile per i clienti stessi creare contenuti e pagine o effettuare
delle modifiche in alcune aree prestabilite del loro sito, se attive, come gallerie di
immagini, cataloghi prodotti, slideshow, newsletter e molte altre.
   Webstarter è stato realizzato per minimizzare l’utilizzo di CMS open-source o di
terze parti, uniformare lo sviluppo web e raccogliere tutte le funzionalità realizzate
negli anni dall’azienda per prodotti diversi in un’unica suite modulare. Una nuova
versione di Webstarter è correntemente in via di sviluppo.
   Lo sviluppo del CMS è stato effettuato nel linguaggio C# utilizzando il framework
.NET, in particolare ASP.NET MVC.
   In aggiunta a Webstarter, l’azienda offre una suite e-commerce, Treecomm, e una
suite che permette di creare portali nel settore real estate, WebImmobiliare.

1.3       Processi produttivi
Metodologia di sviluppo del software
L’azienda ha adottato il metodo Agile nello sviluppo del software. Il metodo Agile
è più recente degli altri modelli di sviluppo (il suo manifesto è stato redatto nel
2001), è adattivo e si basa su uno sviluppo iterativo.
I principi del Manifesto Agile [12] sono i seguenti:
    1. ”Individuals and interactions over processes and tools”: le motivazioni
       individuali e la collaborazione sono più importanti degli strumenti utilizzati,
    2. ”Working software over comprehensive documentation”: è più importante
       presentare al cliente software funzionante piuttosto che documentazione estesa
       (la quantità richiesta di documentazione nel metodo è la minima quantità
       necessaria per una comprensione chiara del software),
    3. ”Customer collaboration over contract negotiation”: il coinvolgimento del
       cliente è più importante di un’accurata negoziazione del contratto,
    4. ”Responding to change over following a plan”: rispondere rapidamente
       ed efficacemente al cambiamento è preferibile all’attenersi alla pianificazione
       iniziale.
   Sono stabiliti periodi di iterazione, della lunghezza tipicamente compresa fra una
e quattro settimane, in cui si svolgono tutte le fasi dello sviluppo del software, da
pianificazione e analisi a integrazione e collaudo del sistema.

Rischi del metodo Agile
Se uno dei punti stabiliti nel manifesto crolla, l’intero progetto rischia di esserne
compromesso. Diverse fasi dello sviluppo sono portate avanti in parallelo, e analisi
e progettazione possono essere soggette a cambiamenti: è quindi imperativo che
all’interno del team ci sia comunicazione continua.
   Uno dei rischi del metodo Agile è quello della non convergenza causata da
cambiamenti continui delle specifiche o iterazioni distruttive, perciò l’azienda gene-
ralmente permette modifiche in corso d’opera solo quando queste non stravolgono
1.3. PROCESSI PRODUTTIVI                                                             5

            Figura 1.3: Ciclo di vita del software nella metodologia Agile

requisiti funzionali obbligatori già in fase di realizzazione, pratica più vicina a
metodi incrementali.

Documentazione
La quantità di documentazione deve essere necessaria e sufficiente per la com-
prensione del codice. Una delle critiche più diffuse al metodo Agile è legata
all’interpretazione del secondo punto del manifesto come un attacco all’importanza
della documentazione, il metodo Agile in realtà sconsiglia soltanto la creazione di
documentazione eccessivamente dettagliata in quanto questa può diventare presto
obsoleta.
    Un’importanza fondamentale è attribuita alla presenza di commenti aggiornati
nel codice.

Comunicazione all’interno del team
Treenet effettua briefing giornalieri per riassumere il progresso ed esporre even-
tuali problematiche, come previsto nel metodo di amministrazione di progetto
Scrum (in cui vengono chiamati Daily Scrum), ma il metodo non è stato adottato
esplicitamente.

Fasi di sviluppo
Nello specifico, le fasi seguite nello sviluppo software all’interno dell’azienda sono:

  1. Riunione con il cliente in cui viene definito il progetto di massima

  2. Studio di fattibilità e pianificazione iniziale

  3. Analisi dei requisiti, che prevede l’individuazione delle user story, la
     definizione dei requisiti obbligatori e la loro divisione per priorità
6                                        CAPITOLO 1. CONTESTO AZIENDALE

    4. Progettazione, durante la quale viene definita l’architettura ad alto livello
       e per scenari non banali sono effettuati i diagrammi di attività

    5. Codifica, svolta in parallelo seguendo le norme stabilite (sezione 1.3.2) e la
       pratica di Continuous Integration (CI)

    6. Verifica e validazione, effettuata dagli sviluppatori stessi in un apposito
       server di staging. Sono effettuati test automatici soltanto nei casi l’azienda
       ritenga sia necessario verificare la sicurezza (vulnerability assessment) e la
       scalabilità dell’applicazione

    7. Pubblicazione, che indica il passaggio dal server di staging a quello di
       produzione

    8. Manutenzione, che comprende la formazione del cliente, assistenza e risolu-
       zione di bug

    Ogni progetto viene installato in un server di staging e testato prima di effettuare
la migrazione al server di produzione. È inoltre seguita la pratica di Continuous
Integration per minimizzare i conflitti nell’integrazione di codice modificato da più
persone. La Continuous Integration prevede che vengano effettuati test di unità a
ogni merge del codice nel branch principale.
    L’attività di testing, come menzionato, date le piccole dimensioni dell’azien-
da viene effettuata dagli sviluppatori stessi: questo può rendere più difficoltosa
l’individuazione di bug.

Variazioni nei processi di sviluppo
Nello sviluppo web è aggiunta una fase di design e presentazione del layout del sito
al cliente, che lo dovrà approvare prima di passare alla fase di sviluppo (modifiche
ridotte sono comunque permesse anche in seguito all’approvazione del layout).
L’azienda deve inoltre raccogliere o realizzare i materiali necessari per la creazione
del sito, solitamente testi, eventuali elementi grafici come icone e banner, e fotografie
fornite dai clienti o scattate in sede su richiesta.
   Le fasi di pianificazione del progetto, analisi dei requisiti e progettazione architet-
turale e di dettaglio sono svolte in modo più esaustivo se il prodotto da realizzare
non è mai stato sviluppato dall’azienda o sono coinvolte tecnologie nuove, sono
invece semplificate nel caso di prodotti di portata ridotta, che prevedono esclusi-
vamente sviluppo front-end o con cui l’azienda ha maggiore esperienza. Durante
l’analisi dei requisiti, i casi d’uso sono spesso sostituiti da user story tipiche del
metodo Agile, che definiscono i requisiti di alto livello in linguaggio naturale. Ho
fatto uso di user story nel corso del tirocinio.

Tracciamento dei requisiti
I requisiti sono tracciati grazie al product backlog, un documento informale usato
nello sviluppo Agile per organizzare i requisiti in ordine di priorità e associarli
alle user story da cui sono ricavati a ai test di accettazione che saranno usati per
verificarne l’adempimento. Le attività di amministrazione di progetto e tracciamento
1.3. PROCESSI PRODUTTIVI                                                           7

dei requisiti sono solitamente effettuate usando i tool di project management Agile
offerti da Team Foundation Server (TFS).

Avendo lavorato quasi sempre in autonomia, non ho potuto valutare in modo
esaustivo l’applicazione di queste pratiche all’interno dell’azienda.

1.3.1    Tecnologie utilizzate
Le tecnologie principalmente utilizzate dall’azienda sono:

   ∗ .NET Framework Framework sviluppato da Microsoft utilizzato nello svi-
     luppo del software. L’azienda al momento utilizza soprattutto il framework
     ASP.NET MVC, che estende le funzionalità di .NET

   ∗ Team Foundation Server Prodotto Microsoft che facilita l’amministrazione
     di progetto e il controllo di versione

   ∗ SQL Server Prodotto Microsoft utilizzato con SQL Server Management
     Studio (SSMS) per la gestione di basi di dati

   ∗ HTML, CSS e Javascript Linguaggi utilizzati nello sviluppo front-end

   ∗ Suite Adobe Per attività di design e grafica

   ∗ Stack LAMP Software stack scelta per lo sviluppo su Linux

   Alcuni linguaggi sono mantenuti dall’azienda per retrocompatibilità, come Re-
port Program Generator (RPG IV) su AS/400, ancora utilizzato da alcuni clienti
come software gestionale, particolarmente nel settore assicurativo, calzaturiero e di
trasporti.

Strumenti di supporto
Il sistema operativo correntemente installato nelle macchine aziendali è Windows
10.
    Come strumenti di supporto allo sviluppo Treenet adopera un calendario interno,
comune a tutti i dipendenti, in cui sono segnati impegni e riunioni. Sono inoltre
usati strumenti per la generazione di report di lavoro per i singoli dipendenti che
descrivono il lavoro svolto, la priorità e il tempo impiegato per svolgerlo.
    Al momento l’azienda usa principalmente le funzionalità di project management
offerte da TFS, in particolare i suoi tool a supporto della metologia Agile, che
consentono la gestione del product backlog, pianificazione dei periodi di sprint e
gestione di bug e issues.
    L’Integrated Development Environment (IDE) scelto dall’azienda per la codifica
è Visual Studio, e i sistemi di controllo di versione utilizzati sono Git e TFVC,
associati a TFS.
8                                      CAPITOLO 1. CONTESTO AZIENDALE

1.3.2     Norme
Le norme di codifica seguite dall’azienda sono quelle indicate nella documentazione
Microsoft [13].
  Nello sviluppo web, l’azienda si attiene alle direttive World Wide Web Consortium
(W3C) e alle best practices indicate da Google.

1.4      Propensione all’innovazione
Come menzionato precedentemente, la clientela di Treenet è principalmente compo-
sta da piccole e medie imprese con esigenze simili, che spesso desiderano soluzioni
personalizzate, adattabili a necessità future. È importante per l’azienda poter
aggiungere tempestivamente nuove funzionalità ed eseguire la manutenzione dei
prodotti realizzati, questo la porta a fare uso di tecnologie già consolidate e
diffuse e operare in maniera reattiva, rispondendo alle necessità dei singoli clienti.
Alcune scelte sono dettate dalla necessità di retrocompatibilità con i prodotti
dei clienti.
   Un’eccezione è rappresentata dai prodotti volti a facilitare i processi interni
a Treenet stessa, che sono realizzati di iniziativa dell’azienda e comprendono
funzionalità di gestione di progetto, calendario e messaggistica. Alcuni di essi
potranno essere successivamente destinati anche al pubblico.
   Le tecnologie esistenti e la relativa formazione sono quindi frequentemente
aggiornate, e la scelta delle tecnologie viene effettuata prima di iniziare lo sviluppo
di ogni progetto. Cambiamenti drastici nelle tecnologie utilizzate sono tuttavia
rari e valutati con accortezza, come la decisione dell’azienda di passare dalla
programmazione in Visual Basic utilizzando .NET alla programmazione in C#
utilizzando ASP.NET MVC. Nel caso si riscontri un miglioramento nella velocità di
scrittura del codice, e nella sicurezza e performance delle applicazioni, l’azienda è
consapevole che la necessità di effettuare nuova formazione dei dipendenti viene
compensata nel tempo con un ritorno sull’investimento.
Capitolo 2

Strategia aziendale

Questo capitolo descrive i problemi affrontati nel corso del tirocinio e la loro relazione
con la strategia di sviluppo aziendale, obiettivi e vincoli del progetto, e le motivazioni
della scelta del tirocinio.

2.1      Azienda e stage
Treenet valuta positivamente la possibilità di offrire stage in azienda a studenti
e neolaureati: la presenza di personale proveniente dall’ambiente accademico può
portare innovazione nell’azienda, spingendola ad acquisire nuove metodologie di
lavoro e conoscere le tecnologie incontrate dai tirocinanti nel corso degli anni
universitari.
   Lo stage consente ai tirocinanti di entrare a contatto con l’ambiente lavorativo,
e al contempo permette all’azienda di portare avanti lo sviluppo di progetti con
esito incerto o su cui i dipendenti non possono al momento soffermarsi, entrambi ne
possono quindi trarre beneficio. La principale difficoltà incontrata dall’azienda nella
collaborazione con istituti universitari per lo svolgimento di stage curriculari (in
questo caso della durata di due mesi) è riuscire a integrare il tirocinante in progetti
complessi o di importanza critica per l’azienda in un periodo di stage relativamente
breve.
   Il coinvolgimento di persone che stanno per inserirsi nel mondo del lavoro e
che hanno già goduto della formazione universitaria, riuscendo quindi ad essere
rapidamente produttive, permette allo stage di essere effettuato anche in un’ottica
di inserimento di nuove risorse umane nell’ambiente aziendale.

2.2      Scopo del progetto di stage
Il progetto di stage prevedeva la realizzazione dell’interfaccia di due applicazioni
web secondo le specifiche concordate con i rispettivi clienti, partendo dalla creazione
delle bozze grafiche, e la collaborazione allo sviluppo lato back-end di una delle
due applicazioni, destinata ad uso intranet, utilizzando ASP.NET MVC. I verbali
redatti durante le riunioni con entrambi i clienti, che ho utilizzato per definire le
user story e i requisiti, erano già forniti dall’azienda.

                                            9
10                                       CAPITOLO 2. STRATEGIA AZIENDALE

   Nello sviluppo dell’applicazione di dominio pubblico mi è stata posta la scelta
di utilizzare lo stack Windows, Apache, MySQL, PHP (WAMP) oppure il CMS
aziendale. Avendo già fatto uso dello stack WAMP nello sviluppo del progetto
del corso di Tecnologie Web, ho scelto di utilizzare il CMS aziendale, Webstarter.
L’unico CMS che avevo incontrato in precedenza era Wordpress, che peraltro avevo
usato in modo marginale, ero quindi interessata alla struttura di Webstarter. Inoltre
l’utilizzo di Webstarter, realizzato in C# su .NET, mi avrebbe potuto dare da
subito una panoramica concreta delle possibilità offerte dallo sviluppo basato su
questo framework.

          HTML         CSS         ...           HTML           CSS           ...

                                                           Webstarter
                       PHP
                                                                C#

                                                                .NET
              MySQL           Apache
                                                  SQL Server            IIS

                      WAMP                                 Webstarter

 Figura 2.1: Stack tecnologici tra cui potevo scegliere nello sviluppo dell’applicazione

   Questo progetto mi avrebbe anche consentito di essere una delle prime persone
ad utilizzare la versione corrente di Webstarter e confrontare opinioni su possibili
miglioramenti nell’interfaccia (usabilità, presenza di helper sufficienti per l’utilizzo
da parte di utenti senza background tecnico) e l’introduzione di nuove funzionalità
(come syntax highlighting del codice HTML e CSS per facilitare le modifiche).

   Le ultime due settimane di tirocinio, se tutti gli obiettivi da raggiungere nelle
prime sei settimane fossero stati soddisfatti, avrebbero dovuto essere dedicate ad
attività di analisi, sviluppo e testing sulla nuova versione di Webstarter, con obiettivi
più specifici da definire nel corso del tirocinio.

Gli obiettivi generali stabiliti per il tirocinio sono stati:

     ∗ Acquisizione di informazioni dettagliate e operative sulle principali attività
       aziendali in ambito di sviluppo web

     ∗ Apprendimento dei processi aziendali

     ∗ Formazione sui linguaggi di programmazione e sugli strumenti utilizzati dal-
       l’azienda nella creazione di template grafici e nello sviluppo delle applicazioni
       stabilite nel Piano di Lavoro

     ∗ Collaborazione alle attività di sviluppo software di progetti web già avviati o
       da avviare
2.3. OBIETTIVI DEL TIROCINIO                                                             11

2.3       Obiettivi del tirocinio
Nel Piano di Lavoro, redatto prima dell’inizio del tirocinio, sono stati descritti
obiettivi obbligatori e desiderabili specifici con granularità settimanale.

 Settimana Attività
 1              Formazione e configurazione dell’ambiente di lavoro
 2              Analisi dei Requisiti e realizzazione di due bozze grafiche per lo
                sviluppo front-end di due applicazioni web
 3              Sviluppo dell’User Interface (UI) dell’applicazione n.1 (pubblica)
 4              Sviluppo dell’UI dell’applicazione n.2 (intranet)
 5              Verifica, validazione e pubblicazione dell’applicazione n.1, stesura
                del nuovo Manuale Utente di Webstarter
 6              Verifica, validazione e pubblicazione dell’applicazione n.2
 7e8            Attività di analisi, sviluppo e testing sul CMS aziendale

                            Tabella 2.1: Attività pianificate

I principali obiettivi stabiliti sono stati quindi i seguenti:

Obiettivi obbligatori
     ∗ Realizzazione di due bozze grafiche di siti web

     ∗ Realizzazione dell’interfaccia di un’applicazione web pubblica

     ∗ Realizzazione dell’interfaccia di un’applicazione web intranet

     ∗ Collaborazione ad attività di sviluppo lato back-end, verifica e validazione

Obiettivi desiderabili
     ∗ Stesura del Manuale Utente di Webstarter

     ∗ Attività di analisi, sviluppo e testing sulla nuova versione di Webstarter

   Ho effettuato la scelta di utilizzare il CMS aziendale nello sviluppo dell’applica-
zione n.1 nel corso del tirocinio.
   Nella pratica, le attività di verifica e validazione si sono rivelate piuttosto ridotte,
ho quindi principalmente collaborato allo sviluppo back-end dell’applicazione n.2,
specialmente nel corso della quinta settimana di stage. Per quanto riguarda il lavoro
da svolgere nelle ultime due settimane di stage, inizialmente era prevista come
obiettivo desiderabile l’implementazione di nuove funzionalità su Webstarter, che è
12                                    CAPITOLO 2. STRATEGIA AZIENDALE

stata in seguito sostituita con analisi, testing e miglioramento del codice esistente
seguendo le norme di codifica stabilite e il pattern Model View Controller (MVC).
   Le attività stabilite hanno subito delle modifiche dal punto di vista cronologico
rispetto a quanto pianificato, ma le ho portate a termine entro i tempi previsti.
22 mag 2017                        28 mag 2017                                    4 giu 2017                                    11 giu 2017                               18 giu 2017                                     25 giu 2017                                 2 lug 2017                         9 lug 2017                                     16 lug 2017

                                                               22    23    24   25   26    27     28     29     30     31     1     2      3      4     5     6     7      8      9     10     11     12   13   14   15     16    17     18     19       20   21    22     23     24     25     26   27   28     29     30     1     2      3     4   5   6   7   8     9      10    11     12    13     14     15     16     17    18   19

                                                                     SETTIMANA 1

                                                              Formazione e configurazione
                                                                                                                                                                                                                                                                                                                                                                                                                                              2.3. OBIETTIVI DEL TIROCINIO

                                                                                                                            SETTIMANA 2
                                                                 dell'ambiente di lavoro

                                                                                                                                                                               SETTIMANA 3
                                                                                                       Analisi dei Requisiti e realizzazione di due bozze
                                                                                                           grafiche per lo sviluppo frontend di due
                                                                                                                       applicazioni web                     Sviluppo dell'UI dell'applicazione n.1 (pubblica)              SETTIMANA 4

                                                                                                                                                                                                                                                                                SETTIMANA 5
                                                                                                                                                                                                                Sviluppo dell'UI dell'applicazione n.2
                                                                                                                                                                                                                              (intranet)
                                                                                                                                                                                                                                                                                                                        SETTIMANA 6
                                                                                                                                                                                                                                                               Verifica, validazione e pubblicazione
                                                                                                                                                                                                                                                              dell'applicazione n.1, stesura del nuovo
                                                                                                                                                                                                                                                                    Manuale Utente di Webstarter                                                                                          SETTIMANE 7 E 8
                                                                                                                                                                                                                                                                                                               Verifica, validazione e pubblicazione
                                                                                                                                                                                                                                                                                                                       dell'applicazione n.2
                                                                                                                                                                                                                                                                                                                                                                            Attività di analisi, sviluppo e testing su Webstarter

Figura 2.2: Diagramma di Gantt delle attività pianificate
                                                                                                                                                                                                                                                                                                                                                                                                                                              13
14                                      CAPITOLO 2. STRATEGIA AZIENDALE

2.4       Vincoli
Le attività svolte durante il tirocinio sono sottostate ai seguenti vincoli tecnologici,
metodologici e temporali.

2.4.1      Vincoli tecnologici
I vincoli tecnologici stabiliti per il progetto di stage sono i seguenti:

     ∗ Il progetto di tirocinio doveva essere svolto in ambiente Windows

     ∗ Il lavoro doveva essere svolto utilizzando una macchina aziendale su cui era
       installato il sistema operativo Windows 10

     ∗ La codifica doveva essere effettuata utilizzando l’IDE Visual Studio (2017)

     ∗ Dovevo fare uso del framework ASP.NET MVC e del CMS aziendale, o dello
       stack WAMP in alternativa a quest’ultimo

     ∗ Dovevo fare uso del Database Management System (DBMS) SSMS

     ∗ Dovevo fare uso di TFS per il controllo di versione

     ∗ Dovevo effettuare la realizzazione delle bozze grafiche usando Adobe Creative
       Suite

Non ho ricevuto direttive stringenti per la raccolta di user story e il tracciamento
dei requisiti, ho quindi seguito la pratica aziendale di utilizzare le funzionalità di
gestione di progetto di TFS.

2.4.2      Vincoli metodologici
Dovendo realizzare il progetto di stage prevalentemente in autonomia, non ho seguito
perfettamente le pratiche dello sviluppo Agile. Mi sono attenuta alla pianificazione
descritta nel Piano di Lavoro e alle indicazioni che mi sono state fornite in azienda.
Ho utilizzato gli strumenti di supporto descritti nel Capitolo 1 (sezione 1.3.1), in
particolare il calendario e i report di lavoro. Ho effettuato comunicazioni formali
grazie al servizio di posta elettronica aziendale, e comunicazioni informali e brevi
chiarimenti attraverso LAN Messenger.
   Nella realizzazione dell’applicazione intranet, durante la quale ho lavorato a fianco
di uno degli sviluppatori, ho utilizzato TFS (associato a Git) per il versionamento
e ho seguito la pratica di CI, facendo commit atomici quando possibile.
   Nello sviluppo che coinvolgeva Webstarter ho lavorato in autonomia creando un
branch apposito per le mie modifiche con TFS (in questo caso invece associato a
TFVC). Ho svolto test di accettazione manuali facendo uso del product backlog.
2.5. SCELTA DEL PROGETTO DI STAGE                                                    15

2.4.3     Vincoli temporali
Gli obiettivi obbligatori stabiliti dovevano essere raggiunti in un massimo di 320
ore, come previsto nel Piano di Lavoro. Ho lavorato dalle 8:30 alle 12:30 e dalle
14:00 alle 18:00. Ho effettuato due giorni di assenza, recuperando in seguito le ore
nel corso delle ultime tre settimane di tirocinio.

2.5      Scelta del progetto di stage
La scelta dell’azienda dove svolgere il progetto di stage è stata autonoma. Ero a
conoscenza del fatto che l’azienda si occupasse principalmente di sviluppo web, per
il quale finora ho avuto un maggiore interesse. Volevo entrare in contatto con le
metodologie pratiche di sviluppo e design di siti web, soffermandomi maggiormente
sullo sviluppo front-end e svolgendo entrambi i ruoli di web designer e web developer.
Avevo già utilizzato Adobe Illustrator in precedenza, ma mai in modo approfondito.
Nel corso del tirocinio avrei anche avuto modo di partecipare attivamente ad
attività di produzione, sotto supervisione, realizzando prodotti che sarebbero stati
poi approvati dai clienti stessi. Era quindi necessario che i prodotti rispettassero
pienamente le aspettative dei clienti.
    Lo sviluppo in .NET e l’utilizzo di ulteriori prodotti Microsoft che non avevo
mai incontrato prima del tirocinio mi avrebbero consentito di acquisire conoscenze
base di tecnologie diffuse sul mercato, ma a me completamente sconosciute. Ad
esclusione di ASP.NET MVC, che è open-source dal 2009, durante il tirocinio avrei
fatto uso di un buon numero di tecnologie proprietarie con cui avrei potuto avere
difficoltà a familiarizzare in autonomia. Microsoft offre versioni gratuite (community
o express) dei suoi prodotti, ma spesso con funzionalità ridotte rispetto alle versioni
professionali.
    Nel corso degli anni universitari ho prevalentemente utilizzato la piattaforma
Linux e sfruttato le tecnologie open-source disponibili, avere la possibilità di uti-
lizzare prodotti proprietati avrebbe quindi potuto offrirmi un confronto utile tra
tecnologie e filosofie diverse.
    Infine, lavorare in una realtà aziendale di piccole dimensioni avrebbe potuto
fornirmi delle competenze trasversali e darmi la possibilità di entrare in contatto con
tematiche commerciali e di interazione con i clienti, spesso sottovalutate in ambito
puramente tecnico e affidate ad un unica persona (ad esempio, nel metodo Scrum il
product owner è l’unico membro del team a comunicare con il cliente e raccogliere
le user story). Gli svantaggi sono invece individuabili in una parziale incapacità di
pianificare adeguatamente un singolo progetto senza che questo subisca interruzioni
dettate dalle esigenze contingenti.

2.5.1     Obiettivi personali
Ho stabilito i seguenti obiettivi personali per il tirocinio:

   ∗ Piena realizzazione delle funzionalità richieste dall’azienda
16                                     CAPITOLO 2. STRATEGIA AZIENDALE

     ∗ Formazione nello sviluppo front-end in ambito lavorativo. In particolare,
       svolgimento di entrambe le funzioni di web designer e web developer, che sono
       solitamente assegnate a figure professionali differenti

     ∗ Collaborazione allo sviluppo back-end e familiarizzazione con Visual Studio e
       .NET, che non avevo mai utilizzato in passato

     ∗ Confronto tra le tecnologie scelte dall’azienda per lo svolgimento del progetto
       e le tecnologie con cui ho precedentemente lavorato
Capitolo 3

Resoconto del tirocinio

Questo capitolo descrive la pianificazione del tirocinio, i problemi progettuali, tecnologici
e applicativi incontrati e i risultati ottenuti.

3.1      Pianificazione
Il Piano di Lavoro prevedeva che il progetto di stage fosse svolto in 320 ore,
divise in 8 settimane a tempo pieno. Le attività sono state organizzate con
granularità settimanale, come descritto nel Capitolo 2 (tabella 2.1). Durante la fase
di pianificazione è stata effettuata l’analisi dei rischi, la definizione delle interazioni
con il tutor aziendale e la scelta delle principali tecnologie da utilizzare.
   La pianificazione iniziale ha subito qualche variazione, ciò nonostante gli obiettivi
stabiliti nel Piano di Lavoro sono stati raggiunti entro il termine del tirocinio.
Maggiori informazioni sulle modifiche apportate alla pianificazione sono presenti in
questo capitolo, nella sezione 3.2.

3.1.1     Analisi dei rischi
Nel corso della pianificazione ho individuato i rischi tecnologici, organizzativi e
relativi ai requisiti in cui sarebbe stato possibile incorrere.

Rischi tecnologici
La mia mancata familiarità con ASP.NET MVC comportava una certa incertezza
sulla fattibilità del raggiungimento degli obiettivi entro i tempi stabiliti. Non
ero a conoscenza di quanto lo stack .NET fosse complesso, né di quanto tempo
avrei impiegato per raggiungere un livello di conoscenza sufficiente. L’utilizzo
del CMS aziendale rappresentava un’ulteriore incognita: essendo stato sviluppato
internamente all’azienda non ne conoscevo la struttura né la curva d’apprendimento.

Rischi organizzativi
La mancanza di obiettivi dettagliati nel Piano di Lavoro e l’utilizzo del metodo
Agile, meno strutturato di altri modelli di sviluppo del software, avrebbero potuto

                                             17
18                                 CAPITOLO 3. RESOCONTO DEL TIROCINIO

                            Tecnologia                Conoscenza
                                SQL                   Buona
                    HTML, CSS e Javascript            Buona
                            Adobe Suite               Scarsa
                     Microsoft Visual Studio          Scarsa
                            .NET stack                Nessuna
                  Microsoft SQL Server e SSMS Nessuna
                     Team Foundation Server           Nessuna

                   Tabella 3.1: Familiarità iniziale con le tecnologie

portare a modifiche frequenti della pianificazione. Era quindi importante assicurarsi
di aver soddisfatto i requisiti obbligatori previsti prima di iniziare altre attività.

Rischi nei requisiti
L’utilizzo di user story, informali e ad alto livello, e l’eventuale necessità di effettuare
modifiche frequenti ai requisiti potevano rendere impossibile il loro soddisfacimento.
Questo rischio è stato accentuato anche da una pianificazione poco dettagliata.

3.1.2     Interazioni con il tutor aziendale
Ho effettuato brevi riunione giornaliere con il tutor aziendale, solitamente al ter-
mine della giornata lavorativa, per riassumere il progresso del giorno ed esporre
eventuali dubbi e problematiche. Non sono avvenute revisioni di progresso ufficiali,
l’avanzamento è stato soltanto misurato in modo informale attraverso le riunioni
giornaliere e il confronto con le scadenze previste nella pianificazione.

3.1.3     Diagrammi UML
Ho utilizzato diagrammi dei package e delle classi durante la fase di progettazione
svolta sull’applicazione n.2 e durante l’attività di analisi sul CMS aziendale. Ho
utilizzato il programma StarUML, che avevo già usato nella realizzazione dei
diagrammi Unified Modeling Language (UML) del progetto del corso di Ingegneria
del Software.

3.1.4     Tecnologie adottate
In questa sezione descrivo le tecnologie utilizzate nel corso del tirocinio e le loro prin-
cipali caratteristiche, soffermandomi soprattutto sui framework .NET e ASP.NET
MVC, essendo le tecnologie con le quali avevo meno esperienza e su cui ho effettuato
una maggiore attività di formazione.
3.1. PIANIFICAZIONE                                                                 19

   Il framework .NET è un framework software sviluppato da Microsoft composto
da due elementi principali: la libreria .NET e il Common Language Runtime (CLR).

                                   . NET FRAMEWORK

                                 CLR          . NET library

                           JIT

                          Figura 3.1: CLR e libreria .NET

CLR Il Common Language Runtime gestisce il codice durante la sua esecuzione ed
   offre vari servizi, tra cui gestione di memoria e thread, verifica della sicurezza
   del codice (code safety verification, type safety verification), compilazione,
   garbage collection e compilazione Just-In-Time (JIT).

     Analogamente a quanto accade al bytecode in Java, il codice .NET non
     viene trasformato direttamente in linguaggio macchina, viene invece prima
     convertito in un linguaggio intermedio: il Common Intermediate Language
     (CIL). La compilazione JIT converte CIL in linguaggio macchina.

      Numerosi linguaggi sono supportati dal Framework .NET, tra cui C#, Visual
      Basic, Visual F#, C++/CLI.

     Il CLR implementa un’infrastruttura di type-and-code-verification, il Common
     Type System (CTS), che regola la rappresentazione dei tipi.

      Il codice che è gestito dal CLR (codice scritto in un linguaggio di programma-
      zione convertibile in CIL, come C# o VB) è chiamato managed code, mentre
      il codice che non lo è (cioè codice convertito direttamente in codice nativo)
      viene chiamato unmanaged code. Il managed code è conforme al CTS.

.NET library La libreria .NET (Framework Class Library (FCL)) è una collezione
    orientata agli oggetti di tipi riutilizzabili, la cui base è la Base Class Library
    (BCL). Ogni linguaggio di programmazione eseguibile sul CLR può usare la
    libreria .NET.

La struttura dello stack .NET è illustrata nella figura 3.2.
20                               CAPITOLO 3. RESOCONTO DEL TIROCINIO

                               . NET STACK

                      VB          C#          C ++         ...
                                        CLS

                                 ASP . NET MVC

                  ADO . NET      LINQ         XML          ...
                                                                      FCL
                                        BCL

                                        CLR

                                    Windows

               Figura 3.2: Stack delle componenti del framework .NET

   La FCL contiene diverse componenti, tra cui ADO.NET e Language-Integrated
Query (LINQ). ADO.NET è una componente dedicata al Data Access, sia da/verso
database relazionali che non. Entity Framework, che è descritto in maggior
dettaglio nella sezione 3.1.4, fa parte di ADO.NET.
   LINQ è una componente che offre funzionalità di querying di fonti di dati, tra
cui database relazionali e non relazionali, file XML e liste, standardizzando il modo
di interrogare fonti diverse. Permette di debuggare facilmente le query ed effettua
controlli a tempo di compilazione.

I principali obiettivi di .NET sono:

     ∗ Fornire un ambiente di programmazione ad oggetti consistente, indipendente-
       mente dal tipo di applicazione creata e dal fatto che il codice sia memorizzato
       ed eseguito localmente, eseguito localmente ma distribuito, o eseguito da
       remoto.

     ∗ Fornire un ambiente di esecuzione del codice che minimizzi i conflitti di
       deployment e versionamento, promuova l’esecuzione sicura del codice ed
       elimini i problemi di performance di linguaggi interpretati.

     ∗ Mantenere degli standard di codifica in modo da assicurare che il codice
       basato su .NET sia facilmente integrabile con codice esterno.

ASP.NET MVC 5.2.3
ASP.NET MVC è un framework MVC costruito su ASP.NET che estende le funzio-
nalità del framework .NET per quanto riguarda lo sviluppo web. È frequentemente
associato al linguaggio di programmazione C#.
3.1. PIANIFICAZIONE                                                                 21

  ASP.NET MVC, come suggerito dal nome, fa uso del Design Pattern MVC.
Prevede quindi la divisione delle applicazioni in tre componenti:

Model: Contiene la business logic dell’applicazione

View: Contiene la parte dell’applicazione visibile dagli utenti, con cui essi possono
    interagire

Controller: Contiene la parte l’application logic dell’applicazione, gestisce il flusso
    dell’applicazione e risponde agli input degli utenti

Può essere presente una quarta componente:

ViewModel: Componente passica che raggruppa e seleziona informazioni da uno
    o più Model per facilitarne la rappresentazione nella View (raccogliendo tutti
    e soltanto i dati necessari alla View)

               Controller                  Model                   DB

                                View

                            Figura 3.3: Design pattern MVC

     In ASP.NET MVC, è comune associare ogni View a uno o più Action Methods.
 Un Action Method è mappato 1:1 con un’interazione dell’utente (es. click di un
 link, submit di una form).
     ASP.NET MVC utilizza il paradigma ”Convention over configuration” (anche
 chiamato ”Coding by convention”), che prevede l’utilizzo di convenzioni e default
 intuitivi per velocizzare lo sviluppo e diminuire il numero di decisioni necessarie
 per gli sviluppatori. In particolare, nel pattern MVC, cartelle di View e Controller
 con la stessa nomenclatura  che precede il suffisso View e Controller sono
 automaticamente collegate.
     La figura 3.4 mostra un esempio della struttura tipica di un progetto di tipo
“Applicazione Web” che segue il pattern MVC in Visual Studio. In questo esempio, la
View contenute nella cartella Home sono automaticamente associate a un Controller
 chiamato HomeController, e metodi di HomeController che ritornano ActionResult
 con nomi corrispondenti. Nello specifico, la view chiamata Index.cshtml è automa-
 ticamente associata al metodo public ActionResult Index() di HomeController.cs.
     Questo è sempre valido se non vengono sovrascritte le impostazioni di default
 mappando manualmente le View con gli opportuni Controller e relativi metodi nel
 file RouteConfig.cs, solitamente presente nella cartella App_Start.
22                              CAPITOLO 3. RESOCONTO DEL TIROCINIO

Figura 3.4: Struttura tipica di un progetto di tipo ”Applicazione Web” con pattern
            MVC

   ASP.NET MVC offre la possibilità di creare View parziali renderizzabili all’inter-
no di altre View, riducendo la necessità di duplicare codice e riutilizzare elementi
comuni. I principali elementi comuni dell’interfaccia sono solitamente contenuti
nella View parziale _Layout.cshtml. I nomi delle View parziali iniziano con un
underscore per convenzione.

Entity Framework 6.1.3
Entity Framework è un framework dotato di funzionalità di Object Relational
Mapping (ORM) che gestisce centralmente l’accesso e il salvataggio di informazioni
in basi di dati, minimizzando la quantità di codice per il Data Access da scrivere
esplicitamente. Dalla versione 6 è stato separato da .NET e inserito in ADO.NET.
   Entity Framework può essere usato secondo i paradigmi:

Code-first Utile in presenza di codice esistente, il codice definisce il database

Database-first Utile in presenza di database esistente, semplifica la creazione e
    modifica del model a partire dal database
3.1. PIANIFICAZIONE                                                                    23

                                      APPLICAZIONE
                                    Interfaccia ORM

                                 ENTITY FRAMEWORK
                                   Entity Data Model

                                        ADO.NET

                                       DATABASE

                      Figura 3.5: Struttura di Entity Framework

Model-first Entity Framework crea il database basandosi sul modello creato, le
   modifiche al database partono sempre dal modello

   La classe DbContext è una componente importante di Entity Framework che
collega la business logic dell’applicazione ai dati persistenti, utilizzando i Design
Pattern Repository e Unit of Work.
   DbContext rappresenta un database, mentre DbSet rappresenta una singola
tabella o view del database, è quindi comune trovare più DbSet associati a un
solo DbContext. Entrambe le applicazioni su cui ho lavorato durante il tirocinio
facevano uso di Entity Framework.

Razor 3.2.3
La sintassi Razor è composta da markup Razor, codice HTML e C#, e permette
di inserire variabili lato server nelle pagine web [6]. Le pagine contenenti sintassi
Razor hanno solitamente l’estensione .cshtml.
   Il carattere @ è usato per inserire codice C# all’interno di porzioni di codice
HTML, ad esempio:
Il valore della variabile var è: @var.

Microsoft Visual Studio 2017
Visual Studio è un IDE che permette la creazione di numerose tipologie di applica-
zioni multipiattaforma, da semplici app mobile a soluzioni complesse.

   Oltre a facilitare e velocizzare la stesura del codice grazie a funzionalità di syntax
highlighting e Intellisense (visualizzazione della lista di membri di una classe o un
namespace, informazioni sui parametri, completamento automatico), permette di
effettuare test, debugging, analisi della qualità del codice e della performance delle
applicazioni.
   Può essere integrato con Team Foundation Server (sezione 3.1.4), facilitando il
controllo di versione.
24                              CAPITOLO 3. RESOCONTO DEL TIROCINIO

   Durante il tirocinio ho utilizzato Visual Studio nella scrittura del codice, ad
eccezione di modifiche rapide a singoli file, per le quali ho utilizzato Notepad++
(sezione 3.1.4).

Team Foundation Server
TFS è un prodotto Microsoft che offre varie funzionalità che agevolano lo svilup-
po del software collaborativo, tra cui controllo di versione, gestione di progetto
(particolarmente per quanto riguarda sviluppo Agile), CI, ecc.
   TFS può essere integrato con Visual Studio (Visual Studio Team Services) e
associato a Git (distribuito, sistema di default) o Team Foundation Version Control
(TFVC) (centralizzato) per il controllo di versione. Ho utilizzato entrambi i sistemi
durante il corso del tirocinio, Git durante le prime sei settimane di tirocinio, TFVC
nelle restanti due settimane.

Microsoft SQL Server 2016
Microsoft SQL Server è un prodotto Microsoft composto da un Database Engine
e varie tecnologie di supporto, utilizzato con il DBMS SQL Server Management
Studio, che permette la configurazione e la gestione di tutte le componenti di SQL
Server.

HTML5, CSS3 e Javascript
HTML5, CSS3 e Javascript sono linguaggi utilizzati nello sviluppo front-end.
   HTML5 è un linguaggio di markup utilizzato per strutturare contenuti web,
quinta versione dello standard Hypertext Markup Language (HTML).
   CSS3 è la terza versione dello standard Cascading Style Sheets (CSS), linguaggio
di stile utilizzato per descrivere la presentazione di pagine web.
   Javascript è un linguaggio di scripting client-side principalmente utilizzato per
manipolare il comportamento di pagine web lato client.

Bootstrap 3.3.7
Bootstrap è un framework HTML, CSS e Javascript sviluppato per facilitare la crea-
zione di siti responsive, che mantengono accessibilità e usabilità indipendentemente
dalla grandezza dello schermo del dispositivo da cui sono visualizzati.
   Segue il principio del design mobile-first, che prevede la realizzazione di layout
per schermi mobile e tablet prima di passare allo sviluppo di layout desktop come
strategia per realizzare più facilmente siti responsive.

Webstarter
Il CMS aziendale Webstarter, sviluppato in ASP.NET MVC, è stato creato per
velocizzare lo sviluppo di applicazioni web da parte degli sviluppatori, fornendo
già la parte back-end dell’applicazione, e permette ai clienti di scegliere quali
funzionalità incluse nel CMS inserire nel proprio sito attraverso specifici moduli,
3.1. PIANIFICAZIONE                                                                  25

tra cui gallerie di immagini, slideshow e presentazioni, news e blog, cataloghi di
prodotti e funzionalità di e-commerce.
   Consente inoltre ai clienti di inserire contenuti (testuali e multimediali) e pagine,
e modificare porzioni prestabilite del loro sito tramite una specifica area riservata.
   Nel corso del tirocinio ho principalmente interagito con i moduli relativi a gallerie
di immagini, slideshow, news e cataloghi di prodotti.
   Webstarter fa uso di Tag e ShortCode che individuano porzioni specifiche del
sito, come menu, dati del cliente, gallerie immagini e form di contatto, e permettono
di richiamarle in altre pagine, velocizzando lo sviluppo.

Altre tecnologie
Adobe Suite Ho utilizzato Adobe Suite, e in particolare Adobe Illustrator
(applicazione per l’editing di immagini vettoriali) per realizzare le bozze grafiche
delle interfacce delle applicazioni.

StarUML Ho utilizzato il software StarUML per la creazione dei diagrammi
UML.

TeXstudio Ho utilizzato TeXstudio, editor di testo per LATEX, per svolgere la
stesura del Manuale Utente.

Notepad++ Per effettuare modifiche rapide a file di configurazione ho utilizzato
l’editor di testo Notepad++.

Google Chrome Nello sviluppo front-end ho fatto uso frequente dei Developer
Tools di Google Chrome, che hanno velocizzato la codifica e la correzione di errori.
26                                CAPITOLO 3. RESOCONTO DEL TIROCINIO

3.2         Lavoro svolto
Il lavoro svolto durante il tirocinio è illustrato nella tabella 3.2, con ripartizione
settimanale. Rispetto a quanto stabilito nel Piano di Lavoro (tabella 2.1), si
possono notare delle modifiche nelle attività svolte durante la quinta, settima e
ottava settimana di tirocinio.

 Settimana Attività
        1        Formazione e configurazione dell’ambiente di lavoro
        2        Analisi dei Requisiti e realizzazione di due bozze grafiche per lo
                 sviluppo front-end di due applicazioni web
        3       Sviluppo dell’UI dell’applicazione n.1 (pubblica) utilizzando
                Webstarter
        4        Sviluppo dell’UI dell’applicazione n.2 (intranet), utilizzando
                 ASP.NET MVC e Visual Studio
        5        Verifica, validazione e pubblicazione dell’applicazione n.1, stesura del
                 nuovo Manuale Utente di Webstarter, collaborazione allo sviluppo
                 back-end nell’applicazione n.2
        6        Verifica, validazione e pubblicazione dell’applicazione n.2
        7        Analisi e testing di Webstarter
        8        Riorganizzazione del codice di una porzione di Webstarter secondo il
                 pattern Model View Controller e le convenzioni di codifica Microsoft

                              Tabella 3.2: Lavoro svolto

    Le motivazioni di queste variazioni sono principalmente da attribuire al fatto
che l’utilizzo del CMS aziendale abbia ridotto di molto la necessità di effettuare
attività di verifica dell’applicazione n.1, e alla sovrastima delle ore necessarie per
il testing back-end dell’applicazione n.2. Ho quindi contribuito allo sviluppo di
una nuova funzionalità per l’applicazione n.2 durante la quinta settimana di stage,
collaborando con un altro sviluppatore.
    Per quanto riguarda il lavoro da effettuare nelle ultime due settimane di tirocinio,
ho concordato con il tutor aziendale che fosse più opportuno effettuare un’analisi
della nuova versione del CMS ed effettuare delle modifiche strutturali piuttosto che
avviare l’implementazione di nuove funzionalità.

Il lavoro che ho svolto può essere suddiviso nelle seguenti attività principali:

     1. Sviluppo web (assegnato alle prime sei settimane di tirocinio)

        (a) Realizzazione dell’interfaccia di un’applicazione web pubblica (applica-
            zione n.1) volta a presentare l’azienda del cliente, i servizi offerti da essa
            ed esempi di lavorazioni
3.2. LAVORO SVOLTO                                                                   27

       (b) Realizzazione dell’interfaccia e collaborazione allo sviluppo back-end
           di un’applicazione intranet (applicazione n.2) principalmente volta a
           facilitare il controllo e la gestione di dati relativi a prodotti e vendite
           dell’azienda cliente

   2. Attività di analisi, testing e sviluppo su Webstarter (assegnate alle
      ultime due settimane di tirocinio)

   Di seguito includo una breve descrizione di queste tre attività prima di esporre
le attività di Formazione, Analisi dei Requisiti, Progettazione, Codifica, e Verifica e
Validazione svolte per ognuna di esse.

Realizzazione dell’interfaccia di un’applicazione web pubblica
La creazione dell’interfaccia della prima applicazione web comprendeva la realizza-
zione della bozza grafica, l’approvazione di questa da parte del cliente, la successiva
realizzazione dell’interfaccia utilizzando Webstarter, l’ottimizzazione per i motori
di ricerca (SEO) del sito e la pubblicazione dell’applicazione.
   Il prodotto finale doveva contenere una homepage e una galleria dei prodotti che
permettesse la loro visualizzazione full screen, una pagina di news, una pagina che
contenesse i contatti dell’azienda, e una o più pagine che descrivessero i servizi e le
lavorazioni offerte dall’azienda del cliente.

Realizzazione dell’interfaccia e collaborazione allo sviluppo back-end di
un’applicazione intranet (applicazione n.2)
Lo sviluppo dell’applicazione n.2 era già stato avviato dall’azienda: i Controller,
il Data Access Layer (DAL) e alcuni dei Model erano già stati sviluppati, per il
completamento dell’interfaccia era quindi sufficiente soltanto effettuare la creazione
dei Model rimanenti, realizzare i ViewModel, i fogli di stile e le View, inserirendo il
codice HTML necessario all’interfaccia nelle apposite View (utilizzando la sintassi
Razor).
   Durante la quinta settimana di tirocinio ho partecipato allo sviluppo di una
nuova funzionalità che doveva permettere la gestione delle etichette dei prodotti
dell’azienda.

Attività di analisi, testing e sviluppo su Webstarter
Come precedentemente menzionato, durante il tirocinio ho concordato con il tutor
aziendale che sarebbe stato più opportuno effettuare delle modifiche alla versione
correntemente in via di sviluppo di Webstarter piuttosto che avviare lo sviluppo di
nuove funzionalità.
   Il CMS infatti non seguiva perfettamente il pattern Model View Controller e la
nomenclatura di campi e metodi non era uniforme, ciò combinato alla grandezza
dell’applicazione rendeva più difficile la comprensione e la manutenzione del codice.
Puoi anche leggere