Analisi e utilizzo di un framework per lo sviluppo di applicazioni web

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Analisi e utilizzo di un framework per lo sviluppo di applicazioni web"

Transcript

1 Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica tesi di laurea Analisi e utilizzo di un framework per lo sviluppo di applicazioni web Anno Accademico 2011/2012 relatore Ch.mo prof. Marcello Cinque correlatore Ing. Fabio De Paolis candidato Michele Basile matr. 534/3239

2 a tutte le persone che in questi anni mi hanno sostenuto

3 Indice Introduzione 1 1 Web Development Frameworks Architettura Architettura Three-tier Model-View-Controller Tipologie di applicazioni web Piattaforme LAMP WISA Java EE I Framework Zend Framework Google Web Toolkit Django Il framework Carassio Perché Carassio? Vantaggi Il paradigma MVC iii

4 2.2.1 Vantaggi Piattaforma e tecnologie di sviluppo Architettura Clientside Serverside Site Caso di studio: Analisi e progettazione Analisi e specifica dei requisiti Funzionalità Diagramma dei casi d uso Progettazione Progettazione della base dati Progettazione architetturale e intermedia Progettazione di dettaglio Caso di studio: Sviluppo e testing Installazione e configurazione del framework I moduli del framework Esempi di codice Navigazione tra le cartelle Modifica dei permessi di accesso per una cartella Upload di uno o più file Testing Test per il download di un file Test per la rinomina di una cartella Test per la creazione di un gruppo iv

5 4.5 Collaudo per il livello presentazione Conclusioni e sviluppi futuri 86 Ringraziamenti 88 Bibliografia 90 v

6 Elenco delle figure Layered Application Architecture Esempio di applicazione basata su architettura Three-tier [1] Struttura del pattern MVC [2] Java Web Frameworks [3] Lo stack LAMP [5] Architettura di una applicazione sviluppata con GWT [10] Piattaforma di riferimento per il framework Django [12] Logo del framework Carassio Il paradigma MVC nel framework Carassio [14] UML Component Diagram per Carassio Clientside UML Component Diagram per Carassio Serverside Carassio plugin: esempio di applicazione per la gestione di album fotografici Smarty Template Engine [15] Diritti di accesso per operatori aziendali e partner Esempio per uno studio medico Notifiche via scadenza e caricamento di un file UML Use Case Diagram vi

7 3.2.1 Diagramma ER Diagramma ER ristrutturato Diagramma delle tabelle UML Component Diagram iniziale per FileShare UML Class Diagram per il Model Layout dell applicazione UML Component Diagram finale per FileShare Struttura delle cartelle di un progetto FileShare: Area personale Esecuzione test di unità per la classe fs_file Firebug: Analisi HTML Firebug: monitoring delle richieste HTTP vii

8 Elenco delle tabelle 1.1 Piattaforme web a confronto [4] Caratteristiche di Zend Framework Dizionario dei dati: Entità Dizionario dei dati: Relazioni Attributi per le entità Attributi per le relazioni Principali moduli di riferimento per i controllori viii

9 Introduzione Al giorno d oggi lo scenario applicativo che abbiamo di fronte è piuttosto ampio, sia per l eterogeneità dei settori verso i quali questo è rivolto, sia per il sempre più crescente numero di persone che si approccia alle nuove tecnologie. Malgrado tale vastità, si è vista una complessiva e graduale trasformazione dei prodotti software in generale. Questo perché Internet, insieme ai più recenti strumenti web, da un lato ci ha aperto a nuove possibilità e dall altro permesso di ristrutturare applicazioni inizialmente create per l ambiente desktop. Testimone di questo cambiamento è la NAXE, società impegnata nel settore del web engineering, presso la quale è stata svolta l attività di tirocinio. Infatti, se nel passato venivano commissionati progetti per lo sviluppo di applicazioni da eseguire in locale, adesso la tendenza è quella di offrire ai clienti soluzioni web, spesso anche molto articolate. In questo contesto dunque, appare evidente come si necessiti di strumenti atti a governare la complessità di dette applicazioni. Tra questi assumono particolare rilievo i framework, nati appunto per consentire agli sviluppatori di concentrare i loro sforzi sulle richieste dell applicazione, piuttosto che sui vari meccanismi di più basso livello necessari al funzionamento del sistema. Obiettivo di questa tesi è quindi quello di far luce sulle differenti soluzioni adottate in questo particolare ambito, mettendo in risalto i benefici ottenibili da ognuna di esse. Ci si soffermerà in particolare su quella realizzata e utilizzata da Naxe, il framework Carassio, mediante cui è stata portata a termine la fase di sviluppo inerente un ben preciso caso di studio: la realizzazione di un applicazione web per lo scambio di file. La tesi si compone 1

10 di quattro capitoli. Il primo di questi espone per via del tutto generale il discorso sui framework per il web development, tenendo presenti quelle che sono oggi le suite più rilevanti. Il secondo capitolo è dedicato al framework Carassio. Saranno date le motivazioni per tale scelta e approfondite le tematiche concerni la sua architettura. Il terzo e quarto, invece, faranno riferimento ad un caso di studio. Ripercorrendo le fasi tipiche del ciclo di vita del software, cioè partendo dall analisi dei requisiti fino al testing, si mostrerà come è stato possibile, grazie all impiego del framework, realizzare un applicazione web inserita nel contesto del filesharing. Seguiranno delle considerazioni personali sul lavoro svolto e possibili soluzioni per scenari futuri. 2

11 Capitolo 1 Web Development Frameworks In termini del tutto generali, un framework è una struttura di supporto su cui un software può essere organizzato e progettato. Può essere visto come un astrazione attraverso cui vengono fornite funzionalità generiche a una specifica applicazione. Mette a disposizione una collezione di librerie software utilizzabili con uno o più linguaggi di programmazione e in molti casi, anche degli strumenti di sviluppo, come ad esempio un IDE o un debugger. Più specificatamente, nell ambito del web development, un framework è progettato per sostenere lo sviluppo di siti web dinamici, applicazioni web e servizi web, con lo scopo di alleviare l overhead associato alle attività più comuni. Molti sono i framework che, per esempio, forniscono librerie per l accesso ai database, piattaforme di templating e session management. 1.1 Architettura Prima che vengano riportate alcune tra le soluzioni più annoverate nell ambito dei framework per il web development, è necessario fare riferimento sulle scelte architetturali maggiormente adottate. Queste infatti rappresentano, per l inizio di un progetto, una fase fondamentale per il processo di sviluppo e possono dare un notevole contributo al successo o al fallimento del progetto stesso. 3

12 Figura 1.1.1: Layered Application Architecture Gestire un progetto per il quale è stato previsto uno sviluppo non strutturato e monolitico potrebbe essere molto difficoltoso, se non impossibile. Tipici problemi di questo approccio sono la cattiva distribuzione del lavoro all interno del team di sviluppo, lo stravolgimento a livello implementativo in caso di variazione dei requisiti o introduzione di nuove funzionalità e l onere che si riscontra durante le fasi di testing. Per ovviare a queste problematiche nel tempo sono stati introdotti diversi paradigmi, primo tra tutti il Layered Application Architecture. Secondo quest ultimo un sistema software è suddiviso in tre distinti livelli, ognuno dei quali porta a termine un determinato compito, senza interferire con gli altri ma scambiando con essi le informazioni necessarie all esecuzione di elaborazioni anche molto complesse. I tre livelli sono quelli rappresentati nella Figura 1.1.1: Livello di Presentazione, ha il compito di interagire direttamente con l utente del sistema, acquisire i dati di input immessi da quest ultimo e visualizzare i risultati dell elaborazione effettuata dal sistema stesso. In sostanza, definisce la GUI (Graphic User Interface) ossia l interfaccia grafica dell applicazione; Livello Applicativo, implementa la logica di business dell applicazione ed è per 4

13 questo il centro dell elaborazione dei dati; Livello di Gestione Dati, si occupa della gestione della persistenza e dell accesso ai dati, per cui è tipicamente caratterizzato da un DBMS (DataBase Management System). Come si intuisce da questa schematizzazione, ogni livello è indipendente dagli altri e quindi la modifica di uno di essi non ha effetto sui restanti. Resta comunque possibile la comunicazione e lo scambio di informazioni tra essi. Questo paradigma ben si sposa con l architettura Client-Server tipica dei sistemi web, trovando applicazione in due delle più famose architetture, quella Three-tier e quella MVC (Model-View-Controller) Architettura Three-tier A seconda di come i livelli scambino tra di loro informazioni, si ha una diversa topologia architetturale. Come si può vedere dalla Figura 1.1.2, un applicazione basata su architettura three-tier è suddivisa in livelli che sono costruiti l uno sopra l altro, analogamente a quanto avviene per il modello ISO/OSI. È da notare quindi come il livello di presentazione non comunichi mai direttamente con quello dati. Questo perché appunto lo scambio di informazioni avviene sempre tra un determinato livello e quello immediatamente superiore/inferiore Model-View-Controller Sebbene al momento esistano numerosi framework per il web development, tutti grosso modo fanno riferimento al pattern architetturale MVC. Originariamente impiegato dal linguaggio Smalltalk, è oggi un punto di riferimento per moltissimi framework, siano essi basati su PHP (Symfony, Zend Framework, CakePHP), su Ruby (Ruby on Rails), su 5

14 Figura 1.1.2: Esempio di applicazione basata su architettura Three-tier [1] Python (Django, TurboGears, Pylons, Web2py), su Java (Swing, JSF, Struts), su Objective C o su.net. Il pattern si basa sulla separazione dei compiti fra i componenti software che interpretano tre ruoli principali: il model fornisce i metodi per accedere ai dati utili all applicazione; la view visualizza i dati contenuti nel model e si occupa dell interazione con utenti e agenti; il controller riceve i comandi dell utente (in genere attraverso la view) e li attua modificando lo stato degli altri due componenti. Come si può vedere dalla Figura 1.1.3, differentemente da quanto avveniva nell architettura Three-tier, dove tutte le comunicazioni dovevano passare attraverso il livello in- 6

15 Figura 1.1.3: Struttura del pattern MVC [2] termedio, nel pattern MVC lo scambio di informazioni avviene mediante una topologia triangolare. Si badi però che quella mostrata in figura, è una struttura in cui le interazioni tra i tre oggetti software dipendono molto dalle tecnologie usate (linguaggio di programmazione, eventuali librerie, middleware e via dicendo) e dal tipo di applicazione (per esempio se si tratta di un applicazione web, o di un applicazione desktop). Essa deve pertanto considerarsi un semplice riferimento e non un dogma a cui attenersi. Nel seguito quindi, particolarizzeremo tale struttura per poterla adattare allo specifico contesto cui faremo riferimento. 1.2 Tipologie di applicazioni web Scegliere un framework da adottare per lo sviluppo di applicazioni web può essere difficoltoso. Si potrebbe pensare che esistano delle migliori soluzioni in assoluto. In realtà, una giusta comparazione andrebbe fatta in riferimento alle proprie esigenze. Bisogna dunque capire quali sono i requisiti della specifica applicazione, innanzitutto identificandone la classe di appartenenza. Possiamo suddividere le applicazioni web nelle seguenti categorie, di cui verrà fornita una breve descrizione. 7

16 Classical Web Application Si tratta di applicazioni tradizionali (e.g. Amazon) che fanno largo uso di server-side scripting, per fornire un interfaccia utente con struttura multipagina. La navigazione, che è quella tipica dei siti web, favorisce il bookmarking e l utilizzo dei classici bottoni indietro e avanti. Rich Internet Application (RIA) Sono applicazioni che forniscono caratteristiche e funzionalità tipiche dell ambiente desktop, senza la necessità dell installazione su disco fisso. Poiché i dati vengono elaborati per lo più a livello client, queste applicazioni sono note per fornire interattività, multimedialità e velocità di esecuzione. Rich Client Uniscono le caratteristiche tipiche delle applicazioni web classiche con quelle delle RIA. Tuttavia si distinguono da quest ultime perché il loro scopo non è fornire un interfaccia utente dall aspetto moderno, ma migliorare l usabilità di un contesto già diffuso e accettato. CRUD Questa tipologia è conforme alle applicazioni web classiche. Tuttavia, offre in primo luogo funzionalità per creare, leggere, aggiornare ed eliminare i dati. La Figura mostra come, per esempio, sono distribuiti i framework basati su JVM lungo le varie categorie appena citate. Il concetto chiave si concretizza dunque nella frase: Right Tool for Right Job, ovvero il giusto strumento (web framework) per il giusto lavoro (tipo di web application). 1.3 Piattaforme Nella scelta di un framework, un altro aspetto di particolare rilievo è assunto dalle piattaforme sui cui fanno riferimento le applicazioni web. Le piattaforme hanno caratteristiche differenti e pertanto occorre, prima di iniziare un progetto, analizzare i vantaggi apportati da ognuna di esse. Di notevole importanza sono le soluzioni LAMP, WISA e Java EE, di cui ne riportiamo un confronto nella Tabella

17 Fattore LAMP WISA JAVA EE Costi di licenza - Nessun costo di licenza - Costi di licenza elevati - Nessun costo di licenza Costi e opzioni di supporto - Gratuito attraverso community - Disponibili opzioni di - Gratuito attraverso community - Disponibili opzioni di - Gratuito attraverso community - Disponibili opzioni di supporto a pagamento supporto a pagamento supporto a pagamento Sistemi operativi - Molteplici - Solamente Windows - Molteplici Costi hardware - Funziona su server molto - Richiede server un po - Richiede server molto economici più costosi costosi Personale - Un po difficile trovare - Molto facile trovare - Ragionevolmente facile personale con elevate personale qualificato, trovare personale competenze seppur con limitate qualificato competenze Hosting esterno - Ampiamente disponibile - Ampiamente disponibile, - Non ampiamente e poco costoso ma più costoso disponibile Sicurezza - Molto buona - Storicamente pessima, ma di recente ha avuto qualche miglioramento Prestazioni - Molto buone - Spesso richiede hardware più costoso - Buona - Spesso richiede una notevole configurazione e hardware costoso Scalabilità - Altamente scalabile - Difficilmente scalabile - Ben scalabile quando configurata correttamente Amministrazione - Difficile: spesso richiede - Facile: spesso è attuata - Moderata: a volte può lettura di documentazione mediante un interfaccia essere fatta visivamente e modifica di file di testo punta e clicca Configurazione e facilità d uso - Può essere difficile da configurare correttamente - Facile da configurare - Moderatamente difficile da configurare Flessibilità di configurazione - Estremamente flessibile - Non molto flessibile - Moderatamente flessibile Framework - Molti disponibili: spesso - Presenza di un - Presenza di un è difficile fare una scelta framework standardizzato framework standardizzato Componenti - Ampiamente disponibili - Ampiamente disponibili - Ampiamente disponibili Compatibilità - Molto buona: - Moderata: spesso le - Pessima: ci sono molti solitamente le nuove nuove versioni problemi tra le vecchie e versioni sono interrompono le le nuove versioni retro-compatibili funzionalità Tabella 1.1: Piattaforme web a confronto [4] 9

18 Figura 1.2.1: Java Web Frameworks [3] LAMP Il termine LAMP è stato coniato nel 1998 da Michael Kunze sulle pagine di c t, una nota rivista di informatica in lingua tedesca. Tale acronimo deriva dalle componenti Linux, Apache, MySQL e PHP, tecnologie fondamentali per la costruzione di applicazioni libere, economiche e distribuite. I protagonisti di una applicazione LAMP sono dunque: il famoso sistema operativo GNU/Linux; Apache il più versatile ed usato web server al mondo; MySQL un potente database relazionale che si è imposto come "standard" per tante applicazioni free software; PHP un linguaggio di scripting capace di adattarsi e rispondere alle più disparate esigenze. Sebbene rappresentino un riferimento, questi non sono gli unici a poter comporre una applicazione LAMP. Basti pensare infatti che la "P" potrebbe stare per Python o Perl, 10

19 Figura 1.3.1: Lo stack LAMP [5] o che l acronimo potrebbe mutare in LAPP (PostgreSQL al posto di MySQL), WAMP (Windows al posto di Linux), MAMP (Macintosh al posto di Linux) e altre combinazioni ancora. A prescindere dalle varianti, ciò che davvero conta è il fatto che tutte queste tecnologie siano disponibili come software libero, quindi utilizzabili da chiunque senza restrizioni, e che nel loro complesso formino una vera e propria piattaforma di sviluppo. Tale soluzione può trovare applicazione in numerosi campi: dal sito web, all ufficio, alla pubblica amministrazione. Non ha quindi nulla da invidiare rispetto a quelle proprietarie WISA WISA è l acronimo per il solution stack proposto da Microsoft, le cui lettere stanno per: Windows, ovvero il sistema operativo; Internet Information Services, file/web server entrato ormai a far parte della famiglia Windows Server; SQL Server, database managment system contraddistinto da elevata disponibilità e buone prestazioni, largamente utilizzato sia in ambito enterprise che nei data center; ASP.NET, noto insieme di tecnologie di sviluppo software per il web, commercializzato appunto da Microsoft. 11

20 È contraddistinto da una serie di vantaggi quali: varietà di linguaggi, facilità di installazione, varietà di supporto Java EE Prodotta da Oracle, Java Enterprise Edition è una piattaforma riservata tipicamente al business. Di fatto si impone come standard industriale per la realizzazione di applicazioni di tipo enterprise e mission critical. Il risultato prodotto da questa piattaforma è dunque il rilascio di applicazioni robuste, portabili, sicure e scalabili. Tale obiettivo è raggiunto mediante la definizione di specifiche alle quali tutti i produttori di software Java EE devono attenersi. Queste includono molte tecnologie che estendono le funzionalità già previste dalla piattaforma Java. In particolare vengono descritti i seguenti componenti: Gli Enterprise JavaBeans, che costituiscono il cuore della specifica e forniscono un ambiente entro il quale vengono eseguiti gli oggetti di un applicazione Java EE; Il JNDI, che fornisce un sistema per identificare e elencare risorse generiche, come componenti software o sorgenti di dati; Il JDBC, che mette a disposizione un sistema standard di accesso ai dati; Il JTA, per supportare le transazioni distribuite; Il JAXP, per la gestione dei file in XML; Il Java Message Service, che consente l invio e la gestione dei messaggi. 1.4 I Framework Nel seguito verranno mostrate le caratteristiche di tre framework di spiccato interesse. In particolare dedicheremo la nostra attenzione sulla soluzione Zend Framework, nata per 12

21 supportare lo sviluppo di applicazioni web PHP-based, su quella proposta da Google, ovvero GWT, oggi notevole punto di riferimento per applicazioni web altamente interattive, e su Django, framework basato sul linguaggio Python, che in ambito opensource sta riscuotendo parecchio successo Zend Framework Zend Framework (d ora in poi ZF) è un web application framework open source creato per semplificare e rendere più efficace sotto ogni punto di vista la produzione di applicativi e servizi web PHP-based. Esso contiene un insieme di componenti riutilizzabili che soddisfano i tipici requisiti richiesti da un applicazione web. Tali componenti sono interamente basate sul PHP, linguaggio di scripting che nella sua ultima versione, la 5, ha abbracciato il paradigma OOP (Object Oriented Programming). Ciò che differenzia ZF da altri framework PHP è la sua particolare struttura "a compartimenti stagni": l indipendenza delle sue componenti permette di utilizzare solo il necessario per il proprio progetto, ma allo stesso tempo, se utilizzate insieme, esse si integrano in un substrato incredibilmente potente e semplice da imparare, indirizzando il lavoro dello sviluppatore verso soluzioni basate sui principi di riutilizzo del codice, di estensibilità, leggibilità e manutenzione. ZF è rilasciato sotto licenza BSD: questo permette al framework di essere inserito nella maggior parte dei progetti, siano questi open source o proprietari, con le minori restrizioni possibili per gli utilizzatori. Come accennato in precedenza, è di vitale importanza capire che ZF non è la soluzione a tutti i nostri problemi di sviluppo, e soprattutto non è l unica alternativa: ogni progetto ha i suoi requisiti e le sue caratteristiche, ed è solo dopo un attento studio di questi, anche in relazione alle alternative proposte, che possiamo decidere l architettura del nostro applicativo. 13

22 Tabella 1.2: Caratteristiche di Zend Framework I Vantaggi Perché dunque utilizzare Zend Framework? I concetti chiave su cui si basa questo framework sono i seguenti. Rapidità e semplicità di sviluppo Zend Framework velocizza l estensione o l aggiunta di nuove funzionalità per i nostri progetti web. La rapidità diventa evidente quando dobbiamo implementare progetti che hanno bisogno di funzionalità aggiuntive: generazione dinamica di pdf, l invio di mail, la gestione dei form e del multilingua. Tutto questo codice è già stato scritto e testato per noi, dunque tutto ciò che dobbiamo fare è scrivere esclusivamente il codice necessario per il nostro applicativo, includendo lì dove è necessario le classi messe a disposizione dal framework. Design Moderno ZF è scritto interamente in PHP5 seguendo le tecniche della programmazione orientata ad oggetti ormai consolidate da anni e sfruttando moderne tecniche di design del software. Zend Framework fa un uso massiccio dei design pattern per permettere la massima flessibilità agli sviluppatori alleggerendo di molto il loro lavoro. Difatti, ogni componente all interno del framework ha pochissime dipendenze con ogni altro componente. Lo sviluppatore può usare solo le parte del framework che sono strettamente necessarie al suo progetto. Facilità di apprendimento La modularità e l indipendenza dei componenti fanno si che questi possano essere studiati separatamente, favorendo quindi l apprendimento. Documentazione completa Può sembrare poco rilevante, ma se riflettiamo sulla quantità di tempo che perdiamo quando utilizziamo strumenti poco documentati risulta chiaro il contrario. Per questo il team di sviluppo ha documentato in maniera attenta e completa tutto il framework. Esistono inoltre due livelli di documentazione: 14

23 quella per l utente finale e quella dedicata alle API (Application Program Interface) per gli sviluppatori ZF. Community Driven La costante crescita della community Zend Framework contribuisce di molto alla diffusione di questa tecnologia: essa rappresenta la fonte principale di ispirazione per lo studio di nuove funzionalità o per migliorare quelle esistenti, giocando dunque un ruolo di primo piano in questo contesto Architettura I componenti di Zend Framework possono essere raggruppati in sei macro categorie: 1. Core: Qui sono presenti tutti i componenti generici che non rientrano in nessuna della altre categorie. Appartengono a questo gruppo, ad esempio, il componente che si occupa della generazione dei file in formato PDF, quello che gestisce l invio di e quello che gestisce il caching. 2. MVC: Rientrano tutti i componenti fondamentali per l implementazione del pattern MVC. Solitamente vengono impiegati quando un applicazione è creata da zero con ZF. 3. Autenticazione e accesso: Attraverso questi componenti si fornisce un meccanismo di autenticazione (solitamente realizzato mediante l inserimento di una coppia di token come user e password) e di controllo degli accessi. 4. Internationalization: Zend Framework supporta diversi livelli di internazionalizzazione, permettendo di avere un controllo pressocché totale sulle impostazione della localizzazione, sui set di caratteri e ovviamente sul multilingua. 5. Servizi Web: L integrazione e la comunicazione tra web service è ormai di vitale importanza per una web application: negli ultimi anni, soprattutto con l avvento dei social network, è diventato praticamente impossibile pensare ad una applicazione che non sia in grado ad esempio di leggere un Feed RSS o di interfacciarsi con 15

24 Facebook, Flicker o Twitter. Zend Framework, sfruttando le caratteristiche della sua struttura a componenti, permette di integrare rapidamente e in maniera assolutamente trasparente qualsiasi tipo di web service: i componenti con il prefisso Zend_Service sono proprio quelli che rientrano in questa categoria. 6. Interapplication communication: La comunicazione tra applicazioni viene implementata principalmente attraverso tre tecniche: SOAP (Simple Object Access Protocol), XML-RPC e REST (Representational State Transfer). Zend Framework offre strutture solide per supportare sia questi formati sia soluzioni personalizzate in caso di requisiti particolari. Inoltre, per quelle applicazioni che si avvalgono di Ajax, è stato introdotto il componente Zend_Json per gestire ogni aspetto della comunicazione attraverso il protocollo JSON (JavaScript Object Notation), particolarmente indicato per gestire il dialogo tra JavaScript e PHP nelle applicazioni Ajax Google Web Toolkit Molte persone conosceranno i servizi di Google. Tra questi vale la pena ricordare i famosi GMail, Google Docs e Google Maps. Alla base di queste web application c è una tecnologia su cui Google ha iniziato ad investire molti anni fa: Google Web Toolkit (GWT), un framework di sviluppo Java con il quale è possibile scrivere applicazioni AJAX tanto complesse quanto veloci, mantenendo allo stesso tempo una fortissima compatibilità verso gli standard web AJAX, la colonna portante di GWT Google ha dato una pronta risposta al tedioso problema incontrato dagli sviluppatori web: il tempo speso per risolvere problemi di incompatibilità legati ai browser e la natura poco modulare del linguaggio JavaScript. 16

25 Quest ultimo infatti, sebbene sia dotato di ottime librerie che aiutano nello sviluppo di web application (jquery, Dojo, Scriptaculous, YUI e tante altre), pone dei forti limiti a coloro che vogliano rendere le loro applicazioni scalabili in termini di dimensioni e complessità. Se aggiungiamo a questo scenario la scarsa disponibilità di tool di sviluppo e debugging, si intuisce quanto caro possa costare lo sviluppo di un applicazione scritta interamente in JavaScript. D altra parte questo linguaggio, grazie alle funzionalità che consentono chiamate HTTP asincrone (XMLHttpRequest in particolare), ha dimostrato quanto fosse solida la tecnica di sviluppo AJAX e di manipolazione del DOM. Una applicazione web è scritta in Java ed il toolkit di Google la traduce in codice Java- Script e HTML, generando una soluzione AJAX altamente aderente agli standard web, consolidata e compatibile con tutti i browser. Lo sviluppatore può quindi scrivere la propria web application con il suo IDE preferito (Eclipse, NetBeans o altro), fare debug in ogni singolo punto dell applicazione, integrarla con librerie JavaScript di terze parti, testarla, compilarla e pubblicarla sotto forma di file HTML e JavaScript. È sufficiente un semplice browser per vedere quale magnifico risultato possiamo ottenere con un toolkit di tale potenza. Fortissima interoperabilità e amore verso gli standard web: in questo modo Google è riuscita a trovare una soluzione brillante che tanti altri competitor (Adobe, Microsoft, Oracle ed altri) sono riusciti a risolvere con soluzioni proprietarie ben lontane dalle specifiche del W3C Il motore GWT Nello sviluppo di questo framework i progettisti di Google hanno cercato di seguire le seguenti linee guida: Programmare il codice client (UI inclusa) in linguaggio Java; Tradurre il codice Java in codice JavaScript; 17

26 Figura 1.4.1: Architettura di una applicazione sviluppata con GWT [10] Mantenere la compatibilità con i framework JavaScript e CSS di terze parti; Programmare la comunicazione client/server con il minimo sforzo, mantendendo una forte compatibilità verso JSON e XML, così da garantire l integrazione con server di qualunque tipo (php, ruby, java, etc.); Facilitare la programmazione del codice server facendo leva sullo standard Java delle Servlet; Fornire un framework in grado di facilitare la programmazione delle Rich Internet Applications (Widget, Pannelli, Internazionalizzazione, comunicazione RPC, History Management, etc.). Da questi pochi requisiti è nato il Google Web Toolkit, che è oggi composto da questi strumenti: Un compilatore da Java a JavaScript; 18

27 Uno strato di Emulazione JRE (l ambiente runtime Java), scritto interamente in JavaScript; Una interfaccia per definire metodi nativi JavaScript (JSNI); Le GWT API: una suite di API Java pensate espressamente per l implementazione di client AJAX. Se volessimo immaginare ad un semplice processo di sviluppo, potremmo dire che il programmatore sviluppa il suo progetto di web application interamente in Java, con il suo ambiente di sviluppo Java preferito. Il progetto è quindi testato con le JUnit e compilato infine in JavaScript e HTML (si può immaginare facilmente una analogia con la traduzione in bytecode Java). Quando l utente aprirà la pagina HTML, all interno di un ambiente di runtime che emula il JRE, le chiamate avverranno in realtà completamente in JavaScript. Potremmo dire che questo è il meccanismo di base con il quale GWT è riuscito a coniugare la potenza di Java con la flessibilità dell ambiente JavaScript Le API di GWT Per semplificare lo sviluppo della propria Rich Internet Application, Google Web Toolkit mette a disposizione delle API, raggruppate nelle seguenti categorie: Widgets e Panels. Queste sono le API fornite per disegnare le nostre interfacce utente, con una architettura delle UI molto simile a Swing, pur nei limiti imposti dagli elementi HTML. La UI è composta infatti da elementi (widget) e da contenitori (panel) che li contengono. I widget sono interattivi e possono rappresentare ad esempio bottoni, checkbox, tabelle e cosi via. I panel sono pensati per disporre automaticamente i widget in un area della pagina HTML, con gli usuali layout verticali, orizzontali, flow (la disposizione HTML predefinita) ed altri ancora. Alcuni pannelli infine possono anche essere interattivi e sono in grado sia di contenere widget che di rispondere a degli eventi di UI (ad esempio i TabPanel); 19

28 I18I. Questo sono le API per fornire la localizzazione e internazionalizzazione alla nostra applicazione. GWT fornisce le API per definire sia staticamente che dinamicamente la localizzazione delle risorse di testo; Request Builder, JSON e XML Parser. Queste API si occupano di facilitare la comunicazione con i server che espongono servizi in XML e JSON. Si occupano di costruire le richieste al server e poi di processare i dati di risposta; RPC. Se vogliamo comunicare con un server Java, GWT ha specificato un protocollo RPC che possiamo usare per implementare un servizio client/server con poche linee di codice. Queste API sollevano il programmatore dalla gestione della comunicazione e dal processo di marshalling/unmarshalling dei dati; History Management. Le applicazioni AJAX generate da GWT sono costruite su di una singola pagina HTML. Queste API offrono uno strumento, compatibile con il browser, per definire le regole di historing e di navigazione all interno della stessa pagina HTML (vedi GMail); Integrazione con JUnit. Queste API discendono direttamente dalle best practice per gli Unit Test, e servono all integrazione con JUnit Django Django è un web application framework opensource, scritto in Python, che segue il pattern architetturale model-view-controller. Venne concepito inizialmente per gestire diversi siti di notizie per la World Company di Lawrence (Kansas), e venne rilasciato sotto una licenza BSD a luglio Seguendo la definizione riportata nel sito web ufficiale: Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic, design... The Web framework for perfectionists with deadlines 20

29 Figura 1.4.2: Piattaforma di riferimento per il framework Django [12] Django offre un certo numero di funzionalità che facilitano lo sviluppo rapido di applicazioni per la gestione di contenuti, enfatizzando concetti come la riusabilità e pluggability dei componenti, e aderendo al principio DRY (Don t Repeat Yourself). Il linguaggio su cui è basato viene utilizzato in tutto, dalle impostazioni ai modelli di dati. Django fornisce inoltre dei moduli opzionali di amministrazione, che vengono generati automaticamente. Questi consentono di creare, aggiornare e eliminare contenuti rappresentati come oggetti e di tenere traccia di tutte le operazioni effettuate. Tramite interfaccia grafica è possibile anche gestire utenti e gruppi di utenti, inclusi i permessi associati I componenti Il core del framework mvc Django è composto da un object-relational mapper che fa da intermediario tra i modelli di dati (definiti come classi Python) e un database relazionale ( Model ), un sistema per la gestione di template ( View ) e un dispatcher URL basato sulle espressioni regolari ( Controller ). Sono inoltre inclusi nel core framework: Un leggero web server standalone per lo sviluppo e il testing; 21

30 Un sistema di validazione per i form che trasforma i dati di input in valori ammissibili per l archiviazione nel database; Un sistema "middleware" per lo sviluppo di funzionalità aggiuntive (ad esempio, componenti middleware che forniscono caching); Un sistema dispatcher interno che consente ai componenti di una applicazione di comunicare tra loro eventi attraverso segnali predefiniti; Un sistema di internazionalizzazione, che include anche le traduzioni dei componenti di Djanco in molteplici lingue; Un sistema per estendere le capacità del motore di template; Una interfaccia per il framework di unit test integrato in Python Bundled Applications La distribuzione principale di Django include anche un certo numero di applicazioni esterne, le cosiddette Bundled Application, raccolte nel package denominato contrib : Un sistema di autenticazione estensibile; Interfaccia amministrativa dinamica; Funzionalità per la creazione di feed RSS e/o Atom; Un sistema flessibile di commenti; Strumenti per la generazione di Google Sitemaps; Strumenti per la protezione da Cross-site request forgery; Un framework per la creazione di applicazioni GIS (Geographic Information System). 22

31 Capitolo 2 Il framework Carassio Quelle che abbiamo visto in precedenza sono solo alcune delle soluzioni tra quelle esistenti. In questo capitolo concentreremo l attenzione su Carassio, framework opensource sviluppato dalla Naxe, presso cui si è tenuta l attività di tirocinio. Rilasciato con licenza GPLv3, Carassio è un progetto giovane, nato da poco, ma che offre tutta una serie di potenzialità che nel seguito andremo ad analizzare. Che si tratti di applicazioni web, desktop o qualsiasi altro prodotto software, durante un progetto è necessario fare riferimento a dei principi che ne regolino il cosiddetto ciclo di vita. Porgendo particolare attenzione sulla fase di sviluppo, un framework nasce proprio con quest obiettivo. Lo stesso vale per Carassio, il quale fa tesoro dei principi impartiti dall ingegneria del software, garantendo piena adesione ai concetti quali modularità e riutilizzo del codice. Quotidianamente infatti gli sviluppatori, malgrado gli scenari eterogenei, sono impegnati nella risoluzione di problematiche ricorrenti, che spesso si traducono nel vano tentativo di dover reinventare la ruota. Pertanto, essere in possesso di strumenti come quelli offerti da Carassio, significa ridurre i tempi di sviluppo (e quindi abbattere i costi), produrre software di qualità e agevolare le attività di manutenzione. Oltre le tematiche concerni il riutilizzo però un altro aspetto da tenere in considerazione è il principio di separazione degli interessi, che Carassio ben attua grazie all ado- 23

32 Figura 2.1.1: Logo del framework Carassio zione del pattern architetturale Model-View-Controller, argomento che approfondiremo opportunamente. 2.1 Perché Carassio? Da quanto detto nel capitolo precedente si è capito che per quanto riguarda lo sviluppo web, l insieme costituito dai framework è davvero molto vasto. Molti di questi sono prodotti da vere e proprie aziende leader nel settore: Zend Technologies, Adobe, Google e Microsoft ne sono giusto un esempio. Altri sono invece proposti da comunità distribuite di sviluppatori e costituiscono alternative molto valide (un esempio può essere l Apache Software Foundation con il suo framework Struts). Viene dunque da chiedersi perché la scelta sia ricaduta proprio su Carassio. Per fornire un adeguata risposta è bene contestualizzare lo scenario in cui questo ha trovato applicazione. Un primo approccio a Carassio si è avuto a seguito di un progetto, realizzato esattamente presso la sede in cui tale framework ha preso vita. Il caso di studio affrontato ha previsto la progettazione e lo sviluppo di un applicazione web, denominata FILESHARE, destinata alla condivisione e scambio di file in ambiente enterprise. Chiaramente, applicazioni come queste sono l ordine del giorno per un azienda specializzata nel web-engineering. Diventa quindi cruciale poter disporre di strumenti che, non solo siano di supporto al progetto stesso, ma che si adattino naturalmente al modo di operare dell azienda. Possiamo dunque affermare che lo scopo di Carassio è proprio questo, ossia quello di 24

33 fornire un totale controllo dei suoi meccanismi, affinché meglio si adatti alle esigenze della specifica impresa. Ovviamente questo discorso non deve scoraggiare coloro che intendono utilizzare Carassio in un altro contesto, che sia lavorativo o meno. Tale framework difatti nasce come progetto opensource e può essere pertanto studiato, esteso e modificato in ogni sua parte affinché possa adattarsi a scenari anche completamente differenti da quelli previsti in partenza. Inoltre, rispetto a framework del calibro di Zend, Carassio offre una soluzione molto più leggera. Questo perché molto spesso i framework integrano moduli che raramente sono utilizzati, di cui gli sviluppatori forse non hanno proprio conoscenza. Certo, per alcuni di essi è possibile utilizzare i vantaggi tipici della modularità, ma iniziare un progetto dovendo prima fare una cernita di tutti i moduli può essere davvero controproducente. Carassio nei suoi 5 MB di formato compresso, mette a disposizione tutto quello di cui uno sviluppatore ha bisogno per essere subito produttivo. In questo senso Carassio supporta il cosiddetto RAD (Rapid Application Development) Vantaggi Tuttavia, al di là del contesto aziendale è opportuno riferirsi ai benefici che Carassio apporta allo sviluppo di un progetto. Ecco perché riportiamo di seguito una sintesi delle caratteristiche principali: 1. Forte adesione al modello MVC per la separazione delle logiche. I vantaggi di questo pattern sono stati già evidenziati nel capitolo precedente, ma in seguito vedremo come questo meccanismo è attuato e soprattutto quali sono le soluzioni impiegate dal framework per colmare il gap che si instaura tra i ruoli di Coder e Designer. 2. Modularità. Carassio è sviluppato in compartimenti tra di loro indipendenti. Ciò implica non solo benefici per la fase di manutenzione del framework stesso, ma 25

34 anche per gli utilizzatori che possono operare una scelta selettiva sui moduli messi a disposizione, al fine di integrare nella propria applicazione il giusto indispensabile. 3. Chiara distinzione tra moduli Client-side e Server-side. Molti framework nascondono l interazione che è alla base del paradigma Client-Server. È questo per esempio il caso di Google Web Toolkit, che come abbiamo avuto modo di vedere in precedenza, ha il sostanziale ruolo di trasformare il codice Java in un mix di HTML e JavaScript. Un comportamento del genere non sempre è desiderabile, specie se si vuole avere maggiore controllo sull applicativo. 4. Espandibilità con altri strumenti opensource. Un importante lavoro è stato svolto nella selezione e integrazione di moduli e componenti, individuati tra quanto di meglio offerto nel mondo opensource (in questo senso Carassio propone una soluzione best of the breed). Ciò permette da un lato di avvicinare gli utilizzatori a strumenti già noti e standardizzati (Smarty, MooTools, etc.), dall altro di avere a disposizione prodotti già ampiamente collaudati. 5. Supporto alla didattica. La curva di apprendimento ha davvero tempi molto ridotti. Basti pensare infatti che sono stati opportunamente documentati dei tutorial, con livelli di difficoltà incrementali, che permettono uno studio più agevole del framework. 2.2 Il paradigma MVC Il fondamento di Carassio è proprio l utilizzo del design pattern MVC. Grazie a questo è possibile separare completamente la logica di business da quella di presentazione, favorendo lo sviluppo di applicazioni in ambienti in cui il carico di lavoro è distribuito tra persone con competenze differenti. Nella Figura si possono identificare quattro attori: 1. Il Browser. Rappresenta l utente che interagisce con l applicazione. 26

35 Figura 2.2.1: Il paradigma MVC nel framework Carassio [14] 2. Il Controllore. Posto al centro di tutte le comunicazioni, questo componente riceve i comandi impartiti dall utente (sotto forma di richieste HTTP), facendo da intermediario tra quest ultimo e il resto dell applicazione. 3. Il Modello. Implementa la vera e propria logica di business dell applicazione. A questo componente, tramite il controllore, viene demandato l onere di recuperare ed elaborare i dati necessari al soddisfacimento di una richiesta. 4. La Vista. Una volta in possesso dei dati necessari, il controllore li invia alla vista che, dovendo gestire la logica di presentazione, provvede a costruire la veste grafica dell applicazione senza preoccuparsi di come tali informazioni siano state recuperate. Il processo si conclude quando il controllore fornisce all utente il risultato atteso sotto forma di risposta HTTP. A questo punto si è pronti per iniziare un nuovo ciclo di richieste. 27

36 2.2.1 Vantaggi Strutturare un applicazione in questo modo senz altro aumenta la complessità, richiedendo pertanto un lavoro progettuale più impegnativo. Tuttavia, specie in progetti di medie/- grosse dimensioni, diventa auspicabile mettere in pratica una tale metodologia. I benefici che questa apporta sono di interesse infatti per le seguenti tematiche: Riutilizzo. Difatti più una parte del lavoro è indipendente più possibilità ci sono perché questa venga integrata in altri progetti. Suddivisione del lavoro. Vi è una naturale distribuzione del carico di lavoro, che dà la possibilità ad ogni sviluppatore di focalizzarsi su singoli componenti, indipendentemente dal resto dell applicazione. Manutenibilità. Essendo l applicazione suddivisa in moduli indipendenti, è più semplice apportarne delle modifiche, siano queste correttive o perfettive. 2.3 Piattaforma e tecnologie di sviluppo Nel capitolo precedente abbiamo detto che un framework va scelto in riferimento al tipo di applicazione (che può o meno garantire dinamicità attraverso tecnologie come Ajax) e al tipo di piattaforma. Carasso in particolare fa affidamento sul solution stack LAMP, che come abbiamo avuto di vedere, grazie anche alla comparazione in Tabella 1.1, offre tutti i vantaggi tipici del free software. Del resto non potrebbe essere stato altrimenti, essendo il framework in oggetto fondato sugli stessi principi. Altro aspetto tecnologico è il linguaggio di programmazione. Nel nostro caso la scelta è ricaduta su PHP (acronimo ricorsivo di "PHP: Hypertext Preprocessor"), che sebbene inizialmente sia stato concepito come linguaggio di scripting per la realizzazione di pagine web dinamiche, è oggi ampiamente utilizzato per sviluppare applicazioni web lato server. 28

37 A rendere la sua fama ancor più affermata ha contribuito l introduzione del paradigma di programmazione orientata ad oggetti, di cui Carassio è il primo beneficiario. Tutti i moduli serverside infatti abbracciano questa filosofia, mettendola in pratica specie quando si ha la necessità di estendere funzionalità di terze parti. Altri benefici di questo linguaggio sono da ricercare nella vastissima documentazione a supporto, nella comunità estesa di sviluppatori, nei tool messi a disposizione. Di questi ultimi ricordiamo: phpdocumentor, per la capacità di produrre in modo automatico documentazione di elevata qualità, PHPUnit eccelsa piattaforma di testing. Per i moduli che invece sono progettati per il livello client, ovvero quelli che sono eseguiti localmente presso l utente, la scelta è ricaduta sull impiego di un framework molto noto, ovvero MooTools. Tra le tantissime disponibilità che vi sono in ambito JavaScript, Moo- Tools è stato scelto, oltre che per la sua compattezza e modularità, anche per la sua sintassi completamente orientata ad oggetti (non a caso il nome deriva da My Object Oriented javascript Tools). Presentandosi come prodotto full-featured, troviamo all interno strumenti dedicati ad ogni aspetto del web 2.0: è possibile creare richieste Ajax complesse, creare richieste in formato JSON, creare animazioni multifunzione, settare o modificare i cookie, lavorare con gli stili, le proprietà e le dimensioni degli elementi, utilizzare i selettori CSS e molto, molto altro ancora. Ciò però non costringe lo sviluppatore ad essere vincolato a questo particolare strumento, tant è che lo stesso Carassio promuove l utilizzo di ulteriori framework JavaScript, come ad esempio jquery. 2.4 Architettura Se fin ora ci siamo concentrati sulle tecnologie del framework, adesso rivolgiamo la nostra attenzione sulle architetture alla base di Carassio. Il framework in oggetto si compone di tre package principali: 29

38 Figura 2.4.1: UML Component Diagram per Carassio Clientside Figura 2.4.2: UML Component Diagram per Carassio Serverside 30

39 1. Clientside. Mostrato nella Figura 2.4.1, rappresenta tutti i moduli necessari per lo sviluppo lato client di una applicazione. È dunque l insieme dei componenti a cui viene delegato l onere di gestire l interattività con l utente, tipica delle rich internet application. Ancora una volta si vede come Carassio sia predisposto all estensibilità e all integrazione con altri prodotti. Scegliendo infatti tra le migliori soluzioni previste nel settore, questo non si prefigge lo scopo di reinventare le cose, piuttosto di far interagire diversi strumenti al fine di ottenere una più completa e ricca piattaforma. Ne sono un esempio significativo le inclusioni degli ottimi framework JavaScript MooTools e jquery. 2. Serverside. Visibile nella Figura 2.4.2, costituisce il vero e proprio cuore del framework. Carassio infatti è stato inizialmente prodotto per supportare lo sviluppo di applicazioni web tradizionali, che fanno largo uso di scripting lato server. Tale package è di vitale importanza, tant è che il suo utilizzo coinvolge tutte le componenti del pattern MVC. 3. Site. Più che un package, può essere visto come un set di configurazioni. L utilizzatore di Carassio sarà tenuto a specificare qui tutte le variabili di ambiente e le impostazioni necessarie per il corretto funzionamento della particolare applicazione Clientside L intero package ha lo scopo di favorire l interazione con l utente ed è quindi costruito attorno al linguaggio JavaScript. Tuttavia, malgrado le potenzialità che questo fornisce alla programmazione lato client, Carassio ricorre all utilizzo di framework esterni che ne estendono gli orizzonti. Al di là degli effetti e delle animazioni, il vantaggio principale introdotto da questi è la resa cross-browser degli script. Difatti, la gestione del DOM 1 e degli eventi, così come il modello di rendering, differisce di browser in browser. 1 Il Document Object Model (spesso abbreviato come DOM), letteralmente modello a oggetti del documento, è una forma di rappresentazione dei documenti strutturati come modello orientato agli oggetti. 31

40 Figura 2.4.3: Carassio plugin: esempio di applicazione per la gestione di album fotografici Include pertanto due framework diventati molto popolari, ossia MooTools e jquery, che da un lato aiutano lo sviluppatore nei suoi scopi, dall altro permettono allo stesso Carassio di definire nuovi moduli. Ne sono un esempio quelli appartenenti al subpackage Carassio: filetype che ritorna utile quando si vogliono rappresentare dei file all interno della pagina web, in quanto permette di associare dinamicamente al loro mime-type un immagine significativa; picnik, pixlr che forniscono le API da utilizzare per l image editing attraverso gli omonimi servizi web Picnik e Pixlr; utils, necessario al mapping dinamico degli URL dei controlli. Vi sono poi altri strumenti che sono stati integrati opportunamente: TinyMCE, famoso editor What You See Is What You Get basato su JavaScript e indipendente da qualsiasi piattaforma; Plupload, potente strumento per il caricamento di uno o più file. Supportando i più disparati runtime (Flash, HTML5, Silverlight e tanti altri) mette a disposizione 32

41 caratteristiche avanzate come: Chunking, Drag/Drop, Upload progress e tante altre ancora Serverside Questo componente è formato da tre subpackage: 1. Core; 2. External Packages; 3. Templates. Il primo di questi, il Core, mette a disposizione quei moduli che vengono usati più frequentemente e che sono dunque la base per ogni applicativo. Tra questi ricordiamo: FTP. Derivando il nome dall omonimo protocollo di trasferimento file, questo è il modulo che consente tutte le operazioni tipiche di un client ftp: accesso, gestione delle permessi, delle cartelle e dei file; pdo. Estende PHP Data Objects, fornendo un interfaccia unica per la gestione di molteplici database (MySQL, SQLite al momento); form. Permette di definire in modo semplificato la struttura dei moduli elettronici che saranno compilati dall utente finale. Specificando i domini di ogni input (checkbox, file, text, etc), è possibile integrare all interno della propria pagina web form anche molto complessi, per i quali è possibile prevedere delle forme di controllo, che consentono la validazione dei dati sia lato client che lato server (ad esempio tramite regular expression); session. Introdotto per facilitare la gestione delle sessioni, strumento assolutamente necessario per la natura stateless del protocollo HTTP; 33

42 Figura 2.4.4: Smarty Template Engine [15] error. Permette di localizzare gli errori durante la fase di sviluppo. La potenzialità di tale sistema è da ricercare nel mezzo di comunicazione di tali errori. Sono previsti infatti diverse tipologie di canali: echo, file, json, ; template. Ridefinisce i moduli di Smarty Template Engine, per facilitare maggiormente il loro utilizzo e per adattarli alla struttura delle cartelle previste da Carassio; . Grazie all uso del package esterno XPM4 vengono fornite interfacce semplificate per l invio di posta elettronica. A questa serie di componenti si aggiungono gli External Packages: phpthumb per la manipolazione di immagini lato server; Smarty Template Engine. Questo componente è fondamentale, in quanto garantisce supporto alla View del pattern MVC. Fornisce un modo semplice per separare la logica di business da quella di presentazione. Oggetti protagonisti di questo motore sono i template, nei quali viene specificata la veste grafica dell applicazione (sotto forma di HTML e CSS). I template sono costruiti portando un minimo di logica 34

43 a livello presentazione; giusto quella necessaria per operazioni come la selezione (if..else), la ripetizione di blocchi (foreach) e l utilizzo di modificatori di testo. Ultimo, ma non meno importante è il package Templates, che come si intuisce dal nome, è costituito da alcuni template già pronti e che semplificano enormemente lo sviluppo del livello di presentazione. Per questi è previsto un meccanismo di estensione che permette agli sviluppatori di ridefinire i modelli standard previsti da Carassio. L utente quindi non è assolutamente vincolato al framework, ma anzi può scegliere di impiegare la soluzione che più si avvicina alle proprie esigenze Site Come si è anticipato, qui vengono settate tutte le variabili d ambiente e le configurazioni per la specifica applicazione. Un esempio può essere dato dalla scelta della tipologia del database, dallo SMTP server scelto per la spedizione delle e tanti altri parametri ancora Le Carassio Action Particolare rilievo è assunto dal modulo denominato Carassio Action. Questo è nato con lo scopo di colmare il gap che si viene ad instaurare tra i ruoli di Coder e Designer, in particolare per quanto riguarda la gestione degli URL 2. Il progettista dell interfaccia infatti vuole poter disegnare la veste grafica prescindendo dalla realizzazione logica dell applicazione. Potrebbe persino non conoscere la esatta locazione dei controllori, né tanto meno esserne interessato. Egli sa solo che deve riportare degli indirizzi per consentire una più agevole navigazione all utente. Per favorire questo approccio, le Carassio Action mettono a disposizione un meccanismo di mapping degli URL, che fa corrispondere ad ogni controllore una etichetta. Il progetti- 2 Uniform Resource Locator o URL è una sequenza di caratteri che identifica univocamente l indirizzo di una risorsa in Internet, tipicamente presente su un server, come ad esempio un documento, un immagine, un video, rendendola accessibile ad un client che ne fa richiesta attraverso l utilizzo di un web browser 35

44 sta del livello business non farà altro quindi che fornire al Designer la lista delle etichette interessate, sicuro del fatto che una qualsiasi modifica del nome o della posizione di uno dei qualsiasi controllori non si ripercuoterà sul livello di presentazione. Le Carassio Action inoltre facilitano lo sviluppo di applicazioni orientate alle azioni. È normale prassi infatti che un controllore gestisca più funzionalità. Per una pagina che per esempio riporti un elenco di contatti, potremmo identificare le funzionalità rinomina oppure elimina come azioni da intraprendere su un contatto. Sfruttando l URL, grazie ad un opportuno passaggio di parametri, si fa in modo che il controllore richiamato attui l azione corrispondente. Ancora una volta, il Designer non deve sapere niente di tutto ciò, in quanto la logica applicativa è di competenza altrui. Quest ultimo sfrutterà quindi il meccanismo delle etichette di cui abbiamo parlato, specificando però anche l azione associata, che attenzione, può avere tutt altro nome rispetto a quella effettivamente utilizzata dal rispettivo controllore. Volendo proseguire con l esempio sopra citato, vedremo il progettista del livello business occuparsi del mapping degli URL, specificando le etichette per l ambito e l azione più la locazione e i parametri del controllore: carassio::action_register( contatti, rinomina, contacts.php?a=rename&i=: id_contact ); carassio::action_register( contatti, elimina, contacts.php?a=delete&i=: id_contact ); Il progettista dell interfaccia grafica a questo punto, se volesse creare una lista di contatti, cliccati i quali si è rimandati al controllore che gestisce la rinomina, non dovrà fare altro che usare le etichette che il buon caro collega ha provveduto a fornirgli: {foreach $contacts as $contact} <a href="{carassio_action s=contatti a=rinomina v=$contact}">{$contact.name}</a>< br/> {/foreach} 36

45 In tal modo il Designer non si preoccupa né di dover utilizzare il giusto URL, né di come passargli i parametri necessari (l id del contatto) Secrets Qui vanno specificati i parametri sensibili per la propria applicazione. L accesso dall esterno è negato mediante un file.htaccess, un meccanismo messo a disposizione dal web server Apache. Solitamente è qui che si specificano i parametri di accesso al database (tipo, hostname, username, password, etc), ma anche altri come quelli che consentono l accesso ad un server FTP (difatti prima abbiamo visto che c è un apposito modulo in Serverside). 37

46 Capitolo 3 Caso di studio: Analisi e progettazione Già è stato accennato che il caso di studio a cui faremo riferimento riguarda la progettazione e lo sviluppo di una applicazione web inquadrata nell ambito del filesharing. Tale progetto, denominato appunto FILESHARE, si colloca all interno di un contesto aziendale e nasce con lo scopo di supportare la condivisione di file tra più persone. Lo scopo che si prefigge non è quello di realizzare l ennesimo cyberlocker (o comunemente detto armadietto digitale), piuttosto quello di creare un prodotto particolarmente adatto all ambiente enterprise, che quindi vede coinvolti enti e persone che hanno legami di business tra loro: un azienda con i propri clienti, fornitori, dipendenti e via dicendo. Il perché di un progetto come questo appare piuttosto evidente. Infatti per un azienda si preferisce disporre di una soluzione che possa essere fatta propria e quindi ampliata e/o personalizzata in base a specifiche esigenze. Sebbene siano poste solide basi per l ambiente enterprise, è da dire che il prodotto software in questione, non attenendosi ad alcuna esplicita commessa, è stato concepito per un contesto del tutto generale. Naturalmente, visto che l impiego di un framework riguarda per lo più la fase di sviluppo, ci discosteremo da quello che è stato il discorso affrontato fin ora. D altra parte, gli argomenti che stiamo per introdurre rappresentano una tappa fondamentale nella realizzazione di un prodotto software. 38

47 Nel corso di questo capitolo esporremo, dunque, le fasi iniziali del ciclo di vita del software, ovvero quella di analisi e specifica dei requisiti e quella di progettazione. 3.1 Analisi e specifica dei requisiti Questa è una fase molto importante del ciclo di vita. Qui vengono definiti infatti gli obiettivi dell applicazione, ovvero cosa il sistema software dovrà andare a fare, indipendentemente dalla soluzione e dal dominio del problema (come). È un attività molto critica, dal momento che errori in questa fase si propagano in quelle successive, con conseguenze devastanti per i costi e i tempi di sviluppo. Rappresenta, inoltre, il principale punto di incontro con il committente e pertanto la chiave di volta per l approvazione dell intero progetto. Sebbene tale analisi avvenga solitamente come negoziazione tra le persone addette alla raccolta dei requisiti (gli analisti) e i clienti, nel nostro caso ci atterremo alle indicazioni forniteci dall azienda sede dello sviluppo. Questo perché, come accennato precedentemente, FileShare non è un prodotto realizzato su specifica richiesta. In ogni caso, identificheremo comunque i requisiti dell applicazione, al fine di produrre un Documento di Specifica dei Requisiti Software che sia completo, consistente, non ambiguo e comprensibile. Si vuole realizzare dunque un applicazione web based che permetta a degli utenti di condividere file in rete. Lo scenario tipico è quello di un azienda che necessita di condividere documenti, media e file di qualsiasi altro genere con i propri partner (clienti, fornitori, dipendenti, etc.). L utente potrà dunque appartenere ad una delle seguenti categorie: Operatore aziendale; Partner. 39

48 L applicazione dovrà prevedere una cartella di base, detta root directory, nella quale viene creata una cartella personale per ogni partner, all atto della sua registrazione. All interno della propria cartella personale l utente partner godrà di tutti i privilegi per la gestione di file e cartelle. L operatore aziendale, invece, dovrà avere a disposizione ogni tipo di privilegio su qualsiasi cartella. In alcuni casi, inoltre, un utente partner può essere abilitato dall operatore aziendale ad accedere al servizio tramite delle credenziali provvisorie. Questo accade prevalentemente quando si parla di partner non abituali (detti spot), ai quali si vuole dare solo un accesso temporaneo al portale. L applicazione dovrà includere una serie di funzionalità: per la gestione di file, consentendo ad un utente di muoversi nella sua area personale e di organizzare i propri file; per la taggatura, permettendo di associare delle etichette a vari file così da facilitare le operazioni di ricerca e catalogazione; per la gestione dei commenti, permettendo ad un utente di inserire delle note di riferimento per un file; per le notifiche, grazie alle quali l utente viene avvisato quando si verifica un evento (ad esempio quando viene caricato un file nella sua cartella); per il controllo di accesso alle cartelle, mediante il quale è possibile specificare come, quando e da chi una determinata cartella può essere acceduta; per la gestione dei partner spot; per la gestione delle scadenze, permettendo all utente di specificare una data di scadenza per il file caricato. Si dovranno notificare all utente sia l imminente scadenza, sia l avvenuta scadenza del file; 40

49 Figura 3.1.1: Diritti di accesso per operatori aziendali e partner per l associazione dei file. Nella Figura si evidenziano i diritti di accesso rispettivamente degli operatori aziendali e degli utenti partner. Gli operatori aziendali hanno accesso a tutte le cartelle del portale, mentre gli utenti partner hanno accesso solo a quelle che gli sono state riservate. Esempio Uno studio medico ha la necessità di condividere dei documenti con i propri pazienti. In questo caso l operatore aziendale è rappresentato dal medico, mentre il partner dal paziente. Supponiamo che il medico voglia rilasciare un certificato medico ad un paziente e che entrambi siano già registrati nel sistema. Il medico caricherà dunque il certificato nella cartella riservata al paziente, il quale sarà poi notificato automaticamente dell avvenuto 41

50 Figura 3.1.2: Esempio per uno studio medico caricamento. A questo punto il paziente scaricherà il proprio certificato (si veda la Figura 3.1.2) Funzionalità Di seguito riporteremo nel dettaglio le funzionalità che precedentemente abbiamo provveduto ad elencare. Gestione file Questo funzionalità consente di effettuare tutte le operazioni relative alla gestione ed organizzazione dei file. In particolare saranno possibili le seguenti operazioni: spostarsi tra le cartelle; caricare un file; 42

51 scaricare un file; creare una cartella; copiare file e cartelle; spostare file e cartelle; rinominare file e cartelle; eliminare file e cartelle. Taggatura Questa funzionalità consente all utente di poter associare delle etichette (che nel seguito chiameremo tag 1 ) al fine di migliorare le operazioni di ricerca e catalogazione dei file. Chiaramente quando ci si riferisce ad una particolare etichetta, al fine di trovarne i file associati, si otterranno risultati diversi in funzione della tipologia dell utente. Un operatore aziendale infatti disporrà di tutti i file del sistema aventi quella etichetta, mentre un partner solo di quelli per cui ha diritto di accesso. Gestione dei commenti L applicazione dovrà consentire all utente la visualizzazione, l inserimento e l eliminazione di commenti per un file. Mentre la visualizzazione e l inserimento dei commenti sono concessi a chiunque abbia diritto di accesso al relativo file, l eliminazione deve poter essere effettuata soltanto dagli operatori aziendali e dagli utenti autori del commento. 1 Un tag è una parola chiave o un termine associato a un informazione (un immagine, una mappa geografica, un post, un video clip...), che descrive l oggetto rendendo possibile la classificazione e la ricerca di informazioni basata su parole chiave. I tag sono generalmente scelti in base a criteri informali e personalmente dagli autori/creatori dell oggetto dell indicizzazione. 43

52 Notifiche Secondo questa funzionalità l utente deve essere avvisato al verificarsi di determinati eventi, quali: caricamento di un nuovo file; eliminazione di un file; rinomina di un file; scadenza imminente di un file; scadenza avvenuta di un file; scaricamento di un file; spostamento di un file. Dovranno essere previste due modalità di notifica. Da un lato, l utente dovrà disporre di un area di notifica, consultabile presso la propria area personale. Dall altro si dovrà prevedere un meccanismo in grado di inviare automatiche all utente. Nel caso in cui l evento rappresenti la scadenza di un file, allora il sistema notificherà tutti gli utenti che condividono quel file. In tutti gli altri casi verrà notificato solo l utente interessato. L utente dovrà poter scegliere, mediante le impostazioni personali, gli eventi per i quali sarà inviata una notifica . In ogni caso l area di notifica resterà sempre abilitata mentre le opzioni relative all invio delle saranno per default tutte abilitate. Nelle immagini in Figura possiamo vedere come deve essere inoltrata una notifica , rispettivamente, nel caso di scadenza di un file e di un qualsiasi altro evento. 44

53 Figura 3.1.3: Notifiche via scadenza e caricamento di un file 45

54 Controllo di accesso alle cartelle L obiettivo principale di questa applicazione web è permettere agli utenti la condivisione di file e cartelle. Per tale motivo, l operatore aziendale deve poter disporre delle seguenti funzionalità: organizzazione degli utenti in gruppi, ossia raggruppamenti logici ai quali assegnare gli stessi permessi su una cartella; assegnazione dei permessi di accesso alle cartelle. Gli utenti partner, all atto della registrazione, vengono assegnati automaticamente ad un gruppo di default il quale ha lo stesso nome dell utente partner. Questo conferisce all utente partner i permessi di tipo full per accedere alla propria cartella personale. Dovranno poter essere definiti tre tipi di accesso alle cartelle: 1. full. Deve consentire agli utenti di accedere alle cartelle e ai file in esse contenuti con i massimi privilegi per la gestione dei file; 2. intermediate. Deve consentire agli utenti di accedere alle cartelle con i soli permessi per caricare e scaricare file; 3. limited. Deve consentire agli utenti di accedere alle cartelle con i soli permessi per scaricare file. Un operatore aziendale deve anche poter specificare dei vincoli temporali per l accesso ad una cartella tramite: una data a partire dalla quale la cartella può essere utilizzata; una data fino alla quale una cartella può essere utilizzata. Per poter assegnare dei diritti di accesso ad una cartella si dovrà quindi specificare una tripla: 46

55 gruppi con cui la si vuole condividere; tipi di accesso (esclusivamente intermediate o limited); opzionalmente, i vincoli temporali di accesso. Gestione dei partner spot Quando parliamo di utenti spot facciamo riferimento ai partner aziendali che non hanno un rapporto frequente con l azienda. Pertanto c è bisogno di funzionalità per la loro gestione. Dunque l applicazione dovrà: 1. chiedere all operatore aziendale di inserire l indirizzo dell utente spot; 2. creare delle credenziali provvisorie per l utente spot; 3. creare una cartella temporanea nella root directory, con i permessi di tipo limited, in modo che i partner spot possano solo scaricare i file messi a disposizione; 4. inviare una all utente spot con l URL della cartella temporanea e le relative credenziali. In tal modo il partner spot potrà accedere alla cartella che gli è stata riservata, reperire i file messi a disposizione ed infine effettuare il logout. Terminata la sessione, verrà cancellata la cartella del partner spot e i relativi file contenuti. Gestione delle scadenze Questa funzionalità deve consentire all utente di assegnare ad un proprio file una data di scadenza e di scegliere quanti giorni prima di tale data debbano essere avvisati tutti gli utenti che condividono quel file. 47

56 Associazione file Tale funzionalità deve consentire all utente di associare un file sorgente ad un file destinazione, dove per file sorgente si intende un qualsiasi file caricato dall utente, mentre per file destinazione si intende un qualsiasi altro file presente nella propria area personale. Un esempio può essere l allegamento di una fattura a un ordine di fornitura. L utente deve poter inserire una breve descrizione per l associazione, visualizzare i file allegati ed eliminare le associazioni per i file di cui è autore Diagramma dei casi d uso Per schematizzare meglio tutte le specifiche viste fin ora, riportiamo in Figura il diagramma dei caso d uso. Questo rappresenta le interazioni tra i diversi attori e il sistema, catturando le funzionalità così come percepite dall utente. Essendo comprensibile anche ai non addetti ai lavori, il diagramma dei casi d uso permette di avere a disposizione uno strumento tanto semplice quanto utile. Ragionare sui casi d uso aiuta anche a scoprire ulteriori requisiti del sistema, che nel nostro caso possono riassumersi nei seguenti punti: Un utente che non ha ancora le credenziali per poter accedere all applicazione, deve avere la possibilità di registrarsi; Un utente già registrato, prima di poter utilizzare le funzionalità messe a disposizione, deve autenticarsi tramite la procedura di Login; Oltre alle normali funzionalità, un operatore aziendale deve poter gestire sia gruppi che permessi e creare partner spot. 48

57 Figura 3.1.4: UML Use Case Diagram 49

58 3.2 Progettazione Durante questa fase vengono scelte le modalità di passaggio dal cosa deve essere realizzato (specifica dei requisiti) al come la realizzazione deve essere portata a termine. Sulla base quindi delle specifiche prodotte in fase di analisi, definiremo come saranno soddisfatti i requisiti, entrando nel merito della struttura che dovrà essere data al sistema software da realizzare. La progettazione può essere suddivisa su più livelli di dettaglio: 1. Livello Architetturale. Viene definita la struttura complessiva del sistema, identificando i moduli principali di cui è composto e le relazioni macroscopiche tra essi; 2. Livello Intermedio. Si identificano i moduli e le classi dei moduli principali, al fine di scomporre maggiormente il sistema; 3. Livello di Dettaglio. Si avvicina molto alla fase di codifica, infatti viene qui definita la struttura di dettaglio delle classi. Nel seguito terremo in considerazione però anche altri aspetti del sistema, tra cui la base dati, il cui scopo è quello di memorizzare tutti i dati necessari all applicazione, il lato server, responsabile della logica applicativa e di controllo, e il lato client, attraverso cui si gestisce la presentazione e l interazione con l utente Progettazione della base dati Una base dati è fondamentale per qualsiasi applicazione, in particolar modo per quelle web, che devono poter gestire una grossa mole di informazioni. Una delle prime attività è stata quindi la progettazione della base dati, di cui analizzeremo due fasi distinte: la progettazione concettuale e la progettazione logica. 50

59 Entità User Business Operator Partner Event Group File Folder Tag Descrizione Utente generico Operatore aziendale, amministratore del sistema Utente normale Evento attivabile, che il sistema di notifica è tenuto a registrare Raggruppamento logico di utenti Documenti che possono essere caricati o scaricati dagli utenti Cartella che può contenere file e cartelle Etichetta associabile ad un file Tabella 3.1: Dizionario dei dati: Entità Progettazione Concettuale Obiettivo della progettazione concettuale è individuare, nel rispetto delle specifiche, le entità, le relazioni e i vincoli di interesse per l applicazione. Il problema viene quindi affrontato ad un alto livello di astrazione, in modo da individuare tutte le componenti della realtà, indipendentemente dalla rappresentazione informatica. Il risultato di questa fase è appunto il Diagramma Entità-Relazioni, che rappresenta uno schema concettuale della base dati (si veda la Figura 3.2.1). Partendo dal Documento di Specifica dei Requisiti Software, sono state identificate entità e relazioni, che riportiamo rispettivamente nelle Tabelle 3.1 e 3.2. Infine, sono stato individuati gli attributi delle entità e delle relazioni, che per semplicità mostriamo nelle Tabelle 3.3 e Progettazione Logica Questa fase ha come obiettivo la traduzione dello scema concettuale visto in precedenza, in uno schema logico che sarà però indipendente dal particolare DBMS. I risultati saranno quindi un diagramma delle tabelle e l insieme di tutte le entità e relazioni opportunamente tradotte nel modello relazionale. 51

60 Relazione Descrizione Entità Coinvolte Creation Comment Files Attachment Tagging Files Containment Folders Containment Event Log Settings Membership Group Management Group Sharing Mette in corrispondenza un file con l utente che l ha caricato Permette agli utenti di associare uno o più commenti a un file Serve per associare un file ad un altro Permette di associare una o più etichette a un file Relazione tra un file e la cartella che lo contiene Relazione tra una cartella contenuta e quella contentente Impiegata per la registrazione di eventi Impostazioni personali dell utente relative agli eventi Indica l appartenenza di un utente ad un gruppo Relazione tra un gruppo e il suo creatore Utilizzato per la condivisione. Mette in corrispondenza gruppi e cartelle. User, File User, File File (Source), File (Destination) File, Tag File, Folder Folder (Contained), Folder (Containing) Event, User User, Event User, Group Business Operator, Group Group, Folder Tabella 3.2: Dizionario dei dati: Relazioni Entità Attributi Identificatore User Nome utente, password, , indirizzo, telefono, fax, data di registrazione id_user Event Nome evento id_event Group Nome gruppo, tipo id_group File Folder Nome file, locazione di storage, scadenza, dimensione Nome cartella, tipo, data di creazione id_file id_folder Tag Nome tag id_tag Tabella 3.3: Attributi per le entità 52

61 Relazione Creation Comment Files Attachment Event Log Settings Membership Group Management Group Sharing Attributi Data di upload Comment, data e ora Descrizione, data e ora Oggetto, tipo di oggetto, valore precedente, data e ora Invia notifica via Data e ora Data e ora Permessi, a partire da, fino a Tabella 3.4: Attributi per le relazioni Figura 3.2.1: Diagramma ER 53

62 Prima di procedere però con la traduzione, bisogna ristrutturare il diagramma ER al fine di eliminare tutti quei costrutti che non trovano corrispondenza nel modello relazionale. Questi sono, nel nostro caso: la gerarchia di generalizzazione/specializzazione tra le entità User, Partner e Business Operator; la presenza dell attributo composto Indirizzo per l entità User. Nonostante la gerarchia sia di tipo totale e disgiunta, si è scelto di incorporare le entità figlie nell entità padre, aggiungendo un attributo Type che consente di fare distinzione tra un utente Partner e un utente Business Operator. Si è fatta questa scelta dal momento che le entità figlie sono costituite dagli stessi attributi, hanno le stesse relazioni tranne per quella che riguarda la gestione dei gruppi (Group Managment) che però è opzionale. Tale soluzione sembra dunque quella più conveniente. L attributo Indirizzo invece è stato eliminato dall entità User, inserendo tanti attributi semplici quanti erano i valori dell attributo composto (Street1, Street2, Postcode, City, Country). Nella Figura riportiamo pertanto il diagramma ER ristrutturato. Dopo aver ristrutturato il diagramma ER è semplice effettuarne la traduzione nello schema logico, che qui riportiamo in Figura 3.2.3, sotto forma di diagramma delle tabelle. Qui si rappresentano tutte le tabelle (e relazioni tra esse) che andranno a costituire la base dati. In blu vengono rappresentate le foreign key presenti nelle varie tabelle, mentre in rosso le foreign key che sono anche chiavi primarie. Sono previste inoltre due tabelle aggiuntive, a supporto del sistema di notifica. Prima di tutto, la tabella Notifies, che tiene traccia della relazione tra Events Log e Groups. Questa ci permette infatti di ricostruire l area di notifica per l utente autenticato, a partire dai gruppi a cui questo appartiene. È poi aggiunta una tabella Deadlines, utile per tenere traccia delle di notifica inviate per la scadenza dei file. Questa tabella contiene, per ogni file del sistema cui è 54

63 Figura 3.2.2: Diagramma ER ristrutturato associata una data di scadenza, due booleani. Il primo diventa vero quando viene inviata l per l imminente scadenza del file, mentre il secondo invece, diventa vero quando è inviata l per l avvenuta scadenza del file. Grazie a questa dunque, si può sapere quali di notifica sono state mandate. Infine, per alcune entità come File e Folder, si è previsto un ulteriore attributo deleted, che permette una cancellazione virtuale delle informazioni. Dopo tutte queste considerazioni risulta semplice, adesso, effettuare la traduzione delle entità e delle relazioni nel modello relazionale. 55

64 Figura 3.2.3: Diagramma delle tabelle 56

65 Traduzione delle entità USERS (id_user, user, type, password, , street1, street2, postcode, city, country, telephone, fax, registration_date); FILES (id_file, id_user: USERS, id_folder: FOLDERS, file, storage, upload_date, deadline, size_byte, deleted); FOLDERS (id_folder, id_folder_containing: FOLDERS, folder, default, deleted, creation_date); TAGS (id_tag, tag); EVENTS (id_event, event); GROUPS (id_group, id_user: USERS, group, default, creation_date); Traduzione delle relazioni COMMENTS (id_comment, id_file: FILES, id_user: USERS, datetime, comment); TAGGINGS (id_file: FILES, id_tag: TAGS); FILES ATTACHMENT (id_file_source: FILES, id_file_destination: FILES, datetime); MEMBERSHIPS (id_user: USERS, id_group: GROUPS, datetime); GROUPS SHARING (id_group: GROUPS, id_folder: FOLDERS, permissions, date_from, date_to); SETTINGS (id_user: USERS, id_event: EVENTS, send_notice); EVENTS LOG (id_event_log, id_event: EVENTS, id_user: USERS, object, type, before, datetime); Tabelle aggiuntive NOTIFIES (id_event_log: EVENTS LOG, id_group: GROUPS); DEADLINES (id_file: FILES, in_expiring, expired); 57

66 Figura 3.2.4: UML Component Diagram iniziale per FileShare Progettazione architetturale e intermedia Questa fase è volta a stabilire l organizzazione globale di un sistema software e, pertanto, è finalizzata ad individuare i sottosistemi componenti, e le loro inter-relazioni di controllo e di comunicazione. La nostra scelta non poteva che ricadere sul pattern architetturale MVC, di cui abbiamo già presentato le caratteristiche e i vantaggi ( 2.2). Seguendo questo approccio sono stati identificati i moduli costituenti il Controller, il Model e la View. Si è quindi provveduto a definire i controllori dell applicazione, le classi del Model e le interfacce della View, così come riportato nel Component Diagram in Figura Per il package Controller sono stati individuati inzialmente due controllori, uno per consentire l accesso (Login) e l altro per la gestione dell area personale (Home). Riguardo il Model, sono state identificate delle classi, ognuna delle quali fa riferimento ad una entità rilevante per l applicazione (User, File, Folder, Group, Comment e Tag). Si è poi dovuto ricorrere ad un ulteriore classe, Notify, per la gestione degli eventi e delle 58

67 notifiche. Per concludere, sono state pensate due pagine per la View, una per il login e l altra per l home page dell utente autenticato Progettazione di dettaglio L ultimo step previsto, prima di procedere con la fase di implementazione, è stato quello per la progettazione di dettaglio, che come vedremo ci permetterà di raffinare ulteriormente i componenti dell architettura MVC. Per quanto riguarda il package Controller, ci si è resti conto che i suoi componenti, ovvero i controllori, poco si prestano alla modellazione tipica dell ingegneria del software. Questi, in effetti, hanno il solo scopo di gestire il flusso applicativo e moderare la comunicazione tra i diversi elementi del pattern; risultato che può essere raggiunto mediante l impiego di controllori snelli, costituiti ovvero da un numero limitato di istruzioni. Vengono così favoriti tutti quei principi alla base dello sviluppo software: leggibilità, riutilizzo e manutenibilità. Oltre a quelli già visti, sono stati quindi individuati altri controllori, al fine di gestire le operazioni per ogni entità significativa del sistema: per i file, le cartelle, i gruppi, i commenti, i tag e le notifiche. Discorso differente va fatto per il Model, il quale rappresenta la logica di business dell applicazione. In questo caso sono state identificate le classi che implementano le funzionalità del sistema e modificano lo stato della base dati. Risultato di tale attività è il diagramma delle classi, riportato in Figura Da questo diagramma si può vedere che sono state fatte opportune scelte di progetto: ogni classe deve possedere un unico attributo identificatore con visibilità pubblica, dal momento che questo sarà un dato acceduto esclusivamente dai nostri controllori; le classi User, File, Folder e Group devono poter disporre di: 59

68 Figura 3.2.5: UML Class Diagram per il Model 60

69 quattro funzioni di base CRUD (Create, Read, Update e Delete) per l interazione con il database; un unico metodo search(), che consente di reperire dalla base dati qualsiasi informazione relativa all oggetto. la classe Store è progettata perché in futuro possa affidare la gestione e la memorizzazione de file in cloud computing, piuttosto che ai server aziendali; bisogna prevedere metodi per il controllo dei permessi, come ad esempio is_bo(), il quale verifica che un utente, autore di una determinata azione, sia o meno un operatore aziendale. Con riferimento alla View, infine, è stata progettata anche la veste grafica dell applicazione. La Figura mostra appunto la struttura di riferimento per le pagine, che prevede: un header, che conterrà il logo dell applicazione; una barra di navigazione, che permetterà all utente di muoversi tra le varie pagine messe a disposizione; un wrapper centrale a tre colonne: la sinistra per contenere le funzionalità messe a disposizione dell utente; la centrale per contenere file e cartelle; la destra per riportare informazioni relative al file o alla cartella. un footer, nel quale andranno inserite informazioni aggiuntive. Questo risultato potrebbe essere raggiunto mediante la costruzione di una singola pagina HTML. Tuttavia, sono del tutto evidenti gli svantaggi che una simile soluzione apporta. Per questo motivo si è cercato di applicare il concetto di modularità anche alla veste grafica, separando il layout che abbiamo appena visto, in molteplici template, che saranno poi 61

70 Figura 3.2.6: Layout dell applicazione opportunamente assemblati per costruire la pagina HTML da restituire all utente. Ecco quindi applicati alla veste grafica, i principi su cui ci siamo soffermati precedentemente: leggibilità, riutilizzo, manutenibilità. Per concludere, nella Figura riportiamo il Component Diagram finale per la nostra applicazione. Come si può constatare, sono stati inclusi nel Controller tutti i controllori previsti, nel Model il diagramma delle classi di Figura 3.2.5, mentre nella View un numero limitato di template (l elevata modularità ha portato alla creazione di numerosi template, difficili da riportare quindi in un unico diagramma). 62

71 Figura 3.2.7: UML Component Diagram finale per FileShare 63

72 Capitolo 4 Caso di studio: Sviluppo e testing Da quanto è stato visto in precedenza, l utilizzo di un framework è relegato per lo più alla fase implementativa ed è per questo motivo che il capitolo in questione sarà sviluppato con particolare riguardo. Scenderemo quindi nel dettaglio dei meccanismi messi a disposizione del framework Carassio e vedremo come è stato possibile grazie ad essi realizzare l applicazione web FileShare. Innanzitutto vedremo come Carassio va integrato all interno della propria applicazione e quali sono le configurazioni necessarie perché tutto funzioni come previsto. Scopriremo alcuni dei moduli del framework, cercando di capire come questi devono essere integrati nei controllori. Questi ultimi, infatti, rivestendo un ruolo centrale per una applicazione basata sul pattern MVC, hanno l onere di includere tutte le librerie esterne di cui si ha bisogno. Saranno successivamente proposti alcuni esempi di codice, grazie ai quali si è provveduto a implementare buona parte delle funzionalità alla base di FileShare. Chiaramente, non potremo fare riferimento all applicazione nella sua totalità, vista la mole di Lines of Code prodotte in fase di sviluppo. Ci atterremo, pertanto, a quelli che sono gli esempi più significativi per una applicazione inquadrata nell ambito della condivisione di file. Infine, ci dedicheremo alla fase di manutenzione, per la quale sono stati previsti una serie di test, al fine di scoprire eventuali malfunzionamenti del prodotto software in questione. 64

73 Figura 4.1.1: Struttura delle cartelle di un progetto 4.1 Installazione e configurazione del framework Prima di tutto: come ci procuriamo Carassio? Per la versione di rilascio, possiamo riferirci al seguente SVN 1 https://fire.naxe.net/svn/carassio2012/, pubblico e quindi liberamente accessibile. Da qui possiamo recuperare tutto l occorrente per il nostro progetto e includerlo in una directory chiamata appunto carassio. La Figura ripropone la suddivisione dei moduli già vista negli UML Component Diagram e mostra la struttura delle cartelle che un progetto dovrebbe possedere. Ritroviamo quindi le cartelle: clientside, nella quale ci saranno tutti i moduli relativi alla programmazione lato client; serverside, in cui sono ospitati tutti i moduli inerenti lo scripting lato server; site.skel, che deve essere copiata all interno della cartella superiore, ovvero quella del progetto, e rinominata in site. Qui si andranno a specificare le impostazioni per la particolare applicazione, incluse le carassio action per il mapping degli URL; 1 Subversion è un version control system open source che si occupa di gestire file e directory e le modifiche che possono subire con il passare del tempo. 65

74 tutorials, infine contiene dei semplici script, opportunamente documentati, su cui uno sviluppatore alle prime armi può fare affidamento. A quanto punto, già si vede la semplicità alla base di Carassio. Per essere quasi operativi, sono bastate infatti delle banali operazioni di drag and drop. Facendo riferimento alla cartella site, vedremo ora come configurare opportunamente le impostazioni per FileShare. Per cominciare, una volta caricato attraverso FTP il proprio progetto, si è reso necessario associare alla cartella writable i permessi necessari alla scrittura. Il framework utilizzerà infatti questa directory per operazioni quali: compilazione di template, caching e gestione temporanea di file caricati. Nella sottocartella secrets, invece, sono stati invece specificati i parametri sensibili per l applicazione. Qui si è provveduto quindi a inserire le informazioni necessarie per l accesso al database, e altre come le credenziali per il server FTP. Per quanto riguarda il mapping degli URL, si è fatta un analisi sulle possibili azioni previste per ogni controllore definito nella fase di progettazione. Queste sono state così riportate nel file actions.php, in linea con quanto già spiegato nel Paragrafo Di seguito riportiamo, come esempio, alcune delle azioni individuate per il controllore file.php: carassio::action_register( file, upload, file.php?a=upload ); carassio::action_register( file, download, file.php?a=download&i=:id_file ); carassio::action_register( file, rename, carassio::action_register( file, delete, file.php?a=rename ); file.php?a=delete&i=:id_file ); Per concludere, sono state poi inserite all interno del file defines.php, le seguenti informazioni: l indirizzo di posta elettronica utilizzato per l invio di automatiche; l indirizzo del server SMTP per la posta; 66

75 Modulo Abbreviazione Ambito arrayfile af Gestione avanzata di array image im Gestione di immagini form fo Definizione di moduli elettronici (comprese le regole di validazione) session ss Gestione semplificata della sessione em Inoltro pdo db Gestione di database template tp Gestione della comunicazione tra Controller e View Tabella 4.1: Principali moduli di riferimento per i controllori lo store engine utilizzato, mediante il quale viene specificato il tipo di memorizzazione dei file: in locale o in cloud computing (noi abbiamo adottato la prima soluzione); la locazione di riferimento per la memorizzazione di file sul server. 4.2 I moduli del framework Vediamo invece adesso quali sono i moduli maggiormente utilizzati nei controllori e come ne viene resa possibile l integrazione. Carassio permette di definire, all interno di un controllore, una costante detta CARAS- SIO_OBJS, la quale permette di richiamare, mediante delle abbreviazioni, tutti i moduli di cui si ha bisogno. Riportiamo alcuni di essi in Tabella 4.1, così da rendere più chiari gli esempi che seguiranno. Qualora per un controllore (supposto collocato nella root del progetto) si vogliano includere uno o più moduli, non si dovrà fare altro che scrivere in cima al suo script le seguenti istruzioni: DEFINE( CARASSIO_OBJS, STRINGA ); require_once(dirname( FILE ). /site/carassio.php ); 67

76 dove al posto di STRINGA possiamo inserire le abbreviazioni su viste, separate con un qualsivoglia carattere. La stringa verrà dunque analizzata dallo script carassio.php, che provvederà non solo all inclusione dei moduli, ma anche all istanziamento di un oggetto di default per ogni classe specificata. Difatti l utilizzo di un modulo implica quasi sempre l istanziamento di un oggetto, che da solo può essere in grado di soddisfare le funzionalità richieste. Questo perché, come abbiamo avuto modo di vedere, i controllori solitamente sono costituiti da un numero esiguo di istruzioni, per cui può non avere senso dover allocare più oggetti per una stessa classe (a parte limitati casi). Carassio associa dunque, ad ogni abbreviazione, un oggetto di default, che tipicamente ha il nome dell abbreviazione stessa. In ogni caso, qualora non dovesse risultare gradito un tale comportamento, sarà sempre possibile modificare a proprio piacere lo script carassio.php (che non a caso fa parte della cartella site), al fine di aggiungere e/o eliminare istanze. Un approccio del genere favorisce il discorso, affrontato già in precedenza, secondo il quale uno sviluppatore può decidere di includere giusto lo stretto necessario, non solo per l intera applicazione, ma anche per le singole componenti della stessa. Discorso che è quindi a favore delle prestazioni generali per l applicazione. 4.3 Esempi di codice Nel seguito riporteremo alcune funzionalità realizzate per FileShare, con lo scopo di mettere in risalto da una parte i meccanismi alla base del framework Carassio, e dall altra i vantaggi apportati dalla separazione delle logiche, tipica del pattern architetturale MVC Navigazione tra le cartelle Avere un buon file manager è essenziale per una applicazione come FileShare. Il seguente esempio mostrerà, appunto, come è stato possibile creare un sistema di navigazione 68

77 Figura 4.3.1: FileShare: Area personale semplice ed immediato, volto a riproporre quella naturale esperienza di surfing, tipica dei programmi come esplora risorse di Microsoft Windows. Dal momento che questa funzionalità è alla base dell area personale dell utente, si presterà attenzione in particolar modo sul controllore home.php e sulle azioni in esso definite, specie per quella che chiameremo explore. Una volta inserite le credenziali l utente sarà riportato appunto nella sua area personale (home.php), così come mostrato in Figura Nel seguito però ci riferiremo al caso più generale possibile, ovvero quello in cui si voglia visualizzare il contenuto di una cartella qualsiasi (root o meno). Prima di tutto andranno ricavate alcune informazioni, come l identificativo dell utente e quello della sua cartella di root. $user = $ss->get( user ); $user_obj = new fs_user($user[ id_user ]); $user_root = $user_obj->get_root(); 69

78 A questo punto il controllore verificherà, a partire dall URL richiamato, l assenza di azioni (nel caso in cui fossimo nella cartella root) e setterà (in sessione) il percorso attuale alla cartella di root dell utente. if (empty(carassio::$action)) { $ss->set( path, $user_root); } # no action Viceversa, qualora dovesse trattarsi di una cartella qualsiasi, si procederà prima a verificare la presenza dell azione nell URL e poi i permessi per l accesso a quella cartella (l utente potrebbe infatti intenzionalmente digitare nell URL l identificativo di una cartella, per la quale non ha diritti di accesso): if (carassio::$action == explore ) { $folder = new fs_folder(carassio::$i); if ($folder->check_permissions( search, $user[ id_user ])) { $ss->set( path, carassio::$i); } else { $tp->assign( no_permissions, explore ); } # check_permissions } # explore Come si può vedere, nel caso in cui l utente non abbia i permessi per accedere a quella particolare cartella, viene assegnato al template e quindi alla View della nostra applicazione, una variabile no_permissions che avvisa l utente circa il permesso negato. Nel template dedicato alla segnalazione di errori risulterà dunque: {if $message = $no_permissions} {* Tutti i messaggi di errore *}... {$explore = "Non hai i permessi per accedere a tale cartella"}... 70

79 {* Script per la segnalazione dell errore *} <script> windows.addevent( domready, function() { new MooDialog.Error( {${$message}} ); }); </script> {/if} Qui si possono già riscontrare i vantaggi tipici di un sistema organizzato a template. Difatti, la possibilità di parametrizzare il codice JavaScript, è un esempio di come possano essere costruiti moduli software altamente riutilizzabili. In ogni caso, comunque, che si tratti della root o di una qualsiasi altra cartella, per la quale l utente ha diritti di accesso, bisogna reperire le informazioni relative al contenuto (cartelle e file). Ritorniamo quindi nel controllore home.php e riportiamo le seguenti istruzioni, al fine di ricavare gli identificativi degli oggetti contenuti: $path = new fs_folder($ss->get( path )); $folders_inside = $path->search( folders ); $files_inside = $path->search( files ); A questo punto non ci resta che restituire al template tutto l occorrente per costruire il nostro file browser:... $tp->assign( folders_inside, $folders_inside); $tp->assign( files_inside, $files_inside);... $tp->display( home.tpl ); Ogni componente della pagina è infine costruita a partire da molteplici template, alcuni dei quali richiamati persino più volte. È per esempio questo il caso degli elementi contenuti (cartelle e file), per i quali è stato previsto un unico template, chiamato appunto 71

80 element.tpl, che si adatta opportunamente al contenuto delle variabili $folders_inside e $files_inside: <div id="browser_content">... {foreach $folders_inside as $f} {include file="explorer/element.tpl" type="folder" id=$f.id_folder name=$f. folder} {/foreach} {foreach $files_inside as $f} {include file="explorer/element.tpl" type="file" id=$f.id_file name=$f.file} {/foreach}... </div> Il template viene così compilato dal motore Smarty, e restituito al controllore, che provvederà a fornire all utente la pagina HTML appena creata. La soluzione proposta, sebbene preveda il ricarico della pagina (assenza di Ajax), è stata vista come la più semplice ed immediata, anche dal punto di vista dell utente. Difatti, associare un URL ad ogni cartella, può essere vantaggioso soprattutto in termini di bookmarking, che invece non è previsto per le cosiddette soluzioni SPI (Single Page Interface) Modifica dei permessi di accesso per una cartella Questa funzionalità permette ad utente amministratore (business operator) di assegnare dei permessi di accesso per una determinata cartella. Per questo scopo, si dovranno specificare i gruppi che andranno a condividere tale cartella, la tipologia del permesso (intermediate o limited) ed eventuali limiti temporali entro i quali la cartella deve essere condivisa. 72

81 Facendo riferimento al controllore folder.php, vedremo come si è utilizzato il modulo di Carassio per la gestione dei form e come questo abbia semplificato il processo di acquisizione dati da parte dell utente. Prima di tutto, si è provveduto a specificare all interno del controllore la struttura del form, associando ad ogni sua componente un identificativo e una tipologia. Tale struttura è stata dunque allocata e inizializzata mediante un oggetto form, per il quale si è specificato l URL (e quindi la carassio action) del controllore addetto al reperimento dati. // Definizione della struttura del form $edit_permissions_setup = array( id groups => hidden, => text, permissions => radio_group, from to => datepicker, => datepicker ); // Valori di default per i componenti del form $edit_permissions_before = array( permissions => L ); // Allocazione e inizializzazione del form $edit_permissions = new carassio_form( edit_permissions ); $edit_permissions->init($edit_permissions_setup, $edit_permissions_before); // Corrispondenza tra i valori e le label del radio $map_kv = array( L => Limitato, I => Intermedio ); $edit_permissions->element( permissions )->property( mapping, $map_kv); // Assegnazione dell action al form 73

82 $edit_permissions->property( action, carassio::action_evaluate( folder, edit_permissions )); A questo punto, lo sviluppatore della veste grafica, non si dovrà cimentare nell implementazione di dettaglio per il form, ma avrà bisogno soltanto di conoscerne la struttura. Nel template riservato quindi all acquisizione dei dati per la modifica dei permessi, saranno utilizzati i moduli previsti da Carassio per la presentazione dei form: <div id="edit_permissions"> {include file="form/open.tpl" k=edit_permissions} <div> {include file="form/element.tpl" k=groups d=label label=$label_groups class= label_functions}<br/> {include file="form/element.tpl" k=groups} </div> <div> {include file="form/element.tpl" k=permissions d=label label=$label_permissions class=label_functions}<br/> {include file="form/element.tpl" k=permissions} </div> <div> {include file="form/element.tpl" k=from d=label label=$label_from} {include file="form/element.tpl" k=from} </div> <div> {include file="form/element.tpl" k=to d=label label=$label_to} {include file="form/element.tpl" k=to} </div> <div> {include file="form/element.tpl" k=form_submit label="salva" class="button"} </div> {include file="form/close.tpl" k=edit_permissions} </div> 74

83 Naturalmente questo discorso non vincola il designer ad utilizzare necessariamente questi componenti. Sarà anzi libero di poter definire un override per i template appena visti, adattando le proprie esigenze a questo semplice, ma potente meccanismo. Infine, una volta inviato il form, si dovrà provvedere al reperimento dei dati, anch esso a carico del controllore folder.php: if (carassio::$action == edit_permissions ) { if ($after = $edit_permissions->after()) { $folder = new fs_folder($after[ id ]); if ($folder->permissions( edit, $user[ id_user ], $after[ groups ], $after[ permissions ], $after[ from ], $after[ to ])) {... } else { $ss->set( no_permissions, edit_permissions ); } # permissions } # form after } # edit_permissions Tramite la seconda riga è verificata l effettiva ricezione dei dati (compresa la loro correttezza) e costruito l oggetto contenente i campi del form, mediante cui è possibile richiamare la funzionalità, prevista dal modello, per la modifica dei permessi Upload di uno o più file L upload dei file permette all utente il caricamento di file nel sistema. Questa funzionalità vede coinvolti il controllore file.php, che intercetta l azione eseguita dall utente, il modello per le cartelle folder.class.php, che si incarica di verificare i permessi per eseguire l upload nella cartella corrente, e il modello file.class.php che permette la vera e propria memorizzazione. 75

84 Il controllore verifica quindi la presenza dell azione upload nell URL, dopodiché tramite il modello folder.class.php accerta che l utente abbia i permessi per poter caricare nella cartella attuale: if (carassio::$action == upload ) { $cartella = new fs_folder($path); if ($cartella->check_permissions( upload, $user[ id_user ])) {... } else { $ss->set( no_permissions, true); } # permissions } # upload Ci si potrebbe chiedere perché, nel caso in cui non si abbiano i permessi, si debba utilizzare la sessione e non assegnare direttamente una variabile al template (come nel 4.3.1). Questa scelta è fatta perché attualmente stiamo rivolgendo la nostra attenzione a file.php, che alla fine del suo script non restituisce alcuna pagina HTML, ma bensì fa un redirect al controller home.php. È quest ultimo che assegna la variabile al template necessaria alla segnalazione: // Error Handling if ($ss->get( no_permissions )) { $tp->assign( no_permissions, $ss->get( no_permissions )); $ss->set( no_permissions, false); } Nel caso invece in cui i permessi dell utente siano validi, allora il controllore file.php, per il tramite dei modelli, trasferirà i file dalla cartella temporanea a quella di destinazione del server e memorizzerà le informazioni associate nel database. foreach ($filespath as $fp) { // Move current file from writable folder to store folder 76

85 $info = fs_store::store($fp, md5_file($fp), fs_folder::path_string($path, $up_to) ); if ($info) { // Create data structure of files $files[] = array( file storage => $table[$fp], => $info[ storage ], size_byte => $info[ size_byte ] ); } # info } # filespath // Insert file s info into database $id_files = $file->upload($user[ id_user ], $path, $files); Il metodo store è stato implementato in vista del cambiamento, prevedendo in un prossimo futuro una memorizzazione dei file in cloud computing. /** * Moves a file to a destination folder * string Temporary path of file string New filename string Destination path string Store engine (local cloud) mixed */ public static function store($filepath, $filename, $destination =, $case = STORE_ENGINE) { switch ($case) { case local : break; case cloud : 77

86 # Work in progress break; } # case return $info; } # store upload invece è un metodo pubblico della classe fs_file che permette di memorizzare le informazioni dei file caricati nel database e di registrare l evento per l area di notifica. /** * Upload one o more files * * <code> * $f->upload(1, 2, array(array( file => document.pdf, storage => C:\file.pdf, size_byte => 123 ))); * </code> * integer Id of user integer Id of folder that contains the files array Files as array of arrays array */ public function upload($id_user, $id_folder, $files) { foreach ($files as $k => $f) { $id_file[$k][ id_file ] = $this->db->pk_insert( files, array( id_user => $id_user, id_folder => $id_folder, file storage => $f[ file ], => $f[ storage ], size_byte => $f[ size_byte ] )); if ($id_file[$k]) fs_notify::event_log( nuovo, $id_user, $id_file[$k][ id_file ], files, $id_folder); 78

87 } # files return $id_file; } # upload 4.4 Testing Il testing è una fase anch essa parte del ciclo di vita del software ed è volta ad individuare errori e malfunzionamenti alla base dell applicazione, affinché questi non si presentino dopo il rilascio del software. Malgrado il nobile scopo che si prefigge, bisogna dire che nella realtà non è possibile ridurre a zero la probabilità di incappare in detti malfunzionamenti. Questo perché le combinazioni dei valori di input validi sono così numerose da non poter essere riprodotte in un tempo ragionevole. Tuttavia è possibile rendere tale probabilità abbastanza limitata da essere accettabile per l utente. Nel caso di FileShare si è provveduto alla progettazione e realizzazione di una suite test per ogni classe del modello. Tale obbiettivo è stato raggiunto mediante l impiego di PHPUnit, un framework per il testing d unità, nato proprio per le applicazioni scritte in PHP. Il principio di funzionamento alla base di PHPUnit è piuttosto semplice. Bisogna scrivere un test case per la valutazione di un modulo, ad esempio per il metodo di una classe, e verificare che questo, una volta eseguito, produca un output corrispondente al valore atteso. Nel caso in cui l output sia proprio il valore atteso, allora non verranno riscontrati problemi; altrimenti, PHPUnit fornirà le indicazioni sull errore riscontrato. In PHPUnit vi sono molte funzioni per il confronto dell output con il valore atteso. Esse vanno sotto il nome di asserzioni. Negli esempi che seguiranno faremo riferimento in particolar modo ad asserequals, che confronta l output del metodo testato con quello fornito come parametro di ingresso, as- 79

88 serttrue e assertfalse che verificano rispettivamente che l output del metodo sia TRUE oppure FALSE Test per il download di un file Il test seguente ha lo scopo di controllare il corretto funzionamento per il download di un file. Si valutano nello specifico due casi: il primo si riferisce al quello in cui l utente prova ad effettuare il download di un file scaduto; il secondo a quello di un file valido. Secondo PHPUnit, per scrivere una suite di test bisogna creare una nuova classe con lo stesso nome di quella da testare, seguito da Test e che estenda la classe principale del framework PHPUnit_Framework_TestCase. Come abbiamo avuto modo di vedere durante l analisi del modello, la classe incaricata di gestire il download corrisponde a fs_file. Per cui la classe di test sarà: class fs_filetest extends PHPUnit_Framework_TestCase { protected $file; } # filetest dove $file è un istanza della classe da testare. Il primo test case prende in considerazione il download di un file con ID 27, per il quale è definita una data di scadenza inferiore a quella in cui il test è stato effettuato. L output atteso doveva quindi essere FALSE, dal momento che il sistema non consente di scaricare file scaduti. Per questo motivo l asserzione utilizzata è stata assertfalse. public function testdownloadexpired() { $this->file = new fs_file(27); } # testdownloadexpired 80

89 Figura 4.4.1: Esecuzione test di unità per la classe fs_file Il secondo test case si riferisce, invece, al caso in cui un utente prova a scaricare un file (con ID 34) non ancora scaduto. Ci aspettiamo dunque che l output sia TRUE, dal momento che i file non ancora scaduti devono poter essere scaricati (da un utente che ne abbia il permesso). L asserzione utilizzata sarà pertanto asserttrue. public function testdownloadnotexpired() { $this->file = new fs_file(34); } # testdownloadnotexpired Test per la rinomina di una cartella Il test case seguente si pone l obiettivo di verificare la correttezza della funzionalità di rinomina per una cartella. Si procede dunque in due passi: 1. Si tenta di rinominare una cartella con un nome valido; 2. Si tenta di rinominare una cartella con un nome già utilizzato da un altra cartella presente nella stessa directory. Naturalmente ora porgiamo l attenzione sulla classe fs_folder, per cui creiamo una nuova classe di testing, avente come variabile membro un istanza di fs_folder: class fs_foldertest extends PHPUnit_Framework_TestCase { protected $folder;... 81

90 ... } # foldertest Riferendoci al caso in cui utente abbia i permessi per la rinomina su una cartella con ID 19, creiamo un test case che in due step: 1. associ a tale cartella il nome valido NEW NAME ; 2. associ a tale cartella il nome EXISTING NAME, già utilizzato da un altra cartella nella stessa directory. Nel primo caso la funzione di rinomina deve andare a buon fine, quindi il risultato dovrà essere confrontato mediante asserttrue. Nel secondo caso, invece, la funzione deve fallire e pertanto il risultato dovrà essere confrontato con assertfalse. public function testrename() { $this->folder = new fs_folder(19); $this->asserttrue($this->folder->rename( NEW NAME )); // EXISTING NAME folder already exists $this->assertfalse($this->folder->rename( EXISTING NAME )); } # testrename Test per la creazione di un gruppo I seguenti test case hanno come scopo la verifica delle funzionalità per la creazione dei gruppi. Vengono qui analizzati tre casi. Il primo si riferisce a quello in cui un utente senza autorizzazioni, avente ID pari a 1, prova a creare un gruppo chiamato Test Group, formato dagli utenti Partner1 e Partner8. Non disponendo dei permessi necessari chiaramente la funzione di creazione deve fallire e quindi l asserzione da utilizzare sarà assertfalse. Il secondo fa riferimento ad un utente, stavolta con privilegi (avente ID 24), che cerca di creare un gruppo che però già esiste. Anche in questo caso la creazione non dovrà andare a buon fine e quindi si utilizzerà assertfalse. 82

91 Infine, il terzo caso è quello invece di una creazione andata a buon fine, la cui funzione restituisce una stringa contenente l identificativo del gruppo appena creato. Verrà pertanto utilizzata l asserzione assertinternaltype, che permette di verificare che l output restituito sia effettivamente un dato di tipo stringa. class fs_grouptest extends PHPUnit_Framework_TestCase { protected $group; // Un utente senza privilegi tenta di creare un gruppo public function testnotbocreate() { $this->group = new fs_group(); $this->assertfalse($this->group->create(1, Test Group, Partner1, Partner8 )) ; } # testnotbocreate // Un utente con privilegi tenta di creare un gruppo già esistente public function testcreateexistinggroup() { $this->group = new fs_group(); $this->assertfalse($this->group->create(24, Ingegneri, Michele, Vincenzo )); } # testcreateexistinggroup // Un utente con privilegi crea un gruppo che non esiste ancora public function testcreatevalidgroup() { $this->group = new fs_group(); $this->assertinternaltype( string, $this->group->create(24, Test Group, Partner1 )); } # testcreatevalidgroup } # grouptest 83

92 Figura 4.5.1: Firebug: Analisi HTML 4.5 Collaudo per il livello presentazione Fin ora ci siamo concentrati sull aspetto relegato per lo più alla logica di business dell applicazione, eppure una notevole importanza è assunta anche dal livello inerente la presentazione. Per FileShare ci siamo affidati ad uno strumento davvero molto versatile, che nell ambito del web design ha sicuramente grande successo. Il suo nome è Firebug, nasce come componente aggiuntivo per il browser Firefox e permette di monitorare tutti gli aspetti tipici della user interface. La prima caratteristica di questo plugin è la possibilità di visualizzare in forma gerarchica l intera struttura della pagina HTML. In questo modo risultano facilmente identificabili eventuali errori e imprecisioni nel markup. Come si vede dalla Figura 4.5.1, eventuali modifiche a run-time dell HTML originale vengono notificate tramite un evidenziatore giallo. È inoltre possibile cambiare al volo il codice HTML di una pagina, senza il bisogno di andare a modificare (e quindi uploadare nuovamente) il corrispettivo template sul server. Altra possibilità prevista da Firebug è l analisi dei fogli di stile, che permette di vedere 84

93 Figura 4.5.2: Firebug: monitoring delle richieste HTTP la gerarchia delle regole CSS applicate ad un elemento. Questa permette di visualizzare eventuali regole overridate da regole più specifiche (grazie alla riga nera sopra il testo) e di sapere in quale file e in quale riga è definito questo comportamento. Come per l HTML, è inoltre possibile creare, modificare o disattivare al volo alcune regole, così da avere una sorta di anteprima di come verrà visualizzato un certo elemento, senza dover modificare alcun file. Caratteristiche di rilievo sono poi la possibilità di analizzare il DOM (Document Object Model) e di monitorare le richieste HTTP. Quest ultima in particolare, permette di tracciare qualsiasi richiesta effettuata, con possibilità di filtrare sul tipo di dato richiesto (HTML, CSS, JS, XHR le famose richieste AJAX -, Images e Flash). Per ciascuna richiesta effettuata è possibile analizzare il tempo richiesto, eventuali codici HTTP riportati, le intestazioni HTTP e i contenuti sia della richiesta che della risposta. Questo strumento è fondamentale quando si sviluppano applicazioni web che presentano notevoli richieste asincrone da effettuarsi durante il ciclo di vita della pagina. Grazie a Firebug è possibile in maniera rapida e indolore analizzarle per trovare eventuali errori che, in mancanza di uno strumento tale, necessiterebbero di modifiche al codice (per esempio i classici alert) per essere scovati. Infine, è da citare il famoso JavaScript debugger, che permette di individuare facilmente errori di scripting all interno della pagina. 85

94 Conclusioni e sviluppi futuri Il lavoro svolto presso la Naxe s.r.l., ideatrice del framework Carassio e sede delle attività di tirocinio, è stato un ottimo incipit per la stesura di questa tesi. Al di là però degli scopi puramente didattici, si è avuta la possibilità di essere coinvolti in un esperienza tanto interessante quanto formativa. Su un fronte, infatti, partendo dall analisi dei requisti, passando per la fase di progettazione, di sviluppo, fino ad arrivare a quella di testing, si è avuto modo di approfondire tutte le tappe previste dal ciclo di vita del software, realizzando così un prodotto che possiamo ritenere completo e che ben si inserisce in un ipotetico scenario aziendale. Su un altro, invece, si è diventati partecipi del progetto Carassio, che seppur ancora giovane, ha dimostrato di possedere, durante la realizzazione di FileShare, tutte le caratteristiche e potenzialità alla base di un buon framework per lo sviluppo rapido di applicazioni web. Certo, un confronto con le soluzioni proposte dalle aziende leader nel settore sarebbe impari, dal momento che questa nasce in un contesto aziendale alquanto ristretto. Tuttavia, sono senz altro poste le fondamenta per un framework di tutto rispetto, il cui obiettivo non è tanto quello di essere un diretto competitor per i prodotti attualmente esistenti, piuttosto quello di fornire un semplice strumento per supportare l attività lavorativa nell ambito del web development. Riguardo gli sviluppi futuri, ci sono diverse considerazioni da fare. Per quanto concerne il framework, in primo luogo, si dovrebbe mettere a disposizione degli sviluppatori una più ampia e consultabile documentazione, soprattutto per favorire la condivisione e il confronto con un pubblico più vasto. In secondo luogo bisognerebbe 86

95 adottare i meccanismi tipici del web 2.0, integrando ad esempio un maggior numero di moduli che sfruttino la tecnologia Ajax per effettuare richieste asincrone verso il server. Lo stesso, naturalmente, vale per l applicazione FileShare, per la quale molte delle funzionalità implementate hanno bisogno del tanto discusso ricarico della pagina; un meccanismo di comunicazione asincrona tra client e server, invece, renderebbe l applicazione molto più interattiva e competitiva sul mercato. Infine, un altra idea per il futuro, sempre in riferimento all applicazione, è stata già affrontato nel capitolo relativo allo sviluppo e prevede la possibilità di delegare la memorizzazione e gestione dei file al cloud computing, garantendo così, per il software in questione, l indipendenza dalla locazione fisica dei file. 87

96 Ringraziamenti Quando ho cominciato l iter universitario in questa facoltà, mille erano i dubbi che mi ponevo a riguardo. Incoraggiato dall entusiasmo di mio padre, ho continuato a seguire questa direzione, malgrado le forti perplessità. Nel tempo mi sono ritrovato così tanti ostacoli di fronte, da giustificare le mie paure con una scelta che in realtà non credevo mi appartenesse. Oggi, dopo aver finalmente imparato ad affrontare meglio le difficoltà, posso ritenermi più che soddisfatto per il percorso intrapreso. Mi sento pertanto in dovere di ringraziare tutte le persone che, proprio come mio padre, hanno creduto in me e fatto sì che questo piccolo sogno si realizzasse. Naturalmente in questo viaggio trovano spazio molteplici figure, ognuna delle quali ha contribuito in maniera differente. Ringraziare tutti può essere un ardua impresa, per cui focalizzerò l attenzione su quei pochi degni di nota, sperando che gli altri non me ne vogliano. Primo della lista, il mio relatore, il Prof. Marcello Cinque, che ringrazio dal più profondo del cuore per avermi concesso piena disponibilità, durante entrambi i periodi di tirocinio e tesi. La sua professionalità e simpatia hanno sicuramente permesso una più agevole e serena stesura. Gliene sono pertanto grato. Riservo un grazie anche per gli affabili ingegneri della Naxe, Fabio e Dario De Paolis, per avermi donato un ricco bagaglio culturale. Ringrazio in particolar modo Fabio, per i preziosi consigli e l infinita pazienza mostratami tutte le volte in cui ho, letteralmente, bussato alla sua porta. Ovviamente ringrazio con tutto l affetto possibile la mia famiglia, per essermi stata ac- 88

97 canto in ogni occasione e per avermi garantito una più che adeguata spensieratezza e sicurezza economica. Ringrazio mio padre, per l incoraggiamento scaturito dal suo orgoglio per me; mia madre, per aver sopportato le burle infantili di un ragazzo prossimo agli esami; e infine le mie sorelle, per il brio delle nostre liti. Un immenso e speciale ringraziamento va alla mia dolce Roberta, che durante questi anni ha provveduto ad essermi vicino in ogni modo possibile: ascoltando i miei discorsi da appassionato (talvolta fino allo sfinimento), dandomi conforto nei periodi di maggiore stress, ma soprattutto concedendomi il privilegio del suo inestimabile amore, di cui non potrei fare proprio a meno. Ringrazio inoltre la sua famiglia, per la gioia e l entusiasmo con cui è stata appresa la notizia del traguardo. Di sicuro non posso dimenticare tutti i miei colleghi universitari con i quali ho avuto l opportunità di studiare e confrontarmi. Ringrazio dunque ognuno di essi, soprattutto il carissimo Vincenzo Asciolla, con il quale è nata un ottima intesa e un amicizia, che mi auguro di ritrovare anche negli anni a venire. Concludo infine, concedendo un piccolo e modesto ringraziamento anche a me stesso, per l impegno e la tenacia con cui ho perseguito quest obiettivo. Grazie di cuore a tutti voi, 89

Analisi e utilizzo di un framework per lo sviluppo di applicazioni web

Analisi e utilizzo di un framework per lo sviluppo di applicazioni web tesi di laurea Anno Accademico 2011/2012 relatore Ch.mo prof. Marcello Cinque correlatore Ing. Fabio De Paolis candidato Michele Basile Matr. 534/3239 Web Development Frameworks Nella realizzazione di

Dettagli

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni)

Progettazione di Sistemi Interattivi. Gli strati e la rete. Struttura e supporti all implementazione di applicazioni in rete (cenni) Progettazione di Sistemi Interattivi Struttura e supporti all implementazione di applicazioni in rete (cenni) Docente: Daniela Fogli Gli strati e la rete Stratificazione da un altro punto di vista: i calcolatori

Dettagli

Realizzazione di uno strumento web-based per la simulazione remota di reti di sensori senza filo

Realizzazione di uno strumento web-based per la simulazione remota di reti di sensori senza filo tesi di laurea Realizzazione di uno strumento web-based per la simulazione remota di reti di sensori senza filo Anno Accademico 2009/2010 relatore Ch.mo prof. Marcello Cinque correlatore Ing. Catello di

Dettagli

Breve introduzione allo sviluppo WEB. a cura di Ciro Attanasio - ciro.attanasio@email.cz

Breve introduzione allo sviluppo WEB. a cura di Ciro Attanasio - ciro.attanasio@email.cz Breve introduzione allo sviluppo WEB a cura di Ciro Attanasio - ciro.attanasio@email.cz Partiamo (1 di 1) Come funziona il WEB e quali tecnologie lo compongono Cos è un Client (1 di 2) Un client, in informatica,

Dettagli

Candidato: Luca Russo Docente: Prof. Raffaele Montella. 27 Marzo 2013

Candidato: Luca Russo Docente: Prof. Raffaele Montella. 27 Marzo 2013 e di e di Candidato: Luca Russo Docente: Corso di laurea in Informatica Applicata Facoltá di Scienze e Tecnologie Programmazione su Reti 27 Marzo 2013 Traccia d esame Sviluppare multitier con disaccoppiamento

Dettagli

SWIM v2 Design Document

SWIM v2 Design Document PROGETTO DI INGEGNERIA DEL SOFTWARE 2 SWIM v2 DD Design Document Matteo Danelli Daniel Cantoni 22 Dicembre 2012 1 Indice Progettazione concettuale Modello ER Entità e relazioni nel dettaglio User Feedback

Dettagli

venerdì 31 gennaio 2014 Programmazione Web

venerdì 31 gennaio 2014 Programmazione Web Programmazione Web WWW: storia Il World Wide Web (WWW) nasce tra il 1989 e il 1991 come progetto del CERN di Ginevra affidato a un gruppo di ricercatori informatici tra i quali Tim Berners- Lee e Robert

Dettagli

Realizzazione di un prototipo di un software web based per la gestione di un inventario comunale

Realizzazione di un prototipo di un software web based per la gestione di un inventario comunale tesi di laurea inventario comunale Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana correlatore Ch.mo Ing. Luigi Pontillo candidato Michele Vitelli Matr. 534 2170 Redazione dell Inventario

Dettagli

sito web sito Internet

sito web sito Internet Siti Web Cos è un sito web Un sito web o sito Internet è un insieme di pagine web correlate, ovvero una struttura ipertestuale di documenti che risiede, tramite hosting, su un web server e accessibile

Dettagli

CMS (Content Management System) della categoria Open Source

CMS (Content Management System) della categoria Open Source Una panoramica sui CMS (Content Management System) CMS (Content Management System) della categoria Open Source Per la piattaforma PHP/MYSQL e considerata l esigenza sempre più ricorrente di realizzare

Dettagli

Componenti Web: client-side e server-side

Componenti Web: client-side e server-side Componenti Web: client-side e server-side side Attività di applicazioni web Applicazioni web: un insieme di componenti che interagiscono attraverso una rete (geografica) Sono applicazioni distribuite logicamente

Dettagli

Progettazione: Tecnologie e ambienti di sviluppo

Progettazione: Tecnologie e ambienti di sviluppo Contratto per l acquisizione di servizi di Assistenza specialistica per la gestione e l evoluzione del patrimonio software della Regione Basilicata. Repertorio n. 11016 del 25/09/2009 Progettazione: Tecnologie

Dettagli

Corso di Web Programming

Corso di Web Programming Corso di Web Programming 1. Introduzione a Internet e al WWW Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di Laurea in Informatica

Dettagli

Tratte da (18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET)

Tratte da (18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET) Tratte da (18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET) Ipotesi di partenza: concetti di base del networking Le ipotesi di partenza indispensabili per poter parlare di tecniche di accesso

Dettagli

Introduzione al Model-View-Controller (MVC)

Introduzione al Model-View-Controller (MVC) Introduzione al Model-View-Controller (MVC) Maurizio Cozzetto 9 Luglio 2009 Indice 1 Model-View-Controller 1 1.1 Definizione.................................................. 1 1.2 Soluzione...................................................

Dettagli

Novità di Visual Studio 2008

Novità di Visual Studio 2008 Guida al prodotto Novità di Visual Studio 2008 Introduzione al sistema di sviluppo di Visual Studio Visual Studio Team System 2008 Visual Studio Team System 2008 Team Foundation Server Visual Studio Team

Dettagli

Architetture Web. parte 1. Programmazione in Ambienti Distribuiti A.A. 2003-04

Architetture Web. parte 1. Programmazione in Ambienti Distribuiti A.A. 2003-04 Architetture Web parte 1 Programmazione in Ambienti Distribuiti A.A. 2003-04 Architetture Web (1) Modello a tre livelli in cui le interazioni tra livello presentazione e livello applicazione sono mediate

Dettagli

Concetti base. Impianti Informatici. Web application

Concetti base. Impianti Informatici. Web application Concetti base Web application La diffusione del World Wide Web 2 Supporto ai ricercatori Organizzazione documentazione Condivisione informazioni Scambio di informazioni di qualsiasi natura Chat Forum Intranet

Dettagli

Esercitazione 8. Basi di dati e web

Esercitazione 8. Basi di dati e web Esercitazione 8 Basi di dati e web Rev. 1 Basi di dati - prof. Silvio Salza - a.a. 2014-2015 E8-1 Basi di dati e web Una modalità tipica di accesso alle basi di dati è tramite interfacce web Esiste una

Dettagli

SCUOLA POLITECNICA. 1 semestre Facoltativa Voto in trentesimi

SCUOLA POLITECNICA. 1 semestre Facoltativa Voto in trentesimi SCUOLA ANNO ACCADEMICO OFFERTA 2015/2016 ANNO ACCADEMICO EROGAZIONE 2017/2018 CORSO DILAUREA INSEGNAMENTO TIPO DI ATTIVITA' AMBITO CODICE INSEGNAMENTO 18033 SETTORI SCIENTIFICO-DISCIPLINARI SCUOLA POLITECNICA

Dettagli

Corso di Web programming Modulo T3 A2 - Web server

Corso di Web programming Modulo T3 A2 - Web server Corso di Web programming Modulo T3 A2 - Web server 1 Prerequisiti Pagine statiche e dinamiche Pagine HTML Server e client Cenni ai database e all SQL 2 1 Introduzione In questa Unità si illustra il concetto

Dettagli

Framework di Middleware. per Architetture Enterprise

Framework di Middleware. per Architetture Enterprise Framework di Middleware per Architetture Enterprise Corso di Ingegneria del Software A.A.2011-2012 Un po di storia 1998: Sun Microsystem comprende l importanza del World Wide Web come possibile interfaccia

Dettagli

WEB TECHNOLOGY. Il web connette. LE persone. E-book n 2 - Copyright Reserved

WEB TECHNOLOGY. Il web connette. LE persone. E-book n 2 - Copyright Reserved WEB TECHNOLOGY Il web connette LE persone Indice «Il Web non si limita a collegare macchine, ma connette delle persone» Il Www, Client e Web Server pagina 3-4 - 5 CMS e template pagina 6-7-8 Tim Berners-Lee

Dettagli

Il Paradigma REST per lo sviluppo di applicazioni Web 2.0

Il Paradigma REST per lo sviluppo di applicazioni Web 2.0 tesi di laurea Anno Accademico 2006/2007 Il Paradigma REST per lo sviluppo di applicazioni Web 2.0 relatore Ch.mo prof. Domenico Cotroneo correlatore Ing. Marcello Cinque candidato Antonio Alonzi Matr.

Dettagli

Protocolli e architetture per WIS

Protocolli e architetture per WIS Protocolli e architetture per WIS Web Information Systems (WIS) Un Web Information System (WIS) usa le tecnologie Web per permettere la fruizione di informazioni e servizi Le architetture moderne dei WIS

Dettagli

Sistemi avanzati di gestione dei Sistemi Informativi

Sistemi avanzati di gestione dei Sistemi Informativi Esperti nella gestione dei sistemi informativi e tecnologie informatiche Sistemi avanzati di gestione dei Sistemi Informativi Docente: Email: Sito: Eduard Roccatello eduard@roccatello.it http://www.roccatello.it/teaching/gsi/

Dettagli

Applicazione: GAS - Gestione AcceSsi

Applicazione: GAS - Gestione AcceSsi Riusabilità del software - Catalogo delle applicazioni Gestione ICT Applicazione: GAS - Gestione AcceSsi Amministrazione: Consiglio Nazionale delle Ricerche (CNR) Responsabile dei sistemi informativi Nome

Dettagli

aggiunge del testo nella parte finale del tag, in questo caso la stringa da controllare.

aggiunge del testo nella parte finale del tag, in questo caso la stringa da controllare. Capitolo 6 jquery Negli ultimi anni è stata rilasciata una mole incalcolabile di framework JavaScript, più o meno completi, realizzati per supportare nel miglior modo possibile lo sviluppatore web aiutandolo

Dettagli

Interoperabilità e cooperazione applicativa tra sistemi informativi

Interoperabilità e cooperazione applicativa tra sistemi informativi Interoperabilità e cooperazione applicativa tra sistemi informativi Michele Ruta Dipartimento di Ingegneria Elettrica e dell Informazione Politecnico di Bari 1di 29 Indice Introduzione ai Port Community

Dettagli

Content Management Systems

Content Management Systems Content Management Systems L o Guido Porruvecchio Tecnologia e Applicazioni della Rete Internet Definizione Un Content Management System (CMS) è letteralmente un sistema per la gestione dei contenuti Definisce

Dettagli

Design Patterns. Sommario. Architettura a 3 Livelli Concetti Generali Presentazione Dominio Sorgente Dati DIB 1. Design Patterns DIB 2

Design Patterns. Sommario. Architettura a 3 Livelli Concetti Generali Presentazione Dominio Sorgente Dati DIB 1. Design Patterns DIB 2 DIB 1 Sommario Architettura a 3 Livelli Concetti Generali Presentazione Dominio Sorgente Dati DIB 2 Architettura a 3 Livelli DIB 3 Architettura a 3 Livelli Presentazione Gestione dell interazione degli

Dettagli

Applicazione: SIPER Servizi In linea per il PERsonale

Applicazione: SIPER Servizi In linea per il PERsonale Riusabilità del software - Catalogo delle applicazioni Gestione Personale Applicazione: SIPER Servizi In linea per il PERsonale Amministrazione: Consiglio Nazionale delle Ricerche (CNR) Responsabile dei

Dettagli

Le scelte tecnologiche di RUP System

Le scelte tecnologiche di RUP System Cremona 22 novembre 2007 Le scelte tecnologiche di System - Metarete Linguaggio di programmazione Linguaggio di programmazione: Java Semplice e robusto Orientato agli oggetti Indipendente dalla piattaforma

Dettagli

Streaming Tool per CoFFEE

Streaming Tool per CoFFEE Streaming Tool per CoFFEE a cura di Gerardo Lombardo CoFFEE Cooperative Face-to-Face Educational Environment Groupware Suite di applicazioni distribuite (in LAN) per il problem solving collaborativo in

Dettagli

UNA RELEASE ROBUSTA E COLLAUDATA IN CONTESTI NAZIONALI ED INTERNAZIONALI EVOLUZIONE DELLA PIATTAFORMA ASSICURATIVA ALL IN ONE

UNA RELEASE ROBUSTA E COLLAUDATA IN CONTESTI NAZIONALI ED INTERNAZIONALI EVOLUZIONE DELLA PIATTAFORMA ASSICURATIVA ALL IN ONE L offerta di Value+, in origine focalizzata sulla gestione dei Rami Vita e dei Fondi Pensione attraverso il sistema invita, diffuso in Italia e all estero, si è arricchita nel corso degli anni estendendosi

Dettagli

ALLEGATO TECNICO SUL MODELLO DI SICUREZZA IN INTERNET IL PRODOTTO VORTAL

ALLEGATO TECNICO SUL MODELLO DI SICUREZZA IN INTERNET IL PRODOTTO VORTAL ALLEGATO TECNICO SUL MODELLO DI SICUREZZA IN INTERNET IL PRODOTTO VORTAL 1 Introduzione Il mondo del Web ha assunto negli ultimi anni una forza dirompente su tutti i fronti della comunicazione e della

Dettagli

CMS (Content Management System) della categoria Open Source

CMS (Content Management System) della categoria Open Source Una panoramica sui CMS (Content Management System) CMS (Content Management System) della categoria Open Source Per la piattaforma PHP/MYSQL e considerata l esigenza sempre più ricorrente di realizzare

Dettagli

Progetto di Applicazioni Software

Progetto di Applicazioni Software Progetto di Applicazioni Software Antonella Poggi Dipartimento di Informatica e Sistemistica Antonio Ruberti SAPIENZA Università di Roma Anno Accademico 2008/2009 Questi lucidi sono stati prodotti sulla

Dettagli

Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione

Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione UNIVERSITA DEGLI STUDI DI FERRARA Corso di Laurea in informatica Anno Accademico 2011-2012 Sviluppo di un applicazione mobile per la gestione degli interventi tecnici tramite geolocalizzazione Relatore:

Dettagli

Architettura SW Definizione e Notazioni

Architettura SW Definizione e Notazioni Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Stili Architetturali E. TINELLI Architettura SW Definizione e Notazioni Definizione ANSI/IEEE Std Std1471-2000

Dettagli

Architetture per le applicazioni web-based. Mario Cannataro

Architetture per le applicazioni web-based. Mario Cannataro Architetture per le applicazioni web-based Mario Cannataro 1 Sommario Internet e le applicazioni web-based Caratteristiche delle applicazioni web-based Soluzioni per l architettura three-tier Livello utente

Dettagli

Reverse Engineering di Rich Internet Applications basate su AJAX

Reverse Engineering di Rich Internet Applications basate su AJAX Facoltà di Ingegneria Corso di Studi in Ingegneria Informatica tesi di laurea Reverse Engineering di Rich Internet Applications basate su AJAX Anno Accademico: 2006/2007 relatore Ch.mo prof. Anna Rita

Dettagli

Progetto di Applicazioni Software

Progetto di Applicazioni Software Progetto di Applicazioni Software Antonella Poggi Dipartimento di Informatica e Sistemistica Antonio Ruberti SAPIENZA Università di Roma Anno Accademico 2010/2011 Questi lucidi sono stati prodotti sulla

Dettagli

18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET

18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET 18. TECNICHE DI ACCESSO AI DATABASE IN AMBIENTE INTERNET Ipotesi di partenza: concetti di base del networking Le ipotesi di partenza indispensabili per poter parlare di tecniche di accesso ai database

Dettagli

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE

PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE PROGRAMMA CORSO Analista Programmatore JAVA - ORACLE 1. JAVA 1.1 Introduzione a Java Introduzione Cosa è Java 1.2 Sintassi e programmazione strutturata variabili e metodi tipi di dati, array operatori

Dettagli

Realizzazione di interazioni sincrone e asincrone tra applicazioni Web 2.0

Realizzazione di interazioni sincrone e asincrone tra applicazioni Web 2.0 tesi di laurea Realizzazione di interazioni sincrone e asincrone tra applicazioni Web 2.0 Anno Accademico 2008/2009 relatore Ch.mo prof. Porfirio Tramontana candidato Marco Coppola Matr. 534/002312 Obbiettivi

Dettagli

Sistemi Informativi e WWW

Sistemi Informativi e WWW Premesse Sistemi Informativi e WWW WWW: introduce un nuovo paradigma di diffusione (per i fornitori) e acquisizione (per gli utilizzatori) delle informazioni, con facilità d uso, flessibilità ed economicità

Dettagli

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A. 2011-2012

Esercitazioni di PROGETTAZIONE DEL SOFTWARE A.A. 2011-2012 Sapienza Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Corso di Laurea in Ingegneria Informatica ed Automatica Corso di Laurea in Ingegneria dei Sistemi Informatici

Dettagli

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali

Considera tutti i requisiti funzionali (use cases) NON deve necessariamente modellare i requisiti non funzionali Corso di Laurea Specialistica in Ingegneria Informatica Corso di Ingegneria del Software A. A. 2008 - Progettazione OO E. TINELLI Punto di Partenza Il modello di analisi E una rappresentazione minima del

Dettagli

Internet e World Wide Web

Internet e World Wide Web Alfonso Miola Internet e World Wide Web Dispensa C-02 Settembre 2005 1 Nota bene Il presente materiale didattico è derivato dalla dispensa prodotta da Luca Cabibbo Dip. Informatica e Automazione Università

Dettagli

Strumenti per lo sviluppo del software

Strumenti per lo sviluppo del software Lo sviluppo del software Strumenti per lo sviluppo del software Lo sviluppo del software è l attività centrale del progetto e ha lo scopo di produrre il codice sorgente che, una volta compilato e messo

Dettagli

Silk Learning Content Management. Collaboration, content, people, innovation.

Silk Learning Content Management. Collaboration, content, people, innovation. Collaboration, content, people, innovation. The Need for a Learning Content Management System In un mercato in continua evoluzione, dominato da un crescente bisogno di efficienza, il capitale intellettuale

Dettagli

Corso di Applicazioni Telematiche

Corso di Applicazioni Telematiche Asynchronous JavaScript Technology and XML: Ajax Corso di Applicazioni Telematiche A.A. 2010-11 Prof. Simon Pietro Romano Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rich Internet

Dettagli

JUG Ancona Italy. Google Web Toolkit. Giovanni Baleani Programmatore Java. Filippetti S.r.l.

JUG Ancona Italy. Google Web Toolkit. Giovanni Baleani Programmatore Java. Filippetti S.r.l. JUG Ancona Italy Google Web Toolkit Giovanni Baleani Programmatore Java Filippetti S.r.l. AJAX e GWT - AJAX: Tecnologia emergente, tra le prime applicazione ajax ci sono proprio gmail e google calendar.

Dettagli

Una soluzione WEB-GIS per la pubblicazione di dati statistici della Regione Sardegna

Una soluzione WEB-GIS per la pubblicazione di dati statistici della Regione Sardegna Una soluzione WEB-GIS per la pubblicazione di dati statistici della Regione Sardegna Sergio Loddo, Luca Devola GFOSS - Cagliari, 27 febbraio 2009 Indice 1. Presentazione 2. Progetto 3. Architettura, metodologia

Dettagli

Corso Android Corso Online Programmatore Android

Corso Android Corso Online Programmatore Android Corso Android Corso Online Programmatore Android Accademia Domani Via Pietro Blaserna, 101-00146 ROMA (RM) info@accademiadomani.it Programma Generale del Corso Modulo Uno - Programmazione J2ee 1) Programmazione

Dettagli

Applicazione: OIL Online Interactive helpdesk

Applicazione: OIL Online Interactive helpdesk Riusabilità del software - Catalogo delle applicazioni: Gestione ICT Applicazione: OIL Online Interactive helpdesk Amministrazione: Consiglio Nazionale delle Ricerche (CNR) Responsabile dei sistemi informativi

Dettagli

Componenti di una applicazione. Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali:

Componenti di una applicazione. Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali: Componenti di una applicazione Un programma applicativo è strutturato come un insieme organizzato di tre componenti funzionali: Un sottosistema di interfaccia con l utente (IU, user interface o anche presentation

Dettagli

CONTENT MANAGMENT SYSTEMS

CONTENT MANAGMENT SYSTEMS CONTENT MANAGMENT SYSTEMS ESTRATTO DA: Ileana D'Incecco, Progettare la comunicazione web per organizzazioni non-profit con strumenti open source: ideazione e realizzazione del sito web della Casa delle

Dettagli

Corso Android Corso Online Sviluppo su Cellulari con Android

Corso Android Corso Online Sviluppo su Cellulari con Android Corso Android Corso Online Sviluppo su Cellulari con Android Accademia Futuro info@accademiafuturo.it Programma Generale del Corso di Sviluppo su Cellulari con Android Programma Base Modulo Uno - Programmazione

Dettagli

Software utilizzato per le esercitazioni

Software utilizzato per le esercitazioni SW Software utilizzato per le esercitazioni Software utilizzato per le esercitazioni Editor testuale per pagine html, xhtml, css Browser Web server Motore Php Motore JSP JDK JSDK Ambiente di sviluppo Java

Dettagli

corrispondente server Web (l applicazione server) viene inviata una richiesta, alla quale il server normalmente risponde inviando la pagina HTML che

corrispondente server Web (l applicazione server) viene inviata una richiesta, alla quale il server normalmente risponde inviando la pagina HTML che Prefazione In questo volume completiamo l esplorazione del linguaggio Java che abbiamo iniziato in Java Fondamenti di programmazione. I due testi fanno parte di un percorso didattico unitario, come testimoniano

Dettagli

UNIVERSITÀ DEGLI STUDI DI NAPOLI PARTHENOPE FACOLTÀ DI SCIENZE E TECNOLOGIE Corso di Laurea In Informatica

UNIVERSITÀ DEGLI STUDI DI NAPOLI PARTHENOPE FACOLTÀ DI SCIENZE E TECNOLOGIE Corso di Laurea In Informatica UNIVERSITÀ DEGLI STUDI DI NAPOLI PARTHENOPE FACOLTÀ DI SCIENZE E TECNOLOGIE Corso di Laurea In Informatica Sviluppo di un'applicazione Android per i servizi studenti Relatore Chiar.mo Prof. Raffaele MONTELLA

Dettagli

Alcune semplici definizioni

Alcune semplici definizioni Alcune semplici definizioni Un CMS (Content management system), in italiano Sistema di gestione dei contenuti è uno strumento software che si installa generalmente su un server web, il cui compito è facilitare

Dettagli

Informatica Documentale

Informatica Documentale Informatica Documentale Ivan Scagnetto (scagnett@dimi.uniud.it) Stanza 3, Nodo Sud Dipartimento di Matematica e Informatica Via delle Scienze, n. 206 33100 Udine Tel. 0432 558451 Ricevimento: giovedì,

Dettagli

2G, l evoluzione della piattaforma Team nel Web 2.0 Roma, 7 dicembre 2011. Andrea Carnevali R&D Director GESINF S.r.l.

2G, l evoluzione della piattaforma Team nel Web 2.0 Roma, 7 dicembre 2011. Andrea Carnevali R&D Director GESINF S.r.l. 2G, l evoluzione della piattaforma Team nel Web 2.0 Roma, 7 dicembre 2011 Andrea Carnevali R&D Director GESINF S.r.l. Il progetto 2G è il nome della piattaforma che consentirà l evoluzione tecnologica

Dettagli

Architetture Software

Architetture Software Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica Ingegneria del Software Architetture Software Giulio Destri Ing. del Sw: Architettura - 1 Scopo del modulo

Dettagli

N.E.A.T. ( Neutral Environment Application Tools )

N.E.A.T. ( Neutral Environment Application Tools ) N.E.A.T. ( Neutral Environment Application Tools ) SCOPO : Ambiente per lo sviluppo di applicazioni WEB multimediali basate su Data Base Relazionale e strutturate secondo il modello a tre livelli: Presentazione

Dettagli

DEL SENDER GUIDA INTEGRATIVA ALL INSTALLAZIONE. Versione N.1.0. Data 11/05/2009. Sender - Guida integrativa alla installazione

DEL SENDER GUIDA INTEGRATIVA ALL INSTALLAZIONE. Versione N.1.0. Data 11/05/2009. Sender - Guida integrativa alla installazione GUIDA INTEGRATIVA ALL INSTALLAZIONE DEL SENDER Versione N.1.0 Data 11/05/2009 Versione 1.0, Data emissione 11/05/2009 Pag. 1 di 15 Revisione Capitolo Modifica Data 1.0 Prima Emissione 11/05/2009 Versione

Dettagli

Lezione di Basi di Dati 1 18/11/2008 - TECNOLOGIE PER IL WEB: CGI - AJAX SERVLETS & JSP

Lezione di Basi di Dati 1 18/11/2008 - TECNOLOGIE PER IL WEB: CGI - AJAX SERVLETS & JSP EVOLUZIONE DEL WEB: PAGINE STATICHE vs PAGINE DINAMICHE Il Web è nato a supporto dei fisici, perché potessero scambiare tra loro le informazioni inerenti le loro sperimentazioni. L HTTP è nato inizialmente

Dettagli

La realizzazione di WebGis con strumenti "Open Source".

La realizzazione di WebGis con strumenti Open Source. La realizzazione di WebGis con strumenti "Open Source". Esempi di impiego di strumenti a sorgente aperto per la realizzazione di un Gis con interfaccia Web Cos'è un Web Gis? Da wikipedia: Sono detti WebGIS

Dettagli

RenderCAD S.r.l. Formazione

RenderCAD S.r.l. Formazione Corso Descrizione La durata di questo corso è complessivamente di ore 150 di cui 85 ore di teoria, 35 ore di pratica e 30 ore di stage in azienda. Nel nostro territorio esiste una richiesta di tale figura,

Dettagli

ERP Commercio e Servizi

ERP Commercio e Servizi ERP Commercio e Servizi Sistema informativo: una scelta strategica In questi ultimi anni hanno avuto grande affermazione nel mercato mondiale i cosiddetti sistemi software ERP. Tali sistemi sono in grado

Dettagli

Configuratore di Prodotto Diapason

Configuratore di Prodotto Diapason Configuratore di Prodotto Diapason Indice Scopo di questo documento...1 Perché il nuovo Configuratore di Prodotto...2 Il configuratore di prodotto...3 Architettura e impostazione tecnica...5 Piano dei

Dettagli

Architetture Web I Server Web e gli Standard della Comunicazione

Architetture Web I Server Web e gli Standard della Comunicazione Architetture Web I Server Web e gli Standard della Comunicazione Alessandro Martinelli alessandro.martinelli@unipv.it 27 Marzo 2012 Architetture Architetture Web Protocolli di Comunicazione Il Client Side

Dettagli

CeBAS. Centrale Bandi e Avvisi Pubblici Regionali (DGR n. 1556 del 11.09.2009)

CeBAS. Centrale Bandi e Avvisi Pubblici Regionali (DGR n. 1556 del 11.09.2009) CeBAS Centrale Bandi e Avvisi Pubblici Regionali (DGR n. 1556 del 11.09.2009) Introduzione Il progetto CEBAS: la finalità è di migliorare l efficienza operativa interna dell Ente rispondere alle aspettative

Dettagli

Indice. Introduzione. PARTE PRIMA PHP: i fondamenti 1

Indice. Introduzione. PARTE PRIMA PHP: i fondamenti 1 Indice Introduzione XV PARTE PRIMA PHP: i fondamenti 1 Capitolo 1 Perché PHP e MySQL? 3 1.1 Cos è PHP? 3 1.2 Cos è MySQL? 4 1.3 La storia di PHP 5 1.4 La storia di MySQL 6 1.5 Le ragioni per amare PHP

Dettagli

COMPLETA SICUREZZA GRAZIE ALL ACCESSO PROTETTO E AI LIVELLI AUTORIZZATIVI

COMPLETA SICUREZZA GRAZIE ALL ACCESSO PROTETTO E AI LIVELLI AUTORIZZATIVI Consultazione prodotti e gestione ordini via internet SAM r-evolution La rivoluzione non è cambiare il software! SAM OW - Open Web Open-Web è l applicazione web per la consultazione online degli articoli

Dettagli

Web Service Architecture

Web Service Architecture Giuseppe Della Penna Università degli Studi di L Aquila dellapenna@di.univaq.it http://dellapenna.univaq.it Engineering IgTechnology Info92 Maggioli Informatica Micron Technology Neta Nous Informatica

Dettagli

È ORA DI DIVENTARE GRANDI MASTER IN GRAPHIC E WEB DESIGN 328 ORE 76 LEZIONI DA 4 ORE 2 VOLTE A SETTIMANA + 6 WORKSHOP MASTER IN WEB DESIGN

È ORA DI DIVENTARE GRANDI MASTER IN GRAPHIC E WEB DESIGN 328 ORE 76 LEZIONI DA 4 ORE 2 VOLTE A SETTIMANA + 6 WORKSHOP MASTER IN WEB DESIGN MASTER IN GRAPHIC E WEB DESIGN 328 ORE 76 LEZIONI DA 4 ORE 2 VOLTE A SETTIMANA + 6 WORKSHOP È ORA DI DIVENTARE GRANDI MASTER IN WEB DESIGN CERTIFIED ASSOCIATE ABC FORMAZIONE PROFESSIONALE Viale degli Ammiragli,

Dettagli

DA DEFINIRE Sede del corso: Presso GI Formazione in Piazza IV novembre 5, Milano Orari dalle 9.00 alle 13.00 e dalle 14.00 alle 18.

DA DEFINIRE Sede del corso: Presso GI Formazione in Piazza IV novembre 5, Milano Orari dalle 9.00 alle 13.00 e dalle 14.00 alle 18. PERIODO : DA DEFINIRE Sede del corso: Presso GI Formazione in Piazza IV novembre 5, Milano Orari dalle 9.00 alle 13.00 e dalle 14.00 alle 18.00 A CHI E RIVOLTO IL CORSO Questo progetto si rivolge a tutti

Dettagli

Flavio De Paoli depaoli@disco.unimib.it

Flavio De Paoli depaoli@disco.unimib.it Flavio De Paoli depaoli@disco.unimib.it 1 Il web come architettura di riferimento Architettura di una applicazione web Tecnologie lato server: Script (PHP, Pyton, Perl), Servlet/JSP, ASP Tecnologie lato

Dettagli

Single Sign On sul web

Single Sign On sul web Single Sign On sul web Abstract Un Sigle Sign On (SSO) è un sistema di autenticazione centralizzata che consente a un utente di fornire le proprie credenziali una sola volta e di accedere a molteplici

Dettagli

tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana candidato Pasquale Ludi Matr. 534\000438

tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana candidato Pasquale Ludi Matr. 534\000438 tesi di laurea Anno Accademico 2009/2010 relatore Ch.mo prof. Porfirio Tramontana candidato Pasquale Ludi Matr. 534\000438 Obbiettivi del progetto: Sviluppo di un applicazione Flex in AdobeFlashBuilder

Dettagli

UNIVERSITÀ DEGLI STUDI DI FIRENZE. Relazione elaborato di progettazione e produzione multimediale

UNIVERSITÀ DEGLI STUDI DI FIRENZE. Relazione elaborato di progettazione e produzione multimediale UNIVERSITÀ DEGLI STUDI DI FIRENZE Relazione elaborato di progettazione e produzione multimediale AllPainters.Net SISTEMA PER LA GENERAZIONE DI SITI GRATUITI PER PITTORI Autori: - Bandini Roberto - Ercoli

Dettagli

Corso Analista Programmatore Java Corso Online Analista Programmatore Java

Corso Analista Programmatore Java Corso Online Analista Programmatore Java Corso Analista Programmatore Java Corso Online Analista Programmatore Java Accademia Futuro info@accademiafuturo.it Programma Generale del Corso Analista Programmatore Java Tematiche Trattate Modulo Uno

Dettagli

INTRODUZIONE: ALL INCLUSIVE

INTRODUZIONE: ALL INCLUSIVE INTRODUZIONE: ALL INCLUSIVE è l insieme di servizi, strumenti e tecniche che rendono un sito web accessibile e ottimizzato per assicurare che venga rinvenuto nelle prime posizioni sui motori di ricerca.

Dettagli

Architettura Tecnica i. Architettura Tecnica

Architettura Tecnica i. Architettura Tecnica i Architettura Tecnica ii Copyright 2005-2011 Link.it s.r.l. iii Indice 1 Scopo del documento 1 1.1 Abbreviazioni..................................................... 1 2 Overview 1 2.1 La PdD........................................................

Dettagli

Soluzioni open source integrate. per le aziende: case study. Fabio Bottega (f.bottega@tecnoteca.it) 29 novembre 2003

Soluzioni open source integrate. per le aziende: case study. Fabio Bottega (f.bottega@tecnoteca.it) 29 novembre 2003 Soluzioni open source integrate 29 novembre 2003 per le aziende: case study Fabio Bottega (f.bottega@tecnoteca.it) 1. Sintesi dell intervento Presentazione Case Study odierno: Intranet Moroso S.P.A. Ingredienti

Dettagli

Il Provvedimento del Garante

Il Provvedimento del Garante Il Provvedimento del Garante Il provvedimento del Garante per la Protezione dei dati personali relativo agli Amministratori di Sistema (AdS) Misure e accorgimenti prescritti ai titolari dei trattamenti

Dettagli

Server web e protocollo HTTP

Server web e protocollo HTTP Server web e protocollo HTTP Dott. Emiliano Bruni (info@ebruni.it) Argomenti del corso Cenni generali sul web IIS e Apache Il server web Micsosoft Internet Information Server 5.0 Il server web Apache 2.0

Dettagli

Istituto Tecnico Industriale Statale Dionigi Scano Cagliari. Candidato: Medda Daniele Classe 5ª C Informatica Anno scolastico 2013/2014.

Istituto Tecnico Industriale Statale Dionigi Scano Cagliari. Candidato: Medda Daniele Classe 5ª C Informatica Anno scolastico 2013/2014. Istituto Tecnico Industriale Statale Dionigi Scano Cagliari Candidato: Medda Daniele Classe 5ª C Informatica Anno scolastico 2013/2014 relate Un esperimento di social networking open source 1 Introduzione

Dettagli

WEBsfa: l automazione della forza vendita via Web

WEBsfa: l automazione della forza vendita via Web WEBsfa: l automazione della forza vendita via Web White Paper 1 Gennaio 2005 White Paper Pag. 1 1/1/2005 L automazione della Forza Vendita Le aziende commerciali che che sviluppano e alimentano il proprio

Dettagli

Siti interattivi e dinamici. in poche pagine

Siti interattivi e dinamici. in poche pagine Siti interattivi e dinamici in poche pagine 1 Siti Web interattivi Pagine Web codificate esclusivamente per mezzo dell HTML non permettono alcun tipo di interazione con l utente, se non quella rappresentata

Dettagli

Content Management Systems

Content Management Systems Content Management Systems Gabriele D Angelo http://www.cs.unibo.it/~gdangelo Università degli Studi di Bologna Dipartimento di Scienze dell Informazione Aprile, 2005 Scaletta della lezione

Dettagli

Corso Creare Siti WEB

Corso Creare Siti WEB Corso Creare Siti WEB INTERNET e IL WEB Funzionamento Servizi di base HTML CMS JOOMLA Installazione Aspetto Grafico Template Contenuto Articoli Immagini Menu Estensioni Sito di esempio: Associazione LaMiassociazione

Dettagli

Corso Programmazione Java Android. Programma

Corso Programmazione Java Android. Programma Corso Programmazione Java Android Programma 1.1 Obiettivo e modalità di fruizione L obiettivo del corso è di fornire le conoscenze tecniche e metodologiche per svolgere la professione di Programmatore

Dettagli

Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione. Facoltà di Ingegneria

Università degli Studi Roma Tre Dipartimento di Informatica ed automazione. Facoltà di Ingegneria Università degli Studi "Roma Tre" Dipartimento di Informatica ed automazione Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica Tesi di Laurea AUTENTICAZIONE PER APPLICAZIONI WEB Relatore

Dettagli

Port Community System del Porto di Ravenna CONFIGURAZIONE

Port Community System del Porto di Ravenna CONFIGURAZIONE Port Community System del Porto di Ravenna CONFIGURAZIONE SOMMARIO Indicazioni generali... 3 Dipendenze software... 4 Lato server... 4 Lato client... 4 Organizzazione del sistema... 5 Struttura delle directory...

Dettagli

Passaggio dei dati tra HTML e PHP : array superglobali $_GET e $_POST

Passaggio dei dati tra HTML e PHP : array superglobali $_GET e $_POST Passaggio dei dati tra HTML e PHP : array superglobali $_GET e $_POST I valori inviati da un modulo (con metodo post o get), sono automaticamente memorizzati da PHP sia in variabili di ambiente associate

Dettagli