• Non ci sono risultati.

Università degli Studi di Padova

N/A
N/A
Protected

Academic year: 2022

Condividi "Università degli Studi di Padova"

Copied!
47
0
0

Testo completo

(1)

Università degli Studi di Padova

Dipartimento di Matematica

Corso di Laurea in Informatica

Manutenzione migliorativa del sistema di Knowledge Management e Self-Care

Tesi di laurea triennale

Relatore

Prof.ssa Ombretta Gaggi

Laureando

Igor Baylyak

(2)

ii

Anno Accademico 2015-2016

(3)

Igor Baylyak: Manutenzione migliorativa del sistema di Knowledge Management e

(4)
(5)

Possiamo vedere solo poco davanti a noi, ma possiamo vedere tante cose che bisogna fare.

— Alan Turing

(6)
(7)

Sommario

Il presente documento descrive il lavoro svolto durante il periodo di stage, della durata di circa trecento ore, dal laureando Igor Baylyak presso l’azienda Responsa Srl. L’obiettivo di tale attività era quello effettuare la manutenzione migliorativa del sistema utilizzato dall’azienda. Il obbietivo principale era di modelare ed implementare un sistema della gestione dei ruoli degli utenti.

(8)
(9)

“I love deadlines, I love the whooshing noise they make as they go by.”

— Douglas Noël Adams

Ringraziamenti

Innanzitutto, vorrei esprimere la mia gratitudine alla Prof.ssa Ombretta Gaggi, relatore della mia tesi, per aver condiviso con me la propria saggezza di come gestire alla meglio questa ultima attività del corso di studi, per supporto nella stesura di questa tesi.

Voglio ringraziare in modo particolare i membri del team Responsa Srl Alex Zanardo, Davide Girotto, Gabriele Antoniazzi, Gianluca Magni, Lucia Adanti per la stupenda esperienza di stage, per l’accoglienza, per avermi insegnato molto e per avermi dato la possibilità di utilizzare tecnologie fresche ed importanti.

Desidero ringraziare anche tutti i miei docenti del corso di Laurea in Informatica per aver cambiato mio modo di pensare, la mia visione del mondo e tanta disponibilità che offrite a tutti gli studenti.

Ho desiderio di ringraziare poi gli studenti che hanno condiviso con me gioie e fatiche in ogni momento durante gli anni di studio, in particolare il favoloso gruppo Starware e mio compagno nei diversi progetti Andrey Petrov.

Immancabile è il ringraziamento pieno d’affetto alla mia famiglia per l’avermi incorag- giato, supportato e sopportato fino ad ora quando avevo tanto bisogno.

Padova, Ottobre 2016 Igor Baylyak

(10)
(11)

Indice

1 Il contesto aziendale 1

1.1 Responsa . . . 1

1.2 L’idea . . . 2

1.3 Processi aziendali . . . 2

1.3.1 Modello di ciclo di vita del software . . . 2

1.3.2 Tecnologie e strumenti . . . 2

1.4 Configurazione dell’ambiente di lavoro . . . 4

2 Descrizione dello stage 5 2.1 Descrizione generale . . . 5

2.2 Obiettivi dello stage . . . 5

2.3 Obiettivi personali . . . 6

2.4 Pianificazione . . . 7

2.4.1 Dettaglio delle attività . . . 8

3 Gestione dei ruoli 9 3.1 Descrizione della richiesta . . . 9

3.2 Casi d’uso . . . 9

3.3 Requisiti . . . 11

3.4 Progettazione . . . 12

3.4.1 Soluzione . . . 12

3.5 Verifica e validazione . . . 16

4 Funzionalità minori 19 4.1 Aggiunta dei filtri al export di CSV . . . 19

4.1.1 Descrizione . . . 19

4.1.2 Soluzione . . . 19

4.2 Cronicizzazione del import di CSV . . . 19

4.2.1 Descrizione . . . 19

4.2.2 Soluzione . . . 20

4.3 Aggiunta della funzionalità dell’archiviazione di tutte le domande . . 21

4.3.1 Descrizione . . . 21

4.3.2 Soluzione . . . 21

5 Conclusioni 23 5.1 Raggiungimento degli obiettivi . . . 23

(12)

xii INDICE 5.2 Conoscenze acquisite . . . 23 5.3 Valutazione personale . . . 24

Glossary 25

Bibliografia 33

5.4 Siti web consultati . . . 33

(13)

Elenco delle figure

1.1 logo Responsa . . . 1

2.1 Diagramma di Gantt riguardante le attività di lavoro svolto . . . 7

3.1 Use Case - UC1: Gestione ruoli . . . 10

3.2 Use Case - UC2: Gestione utenti . . . 10

3.3 Architettura generale del modello . . . 12

3.4 Architettura generale del controller . . . 14

3.5 Pagina gestione ruoli . . . 16

3.6 Pagina gestione utenti . . . 16

4.1 Pagina di esportazione CSV . . . 20

4.2 Pagina di archiviazione domande . . . 21

Elenco delle tabelle

2.1 Tabella della pianificazione . . . 7

3.1 Tabella del routing delle nuove funzionalità . . . 17

(14)
(15)

Capitolo 1

Il contesto aziendale

1.1 Responsa

Responsa Srl è un progetto nato all’interno dell’incubatore tecnologicoH-Farm1che fornisce una soluzione multi-canalediKnowledge Managmente Self-CareinCloud legata al mondo delCustomer Care. Nasce con l’obiettivo di diminuire il traffico in entrata delle richieste di assistenza e fornire agli utenti, alle aziende ed ai propri clienti uno strumento di alto livello, dai costi contenuti, che permetta di risolvere i dubbi ridefinendo l’esperienzaSelf-Service, grazie ad un assistente virtuale semplice, intuitivo e disponibile in ogni momento.

Il sistema pensato da Responsa, infatti, permette all’utente che visita un sito web di raggiungere con semplicità le informazioni di interesse, mediante una sezioneFAQ snella, performante e dai contenuti dinamici. Qualora l’utente non avesse trovato la risposta ad una domanda, ha la possibilità di formular una domanda ad hoc; un operatore la prenderà in carico eventualmente aggiungendo la nuova risposta alla Knowledge Base, accrescendone di conseguenza il contenuto. In questo modo, più la community di utenti pone quesiti a Responsa, più la Knowledge Base si arricchisce ed è in grado di rispondere alle future domande evitando che queste siano prese in carico dagli operatori del Customer Care.

Dal punto di vista aziendale, l’adozione di un simile strumento, abbattendo la necessità degli utenti di interagire con un operatore umano per recuperare le informa- zioni d’interesse, ha un impatto determinante sui costi di gestione del Customer Care;

l’osservazione dei casi reali di utilizzo del prodotto sul mercato ha portato a rilevare risultati sorprendenti in termini diROI.

figura 1.1: logo Responsa

1http://www.h-farm.com.

(16)

2 CAPITOLO 1. IL CONTESTO AZIENDALE

1.2 L’idea

Il lavoro di stage consisteva nell’apprendimento delle tecnologie web utilizzate dall’a- zienda per l’implementazione di test funzionali e della manutenzione migliorativa del sistema.

Lo studente doveva imparare ad usareRuby on Rails, l’utilizzo delle gemme e la metodologia di sviluppoTDD, per la creazione di un’infrastruttura software funzionale, scalabile mantenibile.

Gli argomenti trattati sono stati principalmente:

∗ Ruby on Rails

∗ RSpec

∗ Database NoSQL(MongoDB)

∗ SaaS

∗ Web servers

∗ Tecnologie web

Quindi lo scopo dello stage alla fine è di inserire nuovo membro all’interno dell’orga- nico attuale dell’azienda.

1.3 Processi aziendali

In questa sezione descrivo il modello di ciclo di vita del software utilizzato dall’azienda.

1.3.1 Modello di ciclo di vita del software

Il team di Responsa Srl lavora utilizzando metodologie agile basate suKanban. Non segue totalmente quanto previsto dalla teoria, ma ne esegue un adattamento dovuto alle esigenze interne ed al rapporto che instaura con i clienti.

Kanban è una metodologia, ispirata ai principi dello sviluppo software agile, alla teoria dei vincoli ed ai principi del Toyota Production System, è stata inizialmente proposta da David J. Anderson nell’agosto 2007 e successivamente ufficializzata nel libro "Kanban" scritto dallo stesso Anderson e pubblicato nel 2010. Le cinque proprietà Kanban di David J. Anderson:

∗ Visualizzare il flusso di lavoro

∗ Limitare il Work-in-Progress

∗ Misurare e gestire il flusso

∗ Rendere le politiche di processo esplicite

∗ Utilizzare i modelli per riconoscere le opportunità di miglioramento

1.3.2 Tecnologie e strumenti

Ambienti di sviluppo

Il sistema operativo adottato dall’azienda è Mac OS X installato su macchine MacBook Pro.

(17)

1.3. PROCESSI AZIENDALI 3 Gestione dei progetti

I due principali strumenti utilizzati da Responsa Srl per il project management e l’issue trackingsono rispettivamente Trello e Jira.

Trello si ispira al metodo Kanban, una delle tecniche sviluppate nel filone della Lean Production. I sistemi di programmazione Kanban sono tra gli strumenti più semplici, efficaci ed economici per gestire il flusso della produzione, dei magazzini o delle informazioni all’interno di un processo. Proprio come nelle lavagne fisiche usate nelKanban, Trello ti dice in un solo sguardo ciò a cui si sta lavorando, chi sta lavorando su cosa, e dove qualcosa è in divenire.

Jira, prodotto dall’azienda Atlassian, è un software dibug tracking,issue trackinge project management. Esso permette di tenere traccia delle azioni e dei problemi degli utenti, di distribuire i compiti all’interno del team, discutere del lavoro in atto con una visibilità completa e migliorare le prestazioni della squadra visualizzando dati in tempo reale.

Versionamento

Il principale software di controllo di versione distribuito utilizzato dall’azienda ègit.

Git supporta lo sviluppo non lineare con diramazione e fusioni rapide e continue e comprende strumenti specifici per visualizzare e navigare una cronologia di sviluppo.

Permette ad ogni sviluppatore una copia locale dell’intera cronologia di sviluppo e le modifiche vengono importate da unrepositoryad un altro.

Tecnologie di sviluppo

Ruby on Rails Ruby on Rails è unframeworkper lo sviluppo di applicazioni web, scritto nel linguaggio ruby, la cui architettura è fortemente ispirata al paradigma MVC. I suoi obiettivi sono la semplicità e la possibilità di sviluppare applicazioni di concreto interesse con meno codice rispetto ad altriframework. Il tutto con necessità di configurazione minimale.

Ruby on Rails poggia su due principali principi guida:

∗ Don’t Repeat Yourself: significa che le definizioni devono essere poste una volta soltanto.

∗ Convention Over Configuration: significa che il programmatore ha bisogno di metter mano alla configurazione soltanto per ciò che differisce dalle convenzioni.

RSpec RSpec è un framework di sviluppo guidato da comportamento (BDD) per il linguaggio di programmazioneruby, ispirato da JBehave. Esso contiene il proprio mocking framework che è completamente integrato nel framework basato suJMock. Il quadro può essere considerato un linguaggio specifico del dominio (DSL) e assomiglia a una specifica del linguaggio naturale.

MongoDB MongoDB è un DBMS non relazionale, orientato ai documenti. Classifica- to come un database di tipoNoSQL, MongoDB si allontana dalla struttura tradizionale basata su tabelle deidatabase relazionali in favore di documenti in stileJSONcon schema dinamico, rendendo l’integrazione di dati di alcuni tipi di applicazioni più facile

(18)

4 CAPITOLO 1. IL CONTESTO AZIENDALE

1.4 Configurazione dell’ambiente di lavoro

Prima di iniziare a svolgere l’analisi dei requisiti e a sviluppare ho configurato insieme al tutor aziendale l’ambiente di lavoro.

La configurazione ha visto i seguenti passi:

∗ Installazione ruby: prima di tutto è stata installata la versione di ruby in uso da azienda ovvero ruby ’1.9.3’

∗ Clonazione della repository: è stata clonata la repository aziendale dell’ap- plicazione all’interno della piattaforma web GitHub2 mediante il software di versionamentogit;

∗ Installazione Bundler: è stato instllato bundler per gestire installazione di tutte le dipendenze verso le librerie esterne, perciò con un semplice commando "bundle install" è stata installata la mia copia locale del sistema Responsa.

∗ Importazione dati nelMongoDB: infine sono stati importati i dati nel data base locale per poter verificare localmente al meglio il funzionamento delElasticSearch utilizzato per la ricerca nel sistema.

2https://github.com.

(19)

Capitolo 2

Descrizione dello stage

Lo stage ha avuto una durata di circa 300 ore lavorative distribuite tra il 4 Luglio 2016 ed il 16 Settembre 2016. Nelle sezioni sottostanti descrivo in modo generale l’attività di stage svolta e in dettaglio più specifico ogni attività.

2.1 Descrizione generale

Due periodi hanno caratterizzato lo stage:

∗ Nel primo, ho dedicato la maggior parte del tempo al apprendimento delle tecnologie che avrei utilizzato nel periodo successivo e allo studio del sistema da mantenere. Inoltre, sempre in questa fase, ho avuto modo di apprendere le metodologie e le meccaniche adottate dall’azienda nello sviluppo delle nuove funzionalità. Sempre in questa parte iniziale ho avuto modo di implementare dei miglioramenti minori al sistema e dei test, quindi avendo un percorso graduale nella difficoltà dei compiti assegnati;

∗ Nel secondo periodo, invece, ho svolto le attività di progettazione, sviluppo e test di una funzionalità maggiore come gestione dei ruoli e degli utenti nel sistema. Lo stage ha come scopo finale quello di inserirmi all’interno del team di sviluppo, assegnandomi compiti e responsabilità adeguati al mio ruolo e riguardanti produzione, testing.

2.2 Obiettivi dello stage

Gli obbiettivi da raggiungere erano molteplici.

∗ Obbligatori

1. Studio approfondito di RoR

2. Studio approfondito di MongoDB/Mongoid 3. Studio dei web servers/services in gioco 4. Studio dell’architettura software

(20)

6 CAPITOLO 2. DESCRIZIONE DELLO STAGE 5. Studio dello sviluppo di test con fake objects via FactoryGirl

6. Creazione di test con RSpec riferiti ai modelli ed ai controllers della piattaforma, esclusa l’area amministrativa

7. Modellazione della gestione dei ruoli degli utenti

– Il sistema modellato dovrà essere in grado di creare, modificare, eli- minare e gestire azioni diversificate per ogni funzionalità presente e futura

8. Integrare i ruoli con i test

9. Il software scritto dovrà essere documentato e mantenibile

∗ Desiderabili

1. Migrare i ruoli ai documenti già presenti nel DB

2. Aggiungere nella reportistica la possibilità di filtrare per tipologia di utente

∗ Opzionali

1. Creazione di uno strumento di analisi amministrativa basato sui ruoli degli utenti

2. Durante lo svolgimento del progetto potranno essere proposte ulteriori funzionalità da implementare

2.3 Obiettivi personali

Gli obiettivi per i quali ho scelto di effettuare lo stage presso l’azienda Responsa Srl sono stati:

∗ Consolidamento e ampliamento delle tecnologie per applicazioni web: l’ambito che più mi interessa di più era proprio mondo web, perciò consolidare e ampliare le mie competenze per quanto riguarda tecnologie comeRuby on Railse linguaggi di programmazione comerubyè stato molto importante;

∗ Mentoring: partecipando aSTAGE-ITtutor aziendale era riuscito a suscitare mio interesse all’azienda ed al progetto su cui lavoravano e ha dato impressione di essere un buonMentor, anche altre figure lavorative presenti a Responsa Srl hanno fatto si che mi potessi confrontare con punti di vista differenti e potessi imparare nuovi approcci alle problematiche che mi venivano poste;

∗ Ambiente variegato: Responsa Srl vive in un contesto lavorativo stimolante.

Potersi confrontare con altre startup, anch’esse all’interno di H-Farm, ed avere un grande numero di persone di natura professionale diversa con cui interagire era un fattore di grande valore che mi ha stimolato ancor prima di accettare la proposta di stage;

∗ Possibilità di assunzione: ho considerato questo aspetto della proposta di stage molto importante. Soprattutto perché mi ha dato la garanzia che l’azienda cercasse una persona da istruire e far crescere a discapito del mero utilizzo come risorsa temporanea.

(21)

2.4. PIANIFICAZIONE 7

2.4 Pianificazione

Il progetto ha richiesto un totale di 300 ore. La pianificazione, in termini di quantità di ore di lavoro, è stata così distribuita:

tabella 2.1: Tabella della pianificazione Studio Rails/piattaforma 52,5 StudioRuby on Rails eMongoid 30

Studio del sistema Responsa 22,5

Implementazione funzionalità minori 97,5

Import/exportCSV 15

TestRSpec 82,5

Ruoli utenti 112,5

Progettazione DB 22,5

Implementazione DB 7,5

Migrazioni 15

Coding/Test Rspec 67,5

Implementazione funzionalità amministrazione 37,5

(22)

8 CAPITOLO 2. DESCRIZIONE DELLO STAGE

2.4.1 Dettaglio delle attività

Le attività che ho svolto a Responsa Srl sono:

∗ Studio dell’ambiente di sviluppo: in questa attività ho studiato un nuovo lin- guaggio di programmazionerubyed in particolare unframeworkper sviluppo delle applicazioni web Ruby on Railsinsieme ad unagemma Mongoid;

∗ Studio del sistema da mantenere: in questa attività ho studiato l’architettura ed il funzionamento del sistema Responsa;

∗ Implementazione funzionalità minori: in questa attività ho sviluppato dei miglio- ramenti alle funzionalità già presenti nel sistema come miglioramento del import ed export dei CSVcon deiKnowledge Base;

∗ Studio ed implementazione dei test con RSpec: in questa attività ho sviluppato 163 test per facilitare futurorefactoring del sistema di Responsa;

∗ Progettazione di una nuova funzionalità: in questa attività ho dovuto progettare la funzionalità di gestione dei utenti presso sistema con aggiunta di un nuovo sistema di gestione dei permessi d’ascesso alle funzionalità;

∗ Implementazione del modello: in questa attività ho dovuto implementare modello progettato per la gestione dei ruoli e degli utenti;

∗ Migrazioni: in questa attività ho fatto gli aggiornamenti necessari al database affinché rispetti aggiunta dei nuovi modelli nel sistema;

∗ Coding/Test: in questa attività ho sviluppato i controller, view necessari al coretto funzionamento del compito richiesto, inoltre sono stati scritti dei test per verificare il codice scritto;

∗ funzionalità amministrazione: in questa attività è stata aggiunta la possibilità ad un operatore di Responsa di archiviare tutte le domande (con i opportuni filtri) di una Knowledge Base

(23)

Capitolo 3

Gestione dei ruoli

3.1 Descrizione della richiesta

È stato richiesto di implementare una funzionalità della gestione dei ruoli degli utenti ed inoltre aggiungere la possibilità ai clienti del sistema di gestire propri utenti nel sistema. Ovvero fornire le operazioniCRUDsugli utenti ai operatori con ruoli adeguati.

Inoltre tale funzionalità deve integrarsi nel sistema sostituendo lagemmagià utilizzata per gestione dei permessi.

3.2 Casi d’uso

Per lo studio dei casi di utilizzo della funzionalità richiesta sono stati creati dei diagrammi. I diagrammi dei casi d’uso (in inglese Use Case Diagram) sono diagrammi di tipoUMLdedicati alla descrizione delle funzioni o servizi offerti da un sistema, così come sono percepiti e utilizzati dagli attori che interagiscono col sistema stesso.

UC1: Gestione ruoli

Attori Principali: Amministratore.

Precondizioni: L’amministratore è entrato nella schermata di gestione dei ruoli all’interno della dashboard di sistema.

Descrizione: Il sistema mette a disposizione i comandi per creare, visualizzare, modificare o eliminare un ruolo.

Postcondizioni: Il sistema è pronto per permettere una nuova interazione.

(24)

10 CAPITOLO 3. GESTIONE DEI RUOLI

figura 3.1: Use Case - UC1: Gestione ruoli

figura 3.2: Use Case - UC2: Gestione utenti

UC2: Gestione utenti

Attori Principali: Amministratore.

Precondizioni: L’amministratore è entrato nella schermata di gestione dei ruoli

(25)

3.3. REQUISITI 11 all’interno della dashboard di sistema.

Descrizione: Il sistema mette a disposizione i comandi per creare, visualizzare, modificare o eliminare un utente.

Postcondizioni: Il sistema è pronto per permettere una nuova interazione.

3.3 Requisiti

Sono stati individuati i seguenti requisiti:

1. Amministratore deve poter creare un ruolo;

2. Amministratore deve poter visualizzare un ruolo;

3. Amministratore deve poter modificare un ruolo;

4. Amministratore deve poter cancellare un ruolo;

5. Amministratore deve poter creare un utente;

6. Amministratore deve poter visualizzare un utente;

7. Amministratore deve poter modificare un utente;

8. Amministratore deve poter cancellare un utente;

9. Il ruolo deve avere un nome;

10. Il ruolo deve avere un ruolo di base per la configurazione dei permessi specifici;

11. I ruoli di base devono essere gerarchici;

12. La visualizzazione di un ruolo è limitata tra gli utenti, solo gli utenti che sono moderatori della stessaKnowledge Baseposso visualizzare il medesimo ruolo.

13. La modificare di un ruolo è limitata tra gli utenti, solo gli utenti che sono moderatori della stessa Knowledge Base possono modificare il medesimo ruolo.

14. La cancellare di un ruolo è limitata tra gli utenti, solo gli utenti che sono moderatori della stessa Knowledge Base possono cancellare il medesimo ruolo.

15. La visualizzazione di un utente è limitata tra gli utenti, solo gli utenti che sono moderatori della stessa Knowledge Base possono visualizzare il medesimo utente.

16. La modificare di un utente è limitata tra gli utenti, solo gli utenti che sono moderatori della stessa Knowledge Base possono modificare il medesimo utente.

17. La cancellare di un utente è limitata tra gli utenti, solo gli utenti che sono moderatori della stessa Knowledge Base possono cancellare il medesimo utente.

18. La gestione dei permessi deve avere integrazione con funzionalità presenti nel sistema;

(26)

12 CAPITOLO 3. GESTIONE DEI RUOLI

3.4 Progettazione

Nella progettazione di gestione dei ruoli si è cercato di ottenere un’architettura fa- cilmente estendibile da incrementi di funzionalità futuri nel sistema. Inoltre, si è cercato di mettere in pratica una serie di best-practices del frameworkRuby on Rails.

L’approccio alla progettazione è basato sulla design patternMVC. La scelta è dovuta alla volontà di utilizzare il framework e il linguaggio al meglio delle loro possibilità, senza snaturare i comuni design pattern forzandone l’utilizzo e verrà trattata in modo approfondito nelle sezioni seguenti.

3.4.1 Soluzione

Model

Model è lo strato del sistema responsabile per rappresentare dati aziendali e la logica.

InRuby on Railsmeccanismi di pluralizzazione sono molto potenti, essendo in grado di pluralizzare (e singolarizzare) sia parole regolari e irregolari. Quando si utilizzano nomi di classi composte da due o più parole, il nome della classe del modello dovrebbe seguire le convenzioni diruby, utilizzando la formaCamelCase. Convenzioni di denominazione:

∗ Classe di Modello - Singolare con la prima lettera di ogni parola in maiuscolo (ad esempio, BookClub).

figura 3.3: Architettura generale del modello

Nome: User;

Descrizione: Classe che modella un utente del sistema;

Utilizzo: Fornisce tutte le informazioni di un utente nel sistema;

Relazioni principali con altre classi:

∗ has_one Role.

(27)

3.4. PROGETTAZIONE 13 Nome: Role;

Descrizione: Classe che modella un ruolo del utente;

Utilizzo: Fornisce tutte le informazioni di un ruolo nel sistema;

Relazioni principali con altre classi:

∗ belongs_to User;

∗ has_one Permission.

Nome: Permission;

Descrizione:Classe che definisce i metodi necessari per la gestione dei permessi;

Utilizzo: Fornisce tutte le informazioni sui permessi di un utente nel sistema;

Relazioni principali con altre classi:

∗ belongs_to Role.

Nome: UserAbilities;

Descrizione: Classe che modella permessi di un utente con ruolo base User ; Utilizzo: Fornisce tutte le informazioni sulle abilità di un ruolo con base User nel

sistema;

Relazioni principali con altre classi:

∗ extend Permission.

Nome: ModeratorAbilities;

Descrizione: Classe che modella permessi di un utente con ruolo base Moderator;

Utilizzo: Fornisce tutte le informazioni sulle abilità di un ruolo con base Moderator nel sistema;

Relazioni principali con altre classi:

∗ extend PermissionsList::UserAbilities.

Nome: AdministratorAbilities;

Descrizione: Classe che modella permessi di un utente con ruolo base Administrator;

Utilizzo: Fornisce tutte le informazioni sulle abilità di un ruolo con base Admini- strator nel sistema;

Relazioni principali con altre classi:

∗ extend PermissionsList::ModeratorAbilities.

Nome: SuperAdministratorAbilities;

Descrizione: Classe che modella permessi di un utente con ruolo base SuperAdmini-

(28)

14 CAPITOLO 3. GESTIONE DEI RUOLI Utilizzo: Fornisce tutte le informazioni sulle abilità di un ruolo con base SuperAd-

ministrator nel sistema;

Relazioni principali con altre classi:

∗ extend PermissionsList::AdministratorAbilities.

Controller

Dopo che router ha determinato quale controller da utilizzare per una richiesta, il controller è responsabile per dare un senso alla richiesta e produrre l’output appropriato.

Per fortuna, Action Controller fa la maggior parte del lavoro base per voi e usa le convenzioni intelligenti per rendere questo più semplice possibile.

La convenzione di denominazione di controller in Rails favorisce pluralizzazione del l’ultima parola nel nome del controller, anche se non è strettamente necessario (ad esempio ApplicationController). Ad esempio:

∗ ClientsController è preferibile rispetto a ClientController;

∗ SiteAdminsController è preferibile rispetto a SiteAdminController oppure Site- sAdminsController.

A seguito di questa convenzione consentirà di utilizzare i generatori di percorso di default (ad esempio "resources", etc) senza la necessità di qualificare ogni percorso al controller, e manterrà l’utilizzo diURL e ilhelpersdi percorso coerente in tutta l’applicazione.

figura 3.4: Architettura generale del controller

Nome: RolesController;

Descrizione: Questa classe permette di gestire la pagina di gestione ruoli;

Utilizzo: Fornisce tutte le informazioni da mostrare nella pagina di gestione ruoli;

(29)

3.4. PROGETTAZIONE 15 Relazioni principali con altre classi:

∗ extend Admin::BaseController Nome: UsersController;

Descrizione: Questa classe permette di gestire la pagina di gestione utenti;

Utilizzo: Fornisce tutte le informazioni da mostrare nella pagina di gestione utenti;

Relazioni principali con altre classi:

∗ extend Admin::BaseController View

View è responsabile di visualizzare la risposta o l’uscita su un browser. Nella sua forma più semplice, una view può essere un pezzo di codice HTML che ha qualche contenuto statico. Per la maggior parte delle applicazioni, avere solo contenuti statici può non essere sufficiente. Molte applicazioni Rails richiedono contenuti dinamici creati dai controller (controller action) da visualizzare nelle loro view. Ciò è reso possibile utilizzandoEmbedded Rubyper generare template che possono contenere contenuti dinamici.

Per impostazione predefinita, i controller inRuby on Rails fanno automaticamente renderingdelle view con i nomi che corrispondono a percorsi validi.

Per esempio, se si dispone di questo codice nella classe BooksController:

c l a s s B o o k s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r

end 

E il seguente codice nel file routes.rb:

r e s o u r c e s : b o o k s

 E si dispone di un file di view app/views/books/index.html.erb:

< h 1 > B o o k s are c o m i n g s o o n ! </ h 1 >

 Ruby on Railsfa automaticamenterenderingdi file app/views/books/index.html.erb quando si accede al percorso /books dell’applicazione, sul schermo verrà visualizatto

"Books are coming soon!" .

Rails cercherà automaticamente il template action_name.html.erb nel percorso views del controller e cercherà di fare rendering.

(30)

16 CAPITOLO 3. GESTIONE DEI RUOLI

figura 3.5: Pagina gestione ruoli

figura 3.6: Pagina gestione utenti

Router

Uno dei strumenti molto potenti delRuby on Railsè il suorouter, che è molto facile da usare visto che si usa la paradigma a convenzioni. Quindi è sufficiente soltanto posizionare i file del modello e i rispettivi controller e dichiarare "resources :roles" e

"resources :users" nel file routes.rb per ottenere la seguente tabella dei routes.

(31)

3.5. VERIFICA E VALIDAZIONE 17

tabella 3.1: Tabella del routing delle nuove funzionalità

Metodo HTTP URL controller action

GET (/ locale)/admin/widgets/ widget_id/roles admin/roles#index POST (/ locale)/admin/widgets/ widget_id/roles admin/roles#create GET (/ locale)/admin/widgets/ widget_id/roles/new admin/roles#new GET (/ locale)/admin/widgets/ widget_id/roles/ id/edit admin/roles#edit GET (/ locale)/admin/widgets/ widget_id/roles/ id admin/roles#show PUT (/ locale)/admin/widgets/ widget_id/roles/ id admin/roles#update DELETE (/ locale)/admin/widgets/ widget_id/roles/ id admin/roles#destroy GET (/ locale)/admin/widgets/ widget_id/users admin/users#index POST (/ locale)/admin/widgets/ widget_id/users admin/users#create GET (/ locale)/admin/widgets/ widget_id/users/new admin/users#new GET (/ locale)/admin/widgets/ widget_id/users/ id/edit admin/users#edit GET (/ locale)/admin/widgets/ widget_id/users/ id admin/users#show PUT (/ locale)/admin/widgets/ widget_id/users/ id admin/users#update DELETE (/ locale)/admin/widgets/ widget_id/users/ id admin/users#destroy

3.5 Verifica e validazione

L’analisi dinamica consente di valutare la correttezza di un componente durante la sua esecuzione. È una delle parte essenziali del processo di verifica. Questa analisi viene eseguita principalmente tramite esecuzione di test: di unità, di integrazione e di sistema . Per farlo ho utilizzato come strumento RSpecinsieme aFactoryGrirle Capybara. La struttura di un test è la seguente:

1. Viene chiamata la funzione describe passandogli il nome della classe da testare.

2. All’interno del describe function viene chiamata la funzione before passandogli come parametrosimbolo:each per includere all’interno del test il modulo principale dell’applicazione, risolvere le varie dipendenze e creare tutte le variabili necessarie;

3. Viene scritto il test vero e proprio chiamando una funzione it che ha come parametro una stringa che contiene una piccola descrizione del test.

Un test di esempio è il seguente:

# s p e c / m o d e l s / r o l e _ s p e c . rb

# e n c o d i n g : utf -8 r e q u i r e ’ s p ec _ helper ’ d e s c r i b e R o l e do

b e f o r e (: e a c h ) do

@ a d m i n i s t r a t o r = F a c t o r y G i r l . c r e a t e (: a d m i n )

@ a d m i n i s t r a t o r _ a b i l i t i e s = F a c t o r y G i r l . c r e a t e (: a d m i n i s t r a t o r _ a b i l i t i e s )

@ r o l e _ a d m i n i s t r a t o r = F a c t o r y G i r l . c r e a t e (: role , : u s e r = > @ a d m i n i s t r a t o r ,

: p e r m i s s i o n = > @ a d m i n i s t r a t o r _ a b i l i t i e s , : c r e a t e d _ by = > @ a d m i n i s t r a t o r . id

)

@ w i d g e t = F a c t o r y G i r l . c r e a t e (: w i d g e t _ valid , : u s e r = >

(32)

18 CAPITOLO 3. GESTIONE DEI RUOLI

@ m o d e r a t o r = F a c t o r y G i r l . c r e a t e (: m o d e r a t o r _ w i t h _ a c c e p t e d _ c l a u s e s )

@ m o d e r a t o r _ a b i l i t i e s = F a c t o r y G i r l . c r e a t e (: m o d e r a t o r _ a b i l i t i e s )

@ r o l e _ m o d e r a t o r = F a c t o r y G i r l . c r e a t e (: role , : u s e r = > @ m o d e r a t o r ,

: p e r m i s s i o n = > @ m o d e r a t o r _ a b i l i t i e s , : c r e a t e d _ by = > @ a d m i n i s t r a t o r . id )

@ u s e r = F a c t o r y G i r l . c r e a t e (: u s e r )

@ u s e r _ a b i l i t i e s = F a c t o r y G i r l . c r e a t e (: u s e r _ a b i l i t i e s )

@ r o l e _ u s e r = F a c t o r y G i r l . c r e a t e (: role , : u s e r = > @user ,

: p e r m i s s i o n = > @ u s e r _ a b i l i t i e s , : c r e a t e d _ by = > @ u s e r . id

)

@ r o l e s = [ @ r o l e _ a d m i n i s t r a t o r , @ r o l e _ user , @ r o l e _ m o d e r a t o r ] end

it " has a v a l i d get _ r o l e s " do r o l e s = R o l e . get _ r o l e s ( @ w i d g e t )

( R o l e . all . to _ a . c o u n t ) . s h o u l d eql ( @ r o l e s . c o u n t )

@ r o l e s . d e l e t e ( @ r o l e _ u s e r )

r o l e s . c o u n t . s h o u l d eql ( @ r o l e s . c o u n t ) end

it " has a v a l i d get _ u s e r s " do u s e r s = R o l e . get _ u s e r s ( @ w i d g e t ) u s e r s . c o u n t . s h o u l d eql (2)

end

it " has a v a l i d get _ r o l e s _ n a m e s " do u s e r s = R o l e . get _ u s e r s ( @ w i d g e t )

r o l e s _ n a m e s = R o l e . get _ r o l e s _ n a m e s ( @widget , u s e r s )

( R o l e . all . d i s t i n c t (: n a m e ) . to _ a . c o u n t ) . s h o u l d eql ( @ r o l e s . c o u n t )

@ r o l e s . d e l e t e ( @ r o l e _ u s e r )

r o l e s _ n a m e s . c o u n t . s h o u l d eql ( @ r o l e s . c o u n t + 3) end

it " has a v a l i d get _ u se r _ for _ r o l e " do u s e r _ e m a i l = @ u s e r . e m a i l

u s e r = R o l e . get _ u s e r _ for _ r ol e ( u s e r _ e m a i l ) u s e r . s h o u l d eql ( @ u s e r )

end

end 

Visto che uno dei obbiettivi dello stage era imparare la metodologia di sviluppo TDD sono stati sviluppati 140 test per verifica del codice scritto per la funzionalità di gestione dei ruoli.

(33)

Capitolo 4

Funzionalità minori

In questo capitolo descrivo brevemente i miglioramenti alle funzionalità minori già presenti nel sistema che sono stati richiesti da implementare oltre allo sviluppo del modulo di gestione dei ruoli.

4.1 Aggiunta dei filtri al export di CSV

4.1.1 Descrizione

Era stato richiesto di aggiungere ai filtri esistenti quelli di categoria e fonte per l’esportazione di unaKnowledge Basecome unCSV.

4.1.2 Soluzione

Per risolvere questa richiesta ho aggiunto alla view della pagina di esportazione una multi select per scelta delle categorie e una semplice select per la scelta della fonte.

Nel controller ho dovuto aggiungere unbefore filter per recuperare tutte le categorie associate alla Knowledge Base e quindi avere i dati necessarie per popolare la select.

Infine ho modificato il metodo che generava i CSV aggiungendo alla query di recupero delle domande da esportare i nuovi parametri.

4.2 Cronicizzazione del import di CSV

4.2.1 Descrizione

Prima l’azione dell’importazione di unaKnowledge Basetramite CSV era bloccante per utente, cioè era una azione sincrona e di conseguenza bisognava aspettare la sua fine per proseguire con utilizzo del sistema. Era stato richiesto togliere questo vincolo trasformando questa operazione in una asincrona utilizzando il modulo di gestione Sidekiqdel sistema. Ovvero trasformare una operazione di import CSV in un’azione pianificata,cron.

(34)

20 CAPITOLO 4. FUNZIONALITÀ MINORI

figura 4.1: Pagina di esportazione CSV

4.2.2 Soluzione

Per risolvere questa richiesta ho aggiunto alla view della pagina di importazione una notifica per indicare all’utente importazione è stata presa in carico, poi ho dovuto modificare il medesimo controller che lancia la notifica alla view e schedula l’azione di importazione con opportunoworker. Infine ho scritto il worker per eseguire l’operazione di importazione di CSV.

Esemipo di unSidekiq worker:

# e n c o d i n g : utf -8 c l a s s C s v I m p o r t W o r k e r

i n c l u d e S i d e k i q :: W o r k e r

s i d e k i q _ o p t i o n s (: q u e u e = > : default , : r e t r y = > false ,

: b a c k t r a c e = > f a l s e ) def p e r f o r m ( w i d g e t _ id , csv _ url )

t i m e _ s t a r t e d = T i m e . now b e g i n

@ w i d g e t = W i d g e t . f i n d ( w i d g e t _ id )

r e s c u e M o n g o i d :: E r r o r s :: I n v a l i d F i n d , M o n g o i d :: E r r o r s ::

D o c u m e n t N o t F o u n d r e t u r n r e n d e r _ 4 0 4 end

@ w i d g e t . csv _ url = csv _ url

@ w i d g e t . s a v e !

t i m e _ e n d e d = T i m e . now

p u t s " CSV i m p o r t e d in : #{ t i m e _ e n d e d - t im e _ s t a r t e d } s e c s "

end end

(35)

4.3. AGGIUNTA DELLA FUNZIONALITÀ DELL’ARCHIVIAZIONE DI TUTTE LE DOMANDE 21



4.3 Aggiunta della funzionalità dell’archiviazione di tutte le domande

4.3.1 Descrizione

Era stato richiesto di aggiungere la possibilità ad un operatore di Responsa di archiviare tutte le domande di unaKnowledge Basecon dei opportuni filtri per la selezione delle domande da archiviare.

4.3.2 Soluzione

Per risolvere questa richiesta ho aggiunto alla view della pagina la selezione del intervallo temporale, categorie, status e tipo delle domande da archiviare, poi ho dovuto aggiungere al medesimo controller due before filter per recuperare tutte le categorie e intervallo temporale di tutte le domande associate alla Knowledge Base e quindi avere i dati necessarie per popolare i corrispondenti campi nella view, inoltre ho implementato nel controller un nuovo metodo "mass_archive" che si occupa di schedulare l’azione di archiviazione con opportunoworkere di conseguenza ho dovuto modificare ilrouterper attivare questo metodo del controller. Dopodiché ho modificato ilworker che si occupava della archiviazione delle domande in modo che accetta dei parametri con dei filtri per restringere il numero delle domande da archiviare.

(36)
(37)

Capitolo 5

Conclusioni

5.1 Raggiungimento degli obiettivi

Alla fine dello stage sono riuscito a:

∗ Sviluppare un modulo della gestione dei ruoli degli utenti;

∗ Migliorare le funzionalità di importazione/esportazione deiCSVdi unaKnowledge Base;

∗ Aggiungere la funzionalità di archiviazione di tutte le domande di una Knowledge Base al sistema.

A fronte del lavoro svolto e vista l’approvazione del tutor aziendale, gli obiettivi dello stage possono considerarsi raggiunti. Tutte le funzionalità sviluppate o migliorate da me sono state già messe in produzione. A livello tecnologico posso affermare con soddisfazione di aver appreso moltissimo nello sviluppo di applicativi web. Ho approfondito moltissime tecnologie diverse ed interessanti cosicché il mio bagaglio di abilità potesse aumentare in maniera sostanziale.

Prima di iniziare lo stage, ero molto incuriosito del mondo delle startup. A fine esperienza posso dire di essere molto affascinato da questa realtà fortemente dinamica ed innovativa,per questo motivo, magari un giorno, riuscirò ad avere una startup propria ed intraprendere una carriera da imprenditore. Infatti, ho avuto l’occasione di lavorare con dei colleghi, con grande esperienza, sia in campi correlati al mio ,ma anche completamente diversi. Infine, lavorando bene e raggiungendo tutte le aspettative che l’azienda aveva posto su di me, ho potuto avere una chance concreta per poter entrare a far parte del team di Responsa Srl. Ho raggiunto così l’obiettivo più importante che mi ero prefissato alla scelta dello stage.

5.2 Conoscenze acquisite

Lo stage mi ha permesso di imparare cose nuove ed innovative, mai utilizzate in precedenza. La mia formazione si è arricchita delle seguenti tecnologie:

Ruby on Rails: grazie allo stage sono riuscito ad imparare un nuovo linguaggio di programmazione ed un framework per lo sviluppo delle applicazioni web molto veloce;

(38)

24 CAPITOLO 5. CONCLUSIONI RSpec, FactoryGirl e Capybara: infine ho imparato intero set dei strumenti per scrivere tutti i test necessari per una applicazione web sviluppata in Ruby on Rails.

Ma non è tutto, anche metodologie e nuovi strumenti hanno arricchito il mio bagaglio di conoscenze:

Metodo Agile Kanban: grazie allo stage ho potuto imparare questa nuova tecnica e ho potuto metterla in atto imparando moltissime cose visto che non la mia conoscenza riguardo il project management era isolata solamente al metodo incrementale;

Trello e Jira: grazie allo stage ho potuto imparare l’utilizzo di questi strumenti avanzati per la gestione degli issue e non solo;

Slack: uno strumento che non avevo mai utilizzato prima dello stage è Slack. Questo programma di messaggistica per ambienti business mi ha permesso di comunicare con gli altri membri del team in modo semplice, veloce ed organizzato. Grazie all’innovativo utilizzo di canali e chat per topic, Slack ha sostituito le email come strumento per lo scambio di informazioni migliorando la produttività.

5.3 Valutazione personale

L’esperienza di stage mi ha permesso di conoscere da vicino un mondo a me prima sconosciuto, quello lavorativo. È stata un esperienza interessante e positiva e ritengo sia essenziale affrontarla prima della conclusione del corso di laurea. Inoltre, mi ha portato ad usare ed imparare delle tecnologie mai studiate durante la carriera universitaria e di consolidare quelle che già conoscevo.

Mi ha posto di fronte dei compiti con difficoltà crescente, e sono felice del modo in cui sono riuscito ad affrontarle, ritengo che questo sia stato un approccio molto formativo per me. Ovvero risolvendo dei problemi dai più facili a quelli più impegnativi sono riuscito ad evitare un problema noto del "muro" o blocco dovuto alla mancanza delle conoscenze pratiche e teoriche con un nuovo linguaggio/framework . Il corso di laurea fornisce gli strumenti necessari affinché si possano affrontare e apprendere nuove tecnologie, permette di adattarsi molto velocemente a qualsiasi tipo di attività.

Immergendomi in un ambiente lavorativo ho potuto apprendere come comunicare con i colleghi ed essere parte di un’azienda, tanto che mi è stato proposto di continuare la collaborazione anche dopo la conclusione dello stage.

(39)

Glossario

Action Controller è il nucleo di una richiesta web inRuby on Rails. Esso è costituito da una o piùcontroller actioneseguite su richiesta e poi o renderizza un modello oppure reindirizza a un’altra azione.. 18,25

BDD Nell’ambito dell’ingegneria del software, il behavior-driven development (ab- breviato in BDD e traducibile in Sviluppo guidato dal comportamento) è una metodologia di sviluppo del software basata sul test-driven development (TDD).

3, 25

before filter sono i metodi che vengono eseguiti "before", "after" o "around" una azione di controller.. 13,15,25

bug tracking applicativo software usato generalmente dai programmatori per tenere traccia delle segnalazioni di bug all’interno dei software, in modo che tali errori siano mantenuti sotto controllo, con una descrizione della riproducibilità e dei dettagli ad essi correlati.. 3,25

Bundler Bundler fornisce un ambiente coerente per progetti di Ruby per il monitorag- gio e l’installazione delle gemme esatte e le loro versioni che sono necessari.Bundler è un’uscita dall’inferno delle dipendenze, e assicura che le gemme di cui avete bisogno sono presenti in fase di sviluppo, staging e produzione.. 4, 25

CamelCase La Notazione a Cammello è la pratica nata durante gli anni settanta di scrivere parole composte o frasi unendo tutte le parole tra loro, ma lasciando le loro iniziali maiuscole.. 16, 25

Capybara Capybara aiuta a testare le applicazioni web simulando come un vero e pro-

prio utente potrebbe interagire con la vostra applicazione. https://github.com/teamcapybara/capybara.

20,25

Cloud è un paradigma di erogazione di risorse informatiche, come l’archiviazione, l’elaborazione o la trasmissione di dati, caratterizzato dalla disponibilità on demand attraverso Internet a partire da un insieme di risorse preesistenti e configurabili.. 1,25

controller action è definito come un metodo pubblico sul controller, che verrà automaticamente reso accessibile al web-server tramite router.. 19, 21, 25, 30

cron Nei sistemi operativi Unix e Unix-like, il comando crontab consente la pianifi- cazione di comandi, ovvero consente la registrazione di questi presso il sistema

(40)

26 Glossary per essere poi mandati in esecuzione periodicamente in maniera automatica dal sistema stesso.. 13,25

CRUD Acronimo di create, read, update and delete. Fa riferimento alle principali operazioni implementate in una base di dati. Un’applicazione con operazioni CRUD è qundi i grado di creare, leggere, modificare ed eliminare dati persistenti..

9,26

CSV Il comma-separated values è un formato di file basato su file di testo utilizzato per l’importazione ed esportazione (ad esempio da fogli elettronici o database) di una tabella di dati.. 7, 8,13,23,26

Customer Care una serie di attività progettate per aumentare il livello di soddisfa- zione del cliente, dandogli la sensazione che un prodotto o un servizio incontri le sue aspettative.. 1, 26

database relazionali In informatica il modello relazionale è un modello logico di rappresentazione o strutturazione dei dati di un database implementato su sistemi di gestione di basi di dati, detti perciò sistemi di gestione di basi di dati relazionali. Si basa sulla teoria degli insiemi e sulla logica del primo ordine ed è strutturato intorno al concetto matematico di relazione (detta anche tabella). Per il suo trattamento ci si avvale di strumenti quali il calcolo relazionale e l’algebra relazionale.. 3,26

DSL in informatica DSL, Domain-Specific Language (ing. linguaggio specifico di dominio) è un linguaggio di programmazione o un linguaggio di specifica dedicato a particolari problemi di un dominio, a una particolare tecnica di rappresentazione e/o a una particolare soluzione tecnica.. 3,26

ElasticSearch è un server di ricerca basato su Lucene, con capacitàFull Text, con supporto ad architetture distribuite. Tutte le funzionalità sono nativamente esposte tramite interfaccia RESTful, mentre le informazioni sono gestite come documentiJSON. Elasticsearch nel gennaio 2016 risulta essere il motore di ricerca più utilizzato.. 4,26

Embedded Ruby è un sistema di template che incorpora rubino in un documento di testo. E ’spesso usato per incorporare codice Ruby in un documento HTML. Il sistema di template di Embedded Ruby unisce il codicerubye il testo in chiaro per fornire un controllo di flusso e sostituzione delle variabili, rendendo così la presentazione più facile da mantenere.. 19

FactoryGirl è una sostituzione deglifixturescon una sintassi di definizione semplice, il supporto per più strategie di build (saved instances, unsaved instances, attribute hashes, e stubbed objects), e il supporto per più factory per la stessa classe (utente, utente_amministratore, e così via), tra cui l’ereditarietà di factory.. 11, 20,26

fake objects Una classe con i metodi che restituiscono un valore o valori che possono sia essere codificati o impostate a livello di codice fisso.. 11,26

(41)

Glossary 27 FAQ Frequently Asked Questions sono una serie di risposte stilate direttamente dall’autore, in risposta alle domande che gli vengono poste, o che ritiene gli verrebbero poste, più frequentemente dagli utilizzatori di un certo servizio:

soprattutto su internet e in particolare nel web e nelle comunità virtuali vi sono domande ricorrenti alle quali si preferisce rispondere pubblicamente con un documento affinché non vengano poste troppo spesso, in modo da sciogliere i dubbi dei nuovi utenti.. 1,26,28,30

fixtures Fixtures sono un modo di organizzare i dati con quali si desidera testare applicazione; nei dati brevi, di esempio.. 26

FrameWork Struttura di supporto su cui un applicativo può essere organizzato e progettato. Un framework si basa su una serie di librerie, su convenzioni di sviluppo e su una serie di strumenti di supporto allo sviluppo dell’applicativo stesso.. 3,8,27,28,30

Full Text La ricerca full text (in italiano: ricerca a testo intero) fa riferimento a quelle tecniche per la ricerca di un documento o di una collezione di essi in una base di dati full text. La ricerca full text si distingue da ricerche basate su metadati o su parti di testi originali rappresentati nelle basi di dati (come titoli, sommari, sezioni selezionate o riferimenti bibliografici). In una ricerca full text il motore di ricerca esamina tutte le parole in ogni documento archiviato e tenta di trovare un riscontro secondo determinati criteri (come parole fornite dall’utente). Questo tipo di ricerca divenne molto comune nelle basi di dati bibliografiche in rete negli anni novanta. Molti siti e applicativi forniscono questo tipo di ricerca.. 26, 27 gemma la libreria per il linguaggio Ruby. https://rubygems.org. 8,9, 27

Git è un sistema software di controllo di versione distribuito, creato da Linus Torvalds nel 2005. La progettazione di Git è stata ispirata da BitKeeper e da Monotone, pensato inizialmente solamente come motore a basso livello che altri potevano usare per scrivere un front-end. In seguito diventato un sistema di controllo versione, direttamente utilizzabile da riga di comando; vari progetti software adesso usano Git per tale attività, principalmente il kernel Linux.. 3,4,27 H-Farm È una piattaforma digitale nata nel 2005 con l’obiettivo di aiutare giovani

imprenditori nel lancio di iniziative innovative e supportare la trasformazione delle aziende italiane in un’ottica digitale.. 1,6,27

helpers forniscono un modo di mettere funzionalità comunemente utilizzati in un metodo che può essere chiamato nella view. Helpers includono funzionalità per il rendering di URL, la formattazione del testo e numeri, le forme di costruzione e molto altro ancora.. 18, 27

issue tracking pacchetto software che gestisce e mantiene liste di problemi, trovati dagli sviluppatori, im maniera organizzata.. 3,27

IT Acronimo del termine inglese information technology, indica l’utilizzo di elaboratori e attrezzature di telecomunicazione per memorizzare, recuperare, trasmettere e manipolare dati, spesso nel contesto di un’attività commerciale o di un’altra impresa. Il termine si usa comunemente come sinonimo di computer e reti di com-

(42)

28 Glossary come la televisione e i telefoni. Parecchie industrie sono legate alla tecnologia del- l’informazione, inclusi hardware, software, elettronica, semiconduttori, internet, attrezzature per telecomunicazione, commercio elettronico e servizi informatici..

27,30

JMock JMock è una libreria che supporta lo sviluppo test-driven di codice Java con oggetti mock.. 3,27

JSON JSON, acronimo di JavaScript Object Notation, è un formato adatto all’inter- scambio di dati fra applicazioni client-server .. 3, 26,27

Kanban Tramite il Kanban si rovescia il punto d’osservazione e si concepisce il processo produttivo come un’operazione che va da valle a monte e che lavora i pezzi necessari solo nel momento in cui ce n’è bisogno. Questo è ciò che Ohno (responsabile della produzione di Toyota) chiamava "pensare al contrario".. 2, 3, 24,28

Knowledge Base l’insieme di domande e risposteFAQdi un cliente di Responsa Srl..

1,8,11,13,15,23,28

Knowledge Management l’insieme di strategie e metodi per identificare, raccogliere, sviluppare, conservare e rendere accessibile la conoscenza delle persone che fanno parte di una organizzazione (o, al limite, di una comunità di pratica). 1,28 Lean Production La produzione snella (dall’inglese lean manufacturing o lean pro-

duction) è una filosofia che mira a minimizzare gli sprechi fino ad annullarli.. 3, 28

mentor nell’ambito del mentoring, è il soggetto con più esperienza. Deve avere capacità relazionali, saper condurre colloqui e porre domande sagge, deve saper gestire le fasi del processo di mentoring.. 6,28

Mentoring metodologia di formazione che fa riferimento a una relazione uno a uno tra un soggetto con più esperienza (mentor) e uno con meno esperienza (junior, mentee, protégé), cioè un allievo, al fine di far sviluppare a quest’ultimo competenze in ambito formativo, lavorativo e sociale e di sviluppare autostima, a livello educativo-scolastico.. 6,28

MongoDB è un DBMS non relazionale, orientato ai documenti. Classificato come un database di tipo NoSQL, MongoDB si allontana dalla struttura tradizionale basata su tabelle dei database relazionali in favore di documenti in stile JSON con schema dinamico (MongoDB chiama il formato BSON), rendendo l’integrazione di dati di alcuni tipi di applicazioni più facile e veloce.. 2,4,28

Mongoid è ufficialmente supportato ODM (Object-Document-Mapper)framework per MongoDBinruby.. 7,8,28

multi-canale Un’unicaKnowledge Basesincronizzata su tutte le piattaforme:

∗ Sito web;

∗ App mobile;

∗ pagina Facebook.

(43)

Glossary 29 . 1,28

MVC Pattern architetturale che prevede la separazione tra la logica di gestione dei dati e come questi dati vengono presentati. Il pattern prevede la divisione dell’architettura in tre parti:

∗ Model: si occupa della gestione dei dati;

∗ View: si occupa di visualizzare i dati presenti nel model;

∗ Controller: si occupa di aggiornare il model in base alle operazioni che l’utente compie sulla view.

. 3,15,28,30

NoSQL È un movimento che promuove sistemi software dove la persistenza dei dati è caratterizzata dal fatto di non utilizzare il modello relazionale che è di solito usato dai database tradizionali. L’espressione NoSQL fa riferimento al linguaggio SQL, che è il più comune linguaggio di interrogazione dei dati nei database relazionali, qui preso a simbolo dell’intero paradigma relazionale. Questi archivi di dati il più delle volte non richiedono uno schema fisso, evitano spesso le operazioni di unione e puntano a scalare in modo orizzontale. Gli accademici e gli articoli si riferiscono a queste basi di dati come memorizzazione strutturata.. 2,3,29 Open Source Open source (termine inglese che significa sorgente aperta), in informa-

tica, indica un software di cui gli autori (più precisamente, i detentori dei diritti) rendono pubblico il codice sorgente, favorendone il libero studio e permettendo a programmatori indipendenti di apportarvi modifiche ed estensioni. Questa possibilità è regolata tramite l’applicazione di apposite licenze d’uso. Il fenomeno ha tratto grande beneficio da Internet, perché esso permette a programmatori distanti di coordinarsi e lavorare allo stesso progetto.. 29,30

Project Management è l’applicazione di conoscenze, attitudini, strumenti e tecniche alle attività di un progetto al fine di conseguirne gli obiettivi.. 3, 29

refactoring è una tecnica strutturata per modificare la struttura interna di porzioni di codice senza modificarne il comportamento esterno, applicata per migliorare alcune caratteristiche non funzionali del software.. 8,29

rendering è un termine della lingua inglese che in senso esteso indica la resa (o restituzione) grafica, ovvero un’operazione compiuta da un disegnatore per produrre una rappresentazione di qualità di un oggetto o di una architettura (progettata o rilevata).. 19

repository è un ambiente di un sistema informativo, in cui vengono gestiti i metadati, attraverso tabelle relazionali; l’insieme di tabelle, regole e motori di calcolo tramite cui si gestiscono i metadati prende il nome di metabase.. 3,4,29 RESTful Riferisce ad un insieme di principi di architetture di rete, i quali delineano

come le risorse sono definite e indirizzate:

∗ identificazione univoca delle risorse: ad esempio, nel web devono essere

(44)

30 Glossary

∗ utilizzo esplicito dei metodi HTTP;

∗ risorse autodescrittive: è possibile utilizzare virtualmente qualsiasi formato per rappresentare le risorse, ma è opportuno

∗ utilizzare formati il più possibile standard in modo da semplificare l’intera- zione con i client;

∗ collegamenti tra risorse: una risorsa deve fornire tutte le informazioni riguardo alle risorse ad essa correlate nella sua rappresentazione o mediante collegamenti ipertestuali;

∗ comunicazione stateless: nessuna richiesta deve avere relazioni con le richieste precedenti e successive ad essa.

Il termine è spesso usato per descrivere ogni interfaccia che trasmette dati mediante HTTP.. 26,29

ROI è un indice di bilancio che indica la redditività e l’efficienza economica della gestione caratteristica a prescindere dalle fonti utilizzate: esprime, cioè, quanto rende il capitale investito in quell’azienda.. 1,30

router in Ruby on Railsriconosce gliURLe li invia acontroller action. Router può anche generare i percorsi e gli URL, evitando la necessità di codificarli con le stringhe nella vostra view.. 15,18,20,25,30

RSpec RSpec è uno strumento di sviluppo Behaviour-Driven per i programmatori Ruby.. 2,7,11,20,30

Ruby è un linguaggio di programmazione altamente dinamico ed orientato agli oggetti.

La sua sintassi è elegante, fortemente orientata alla produttività e all’espres- sività.Ruby nasce negli anni ’90 (progettato nel 1993 dal giapponese Yukihiro

“Matz”), ispirandosi ad altri linguaggi in particolare PERL. Condivide inoltre caratteristiche con Python, Lisp e Java. https://www.ruby-lang.org/it/. 3,4,6, 8,16,28,30

Ruby on Rails spesso chiamato RoR o semplicemente Rails, è unframework open sourceper applicazioni web scritto inrubyda David Heinemeier Hansson per conto della 37signals la cui architettura è fortemente ispirata al paradigma Model- View-Controller (MVC). I suoi obiettivi sono la semplicità e la possibilità di sviluppare applicazioni di concreto interesse con meno codice rispetto ad altri framework. Il tutto con necessità di configurazione minimale.. 2,6–8,15,16,19, 20,25,30

SaaS Software as a service (SaaS) (Software come servizio in italiano) è un modello di distribuzione del software applicativo dove un produttore di software sviluppa, opera (direttamente o tramite terze parti) e gestisce un’applicazione web che mette a disposizione dei propri clienti via Internet.. 2,30

Self-Care Pratica di risoluzione dei problemi non gravi, effettuata con l’ausilio di manuali o FAQ, senza fare ricorso all’operatore. 1,30

Self-Service La tecnica di vendita che elimina l’intervento del personale.. 1, 30 Sidekiq è un framework di elaborazione in background full-optional per Ruby. Ha lo

scopo di essere semplice da integrare con qualsiasi moderna applicazione Rails e prestazioni più elevate rispetto ad altre soluzioni esistenti.. 13, 14, 30,31

(45)

Glossary 31 simbolo Un Symbol è l’oggetto più elementare che si possa creare in Ruby. È solo un nome, un ID interno. I simboli sono utili, poiché un dato nome di simbolo si riferisce allo stesso oggetto attraverso un programma Ruby. I simboli sono più efficienti delle stringhe; due stringhe con lo stesso contenuto sono due differenti oggetti, ma per ogni dato nome c’è solo un oggetto Symbol. Questo permette di riservare sia il tempo che la memoria.. 21,30

STAGE-IT un evento annuale promosso da ICT Lab e dalla Sezione Servizi Innovativi e Tecnologici di Confindustria Padova in collaborazione con le Università degli studi di Padova e Ca’ Foscari, il Parco Scientifico Galileo e l’Ufficio Progetto Giovani del Comune di Padova. Questo evento mira a far entrare in contatto studenti universitari, facenti parte del Corso di Laurea in Informatica, di Ingegne- ria Informatica e Statistica, ed aziende del mondo IT, attraverso brevi colloqui individuali.. 6,30

TDD Il test-driven development (abbreviato in TDD), in italiano sviluppo guidato dai test[1] o sviluppo guidato dalle verifiche[2] è un modello di sviluppo del software che prevede che la stesura dei test automatici avvenga prima di quella del software che deve essere sottoposto a test, e che lo sviluppo del software applicativo sia orientato esclusivamente all’obiettivo di passare i test automatici precedentemente predisposti.. 2,22,25,31

Twitter è un servizio gratuito di social networking e microblogging, creato nel mar- zo 2006 dalla Obvious Corporation di San Francisco, che fornisce agli utenti, attraverso l’omonima piattaforma, una pagina personale aggiornabile tramite messaggi di testo con lunghezza massima di 140 caratteri.. 31

UML in ingegneria del software UML, Unified Modeling Language (ing. linguaggio di modellazione unificato) è un linguaggio di modellazione e specifica basato sul paradigma object-oriented. L’UML svolge un’importantissima funzione di

“lingua franca” nella comunità della progettazione e programmazione a oggetti.

Gran parte della letteratura di settore usa tale linguaggio per descrivere soluzioni analitiche e progettuali in modo sintetico e comprensibile a un vasto pubblico. 9, 31

URL è acronimo di Uniform Resource Locator nella terminologia delle telecomunica- zioni e dell’informatica, è una sequenza di caratteri che identifica univocamente l’indirizzo di una risorsa in Internet, tipicamente presente su un host server, come ad esempio un documento, un’immagine, un video.. 18,27,30,31

worker è una classe diSidekiqper eseguire operazioni pianificati in modo asincrono..

(46)
(47)

Bibliografia

5.4 Siti web consultati

MongoDB,https://www.mongodb.com Responsa,https://www.goresponsa.com/it Ruby-lang,https://www.ruby-lang.org Ruby on Rails,http://guides.rubyonrails.org Ruby Gems,https://rubygems.org

Trello,http://www.elicos.it/it/blog/trello-progettare-su-lavagne-virtuali Jira, https://www.atlassian.com/software/jira

H-Farm,http://www.h-farm.com Wikipedia,https://it.wikipedia.org WikiQuote,https://it.wikiquote.org

Riferimenti

Documenti correlati

«Il ghiacciaio del Forno vantava una porta fra le più stupende, ed è assai probabile che alla forma della porta ed alla profondità della porta debba appunto il poetico nome di

La riforma si occupa di molti temi riconducibili alla disciplina di parte generale del diritto penale: modifica o ampliamento del novero delle atte- nuanti e delle

Continuano a rimanere valide le credenziali già rilasciate prima di tale data per tutte le categorie di utenti che non siano.. Intermediari, Istituti di patronato e

Riguardo al destino dei rifiuti urbani prodotti, si distingue tra rifiuto indifferenziato e le frazioni raccolte in modo differenziato: il destino dell’indifferenziato può

profilo giuridico del sindacato in quanto soggetto collettivo, gli aspetti della rappresentanza e della rappresentatività in un regime di libertà e di pluralismo sindacale,

I segnali di questo tipo si dicono limitati in banda ed il valore B prende il nome di larghezza di banda del segnale.. In generale si chiama banda l’insieme delle frequenze

 Aumento della pressione arteriosa (pressione che il sangue esercita all’interno delle arterie) al di sopra dei valori normali.  Nell'adulto i valori normali

(proprietario del file) di dare il file ad un altro gruppo (quello di Debora), Peter può settare i privilegi come sopra..  Oppure Peter può settare i permessi di lettura ed