E-CRM. Progetto e realizzazione di un `e-mall` orientato al

UNIVERSITA' DEGLI STUDI DI ROMA
" LA SAPIENZA "
Facoltà di Scienze Matematiche Fisiche e Naturali
Corso di Laurea in Informatica
"E-CRM. Progetto e realizzazione di un ‘e-mall’
orientato al cliente.”
Relatore: Professor
Laureando:
Francesco Parisi Presicce
Luca Tiberia
A.A 2000-2001
1
Scopo della tesi .......................................................................................................................6
2
Metodologia usata ..................................................................................................................7
3
Generazione dei requisiti......................................................................................................10
4
3.1
Requisiti minimi .............................................................................................. 10
3.2
Requisiti ulteriori ............................................................................................. 10
3.3
Cosa non è richiesto ....................................................................................... 11
3.4
Prime considerazioni sul progetto................................................................... 11
Formulazione del problema .................................................................................................13
4.1
Ambito del problema....................................................................................... 13
4.1.1
Livelli di presenza .................................................................................... 13
4.1.2
Definizione Commercio Elettronico (CE) ................................................. 15
4.1.2.1
4.2
Cosa è necessario .......................................................................................... 15
4.2.1
Schema di una piattaforma di CE ............................................................ 15
4.2.1.1
Front end .......................................................................................... 16
4.2.1.2
Back end .......................................................................................... 17
4.2.2
4.3
Tipologie di commercio elettronico ................................................... 15
Conclusioni .............................................................................................. 21
Contesto dell’applicazione .............................................................................. 21
4.3.1
Business Intelligence............................................................................... 21
4.3.1.1
4.3.2
CRM ........................................................................................................ 23
4.3.2.1
4.3.3
CRM operazionale e analitico........................................................... 24
Datawarehouse ....................................................................................... 28
4.3.3.1
4.3.4
Utilizzo.............................................................................................. 22
I metadati.......................................................................................... 29
Data-mining ............................................................................................. 32
4.3.4.1
Usi .................................................................................................... 33
4.3.4.2
Possibili usi e benefici apportati: ...................................................... 33
4.3.4.3
Metodologie usate ............................................................................ 34
4.3.4.4
Obiettivi del modello ......................................................................... 34
4.3.4.5
Tecniche di modellazione ................................................................. 34
4.3.5
OLAP....................................................................................................... 35
4.3.5.1
Gli operatori...................................................................................... 36
2
4.3.5.2
Le dimensioni ................................................................................... 37
4.3.5.3
Olap Server ...................................................................................... 38
4.3.5.4
Olap e datamining ............................................................................ 39
4.3.6
4.4
5
Decision support e reporting tools ........................................................... 39
4.3.6.1
Tipologia d’uso ................................................................................. 39
4.3.6.2
Tipologia di utilizzatori ...................................................................... 40
Ipotesi ............................................................................................................. 41
4.4.1
Il server Web e il concetto di sessione .................................................... 41
4.4.2
Qualità del software................................................................................. 43
4.4.3
Compatibilità con i browser in circolazione .............................................. 44
4.4.4
Soluzioni non adatte ................................................................................ 45
Architetture e linguaggi .......................................................................................................48
5.1
Architetture a modelli ...................................................................................... 48
5.2
Architettura di un’applicazione Web ............................................................... 49
5.2.1
Sistemi HOST.......................................................................................... 49
5.2.2
Architettura a LAN ................................................................................... 50
5.2.3
Client/Server............................................................................................ 50
5.2.4
Multi-Tier ................................................................................................. 50
5.3
I linguaggi di programmazione........................................................................ 55
5.3.1
ASP ......................................................................................................... 55
5.3.1.1
Global.asa ........................................................................................ 56
5.3.1.2
Oggetti ASP più importanti ............................................................... 58
5.3.1.3
ADO ................................................................................................. 61
5.3.2
PHP ......................................................................................................... 62
5.3.3
Script CGI................................................................................................ 65
5.3.4
JSP e Java Servlet .................................................................................. 65
5.3.4.1
Le Servlet ......................................................................................... 66
5.3.4.2
Jsp.................................................................................................... 68
5.3.5
Confronto fra i vari linguaggi.................................................................... 71
5.3.5.1
ASP e CGI........................................................................................ 71
5.3.5.2
ASP e JSP........................................................................................ 71
5.3.5.3
ASP e PHP....................................................................................... 72
5.3.6
Programmazione a componenti............................................................... 73
3
5.4
5.3.6.1
Oggetti aziendali............................................................................... 74
5.3.6.2
COM e DCOM .................................................................................. 74
5.3.6.3
CORBA ............................................................................................ 76
UML(Unified Modeling Language) .................................................................. 77
5.4.1
6
Uml e la modellazione di una piattaforma di CE ...................................... 79
5.4.1.1
Uml e la modellazione delle basi dati relazionali .............................. 81
5.4.1.2
Rational Rose e la modellazione dei dati ......................................... 84
5.4.1.3
Uml e la modellazione delle applicazioni Web.................................. 86
Progettazione ........................................................................................................................89
6.1
Analisi sistema esistente ................................................................................ 89
6.1.1
Considerazioni e aspetti negativi ............................................................. 89
6.1.2
Conclusioni .............................................................................................. 91
6.2
Studio fattibilità/esigenze ................................................................................ 91
6.2.1
File di Logs: ............................................................................................. 92
6.2.2
Cookies: .................................................................................................. 92
6.2.3
Forms: ..................................................................................................... 92
6.2.3.1
6.3
Tipi di informazioni richieste con le form .......................................... 93
Scelte progettuali ............................................................................................ 93
6.3.1
Livello di presenza................................................................................... 93
6.3.2
Architettura .............................................................................................. 94
6.4
6.3.2.1
Impostazione livello presentazione................................................... 94
6.3.2.2
Impostazione livello aziendale.......................................................... 95
6.3.2.3
Impostazione livello fisico ................................................................. 95
6.3.2.4
Altre scelte........................................................................................ 96
Scelta degli strumenti ..................................................................................... 97
6.4.1
Alternative ............................................................................................... 97
6.4.2
Scelta effettuata....................................................................................... 99
6.4.3
Disposizione fisica dei server .................................................................. 99
6.4.4
Strumenti di sviluppo ............................................................................. 102
6.5
Indicatori per la progettazione del database ................................................. 102
6.6
Moduli base e diagrammi UML ..................................................................... 107
6.6.1
Front end ............................................................................................... 110
6.6.1.1
Sistema di gestione del catalogo.................................................... 110
4
6.6.1.2
Motore di visualizzazione ............................................................... 130
6.6.1.3
Motore di ricerca e categorizzazione.............................................. 160
6.6.2
6.7
Back end ............................................................................................... 164
6.6.2.1
Sistema di gestione degli ordini...................................................... 164
6.6.2.2
Sistema di gestione delle transazioni ............................................. 176
6.6.2.3
Catalogazione degli utenti .............................................................. 177
6.6.2.4
Sistemi di data-mining e datawarehousing ..................................... 206
Moduli Aggiuntivi .......................................................................................... 207
6.7.1
Punti Fidelity Program ........................................................................... 207
6.7.2
Partner Program .................................................................................... 212
6.8
Il file global.asa............................................................................................. 217
6.9
Ottimizzazioni ............................................................................................... 224
6.9.1
MTS....................................................................................................... 224
6.9.2
Inclusione Server-side ........................................................................... 225
6.9.3
Uso dei componenti piuttosto che degli script ....................................... 227
6.9.4
Le architetture che supportano la scalabilità ......................................... 227
6.9.5
Come migliorare il tempo di risposta dell’applicazione .......................... 228
7
Conclusioni.........................................................................................................................230
8
Bibliografia.........................................................................................................................234
9
Principali siti di riferimento...............................................................................................236
5
Scopo della tesi
1 Scopo della tesi
Lo scopo della tesi è di progettare e realizzare una piattaforma di e -commerce con una
forte componente di CRM 1 e quindi sulla struttura di un e-mall2 che fosse dinamico,
personalizzabile e interattivo ma allo stesso tempo leggero e possibilmente compatibile
con gli strumenti del maggior numero degli utenti (browser-so).
E’ richiesto inoltre di sviluppare un’infrastruttura capace, di popolare un Data Warehouse3 con i dati necessari per analisi di tipo statistico/data-mining4 su utenti,
vendite e costi del sito stesso. Infine è richiesta la massima scalabilità della
realizzazione e quindi facilità di aggiornamento dei vari componenti in vista di auspicate
e prevedibili ampliamenti del bacino di utenza.
1
CRM: Customer Relationship Management. Si definisce CRM una serie di processi o infrastrutture tecnologiche
attraverso le quali un’azienda massimizza le informazioni sui clienti per aumentare la fedeltà e diminuire eventuali
attriti.
2
E-mall: centro commerciale virtuale nel quale vengono allestite vetrine di più negozi.
3
Data-Warehouse: un magazzino in cui i dati estratti dalle diverse fonti, aggregati, omogeneamente e resi
consistenti vengono mantenuti in forma storica.
4
Data-Mining: E' un insieme di processi atti a scoprire correlazioni, relazioni e tendenze nuove e significative
setacciando grandi quantità di dati immagazzinati nei repository usando tecniche di riconoscimento delle relazioni e
tecniche statistiche e matematiche.
6
Metodologia usata
2 Metodologia usata
(*)5
Nello sviluppo del software si possono individuare, indipendentemente dall’area
d’impiego, dalle dimensione del progetto e dalla sua complessità, tre fasi comuni:
Definizione, Sviluppo e Manutenzione.
La fase di Definizione si concentra sull’identificazione dei requisiti, per comprendere
cosa dovrà essere realizzato; quindi stabilisce le informazioni ed i dati da gestire, le
funzionalità e le prestazioni desiderate. Le specifiche e i criteri di validazione vengono
riportati in un documento atto a verificarne la rispondenza finale.
Lo Sviluppo è la fase del come, in cui si descrivono le strutture dei dati e l’architettura
software da realizzare, ed inoltre, si definiscono i dettagli procedurali e le modalità di
traduzione del progetto in un linguaggio di programmazione.
All’interno della fase di Sviluppo dovranno essere considerati tre momenti specifici:
Progettazione del software, in cui i requisiti sono tradotti in un insieme di
rappresentazioni, grafiche, tabellari o linguistiche, che descrivono le strutture dati,
l’architettura e le procedure algoritmiche;
Codifica, in cui le rappresentazioni sono tradotte in un particolare linguaggio di
programmazione generando istruzioni eseguibili;
Testing, in cui i programmi eseguibili sono controllati per scoprire eventuali errori, di
natura logica o di realizzazione.
Infine la fase di Manutenzione riguarda le modifiche da apportare al sistema,
necessarie non solo a correggere eventuali errori riscontrati, ma anche a adattare il
software ai cambiamenti subiti dall’ambiente originario (CPU, Sistema Operativo, unità
periferiche, ...) o a migliorarlo ampliandolo con nuove funzionalità che potrebbero
apportare benefici all'applicazione.
Una metodologia consiste in un processo per lo sviluppo organizzato utilizzando una
serie di tecniche coordinate.
Per quanto riguarda la metodologia usata per l’applicazione si è cercato di seguire OMT
(dall’inglese Object Modeling Technique) e OOSE (Object Oriented Software
5
Vedi [12] della bibliografia e [2q] in ‘Principali Siti di riferimento ’
7
Metodologia usata
Engineering) che consistono, sebbene con qualche differenza, nel costruire un modello
del dominio dell’applicazione e nell’aggiungere solo successivamente i dettagli
implementativi.
La metodologia OMT è basata sullo sviluppo in tre parti del modello del sistema,
modello che viene poi raffinato e ottimizzato per costituire un progetto. Il modello a
oggetti individua gli oggetti del sistema e le loro relazioni. Il modello dinamico descrive
la reazione agli eventi di oggetti nel sistema e l’interazione tra oggetti. Il modello
funzionale specifica la trasformazione di valori degli oggetti e i vincoli su queste
trasformazioni.
Le fasi in cui tali metodologie si realizzano sono:
•
Analisi: riguarda la comprensione e il modello dell’applicazione e del dominio nel
quale essa opera. L’input è una presentazione che descrive il problema da
risolvere e l’output un modello che individua gli oggetti e le loro relazioni, il flusso
dinamico di controllo e la trasformazione funzionale dei dati.
•
Progetto di sistema: usando il modello a oggetti si organizza il sistema in
sottosistemi sfruttando anche la concorrenza di alcuni task. Si prendono delle
decisioni sugli archivi e l’implementazione del modello dinamico.
•
Progetto degli oggetti: i modelli dell’analisi sono elaborati, raffinati e ottimizzati.
L’apporto della metodologia OOSE è stato nel fatto che vengono enfatizzati gli Use
Case Diagram che rappresentano, di fatti, la struttura portante dell’intero processo, e da
essi derivano tutti gli altri diagrammi.
Un approccio orientato agli oggetti sposta molti degli sforzi per lo sviluppo nella fase di
analisi. L’enfasi è sulle strutture dati piuttosto che sulle funzioni.
8
Metodologia usata
Figura 1: Schema generale dei passi seguiti
Anche per quanto riguarda questo documento, si è volutamente enfatizzata la parte
riservata all’analisi, visualizzando sia parte dei diagrammi costruiti in questa fase sia
parte dei diagrammi creati nella fase del progetto di sistema e degli oggetti. In sostanza
si è voluto descrivere con molto dettaglio la parte dell’analisi e della formulazione del
problema, per poi passare al risultato finale del progetto in termini di strutture dati e
funzionalità usando la notazione formale offerta dai diagrammi UML. Le fasi intermedie
del progetto di sistema e degli oggetti, anche se sviluppate durante la realizzazione
dell’applicazione, non sono state inserite.
9
Generazione dei requisiti
3 Generazione dei requisiti
3.1 Requisiti minimi
La struttura dell’e-mall deve essere modulare, scalabile ma allo stesso tempo robusta e
veloce da scrivere. All’interno del centro commerciale devono essere presenti un
numero di negozi sempre espandibile e con caratteristiche grafiche e di layout 6
condivise in modo da implementare nuove funzionalità in modo rapido ed efficace su
tutti i negozi scrivendo il codice solo per uno di essi. Tale negozio potrà anche essere
un negozio di test.
Dei negozi che vi sono presenti non sappiamo cosa venderanno, né quanti prodotti
avranno, né le tipologie di promozioni applicabili, né le diverse forme di trasporto.
La struttura del centro commerciale prescinde da tutto questo ma deve allo stesso
tempo prevedere la massima espansibilità in termini di funzionalità e la massima
maneggevolezza in termini di aggiornamento.
3.2 Requisiti ulteriori
Il sito deve essere progettato tenendo in considerazione la possibilità di prelevare
durante la navigazione una serie di dati che sono la base per una analisi approfondita
attraverso strumenti di data-mining e statistici. Attraverso queste analisi vengono creati
dei feedback7 al fine di migliorare la risposta alle esigenze dell’utente con pagine
sempre più facili e veloci da navigare.
All’utente devono essere offerti dei servizi attraverso i quali può aumentare il rapporto
one-to-one e di conseguenza la probabilità che l’utente torni e faccia acquisti. Tali
servizi devono essere realizzati secondo un ottica di Customer Relationship
Management (CRM) attraverso la quale l’attenzione viene focalizzata sull’utente e non
sul prodotto. La sensazione che il cliente deve avere è quella di visitare un negozio
amichevole con commessi virtuali e non, a cui chiedere informazioni su prodotti e
promozioni, consigli e delucidazioni di modalità di acquisto e spedizione.
6
Layout: disposizione dei vari oggetti nelle pagine (bottoni, immagini, link)
7
Feedback: informazioni e dati di ritorno
10
Generazione dei requisiti
Deve essere creata quindi una comunità virtuale che rappresenta i visitatori frequenti
del sito che si scambiano opinioni su articoli del centro commerciale ma anche su altro.
Tali opinioni possono essere prese in considerazione per improntare politiche di
marketing personalizzate. La conoscenza delle abitudini del cliente, dei suoi pareri s u
determinati prodotti, della storia delle interazioni che egli ha avuto con il contact center 8
deve permettere di poter offrire sempre prodotti con alto indice di gradimento, servizi
nuovi e allettanti e promozioni mirate.
3.3 Cosa non è richiesto
Per la realizzazione di Virtualmarket non è esplicitamente richiesto, in quanto assegnato
a personale tecnico specifico di progettare e realizzare:
•
impostazione grafica (scelta font, colori, abbellimenti estetici, realizzazione
animazioni, ecc…)
•
elaborazione dei contenuti non strettamente legati al mall (pagine FAQ, HOW TO, descrizione e foto dei prodotti, reparti, negozi)
•
configurazione del sistema per quanto riguarda la sicurezza e il funzionamento
dei server
•
gestione contatti con fornitori, gestori negozi (livello acquisti9 e produzione10)
•
gestione finanziaria dell’attività legata al mall (livello Finance)
3.4 Prime considerazioni sul progetto
L’elaborazione del progetto richiede quindi:
•
una definizione accurata della terminologia e del dominio di interesse,
•
uno studio di fattibilità che coinvolga le tecnologie da usare e i tempi realizzativi,
•
una panoramica su datawarehousing/data mining e OLAP,
8
Contact center: strumenti di tipo comunicativo (email, posta tradizionale, chat, forum, numero verde)
9
acquisti: livello in cui si focalizzano le problematiche relative all’acquisto dei prodotti da parte dei ‘negozianti’
10
Produzione: livello in cui si focalizza la fase di produzione del bene
11
Generazione dei requisiti
•
la progettazione,
•
la realizzazione,
•
un feedback dei risultati.
12
Formulazione del problema
4 Formulazione del problema
4.1 Ambito del problema
4.1.1 Livelli di presenza
(*)11
In base al tipo di azienda è necessario definire quale scopo si vuole raggiungere dalla
presenza nel nuovo mercato scegliendo quindi uno dei 3 livelli di presenza:
•
Basso o promozionale: prevede la presentazione dell’azienda, evidenziando la
sua attività, i prodotti, i servizi e le soluzioni offerte. Ha esclusivamente uno
scopo pubblicitario e informativo. A questo livello non si prevede interazione tra
visitatore e azienda.
•
Intermedio: prevede una maggiore quantità di informazioni per il visitatore tra cui
anche un catalogo e un listino dei prodotti, eventuali offerte speciali, la possibilità
di scambio di informazioni con l’azienda tramite posta ma anche la possibilità di
acquistare dei prodotti, non usufruendo delle tecnologie legate ai servizi di
pagamento elettronico ma fornendo i propri dati tramite email e fax.
•
Alto o orientamento alla vendita, customer care 12, call center: prevede un
elevato coinvolgimento dei visitatori attraverso la presentazione di pagine
dinamiche ed interattive. Si prefigge inoltre: ottimizzazione del rapporto fiduciario
con i clienti, customer care, assistenza tecnica on-line, assistenza pre e post
vendita, gestione ordini e acquisti e pagamento elettronico tramite transazioni
sicure usando anche la carta di credito.
Definito
l’obiettivo
bisogna
pensare
alla
realizzazione
del
sito:
definizione
dell’interfaccia e dei contenuti (catalogo, listino, descrizione dei prodotti); in questo caso
è da valutare bene la leggerezza delle pagine prodotte in quanto la rete itali ana non
brilla molto in velocità. La tecnologia e gli strumenti da adottare sono vari e vanno
11
vedi [15] della bibliografia
12
Customer Care: Servizi per il cliente pre e post vendita
13
Formulazione del problema
dall’implementazione in azienda usando HTML, CGI, ASP e linguaggi di scripting, sino
alla realizzazione del sito in outsourcing 13.
Realizzate le pagine WEB bisogna stabilire quale provider scegliere e quale soluzione
adottare per renderle disponibili on-line tra:
•
Hosting: si utilizza un certo spazio su di un server preesistente presso un
provider,
•
Server presso azienda: questa soluzione prevede la presenza di un server
presso la sede dell’azienda e la connessione ad internet tramite linea dedicata,
•
Housing: consiste nell’installazione di un server aziendale dedicato presso un
provider .
Dopo aver realizzato e pubblicato il sito bisogna impegnarsi alla sua diffusione e
pubblicizzazione: una volta presenti sul web è necessario far conoscere a tutti il sito
attraverso strumenti di promozioni sul web:
•
registrazione sui motori di ricerca,
•
scambio banner,
•
pubblicità via email,
•
fax,
•
mailing list e newsgroup.
Infine viene realizzato il supporto clienti che comprende:
•
customer care pre e post vendita sui prodotti,
•
call center per reclami,
•
informazioni addizionali ecc…
Le potenzialità di Internet sono la dinamicità e l’interattività. Meglio verranno sfruttati
questi fattori, migliori saranno i risultati.
Occorre dunque: aggiornare continuamente il sito con offerte promozionali e concorsi a
premi, FAQ e altro. Tutto questo spinge il visitatore ad accedere periodicamente al sito
aumentandone il numero degli accessi, indice di valutazione del successo del sito.
13
Outsourcing: richiedere ad altre aziende di realizzare servizi, infrastrutture con costi/benefici minori rispetto ad
una soluzione ‘ fatta in casa ’
14
Formulazione del problema
4.1.2 Definizione Commercio Elettronico (CE)
Si definisce commercio elettronico un insieme di transazioni commerciali tra produttore
(offerta) e consumatore finale (domanda), realizzata con l’utilizzo di computer e r eti
telematiche, e finalizzate allo scambio di informazioni direttamente correlate alla vendita
di beni e servizi.
4.1.2.1Tipologie di commercio elettronico
(*)14
Ci sono 4 categorie che contraddistinguono il commercio elettronico:
•
business to business: identifica le transazioni tra aziende
•
business to consumer: identifica le transazioni commerciali realizzate tra
azienda e consumatore finale
•
business to admnistration: riguarda tutte le transazioni effettuabili tra azienda e
pubblica amministrazione
•
consumer to admnistration: riguarda le transazioni tra cittadini e pubblica
amministrazione.
4.2 Cosa è necessario
4.2.1 Schema di una piattaforma di CE
(*)15
Un'applicazione di e-Commerce è costituita, oltre che da tutto quanto è visibile sul sito,
anche da tutta una serie di moduli che rappresentano l'infrastruttura del sistema.
Insieme si presentano e interagiscono tra loro.
In maniera schematica una piattaforma di e-commerce può essere articolata in una
parte definita di FRONT END e in una parte definita di BACK END riassumibili così:
14
vedi [15] della bibliografia
15
vedi [14] e [13] della bibliografia
15
Formulazione del problema
front end
•
un sistema di gestione catalogo (CMS)
•
un motore di visualizzazione
•
un motore di ricerca
back end
•
un sistema di gestione degli ordini
•
un sistema di gestione dei pagamenti
•
un sistema di profilazione utenti
•
un sistema di hosting
•
un’applicazione di data-mining e data-warehousing
4.2.1.1Front end
Sistema di gestione del catalogo (CMS)
Esso consente la definizione della struttura dei contenuti (asset), del loro layout grafico,
la revisione e infine la pubblicazione (con o senza livelli intermedi di staging16). Il CMS
deve permettere ad una squadra di redattori di comporre e modificare in modo facile i
contenuti che appariranno poi sul sito.
Il primo fattore da considerare durante la sua progettazione è la scalabilità del
sistema. L’adozione di un sistema non pienamente scalabile pone seri vincoli alla
possibilità di espandere rapidamente la dimensione dell’offerta. La scalabilità di un
sistema di gestione delle offerte si concretizza nella capacità di ospitare un numero
crescente di offerte commerciali senza che si pregiudichino le prestazioni sia dal punto
di vista della presentazione delle offerte al cliente, sia dal punto di vista della loro
gestione.
Un secondo parametro per la valutazione del sistema di gestione del catalogo è legato
alla possibilità di gestire proposte commerciali caratterizzate da una crescente
complessità come la possibilità di realizzare soluzioni di pricing complesse (coupon,
16
staging: possibilità di avere macchine o siti dove è possibile vedere anteprime di come i contenuti verranno
pubblicati.
16
Formulazione del problema
sconti, cross promotion 17, bundle18 ecc…) realizzando così una personalizzazione
spinta dell’offerta.
Tale pacchetto o modulo di solito è preferibile realizzarlo in azienda piuttosto che
comprarlo.
Motore di visualizzazione
Se è importante poter disporre di un valido catalogo è altrettanto vero che occorre avere
a disposizione un sistema di presentazione in grado di valorizzare le proprie offerte
anche per renderle più attraenti attraverso parametri flessibili di descrizione dell’offerta:
uso di testo, immagini, video e suoni.
Attraverso questo motore si deve invogliare l’utente a spendere parte del s uo tempo
all’interno del proprio spazio espositivo ma anche aiutare a comprendere al meglio il
valore del suo possibile acquisto in termini di convenienza e prestazioni.
Motore di ricerca e categorizzazione
Se si amplia l’offerta o se i parametri con i quali questa viene indicizzata diventano più
complessi occorre avere un motore di ricerca affidabile che permetta l’utente di arrivare
con efficacia e velocità al prodotto desiderato. E’ opportuno che l’utente abbia a
disposizione un meccanismo di ricerca che vada oltre le semplici parole chiave ma che
sia in grado di contestualizzare la ricerca, confrontare le offerte commerciali alternative.
4.2.1.2Back end
Sistema di gestione degli ordini
Ci sono diverse tipologie di gestione degli ordini. Si passa da sistemi in grado di salvare
le richieste del cliente all’interno di database, a sistemi che i tempo reale si interfacciano
con applicativi di ERP19 verificando l’effettiva disponibilità del bene. Nelle soluzioni più
evolute possono determinare addirittura l’avvio del processo produttivo, gestire la
17
Cross promotion: promozioni valide abbinando prodotti diversi
18
bundle: sconto applicato su prodotto distinti acquistati assieme.
19
ERP: Enterprise Resource Planning: sistemi informativi che gestiscono i vari processi aziendali: dalla
acquisizione materie prime, alla produzione, allo stoccaggio.
17
Formulazione del problema
spedizione del prodotto, consentire all’acquirente il tracking del proprio ordine e offrire
funzionalità legate al customer care e all’assistenza post vendita.
La gestione delle transazioni
Questa è un componente molto delicato. Bisogna tenere in considerazione 3 parametri
di valutazione generali:
•
la sicurezza percepita,
•
la flessibilità dei sistemi di pagamento e
•
il collegamento con i servizi bancari.
Il primo parametro riguarda la tranquillità con cui l’utente effettua un pagamento nel sito
in questione. Per aumentare tale tranquillità si possono usare:
•
sistemi di riconoscimento hardware,
•
gateway di pagamento collocati in banche o istituzioni di fiducia (SSL 20 e SET21),
•
sistemi di riconoscimento e certificazione da parte di società sopra le parti.
Molto importanti sono le pagine dedicate alle informazioni nelle quali l’utente può
trovare una risposta alle sue preoccupazioni in termini di sicurezza.
Un secondo parametro è la flessibilità: sia per tipologia dei mezzi di pagamento
supportati (carta di credito, bonifico, contrassegno, carte prepagate) sia per la
complessità di gestione del pagamento (calcolo dell’imposizione fiscale, pagamenti in
più valute, pagamenti ad attori differenti).
Il terzo parametro è la possibilità di interfacciarsi in modo agevole al sistema bancario in
modo sicuro e trasparente.
Esistono almeno tre livelli di gestione delle transazioni:
•
Nessuno: ci si appoggia interamente ad un'applicazione esterna, di solito quella
di una banca.
20
SSL: protocollo, sviluppato da Netscape, operante nello strato d i trasporto, che consente, grazie a tecniche
crittografiche a 128 bit, il trasferimento dei dati tramite la rete in modo sicuro, senza cioè che possano essere
intercettati da non autorizzati.
21
SET: (Secure Electronic Transaction) è un protocollo standard creato per tutelare la sicurezza e la riservatezza
delle transazioni di e-commerce su Internet. E’ stato sviluppato, da VISA e MasterCard con la collaborazione di
grossi partners (HP, Verifone, Microsoft, IBM , NetScape)
18
Formulazione del problema
•
Mercato - cliente: si gestisce solo la transazione finanziaria col cliente (verifica
dell'esistenza e congelamento della somma sul conto del cliente)
•
Completa: oltre a quella di cui sopra, si gestisce la logistica dei beni scambiati, e
l'effettivo trasferimento della somma a scambio avvenuto.
In genere all'applicazione di e-Commerce è richiesta la sola verifica della solvibilità
finanziaria del cliente e non la transazione vera e propria. Di questa e di altri dettagli si
occupano di solito società che offrono i cosiddetti servizi di e-fulfillment22.
Catalogazione degli utenti
Per offrire un prodotto quanto mai flessibile e di impatto è necessario un sistema di
profilazione utenti.
Si possono personalizzare:
•
prodotti offerti,
•
informazioni disponibili,
•
banner pubblicitari visualizzati,
•
il prezzo,
•
la modalità di pagamento e di consegna e
•
la tipologia di servizi a valore aggiunto offerti.
Perché tutto questo sia efficace e conveniente occorre disporre di un profilo dell’utente
che vada aldilà dei semplici dati anagrafici (età, figli, indirizzo) ma che tenga conto della
sua personalità, dei suoi hobby, dei suoi interessi e della sua evoluzione come cliente.
Aggiornando in tempo reale tali dati è possibile avere diverse tipologie di profilo:
•
un profilo anagrafico, ottenuto mediante la consueta form di registrazione;
•
un profilo di navigazione, ottenuto mediante un approfondimento delle statistiche
offerte dal server web;
•
un profilo degli interessi ottenuto mediante l’analisi delle pagine prodotto visitate
e dal click-throught dei banner;
22
E-fulfillment: In genere venduti dalle maggiori società di consulenza, offrono in outsourcing tutte quelle
operazioni che partono dal momento in cui l'ordine è acquisito verso la transazione finale. Oltre infatti all'aspetto
economico (la somma in denaro congelata sul conto del cliente viene effettivamente spostata sul conto del
venditore), l'e-fulfillment si occupa anche della logistica (eventuale movimentazione fisica delle merci) e delle
eccezioni (tutte le procedure di mancata consegna, per esempio).
19
Formulazione del problema
•
un profilo delle idee ottenuto mediante l’adesione dell’utente a sondaggi e forum
di discussione;
•
un profilo post vendita derivato dall’analisi delle mail, fax, telefonate ecc.. che
l’utente fa in seguito ad un acquisto per segnalare delusione, problemi,
soddisfazione e commenti in genere del prodotto acquistato.
Sistema di data-mining e datawarehousing
Una volta creato un sistema di profilazione degli utenti è necessario creare un sistema
di data-mining in grado di generare rapporti aggregati sugli utenti. Incrociando i diversi
profili utente mediante tecniche OLAP 23 è possibile generare analisi statistiche
fondamentali per realizzare rapporti ONE to ONE 24 con i clienti ma anche ottimizzare la
gestione di eventuali magazzini e ridurre i costi per esempio legati alla spedizione.
L’interazione tra l’utente e il sistema costituiscono una serie di flussi informativi
denominati catena del valore virtuale (value supply chain25) che produce il vero bene
dell’economia digitale: l’informazione.
Conoscere il cliente, le sue abitudini e i suoi interessi per anticipare le sue necessità e
meravigliarlo con livelli di personalizzazione inaspettati determina la possibilità di
aumentare il proprio business.
Analizzando le abitudini di acquisto, un business man può aumentare le informazioni su
quali prodotti e servizi un consumatore può volere e a quale prezzo vorrebbe pagarli. E’
inutile inondare i consumatori con offerte irrilevanti via mail, telemarketing o mass
media. Attraverso una modellazione predittiva e quindi con la premessa che ciò che i
consumatori hanno fatto ieri probabilmente lo faranno domani si possono mantenere la
maggior parte degli utenti acquisiti.
Sistema di hosting (ASP)
Una volta che il progetto di e-Commerce è stato sviluppato e testato, è tempo che
venga installato e ospitato presso un Application Service Provider. Si tratta, anche in
questo caso, di servizi in outsourcing volti a pubblicare e mantenere in vita
l'applicazione. L'ASP tipicamente si occuperà delle problematiche siste mistiche (quali e
23
OLAP: On-line Analitycal Process vedi paragrafo dedicato 4.3.5
24
Rapporto One to One: rapporto azienda – utente caratterizzato da una forte personalizzazione dell’offerta.
25
Value Supply Chain: catena del valore virtuale
20
Formulazione del problema
quanti server, quali connessioni di rete), di manutenzione (assicurare che il servizio sia
sempre attivo e funzionante), report di business intelligence
26
(quante page view,
quante hit, da parte di chi, con che frequenza).
4.2.2 Conclusioni
Da questo scenario segue che un'applicazione di e-Commerce non deve essere basata
esclusivamente sui moduli software classici:
•
Logica transazionale
•
Interrogazione in tempo reale di un conto corrente o di una carta di credito
•
Verifica on-line delle disponibilità
•
Gestione delle eccezioni (merce esaurita, cliente inesistente…)
ma deve essere sempre più affiancata da moduli che eravamo abituati a vedere nei
portali generalisti classici orientati alla comunità virtuale:
•
User profiling27
•
Forum
•
Chat
•
Eventi on-line (es.: diretta in streaming di un avvenimento)
•
Merchandising e pubblicità
•
Supporto WAP / XHTML per i dispositivi palmari
4.3 Contesto dell’applicazione
4.3.1 Business Intelligence
(*)28
26
Business Intelligence : vedi paragrafo successivo 4.3.1.
27
User Profiling: creazione del profilo dell’utente in base ai dati da lui immessi direttamente o indirettamente.
28
Vedi [5] della bibliografia e [9a],[3c] dei ‘Principali siti di riferimento ’
21
Formulazione del problema
La Business Intelligence è la conoscenza necessaria per capire e trarre vantaggio
dall’ambiente in cui un determinato processo opera.
Fattori di BI29 esterni possono essere informazioni sulle prestazioni dei fornitori, sui
concorrenti, sui corrieri ma anche i bisogni e le necessità dei clienti.
Fattori interni invece possono essere informazioni sui costi e qualità dei servizi e dei
prodotti in genere, la produttività e il time to market 30.
4.3.1.1Utilizzo
Quindi un’applicazione di Business intelligence colleziona tutti questi dati affinché
possano essere analizzati e, da questi, possano essere tratte delle informazioni che
vengono distribuite nei modi e nei tempi e alle persone più indicate in modo che
possano essere trasformate, per esempio, in azioni di marketing. Quindi, attraverso gli
strumenti di BI, si trasformano i dati in conoscenza affinché possano essere prese le
giuste decisioni nel più breve tempo possibile. E’ fondamentale poter misurare,
attraverso degli indicatori31, le prestazioni di fornitori e spedizionieri, la frequenza e la
qualità di acquisto dei clienti e il costo di produzione dei propri prodotti, in ogni momento
e nel formato di memorizzazione più appropriato.
In una applicazione di Business Intelligence ci si potrebbe chiedere, per esempio:
sono più remunerativi i nuovi clienti o quelli acquisiti?
Quale è il valore economico dei clienti migliori?
I clienti sotto i 35 anni sono remunerativi?
Quali sono i clienti che hanno il prodotto A ma non il B?
Quali sono i clienti che rispondono con solerzia a particolari campagne di marketing?
Una volta scoperti i vari segmenti di mercato si passa alla realizzazione di campagne di
marketing mirate.
29
BI: Business Intelligence
30
Time to Market: necessità di dover produrre beni in tempi prestabiliti
31
indicatori: parametri registrati durante le singoli fasi di una transazione commerciale e memorizzate nel db. Vedi
6.5
22
Formulazione del problema
4.3.2 CRM
(*)32
La raccolta dei dati per la creazione dei profili degli utenti per la proposta di offerte
mirate, la realizzazione di percorsi personalizzati di navigazione sul sito, ecc… rientra
in ciò che in gergo tecnico viene chiamato CRM ovvero Customer Relationship
Management.
Gli obiettivi principali del CRM sono quindi:
•
costruire legami profondi e a lungo termine con clienti scelti
•
essere più vicino al cliente nei punti di contatto (call center, forum, ecc…)
CRM usa un approccio progressivo per prelevare dati, trasformarli in informazioni e
quindi in conoscenza e successivamente adottare politiche di marketing mirate.
Figura 2: Passi da effettuare in una soluzione Datamining-CRM
33
Il primo passo di questo approccio è quello dove i dati sono trasformati in informazione
attraverso diverse operazioni di pulizia e filtraggio. Poi c’è la fase in cui queste
informazioni, contenute in tabelle aggregate e sommarizzate, diventano conoscenza
per chi le analizza, il quale, a questo punto, può intraprendere in modo più o meno
automatico delle decisioni (azioni).
32
vedi [3a],[3e],[1d],[7a] dei ‘Principali siti di riferimento ’
33
vedi [7a] della sezione ‘Principali siti di riferimento ’
23
Formulazione del problema
In realtà sarebbe meglio rappresentare questi passi come un ciclo perché di tale si
tratta:
Figura 3: Ciclo di vita di un'applicazione CRM
34
4.3.2.1CRM operazionale e analitico
Premesso che la gestione del cliente gioco un ruolo fondamentale per il successo
dell’azienda, il CRM può suddividersi in 2 grandi sezioni:
•
CRM OPERAZIONALE che prevede l’implementazione automatica di processi di
business orizzontali e integrati attraverso numerosi e interconnessi punti di
contatto con il cliente.
•
CRM ANALITICO che prevede l’implementazione progressiva di strumenti per la
gestione e analisi avanzata dei dati.
Gli strumenti del CRM OPERAZIONALE 35 sono:
34
vedi [3b] della sezione ‘Principali siti di riferimento ’
35
vedi fig. 4
24
Formulazione del problema
•
Call centers
•
Campaign management (gestione campagne promozionali)
•
Sales force automation (gestione automatizzata delle vendite)
•
Enterprise Resource Planning (pianificazione delle risorse)
•
Customer service (servizi per i clienti)
•
E-commerce web
mentre quelli del CRM ANALITICO
•
monitoring (monitoraggio di tutte le attività)
•
call behaviour analysis (analisi degli interventi al call center)
•
campaign analysis (analisi delle campagne promozionali per valutarne l’efficacia)
•
customer valuation (valutazione del cliente in base al grado di proficuità)
•
segmentation and profiling (segmentazione e profilazione degli utenti)
•
risk analysis
•
profitability analysis (analisi della redditività di una determinata azione di
marketing)
•
needs analysis (analisi delle esigenze degli utenti)
•
sales analysis
•
web analysis (analisi dei files di log)
•
behavioural modelling (modellazione del comportamento degli utenti durante la
navigazione)
•
quality of services analysis
Le tecnologie che stanno dietro al CRM analitico sono:
•
data warehousing
•
data mining
•
online analytical processing (OLAP)
•
sistemi di decisione avanzati e strumenti per il reporting.
25
Formulazione del problema
Figura 4: Componenti di una soluzione di CRM
36
Il flusso di informazione all’interno di un processo di CRM analitico può essere
schematizzato in questo modo:
1. inizialmente un dato operazionale (derivato cioè dall’interazione cliente -azienda)
viene prelevato da uno dei numerosi punti di contatto che potrà essere la pagina
degli acquisti, un forum di discussione, un call center ecc…
2. questi dati operazionali, assieme ad altri, quali i dati anagrafici, i dati della
navigazione e i dati provenienti da fonti esterne, vengono inseriti in un
datawarehouse;
3. a questo punto, mediante operatori OLAP, e tecniche di data-mining si
estrapolano pattern37 rilevanti e inizialmente sconosciuti per sottoporli a
successive analisi da parte degli esperti;
36
vedi [3a] della sezione ‘Principali siti di riferimento ’
37
pattern: relazioni fra entità o modelli della realtà
26
Formulazione del problema
4. infine, usando sofisticate tecniche di reporting applicate a questi dati, anche
basate su tecnologie web 38, si può migliorare l’efficienza degli strumenti
operazionali di CRM nonché l’offerta di business.
Figura 5: Dettaglio dei componenti di una soluzione di CRM
38
39
basate su tecnologie web: i report possono essere costruiti mediante interrogazioni di db da parte di pagine server
e visualizzate su pagine html.
39
vedi [10] della sezione ‘Principali siti di riferimento ’
27
Formulazione del problema
Figura 6: Flusso dei dati di una soluzione di CRM
40
4.3.3 Datawarehouse
(*)41
I data-warehouse sono un potenziamento del sistema informativo aziendale; non
sostitutivo del precedente sistema operazionale, ma completamento dello stesso,
attraverso l'integrazione e la strutturazione apposita atta al supporto degli ambienti tipici
della scienza decisionale.
I data-warehouse risolvono i problemi utilizzando la tecnica dell' in-advance42 ossia
prevenendo le richieste dell'utente. Questa tecnica si sviluppa attraverso il prelievo dei
dati da più sorgenti distinte, integrandoli e immagazzinandoli in un unico deposito per
facilitarne l'accesso e l'interrogazione.
40
vedi [10] della sezione ‘Principali siti di riferimento ’
41
vedi [2],[3],[4] della bibliografia e [1i],[1l],[3f],[3c],[3f],[6a] dei ‘Principali siti di riferimento ’
42
In advance: tecnica generica di risoluzione dei problemi che necessitano di lunghi tempi di computazione. La
tecnica consiste nel pre computare tutta od una parte delle operazioni
28
Formulazione del problema
Tecniche specifiche del datawarehousing sono la denormalizzazione e l'indicizzazione
effettuata con indici ad hoc o cablati per le specifiche query. La denormalizzazione della
base dati è una pratica molto usata che porta dei vantaggi, evita dei costosi join e alcuni
svantaggi, aumenta lo spazio occupato dai dati (informazioni ripetute).
Il data-warehouse deve essere:
•
orientato al processo: i dati sono organizzati relativamente ad una particolare
funzione o processo aziendale.
•
Integrato: i dati estratti da varie sorgenti, vengono ripuliti, trasformati e modellati
in modo da consentirne una gestione semplice ed efficace (es: il fo rmato di un
campo data può essere diverso da db a db, da piattaforma a piattaforma).
•
Non volatile: gli accessi ai dati avvengono in sola lettura.
•
Time variant: i dati vengono organizzati in periodi di tempo, caratteristica
fondamentale che consente di farne un'analisi temporale.
Il DW si distingue dai sistemi operazionali transazionali per i seguenti motivi.
i sistemi operazionali sono:
•
usati per automatizzare routines;
•
caratterizzati da un gran quantità di piccole transazioni con un ambito limitato;
•
disegnati per prelevare dati.
Mentre i sistemi di Business intelligence come i DW appunto o i DSS (sistemi di
supporto alle decisioni) sono:
•
costruiti per abilitare l’esplorazione, l’analisi e la presentazione di informazione;
•
caratterizzate da poche query con un ampio raggio di azione;
•
disegnate per estrapolare informazioni.
4.3.3.1I metadati
(*)43
43
vedi [1g],[3a],[3f] della sezione ‘Principali siti di riferimento ’
29
Formulazione del problema
La pulizia dei dati è importante anche per la creazione di una vista integrata dei dati di
un particolare soggetto che altrimenti sarebbero non consistenti. E’ in questo frangente
che si rendono indispensabili i metadati o data about data. Questi soggetti infatti, di
solito inseriti all’interno di aree riservati del DW servono a descrivere i dati stessi, la loro
struttura, la loro provenienza, il formato di memorizzazione, la loro interpretazione, i
possibili legami con gli altri dati.
Figura 7: Posizionamento metadati
44
Ci sono 3 tipi di metadati:
•
metadati di tipo build time: ogni qualvolta si disegna e costruisce un warehouse
si generano build time metadata che collegano termini tecnici con termini legati al
business, descrivono la struttura tecnica dei dati, memorizzano le frequenze di
aggiornamento dei dati, ecc…. Sono i metadati più dettagliati e sono usati dai
progettisti e sviluppatori del DW e dagli amministratori.
•
Metadati da utilizzo: quando il DW è in produzione, gli usage metadata, derivati
da quelli build time, sono uno strumento indispensabile per gli utenti e gli
44
vedi [3a] della sezione ‘Principali siti di riferimento ’
30
Formulazione del problema
amministratori perché spiegano il significato di una certa variabile di analisi ad un
livello alto di astrazione.
•
Metadati di controllo: questo tipo di metadati sono usati dai db e dagli applicativi
che accedono al DW. Essi memorizzano, per esempio, le informazioni relative a
dove risiedono i dati di alimentazione e in che tipo di database, i controlli di
sicurezza e di accesso. Tale tipo di metadati viene usato solo dai programmatori
di sistema per facilitar loro la stesura di utility di accesso a tali DW.
Come ho detto in precedenza i DW sono chiamati anche sistemi di archi viazione
multidimensionale.
I databases multidimensionali memorizzano i dati in una struttura a matrice che fornisce
una risposta rapida a query multidimensionali come le vendite per regione, per canale e
per prodotto. I databases multidimensionali contengono dati sommarizzati e di alto
livello in modo che i tecnici di e-business45 possono guardare a questi dati sotto
innumerevoli punti di vista e sotto ogni combinazione.
Nel seguente diagramma [fig. 8] si possono notare le possibili dimensioni di un
database di un sito di e-commerce.
45
e-business: ramo del business collegate ad attività tipicamente Internet
31
Formulazione del problema
Figura 8: Esempio di dimensioni e di fatti
46
4.3.4 Data-mining
(*)47
Il Data-mining è uno dei componenti del processo di scoperta della conoscenza
(Knowledge Discovery), può essere definito come un insieme di tecniche che
consentono di effettuare l’esplorazione e l’analisi dei dati per scoprire regole o modelli
nascosti
all’interno
di
archivi
di
grandi
dimensioni
in
modo
automatico
o
semiautomatico. Esso è un approccio multidisciplinare che riunisce un insi eme di
tecniche quali la statistica, la visualizzazione, i sistemi basati sulla conoscenza e i
sistemi ad autoapprendimento che consentono di scoprire la conoscenza e di tradurla in
regole o modelli atti a risolvere i problemi di business.
46
vedi [8a] della sezione ‘Principali siti di riferimento ’
47
vedi [1],[2] della bibliografia e [1e],[1f],[7a],[3d],[3a],[3e] della sezione ‘Principali siti di riferimento ’
32
Formulazione del problema
4.3.4.1Usi
Le tecniche di Data-mining sono impiegate per analizzare età, aspetti demografici,
fasce economiche di appartenenza, interessi e hobbies per migliorare i processi
conoscitivi e ridurre l’incertezza legata all’assunzione di decisioni, per esempio, per
quanto riguarda l'interazione con il cliente. Suggeriscono quindi strategie, effettuano
una sintesi dei dati per produrre informazioni strategiche.
4.3.4.2Possibili usi e benefici apportati:
•
rendere efficiente la distribuzione delle risorse
•
individuare opportunità di crescita
•
ridurre rischi di frode e di insolvenza
•
aumentare produttività e vendita
•
fornire l’opportunità di vendite congiunte
•
scoprire opportunità di vendita aggiuntive
•
ridurre l'esposizione ai rischi di mancato pagamento
•
distribuire più efficacemente le risorse
•
realizzare la classificazione e la profilazione degli utenti
•
guidare l’analisi dei prezzi e delle promozioni
•
fornire modelli di risposta
•
effettuare analisi di marketing e pianificazione
•
supportare la progettazione di nuovi prodotti
•
effettuare un controllo qualità
Attraverso le suddette tecniche di data-mining si possono per esempio affrontare quindi
le seguenti problematiche:
•
attrito: quale utente probabilmente smette di comprare un prodotto o un servizio
del nostro sito?
•
valore nel tempo:qual’è il valore di un consumatore tenendo conto di tutta la
storia dei sui acquisti nel nostro sito?
•
rischio di credito: qual’ è il profilo di rischio di credito di un consumatore in
seguito all’uso di carte di credito, pagamenti rateizzati e forti sconti?
•
frodi: quali consumatori stanno applicando delle frodi al nostro sito?
33
Formulazione del problema
Per esempio, i clienti ad alto profitto, ad alto valore e a basso rischio sono quelli che
ogni azienda vorrebbe avere a disposizione. Tali utenti rappresentano il 10 -20% dei
clienti che creano il 50-80% dei profitti. I clienti a basso profitto, alto valore e a basso
rischio sono molto “attraenti” ma nei loro confronti, un’azienda dovrebbe impostare abili
iniziative di aumento della profittabilità come il cross selling (la vendita di nuovi prodotti)
e l’up-selling (vendere più di ciò che un utente vuole acquistare) per poter aumentare il
profitto. I software di Data Mining aiutano a classificare gli utenti e a scoprire il target
delle proprie offerte più remunerativo.
4.3.4.3Metodologie usate
Le metodologie usate per riconoscere relazioni fra i dati sono 2:
•
Deduzione: si basa sul principio che l’informazione che si vuol trovare è una
conseguenza logica dei dati presenti nel db. Per esempio un join applicato tra
impiegati e dipartimenti e un altro tra dipartimenti e manager ci dice che esiste
una relazione fra impiegati e manager.
•
Induzione: si basa sul principio per cui l’informazione che si vuol trovare non è
altro che una generalizzazione di ciò che è nel db. Per esempio se l’informazione
sugli impiegati include manager e dipartimenti allora ogni dipartimento ha un
manager.
4.3.4.4Obiettivi del modello
•
Predizione: determinare modelli o regole per predire valori continui o discreti di
variabili a partire da valori dati in input
•
Classificazione,
•
Esplorazione,
•
Affinità: scoprire la probabilità che un evento avvenga in congiunzione con un
altro
4.3.4.5Tecniche di modellazione
Alberi decisionali:
34
Formulazione del problema
individuano i gruppi che avranno molto probabilmente effetti diversi su una
variabile obiettivo. Per esempio si possono trovare le caratteristiche degli
individui che risponderanno con maggiore probabilità ad una campagna
promozionale via email.
Reti neurali:
sono modelli che simulano la struttura del cervello umano imitandone i
meccanismi di apprendimento. In base ai dati di input le reti neurali correggono i
parametri del modello per trovare relazioni tra i dati.
Analisi dei cluster:
tecnica di riduzione dei dati che raggruppa casi o variabili in base a misure di
similarità. Questa tecnica consente di identificare gruppi di clienti basati su
caratteristiche demografiche, informazioni finanziarie o comportamenti di
acquisto.
Analisi fattoriale:
tecnica di riduzione dei dati che costruisce un modello a partire dai dati grezzi.
L'analisi fattoriale ricava fattori riassuntivi detti anche variabili latenti che
concentrano le informazioni contenute in un numero elevato di variabili.
4.3.5 OLAP
(*)48
Gli strumenti OLAP permettono l'interazione diretta degli utenti sui dati del warehouse
mettendoli in condizione di realizzare sofisticate indagini a supporto dei propri processi
decisionali senza conoscere la struttura della base dati.
Essi consentono di:
•
supportare le complesse analisi di un processo decisionale
•
analizzare i dati da varie prospettive (dimensioni)
•
agire dinamicamente su enormi quantità di dati.
35
Formulazione del problema
4.3.5.1Gli operatori
Questi obiettivi sono in parte raggiunti attraverso l'uso di operatori che l'utente può
eseguire sui diversi oggetti rappresentanti i dati in suo possesso.
Operatori tipici sono Drill-Down (eseguito su un attributo di una vista aggregata mostra i
dati della vista stessa ad un maggiore dettaglio rispetto all'attributo prescelto), roll-up
(al contrario roll-up aggrega i dati rispetto all'attributo prescelto), pivot (risulta
necessario per poter cambiare punto di vista ovvero cambiare la dimensione in analisi),
TopN (restituisce i primi n elementi rispetto ad un attributo).
Figura 9: Possibili viste ottenibili mediante l’uso degli operatori OLAP
49
Esempio di analisi attraverso gli operatori OLAP:
48
vedi [1] della bibliografia e [6a],[7a],[3f],[3c] dei ‘Principali siti di riferimento ’
49
vedi [3c] della sezione ‘Principali siti di riferimento ’
36
Formulazione del problema
una catena di negozi a livello nazionale per decidere l'apertura di nuovi centri vendita, ricerca quali punti vendita sono
maggiormente redditizi (TopN), analizza quindi i dati sui fatturati rispetto alle regioni (drill down) quindi rispetto alle città
all'ubicazione nei centri abitati.
Ma è fondamentale non solo dove costruire ma cosa costruire quindi si può spostare l'attenzione (pivot) alla tipologia di
punto vendita o ancora al tipo di oggetti venduti.
L' analisi viene condotta navigando i dati. Le interrogazione poste dall' utente attraverso
gli operatori OLAP partizionano l'insieme dei dati creando opportune viste.
4.3.5.2Le dimensioni
Per supportare un sistema OLAP, i dati devono essere organizzati tramite modelli
multidimensionali che rappresentano una concettualizzazione dei dati più vicina al
modo in cui il manager percepisce la realtà aziendale 50.
In un modello multidimensionale, la dimensione rappresenta un elemento o una
gerarchia di elementi visualizzabile ortogonalmente generando i cosiddetti cubi
relazionali.
Figura 10: Differenza fra database relazionale e multidimensionale
50
51
I manager pensano multidimensionalmente vendite per quadrimestre, per venditore costo per linea di prodotto per
regione in quanto le informazioni da elaborare provengono dalle interazioni di molte variabili come clienti, prodotti,
venditori.
51
Vedi [1] della bibliografia
37
Formulazione del problema
Esempio di dimensione sono il prodotto, il tempo, l'area geografica, mentre una
gerarchia potrebbe essere quella relativa alla dimensione tempo contenente gli elementi
anno, quadrimestre, mese, settimana e giorno.
4.3.5.3Olap Server
(*)52
In effetti il ruolo degli OLAP Server è quello di un robusto motore di calcolo affinché la
trasformazione dei dati storici in dati “derivati e proiettati” sia veloce e facilmente
disponibile per i vari strumenti di analisi come:
•
analisi delle vendite,
•
analisi delle iniziative di marketing,
•
what-if analysis53,
•
analisi sui costi di produzione,
•
analisi sulla profittabilità dei clienti e dei prodotti,
•
previsioni di vendita.
Risulta quindi evidente che un OLAP server si pone al centro di 4 grandi aree:
•
l’analisi multidimensionale
•
l’analisi statistica
•
query e reporting
•
data-mining
L’uso di un OLAP Server permette di avere:
•
l’ abilità di elaborare grandi volumi di dati e grandi quantità di utenti concorrenti
•
tempi di risposta consistenti e rapidi alle query, che permettono un’analisi
iterativa dei dati istantanea
•
metadati integrati che collegano l’OLAP server con il DW
52
Vedi [1h],[3c],[6a] della sezione ‘Principali siti di riferimento ’
53
What if: nome generico di tecniche di previsione di dati futuri da serie di dati di partenza. Vengono usate tecniche
neurali o statistiche.
38
Formulazione del problema
•
l’abilità di effettuare calcoli complessi come aggregazioni, calcoli matriciali e di
tipo cross-dimensional.
4.3.5.4Olap e datamining
“La differenza sostanziale fra OLAP e Data-mining è che OLAP è user-driven: l’analista
genera un’ipotesi e usa gli strumenti OLAP per verificarla. Data-mining invece, essendo
data-driven, viene usato per generare un’ipotesi. In modo simile, quando un utente usa
gli strumenti OLAP per esplorare i dati, egli guida l’esplorazione, mentre quando gli
utenti usano gli strumenti tipici del data-mining è il software che esegue e guida
l’esplorazione.
Il data-mining consente agli utenti OLAP di andare oltre i report riassuntivi. Il data mining ci dice perché un fenomeno sta succedendo mentre l'OLAP ci dice solo cosa.” 54
4.3.6 Decision support e reporting tools
4.3.6.1Tipologia d’uso
(*)55
Una volta analizzato il dato, con strumenti più o meno sofisticati, capita spesso che il
l’esperto di marketing voglia prendere egli stesso delle decisioni legate a tale dato ma
ancor più spesso può capitare che difficilmente saprà adoperare gli stessi strumenti di
un programmatore. Ecco quindi la necessità di sviluppare e visualizzare l’informazione
appena scoperta in un modo chiaro e sintetico per il marketer 56. Si possono usare
grafici a barre espandibili, menu top down associati a tecniche OLAP di drill-down ecc…
ma sempre in modo che un non esperto di informatica possa lavorare con tranquillità.
In sostanza, gli strumenti per il reporting permettono di formulare query senza che tali
utenti conoscano il linguaggio SQL, avendo anche la possibilità di visualizzare il
risultato in diversi formati.
54
Vedi [1] della bibliografia
55
vedi [2] della bibliografia e [3a] nella sezione ‘Principali siti di riferimento ’
56
Marketer: esperto di marketing
39
Formulazione del problema
4.3.6.2Tipologia di utilizzatori
(*)57
L’uso di tali strumenti può essere però differenziato a seconda dell’utilizzatore. In
genere ci sono 3 tipi di utilizzatori:
•
Power user: rappresentano il 5-10% degli utenti e lavorano sui dati
giornalmente, trasformandoli in informazioni utili per loro o per l’impresa. Sono
quindi i responsabili della creazione della business information e spesso creano
anche nuovi modi di vedere e usare tali informazioni. Gli strumenti per tale
tipologia di utenti debbono permettere loro di scavare in profondità nei dati
presenti nei DW e permettere di risolvere problemi complessi di accesso e
trasformazione.
•
Independent users: rappresentano il 10-20% di tutti gli utenti e regolarmente
usano le informazione dettate dai power user per costruire report e fornire al
management informazioni più o meno dettagliate. Tale tipologia di utenti possono
usare sia strumenti di Business Intelligence usati anche dai power user (ma non
nella stessa intensità) che strumenti di tipo office, usati di norma negli uffici,
come fogli di calcolo, elaboratori di testi e sistemi di messaggistica.
•
Dependent users: costituiscono il 70-80% degli utenti di una organizzazione di
business e sono i principali utenti dell’informazione che i power e gli
indipendent user hanno generato. Usano abitualmente strumenti standard di
uso negli uffici come fogli di calcolo, elaboratori di testo. Molta di questa
informazione viene presentata in forma di report standard. Tali utenti
rappresentano quindi coloro che prendono le decisioni o le eseguono e
raramente sono interessati dagli aspetti tecnici di come alcuni dati sono stati
elaborati.
Quindi, in questa catena di produzione dell’informazione (information supply chain) i
metadati sono molto importanti in quanto, attraverso di essi, ciascun tipo di utente può
risalire a tutte le informazioni di interesse. Quindi i creatori di informazione devono
essere capaci di pubblicare tale informazione con un consistente set di metadati.
40
Formulazione del problema
4.4 Ipotesi
4.4.1 Il server Web e il concetto di sessione
Sul lato server si concentra la logica che gestisce la navigazione e fa da tramite tra
cliente e fornitore.
Le problematiche da affrontare sono:
•
gestione contestuale di sessione, dove per sessione si intende l’insieme ottenuto
da: intervallo di tempo durante il quale avviene la navigazione, dati che
progressivamente l’utente inserisce e risultati parziali ottenuti mediante il
percorso,
•
controllo del dialogo con l’utente, dove per dialogo si intende la sequenza di
navigazione eseguita, le azioni conseguenti alle varie scelte utente e i dati
associabili a ciascun passo compiuto,
•
interfaccia verso il venditore.
Nel caso dell’e-commerce il concetto di sessione è importante: si pensi per esempio al
fatto di dover vietare la possibilità che un utente acceda ad una pagina intermedia di
inserimento dati memorizzata precedentemente in un bookmark in quanto al di fuori di
un flusso coerente di dialogo (si associa il dialogo ad una sessione).
In passato la soluzione a questo problema era rappresentato dai co okies. Poiché la
popolazione dei navigatori è divisa fra chi non ha difficoltà ad ospitare tali cookies e chi
invece li evita, l’uso dei cookies è problematico. L’alternativa è quella di far circolare
l’identificativo di sessione in modo trasparente all’utente come una qualsiasi variabile di
pagina58. L’unico inconveniente di questa tecnica è che deve essere gestita in modo
che l’utente non modifichi tale valore in modo malizioso e ricavare, per esempio,
informazioni riservate.
In Virtualmarket il problema è stato risolto usando, in modo congiunto, delle variabili di
sessione59 e delle variabili di querystring60 e dai cookies, i cui valori vengono
memorizzati anche nel database. Se l’utente accettasse i cookies, si userebbero solo
57
vedi [1c],[1g] della sezione ‘principali siti di riferimento ’
58
Variabile di pagina: se si usa html puro si possono impostare dei valori per i campi nella querystring di ogni url
altrimenti si possono usare variabili di javascript o Vbscript.
59
Variabili di sessione: vedi paragrafo relativo al linguaggio ASP 5.3.1.
60
Variabili di querystring: sono variabili che si trovano nell’url separati da ? e &
41
Formulazione del problema
delle variabili di sessione i cui valori verrebbero memorizzati anche nei cookies per il
riconoscimento successivo. Se invece l’utente non accettasse i cookies, allora verrebbe
usata la variabile di querystring (nel progetto si chiama vmid), comparando il suo valore,
unito a quello dell’indirizzo IP e di una variabile, sessionid, generata dal web server e
unica, durante la stessa sessione, per ogni utente, con il rispettivo valore contenuto nel
db.
Se avvenisse un esito positivo della comparazione, allora l’utente verrebbe
riconosciuto come esistente e la variabile vmid rimarrebbe invariata altrimenti verrebbe
considerato nuovo utente e verrebbe generato un nuovo valore per la variabile 61.
Un altro problema è legato alla sequenza e coerenza dei dati inseriti da parte dell’utente
se questi appaiano in tempi distinti. Il fatto che durante tale navigazione egli possa
giocare con i tasti backward e forward del browser per revocare o inserire una scelta
non deve compromettere il corretto calcolo del prezzo finale.
Quando l’utente non naviga tramite hyperlink e/o bottoni in pagina non deve poter
alterare i dati senza che il sistema se ne accorga.
Le soluzioni a questo tipo di problema sono tre:
•
si riassume tutto il dialogo in una sola pagina, popolandola con una quantità
inverosimile di dati;
•
si cerca di disabilitare all’ingresso del sito i bottoni del browser dell’utente;
•
si gestisce architetturalmente e/o applicativamente sul server il transito
attraverso ciascuna pagina.
La soluzione applicata in Virtualmarket, anche se ne parlerà dopo, ne l capitolo della
progettazione, divide il dialogo in più pagine memorizzando i valori dei campi delle form
in variabili di pagina e nel database e disabilitando il caching delle pagine 62 ,
costringendo l’utente a reinserire i valori nel caso torni indietro con il tasto backward. Se
invece l’utente tornasse indietro attraverso opportuni link di pagina, lo stato della
transizione tornerebbe indietro di uno o più passi in modo corretto e pilotato e i valori
dei campi, nonché il contenuto del database, verrebbe ristabilito ai valori iniziali,
sfruttando le variabili di pagina.
61
vedi paragrafo ‘modulo profili utente ’ 6.6.2.3.1
62
Disabilitazione del caching delle pagine: si impedisce di visualizzare, attraverso il tasto back del browser, il
contenuto di una pagina già processato non memorizzandone i valori nella cache del browser.
42
Formulazione del problema
4.4.2 Qualità del software
Nella progettazione di un’applicazione Web, come in ogni altro prodotto, bisogna tener
presente che esso deve rispondere a determinate qualità.
Il primo fra tutti è la correttezza e cioè l’aderenza alle specifiche del problema.
Altri fattori importanti sono le prestazioni63 e la scalabilità.
I fattori che influenzano le prestazioni sono:
•
l’architettura generale del sistema che prevede l’utilizzo di più server,
•
la comunicazione fra i vari tipi di server e quindi l’infrastruttura di rete,
•
la presenza o meno di componenti efficienti,
•
la comunicazione fra i vari componenti,
•
elevato controllo sulla validità delle immissione dati,
•
gestione delle transazioni a livello di componenti e di database,
•
accesso a origini dati eterogenee.
Il concetto di scalabilità è strettamente legato a quello di prestazioni. La scalabilità è la
capacità di un’applicazione di supportare il numero di utenti necessario, sia che esso
sia ridotto o elevato. Maggiore è il numero di utenti che è in grado di supportare e
migliore sarà la scalabilità.
Le altre qualità che si è cercato di rispettare sono state:
1) modificabilità ovvero la facilità di adeguamento e trasformazione del
programma ottenibile dividendo sempre (fisicamente o solo logicamente) lo
strato di dati, dallo strato applicativo, dallo strato di presentazione e layout.
2) Flessibilità ovvero la capacità del programma di rispondere in maniera coerente
e rapida a nuove esigenze ottenibile preferendo soluzioni create in proprio
piuttosto che acquistare prodotti già confezionati.
3) Sicurezza sull’ Input/Output: ottenibile memorizzando i valori ad alto rischio
(contenuto del carrello, dati dell’utente) in un database piuttosto che in file di
testo come i cookies..
4) Leggibilità intesa come capacità di far comprendere in ogni momento al
progettista e a altre persone le scelte fatte, ottenibile suddividendo il più possibile
63
Prestazioni: in questo documento per prestazione si intende capacità di risposta dell’applicazione in termini di
tempo.
43
Formulazione del problema
il codice html dal codice del linguaggio scelto e usare linguaggi formali di
specifica come UML.
5) Parametricità intesa come grado di generalità che presenta il programma, in
grado di rispondere quindi ad una classe di problemi piuttosto che ad uno
specifico, ottenibile spostando tutta la logica del programma nei componenti 64 in
modo tale che, l’uso di opportuni parametri permetta di invocare i metodi in modo
corretto e popolando il database con i metadati che permettano di distinguere, i
singoli casi e, quindi, che aiutino ad invocare i metodi più opportuni.
6) Portabilità lato server intesa come possibilità di eseguire il programma in
ambienti di calcolo diversi da quello per cui inizialmente è stato progettato,
ottenibile usando una comunicazione standard (SQL, stored procedures) tra lo
strato applicativo e il db, evitando di usare strumenti proprietari del DBMS
adottato, sebbene rinunciando ad una maggiore velocità e limitare, per quanto
possibile, l’uso di proprietà tipiche del Web Server in uso.
7) Efficienza intesa come capacità a calcolare i risultati sfruttando poche risorse di
calcolo, ottenibile usando poche variabili di sessione e di applicazione 65 e evitare
di memorizzare grosse quantità di dati nelle variabili di output.
8) Portabilità lato client intesa come capacità di rendere visualizzabili in modo
corretto, in ogni tipo browser, le pagine dell’applicazione, ottenibile creando
pagine aderenti allo standard HTML 3.2 relegando l’uso di tecnologie troppo
recenti a funzionalità estetiche.
4.4.3 Compatibilità con i browser in circolazione
Per realizzare le pagine, e quindi il dialogo con l’utente, sono a disposizione strumenti
come le normali pagine HTML, le pagine ASP o PHP, gli script, le applet JAVA. La
scelta dipende principalmente da 2 fattori:
64
•
il livello di bellezza del sito (intesa sia come estetica che come performance),
•
la dimensione del gruppo di utenti che si accetta di escludere dal dialogo.
Componenti: oggetti COM distribuite sotto forma di librerie DLL che racchiudono funzionalità richiamabili
all’interno di programmi scritti anche in linguaggi diversi da quelli con i quali si è scritto e compilato il
componente. Vedi paragrafo ‘programmazione a componenti ’ 5.3.6
65
variabili di sessione e di applicazione: vedi paragrafo ‘linguaggio di programmazione ASP ’ 5.3.1
44
Formulazione del problema
Gli strumenti più sofisticati che consentono di rendere il dialogo più prestante e
divertente possono non essere supportati da tutti i browser in attualmente in
circolazione. Il primo errore da evitare è quello di presupporre che il profilo del possibile
compratore Internet coincida con un profilo che dispone delle ultime versioni di tutto.
Un altro aspetto fondamentale è la tecnica da adottare per le trasmissioni dei dati che
non possono circolare in chiaro sulla rete. Ad esempio, la protezione dei codici delle
carte di credito usate per gli acquisti in rete è più che strategica. Una scelta possibile è
quella della crittografia SSL.
Anche queste scelte influiscono sull’accessibilità del sito: non tutti i browser supportano
le varie versioni dell’ SSL e le ultimi versioni di SSL con più bit, non sono supportate
dalle versioni meno recenti dei browser in circolazione.
4.4.4 Soluzioni non adatte
La necessità di avere un e-mall dinamico ed espandibile mi obbliga ad escludere
diverse possibilità realizzative come lo sviluppo di un sito statico cioè basato su
linguaggi a contenuto statico (client-side)66 e su memorizzazione dei dati su flat-file.
L’eventualità, infatti, di poter prelevare dei dati come i dettagli dei prodotti e di
memorizzare i dati sulle vendite nonché dei profili degli utenti, mi impone di evitare l’uso
di pagine statiche (basate cioè su html puro) in quanto mi obbligherebbe a scrivere una
pagina descrittiva di prodotto per ogni prodotto per non parlare dei reparti e dei negozi.
Ricordo infatti che si tratta di un e-mall con una quantità di negozi, reparti e prodotti non
definita all’inizio e in continuo cambiamento anche in base a determinati periodi
dell’anno. Parte del materiale utilizzato, come ad esempio, foto o slogan pubblicitari,
potrà essere preesistente, ma il tempo necessario per comporre le varie pagine HTML
sarà molto lungo e costoso.
Poiché le caratteristiche di un prodotto, di un reparto o di un negozio variano nel tempo,
è necessario che le pagine WEB che compongono il sito, siano continuamente oggetto
di manutenzione. Anche l’operazione di modifica di un prezzo di un libro potrebbe
comportare la modifica di molte pagine. Quindi l’uso di pagine statiche (pagine che
riflettono in ogni momento la situazione esistente nell’istante in cui sono state create,
non quella in cui sono state lette) non è accettabile.
66
html, javascript, ecc…
45
Formulazione del problema
Si deve perciò usare una tecnica differente per la stesura delle pagine. Si è pensato di
usare la tecnologia delle pagine Server-side cioè elaborate direttamente sul server al
momento della richiesta e inviate al browser dell’utente mediante accessi a uno o più
databases. La possibilità di avere migliaia di prodotti, decine di promozioni legate ad
ogni singolo prodotto, migliaia di profili utente, rende praticamente inutilizzabile la
memorizzazione dei dati su file di testo. Ecco allora la necessità di avere uno o più
database relazionali che supportino centinaia di transazioni contemporaneamente e che
rendano quindi più scalabile e performante l’applicazione.
L’eventualità di usare un database orientato agli oggetti è stata scartata per diversi
motivi. Questa tipologia di database nasce per ottimizzare la memorizzazione di dati di
tipo multimediale (documenti pdf, immagini, video). Sebb ene il sito possieda questo tipo
di files il loro numero non è elevato e quindi la scelta di tale tipologia di DBMS non ci
avrebbe dato sostanziali vantaggi se non nella completa trasparenza nella loro gestione
(non ci sono problemi di coerenza dei link in caso di spostamento e ridenominazione
delle immagini in quanto integrate nel DBMS). Inoltre, memorizzare le descrizioni dei
prodotti sotto forma di file pdf o simili avrebbe reso più difficile la loro modifica da parte
dei gestori dei negozi, che ricordiamolo, possono intervenire in remoto per la gestione
del catalogo. La tecnologia a oggetti non è ancora abbastanza matura in termini di
performance e quindi ho pensato che
sia
auspicabile adottare una forma di
memorizzazione rapida da implementare 67, consolidata nel tempo (assenza di problemi
di gestione), con notevoli doti velocistiche nel recupero e memorizzazione dei dati a
tempo di esecuzione (quindi di tipo operazionale) e perfettamente integrata nel contesto
delle altre scelte architetturali 68 .
La scelta quindi è ricaduta su un database di tipo relazionale, ormai standard nell’uso,
nel quale gli oggetti multimediali sono stati trattati attraverso link alle posizioni nel File
System, memorizzando quindi la loro posizione e non l’oggetto stesso.
67
rapida da implementare: uno dei requisiti è rispettare i tempi stringenti di realizzazione e l’uso di un database non
comune come quelli a oggetti avrebbe comportato tempi di apprendimento e costi di gestione più alti.
68
vedi paragrafo ‘Scelte progettuali ’ 6.3
46
Formulazione del problema
Nasce quindi l’esigenza di progettare un sito web dinamico. Una pagina html dinamica è
una pagina che non esiste a priori ma che viene generata a partire da una richiesta
dell’utente e quindi essa rifletterà la situazione esistente nell’istante della richiesta
attraverso le informazioni memorizzate nel database.
47
Architetture e linguaggi
5 Architetture e linguaggi
5.1 Architetture a modelli
(*)69
Il modello di un’applicazione aziendale può essere una struttura costituita da sei
sottomodelli, ciascuno dei quali descrive un’area specifica dell’architettura e dei requisiti
di un’applicazione. I modelli sono:
•
il modello di sviluppo, che descrive le aree del processo di sviluppo inclusi i team
di sviluppo, processo di verifica, controllo del codice sorgente, punti di riferimento
e risultati di sviluppo. Si compone di 2 sottomodelli: il modello dei processi e
quello dei ruoli. Nel primo si affrontano i problemi legati alla pianificazione e alla
programmazione e nel secondo l’organizzazione del team di sviluppo.
•
Il modello aziendale, che descrive aspetti quali profitto del capitale investito,
vincoli del piano di lavoro.
•
Il modello utente, che descrive i requisiti dell’interfaccia utente, la quantità di
documentazione richiesta dall’applicazione, il livello di competenza richiesto
dall’utente.
•
Il modello logico, che descrive le entità, la struttura dell’applicazione, incluse
modellazione dei componenti e dei dati e definizioni dell’interfaccia.
•
Il modello tecnologico, che descrive le tecnologie utilizzate per implementare
l’applicazione, dalla piattaforma server agli strumenti di sviluppo.
•
Il modello fisico, che descrive la distribuzione fisica dell’applicazione, inclusi i
server utilizzati e la posizione dei componenti.
69
vedi [8] della bibliografia
48
Architetture e linguaggi
Figura 11: Architettura a modelli
70
5.2 Architettura di un’applicazione Web
(*)71
Le applicazioni Web includono un browser Web, script lato client e lato server, un
server WEB, componenti, un database che può contenere anche parte del codice sotto
forma di Stored Procedure 72.
La locazione di tali sistemi può avvenire su un unico computer o su computer diversi a
seconda delle dimensioni dell’intero sistema.
Ma vediamo di approfondire le varie tipologie di architetture con le quali possiamo
disporre le risorse in una rete.
5.2.1 Sistemi HOST
La prima architettura apparsa sullo scenario dell’elaborazione dati è quella basata su
sistemi HOST. Questa è un’architettura centralizzata dove tutto il carico elaborativo è
affidato all’HOST computer, macchina potente e spesso molto costosa. Sia la base date
che le applicazioni risiedono nell’HOST, gli utenti vi accedono medianti terminali stupidi.
Ancora oggi la maggior parte delle soluzioni è basata su questo tipo di architettura.
70
vedi [8] della bibliografia
71
Vedi [6],[8] della bibliografia
72
Stored Procedure: codice SQL memorizzato all’interno del DBMS che può essere eseguito senza compi lazione e
quindi con maggior velocità rispetto le query dinamiche.
49
Architetture e linguaggi
5.2.2 Architettura a LAN
Verso la fine degli anni ottanta iniziò a diffondersi l’architettura basata sulla LAN (reti
locali) che è l’antitesi dell’architettura centralizzata. Tutta la logica delle applicazioni
risiede su pc e grazie alla rete locale è possibile condividere risorse come database,
file, stampanti ecc… in un sistema informativo basato su LAN esistono n postazioni
intelligenti che accedono ad un server passivo contenitore di dati e risorse.
5.2.3 Client/Server
Con l’architettura client/server siamo in presenza di una divisione equa dei compiti tra
nodi client e nodi server. Nei client risiede tutta l’interfaccia utente, la logica per la
richiesta delle informazioni al server e la gestione dei risultati (front end del sistema
informativo). Il server si preoccupa di elaborare le richieste del client e fornire i risultati
(back end).
In questo modo front end e back end sono nettamente separati in termini di
progettazione, piattaforma e tecnologia hardware.
5.2.4 Multi-Tier
L’ultima novità è senza dubbio l’architettura Client/server a tre (o più) livelli (3-tier)73 e
tutto ciò che vi ruota intorno:middleware, componentwar e, oggetti distribuiti, broker74,
COM, DCOM e CORBA. Tale struttura consiste nel pensare ai livelli su cui
un’applicazione viene costruita. Si parla di applicazione su n livelli quando si cerca di
astrarre i servizi dell’applicazione in funzione del livello in cui essi operano.
73
Vedi [6],[8] della bibliografia [1l] della sezione ‘Principali siti di riferimento ’
74
broker: canale di comunicazione fra gli oggetti
50
Architetture e linguaggi
75
Figura 12: Esempio di architettura a 3 livelli
In genere si parla di applicazioni a 3 livelli dove i 3 livelli sono:
•
livello browser/client,
•
livello aziendale/business,
•
livello dati/fisico.
Livello client
Per quanto riguarda il livello client, le scelte da fare riguardano quali browser supportare
in termini di funzionalità/plug-in da essi supportati, come per esempio il supporto per
Javascript, Java, Flash ecc… Bisognerebbe sempre accantonare l’ipotes i per cui ogni
utente possa avere sempre l’ultima versione del browser più usato e con tutte le
funzionalità abilitate. Ci possono venire incontro le statistiche che ci possono dire che
fetta di utenti potremmo tagliar fuori se, per esempio, usassimo Javas cript nelle nostre
pagine. A questo punto, studiando in modo approfondito tali statistiche, possiamo
scegliere, in maniera ponderata e con rischi calcolati, quali funzionalità supportare.
Livello aziendale o server
75
vedi [1l] della sezione ‘Principali siti di riferimento ’
51
Architetture e linguaggi
A livello aziendale bisogna scegliere quali server usare e se usare script o componenti
per implementare la business logic e anche dove installarli. La scelta di usare script o
componenti riflette il fatto di dover scrivere applicazioni di piccolo o grande peso e di
dover nascondere tutta la logica che sta dietro ad un processo.
L’uso di componenti compilati anziché di script interpretati offre diversi vantaggi:
•
la velocità di esecuzione,
•
la possibilità di essere gestiti in maniera transazionale,
•
la possibilità di riutilizzo di tali componenti in ambienti diversi da quello per cui
sono stati scritti,
•
maggiore scalabilità,
•
più facilità nella gestione e nell’aggiornamento rispetto agli script
•
migliore incapsulamento delle informazioni e delle procedure.
D’altro canto c’è un maggior overhead in quanto ogni componente deve essere
istanziato e caricato, la scrittura dei componenti richiede la conoscenza dei fondamenti
della programmazione object oriented COM e l’abilità nell’uso degli ambienti Visual C o
VisualBasic. Diciamo che per piccole applicazioni l’uso degli script è senz’altro da
preferire per la velocità e semplicità con cui vengono scritte pagine con codice HTML e
Vbscript mescolati fra loro. Per le applicazioni di grandi dimensioni e con la necessità di
nascondere la business logic allora si passa ai componenti.
Livello dati/fisico
(*)76
A questo livello vengono scelti il DBMS e la tipologia di accesso ai dati (SQL, Stored
Procedure).
Per quanto riguarda la tipologia di accesso ai dati, posso affermare che i principali
modelli di API sono: ODBC, OLEDB e ADO.
ODBC è estremamente legato al mondo del relazionale. Il suo utilizzo è stato efficace
fino a poco tempo fa, quando la maggior parte dei dati era di tipo testuale. Oggi, la
notevole presenza di documenti multimediali come testi in pdf, imma gini, messaggi
email, video, pagine html rende il modello ODBC molto lento e poco efficiente nella
gestione di questo tipo di archivi.
76
vedi [6], [11], [19] della bibliografia
52
Architetture e linguaggi
Si è pensato, allora, sia di adottare database orientati agli oggetti oppure di modificare
le modalità di accesso ai db relazionali estendendoli alle nuove forme di dati. La
seconda soluzione sembra sia stata la vincente, in quanto, l’utilizzatore finale ha il solo
compito di modificare in minima parte i propri script di accesso ai dati, mentre i
progettisti dei DBMS debbono aggiornare i moduli che, in tali sistemi di database,
hanno il compito di interporsi tra i dati e il mondo esterno (driver di interconnessione),
lasciando quindi inalterato tutto il resto, compresi l’insieme degli strumenti a corredo dei
vari DBMS già noti agli utilizzatori. La scelta di usare un database Object Oriented
implica l’acquisto e l’apprendimento di uno strumento completamente nuovo che non
ripaga sempre, in termini di tempo di esecuzione query e di efficienza, gli sforzi
economici sostenuti.
Nel caso di un sito di e-commerce generico per esempio, la presenza di file multimediali
non è notevole come potrebbe esserlo per un archivio di dischi o video musicali e il
database deve integrarsi perfettamente con altre entità quali web server e la tecno logia
scelta per la creazione delle pagine web. Quindi è auspicabile, in questi casi, usare
strumenti più maturi e comunque standard de facto.
Una nuova modalità di accesso a database che rendesse più semplice e efficiente la
gestione del dati multimediali è stata OLEDB. ODBC non è stato eliminato ma
ridimensionato e usato nelle situazioni dove c'è il relazionale e dove le applicazioni non
supportano la modalità OLEDB. La differenza fra ODBC e OLEDB sta nel fatto che
mentre ODBC fornisce un insieme di API, OLEDB è costituito da una serie di interfacce
basate sul modello COM. ODBC è function oriented, mentre OLEDB è object oriented.
Implementare interfacce OLEDB significa realizzare OLEDB Provider. Gli applicativi
che accederanno mediante tali provider alle fonti dati si chiameranno OLEDB Dataconsumer. Con OLEDB sarà quindi possibile accedere a sorgenti di dati relazionali, file
di testo, messaggi email se per ognuno di essi ci sarà un provider.
Scrivere data-consumer che supportino OLEDB è molto difficile in quanto bisogna
conoscere le specifiche COM di tali interfacce e saper programmare in C o in
VisualBasic. Per evitare di conoscere in modo approfondito questi linguaggi e
velocizzare la realizzazione di applicativi con accesso a database che supportino
OLEDB viene progettato ADO 77, una libreria DLL basata su OLEDB e COM.
77
ADO vedi paragrafo ADO 5.3.1.3
53
Architetture e linguaggi
Figura 13: Architettura sistema OLE-DB
78
Per quanto riguarda le Stored Procedure bisogna dire che il loro uso aumenta
l’efficienza con cui vengono processate le query, in quanto, se si usasse l’SQL dinamico
all’interno di pagine server, il driver del database dovrebbe prima analizzare la query,
convertirla in un formato riconosciuto dal db e quindi eseguirla, aumentando, di fatto,
l’overhead del DBMS.
L’uso di SP, ovvero di blocchi precompilati di codice SQL, consente di passare i
parametri appropriati in maniera semplice e di accedere ai dati nel DB riducendo al
minimo la quantità di dati da trasferire attraverso la rete.
78
vedi [11] della bibliografia
54
Architetture e linguaggi
5.3 I linguaggi di programmazione
Facciamo una panoramica sui diversi tipi di linguaggio, di strumenti e tecnologie che
rendono possibile lo sviluppo di siti internet dinamici e connessi a database.
•
ASP,
•
PHP,
•
script CGI,
•
JSP,
•
programmazione a componenti.
Nei paragrafi seguenti verranno analizzati i vari linguaggi o tecnologie anche se per
Virtualmarket ne è stata usata essenzialmente una, ASP (PHP è stato usato ma
relegato al prelievo di dati memorizzati nel server Linux che gestisce la posta).
Verranno proposti degli esempi che, per quanto riguarda ASP, sono porzioni di codice
ripulito e abbreviato, del sistema sviluppato, mentre per quanto riguarda PHP e JSP
sono porzioni di codice che eseguono le stesse operazioni delle prime e sono stati
inseriti per confrontarne le differenze.
5.3.1 ASP
(*)79
Asp è l’acronimo di ACTIVE SERVER PAGES ed è una tecnologia legata all’ambiente
Microsoft Windows NT con Internet Information Server.
L’introduzione dei linguaggi di scripting client side avevano lo scopo di bilanciare il
carico di lavoro tra il browser e il server. Nella situazione delineata con ASP c’è un
ritorno ad un modello centrato sul server.
A differenza di ciò che avviene per i comuni documenti HTML che il server si limita a
rilasciare al cliente senza esaminarne il contenuto, le pagine ASP sono elaborate prima
della spedizione. Esse contengono delle istruzioni che sono interpretate dal server e
che producono un risultato codificato in html e aggiunto al normale contenuto della
pagina. Uno dei vantaggi offerti è per esempio che da uno stessa pagina ASP si
possono generare diversi documenti in base al risultato dei comandi ivi contenuti. Tali
79
vedi [6], [7], [8], [9] della bibliografia
55
Architetture e linguaggi
comandi sono codificati mediante un linguaggio di scripting, in genere VBSCRIPT
oppure JSCRIPT. Il codice viene limitato dai tag <% e %>.
Le istruzioni contenute nelle pagine ASP possono produrre vari effetti, che vanno dalla
formattazione automatica dei contenuti all’accesso ad informazioni remote quali i
database.
In questo modo, la richiesta di un utente di visualizzare il contenuto di una tabella si
traduce in una richiesta da parte di ASP verso il database di accedere alla tabella in
questione , rappresentarla internamente con un oggetto ADO 80 e tradurre il contenuto in
una tabella HTML. La possibilità di interagire con database ODBC rende ASP ideale per
lo sviluppo di applicazioni distribuite, indipendentemente dal database utilizzato.
5.3.1.1Global.asa
(*)81
Uno dei maggiori problemi che gli sviluppatori internet si trovano ad affrontare,
indipendentemente dalla tecnologia utilizzata, è la difficoltà di creare una vera
applicazione su Internet. L'interazione fra un browser e un server WEB è una
transazione che non ha alcuna informazione di stato, con cui il server trasmette una
pagina WEB al client e poi dimentica perfino la sua esistenza. Quando, in un secondo
tempo, il client richiede un'altra pagina Web, il server non ricorda la prima richiesta. In
una normale applicazione questo non avviene in quanto tra l'avvio del programma e la
sua chiusura i dati possono essere facilmente memorizzati in una variabile. Per un sito
internet questo schema non è valido. Come determinare l'avvio e la chiusura di una
applicazione? Se l'utente entra in un sito e visualizza una pagina si può dire che
l'applicazione è lanciata? ma cosa avviene se l'utente abbandona il sito e poi vi torna
dopo 5 minuti?
Questo problema della definizione dell'avvio e della chiusura di un'applicazione influisce
sulla possibilità di gestire correttamente le variabili e il flusso di lavoro. Una soluzione a
questo problema in parte è la definizione del protocollo HT TP1.1 comunque ancora non
pienamente supportato. Ancora migliore è la soluzione offerta da Microsoft per le sue
Active Server Pages e che hanno contribuito in buona parte alla scelta di tale tecnologia
piuttosto che PHP o JSP per la realizzazione di Virtualmarket.
80
Componente ActiveX responsabile della gestione delle connessioni al db all’interno di uno script ASP.
81
Vedi [9] della bibliografia
56
Architetture e linguaggi
La soluzione Microsoft è la presenza di un file denominato GLOBAL.ASA, che viene
usato per determinare l'avvio e la chiusura di un'applicazione e della sessione di ogni
singolo utente. GLOBAL.ASA rileva 4 eventi chiavi nel sito:
Application_OnStart, Application_OnEnd, Session_OnStart e Session_OnEnd.
Importanti sono i concetti di applicazione e sessione. Applicazione può fare riferimento
all'insieme di browser che accedono a tutte le pagine della stessa directory. Sessione si
riferisce a un singolo browser che accede a quelle pagine. Una sessione di un singolo
browser esiste finché l'utente continua a chiedere pagine. Se esiste un valore di 20
minuti per il Time-out e se l'utente non richiede pagine per più di 20 minuti la sessione
termina e viene generato l'evento Session_OnEnd. Quando tutte le sessioni utente
nella directory virtuale sono terminate viene generato l'evento Application_OnEnd.
Il file GLOBAL.ASA è fondamentale per una corretta nonché chiara gestione delle
sessioni web che avvengono sul sito dove esso è posto.
In realtà è una delle caratteristiche più utili, in quanto ci permette di intercettare alcuni
eventi. Gli eventi, essendo precisi, sono l'inizio e la chiusura dell'applicazione web e
della singola sessione.
Ecco un tipico esempio di global.asa:
<SCRIPT Language="VBScript" RUNAT="server">
Sub Application_onStart()
' qui la routine di partenza
' es: variabili con stringhe di connessione
' a data base, etc...
'Viene generato quando la prima pagina dell'applicazione
'viene eseguita per la prima volta da un utente
End sub
Sub Application_onEnd()
' in genere inutilizzato
' può essere utile però per monitorare i restart
' del server (tramite invio di e-mail o SMS)
'Viene generato alla chiusura del server
End sub
Sub Session_onStart()
' inizio della sessione
57
Architetture e linguaggi
' in genere viene utilizzata per contare
' le sessioni attive nell'applicazione
'Viene generato la prima volta che un utente esegue una pagina nell'applicazione
End sub
Sub Session_onEnd()
' fine della sessione (dopo il timeout)
' serve per liberare eventuali riferimenti
' creati per oggetti con scope session
'Viene generato quando l'utente chiude la session (session.abort) oppure quando abbandona l'applicazione (in 'questo caso dopo il
‘time-out impostato nel server)
End sub
</SCRIPT>
il GLOBAL.ASA contiene dei tag <SCRIPT> che racchiudono le sezioni script. Questi
tag contengono uno speciale attributo, denominato RUNAT=Server che specifica che il
VBScript deve essere eseguito sul server e non sul client.
Microsoft definisce applicazione Internet: una directory virtuale e tutte le sue pagine. Se
un utente richiede una pagina Web da una directory ‘mall2000’ viene avviata
l'applicazione mall2000 e viene eseguito il GLOBAL.ASA contenuto in tale directory. In
base a questa definizione, un'applicazione può essere usata da più browser
contemporaneamente. l'evento Application_OnStart viene generato una sola volta
quando il primo utente richiede la prima pagina. In seguito, quando gli altri utenti
richiedono pagine della stessa directory viene generato solo l'evento Session_OnStart.
5.3.1.2Oggetti ASP più importanti
Oggetto Application
L'oggetto Application consente di creare variabili di applicazione, disponibili per tutti gli
utenti di un'applicazione. Nel caso di Virtualmarket un esempio d’uso è mantenere in
una variabile application, denominata shopID, l'indice del record della tabella Shop
relativa al negozio corrente attraverso la sintassi:
mioindice=Application("shopID")
58
Architetture e linguaggi
Poiché la variabile è disponibile per più utenti contemporaneamente è necessario tener
presente la simultaneità: non si può essere certi che due utenti non tenteranno di
impostare la variabile su due valori diversi lo stesso momento.
Per far fronte a questa situazione esistono due metodi: LOCK e UNLOCK. Il metodo
Lock blocca tutto l'oggetto Application non solo la variabile che si sta modificando, per
cui è necessario sbloccarlo subito dopo aver modificato il valore di una variabile:
Application.Lock
Application("shopID")=3
Application.Unlock
I dati presenti nelle variabili d'applicazione vengono distrutti nel momento in cui viene
generato l'evento applicationOnEnd.
Oggetto Session
Se si vogliono mantenere informazioni riguardanti il singolo utente o la singola sessione
allora si deve far uso delle variabili di tipo Session.
Le variabili di tipo Session sono riservate a un singolo utente ed esistono per tutta la
durata di una sessione. Quindi dopo venti minuti, se tale è il valore di TimeOut
impostato nel server web, tali variabili vengono deallocate. E' possibile creare variabili
di sessione in qualunque pagina Web o in file GLOBAL.ASA e vi si può accedere da
qualunque pagina mediante la sintassi:
miavar=Session("nome_sess_var")
Un esempio di uso in VirtualMarket delle variabili di sessione è quello di mantenere
l'indice, denominato pclogid, del record nella tabella DM_PcLOG che si riferisce ai dati
di navigazione dell'utente corrente (referrer, querystring, data_iniziosessione, ecc...).
Un'alternativa alle variabili di sessione potrebbe essere quella di mettere nella
querystring di ogni link un riferimento a tale ID ma è possibile che un utente malizioso
possa modificare tale valore. Per evitare questo eventualità, viene usata, appunto, una
variabile di sessione il cui valore, sconosciuto all’utente, non può essere visualizzato
all’interno del codice HTML della pagina client generata e quindi non può essere
modificato. Inoltre in questo modo, usando cioè le variabili di sessione, i link sono più
59
Architetture e linguaggi
brevi e quindi più puliti, memorizzando in essi solo le informazioni necessarie come il
codice del prodotto o della categoria di cui si stanno visualizzando i dettagli.
Un appunto all'uso delle variabili session e dell'evento Session_OnStart è relativo alla
abilitazione dei cookies da parte del browser dell'utente. Se i cookies sono disabilitati
allora l'evento Session_OnStart viene eseguito ad ogni richiesta di pagina da parte
dell'utente e anche le vecchie variabili di sessione vengono perse. Questo perché le
variabili di sessione vengono memorizzate per ogni utente sul server ma indicizzati
tramite un Global Unique Identifier (GUID) che invece il server Web memorizza sul pc di
ogni utente tramite cookie di sessione. Dato che i cookie sono disabilitati ad ogni
richiesta il server genera un nuovo GUID e quindi le vecchie variabili non saranno più
raggiungibili
a meno che non vengano inizializzate solo nel metodo Session_OnStart. In questo
modo allora verranno reinizializzate in modo corretto se non si sono verificati nel
frattempo side effect.
Oggetto Response
L'oggetto Response gestisce i contenuti restituiti da ASP a un browser:
response.write("ciao mondo")
oppure
=("ciao mondo")
equivale a scrivere ‘ ciao mondo ’ sul browser.
In realtà l'oggetto Response è capace anche di scrivere nei cookies
response.cookies("nomecookie")(chiave) = value
E di redirezionare automaticamente l'utente ad un'altra pagina oppure di decidere dopo
quanto tempo una pagina viene cancellata dalla Ram (page expiration) e di specificare
il contenuto HTTP della risposta corrente.
Oggetto Request
Lo scambio dei dati tra client e server è fondamentale in un'applicazione WEB. Per
inviare dati al client il server confeziona delle pagine WEB. Viceversa il client invia dati
al server mediante trasmissioni di moduli creati mediante il tag <FORM>.
60
Architetture e linguaggi
Il processo di trasmissione di un modulo è controllato mediante due attributi del tag
FORM e cioè METHOD e ACTION. Il primo determina la modalità di invio dei dati al
server (POST e GET). Con il metodo POST, il browser impacchetta tutti i dati e li invia
al server, con il metodo GET li inserisce come parte integrante della URL nella sezione
querystring. In questo caso c'è un limite nella dimensione in bytes dei dati da mandare
tramite il metodo GET (255 bytes).
L'attributo ACTION specifica la pagina di destinazione dei dati trasmessi.
Da parte del server, questi dati possono essere nuovamente suddivisi in campi e valori
e utilizzati per qualunque scopo. L'oggetto Request analizza proprio i vari campi per
restituirne il valore.
esempio:
<%=Request.Form(email)%>
in questo caso viene visualizzato a video il valore del campo email del form.
L'oggetto Request analizza anche i campi di una querystring tramite la sintassi
<%=Request.querystring("email")%>
L'oggetto Request ha anche altri usi primo fra tutti quello di conoscere il contenuto di un
cookie.
<%=request.cookie("nomecookie")%>.
5.3.1.3ADO
(*)82
I componenti ASP non sono altro che Componenti ActiveX creati con diversi linguaggi:
Visual Basic, Visual C, Visual J++.
Uno dei più importanti è il componente Database ACCESS o ADO. Nella pubblicazione
di database su WEB si utilizza questo componente e gli oggetti in esso contenuti per
leggere e scrivere su fonti dati ODBC. Tramite l'oggetto Connection per esempio si può
aprire una connessione con qualsiasi fonte dati ODBC:
<%
'dichiaro variabile
'Dim objConnection
82
Vedi [6] della bibliografia
61
Architetture e linguaggi
'istanzio l'oggetto connection
Set Objconnection=Server.CreateObject("ADODB.Connection")
'apre la connessione
objConnection.OPEN "Sales","sa",""
%>
una volta aperta la connessione con la fonte dati è possibile usare un oggetto
Recordset per eseguire istruzioni SQL e restituire un insieme di record filtrati mediante
l'istruzione SQL.
<%
'dichiaro variabile
Dim objRecorset
'creo l'oggetto recordset
Set objrecordset=server.createObject("ADODB.recordset")
'esegue la query
objRecordSet.open "select * from miatabella", objconnection
%>
dopo aver recuperato i dati è possibile leggerli mediante i metodi MoveFirst, MoveLast,
MoveNext, MovePrevious.
Un esempio di pagina ASP:
<html>
<body>
ciao mondo. Sono le <%=Now()%>
</body>
</html>
che produce una pagina html con questo codice
<html>
<body>
ciao mondo. Sono le 5:06:14 PM 24/11/2000
</body>
</html>
Il server in questo caso provvede alla sostituzione del testo della funzione racchiusa fra
i simboli <% e %> con il risultato della sua valutazione, nella fattispecie la data e l’ora
correnti.
5.3.2 PHP
(*)83
83
Vedi [16],[21] della bibliografia e [11] dei ‘Principali siti di riferimento ’
62
Architetture e linguaggi
Fornire ad un database un interfaccia WEB sotto UNIX è sempre stato macchinoso:si è
ricorso a script CGI, solitamente scritti in PERL, che si preoccupano di interrogare il
database e fornire il risultato sotto forma di HTML. Tale metodo a volte è sconveniente,
a causa della complessità del PERL, e del fatto che il caricamento dell’interprete in
memoria ogni volta, potrebbe sovraccaricare la macchina. Inoltre chi si occupa
dell’aspetto estetico delle pagine, scritte in HTML, non è generalmente in grado di
modificare uno script in PERL.
Il PHP è un linguaggio di programmazione che può essere usato come filtro sui web
server (in genere APACHE) e che permette di includere i propri script direttamente
all’interno delle pagine html (come ASP). In pratica tutto ciò che sarà racchiuso tra <? e
?> sarà interpretato dal filtro, eseguendo le istruzioni contenute in tali tag. Il PHP è un
vero linguaggio di programmazione che contiene quindi variabili, vettori, funzioni, cicli,
operatori su file e db ecc…
Esempio di pagina PHP 84:
<html>
<body>
ciao mondo. Oggi è il <?=Date("d/m/Y")?>
</body>
</html>
che produce una pagina html con questo codice
<html>
<body>
ciao mondo. Oggi è il 24/11/2000
</body>
</html>
mentre per l’accesso al db (in questo caso Access) e stampa del contenuto di una
tabella ‘products’ si possono usare librerie apposite come ADODB:
(l’uso della libreria ADODB si rende necessario in quanto a differenza di ADO di ASP in PHP i motori
database sono interrogati usando funzioni diverse per ognuno di essi. Quindi se si debbono usare
database differenti si usano delle librerie di funzioni generiche, come in questo caso, che si preoccupano
di richiamare l’API adatta in base al database usato)
84
Gli esempi non sono presi dal progetto sviluppato, (realizzato in ASP) ma adattati per renderli confront abili con
quelli realizzati in ASP.
63
Architetture e linguaggi
<html>
<body>
<?
include('adodb.inc.php');
// carica la libreria ADODB
ADOLoadCode('access');
// carica il codice relativo alla gestione di Database Access
$conn = &ADONewConnection();
// crea una nuova connessione
$conn->PConnect('northwind'); // connessione al db MS-Access, northwind
$recordSet = &$conn->Execute('select * from products');
while (!$recordSet->EOF) {
print $recordSet->fields[0].' '.$recordSet->fields[1].'<BR>';
$recordSet->MoveNext();
}
$recordSet->Close(); // chiusura del recorset
$conn->Close(); // chiusura della connessione
?>
</body>
</html>
Nell’ultima versione di PHP (4) è stata introdotta la possibilità di gestire gli oggetti COM.
questo risulta importante quando si vuol sfruttare la potenza dell’oggetto ADO in
particolare che mette a disposizione tutto sommato una libreria ben fatta.
Esempio d’uso: apertura di una connessione a database access
<?
$dbc = new COM("ADODB.Connection");
$dbc->Provider = "MSDASQL";
$dbc->Open("nwind");
$rs = $dbc->Execute("select * from products");
$i = 0;
$fld0 = $rs->Fields(0);
$fld1 = $rs->Fields(1);
$fld2 = $rs->Fields(2);
while (!$rs->EOF) {
$i += 1;
print "$fld0->value $fld1->value $fld2->value<BR>";
$rs->MoveNext(); /*updates fld0, fld1, fld2 !*/
}
$rs->Close();
?>
apertura di word
<?
$word=new COM("word.application") or die("Cannot start MS Word");
64
Architetture e linguaggi
print "Loaded word version ($word->Version)\n";
$word->visible = 1 ;
$word->Documents->Add();
$word->Selection->Typetext("This is a test");
?>
Tra i pregi del php ci sono la velocità, la robustezza e il fatto che essendo Open
Software, si ha la visibilità sui sorgenti e la possibilità di correggere bug o apportare
migliorie. Tra i difetti debbo menzionare l’accesso al database attraverso API del DBMS
che rende difficili migrazioni per esempio da Oracle a Sybase.
5.3.3 Script CGI
“Un programma CGI è un comune eseguibile o uno script scritto in PERL per esempio,
in grado di prelevare i dati forniti dall’utente (dallo standard input o dalle variabili di
ambiente), elaborarli e stampare sullo standard output il risultato”. 85 Uno script CGI di
solito è invocato mediante una form attraverso il pulsante submit. Nel momento in cui
l’utente preme il submit il browser si connette al web server, mandandogli i dati inseriti e
la richiesta di esecuzione del CGI. Il server esegue il CGI richiesto, passandogli a sua
volta i parametri appena ricevuti. Il web server comunica con lo script attraverso i canali
di input/output. Tutto questo quando viene usato il metodo post. Si può usare anche il
metodo GET all’interno di una form. In questo caso il Server Web comunica i parametri
allo script CGI settando una variabile d’ambiente. Con i programmi CGI e’ possibile
anche l’accesso ai database. Per esempio, per il PERL ci sono delle librerie, chiamate
DBI, che permettono di accedere a archivi relazionali e a creare in maniera abbastanza
semplici dei siti web dinamici e quindi Data-Driven.
5.3.4 JSP e Java Servlet
(*)86
Java deve gran parte del suo iniziale successo alle applet, che insieme ai plugin/activeX
e al Javascript rappresenta la parte client-side del web programming. Tuttavia
sviluppare applicazioni per internet significa nella maggior parte dei casi dover gestire
sia la parte client (interfaccia) che la parte server (accesso a database e gestione
85
Vedi [16] della bibliografia
86
Vedi [18],[20] della bibliografia
65
Architetture e linguaggi
oggetti aziendali). Data la necessità di considerare entrambe le facce della medaglia è
naturale che molti sviluppatori desiderino usare un solo linguaggio per entrambe le
tipologie di applicazioni. Purtroppo chiunque abbia tentato di far server-side
programming con Java ha scoperto che scrivere CGI in Java è molto inefficiente. Oltre
all’overhead considerevole dovuto al bootstrap dell’interprete e al caricamento delle
librerie non usate per ogni richiesta java non consente l’accesso alle variabili
d’ambiente tipiche della programmazione CGI. E allora c’è bisogno di un wrapper 87 in C
che invoca l’interprete Java passando l’ambiente sulla riga di comando. Quindi alle
esigenze di rendere pratica la server side programming in Java la Sun ha introdotto le
servlet.
5.3.4.1Le Servlet
Le servlet usano una serie API che permettono al web server di interagire con
programmi in Java che lo estendono, rendendolo quindi capace di fornire nuovi servizi.
Sia servlet che applet girano in una virtual machine, la prima gira nel web server la
seconda nel browser.
Una servlet web gestisce le richieste inviate tramite URL oppure processa l’output
proveniente da moduli. Le servlet quindi svolgono la stessa funzione delle CGI, ma
rispetto a quest’ultime presentano numerosi vantaggi. Innanzitutto viene risolto il
problema dell’inefficienza. Una servlet viene caricata all’avvio del web server e rimane
in memoria a servire le richieste. L’overhead per la gestione di una richiesta è pari alla
chiamata di un metodo, non al bootstrap dell’interprete, quindi di gran lunga inferiore.
Una conseguenza di questa architettura è che le servlet possono mantenere uno stato
e quindi ricordare varie info come per esempio il numero di volte in cui è stata chiamata.
Le servlet possono comunicare fra loro e possono essere concatenate (una richiesta
può essere gestita da una pipeline di servlet). Essendo scritte in java si accede alle sue
numerose qualità come:
87
•
l’accesso al db usando un’ interfaccia standard (jdbc)
•
il multithreading
•
la security,
•
le api per il semplice uso dei protocolli di rete,
Wrapper: porzione di codice che racchiude un’altra porzione di codice scritto in un altro linguaggio e di solito ne
invoca solo l’esecuzione.
66
Architetture e linguaggi
•
ma soprattutto il fatto che le applicazioni scritte sono riutilizzabili senza modifiche
su qualunque piattaforma che disponga di java, un web server conforme al JDBC
e un database dotato di driver JDBC.
Indipendentemente dalla tecnologia che si utilizza per la creazione di contenuti
dinamici, si ha spesso il problema di far convivere coloro che si occupano della parte
logica da coloro che si occupano della pura visualizzazione. Per produrre contenuti
dinamici in Java, il primo approccio è stato quello di inserire codice HTML all’interno del
codice Java delle servlet. Questo porta alla scomoda conseguenza che se si ha la
necessità di modificare la parte HTML di un contenuto, bisogna necessariamente
modificare il codice Java e ricompilare il tutto. Inoltre coloro che programmano in Java
solitamente non sono gli stessi che programmano in HTML, soprattutto in un ambiente
di alta specializzazione. Ci si è accorti quindi della necessità di un meccanismo che
permetta di dividere il più possibile la produzione dei dati da visualizzare dal modo con
cui questi sono visualizzati.
Una Servlet è una classe che implementa l’interfaccia javax.servlet.Servlet che descrive
alcuni metodi, il più importante dei quali è il metodo service() che ha la seguente firma:
public void service(ServletRequest request, ServletResponse response) throws IOException,ServletException;
Il metodo service() contiene le logica che descrive come devono essere elaborate le
informazioni relative ad una richiesta incapsulate nell’oggetto request, per generare una
risposta utilizzando gli strumenti offerti dall’oggetto response.
Esempio di codice Java contenente una servlet 88:
import
javax.servlet.*;
import
javax.servlet.http.*;
public class Saluto extends HttpServlet {
private static final String NOME="NOME";
/**
* Contiene la logica che a partire dalle informazioni contenute nell'oggetto
* request produce una risposta usando gli strumenti offerti dall'oggetto
88
Questa porzione di codice non deriva dal progetto ma è stata inserita per facilitare il confronto con gli altri
linguaggi.
67
Architetture e linguaggi
* response
*/
public void service(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException,ServletException{
// Leggiamo il valore del parametro NOME
String nome=request.getParameter(NOME);
// Inizializziamo la Stringa di output
String output="NESSUNO";
// Se viene passato il parametro lo assegnamo come stringa di output
if (nome!=null)
output=nome;
// Creiamo l'output
// Impostiamo il Content-type
response.setContentType("text/html");
// Prendiamo lo stream di uscita
ServletOutputStream out= response.getOutputStream();
// Mandiamo l'output in formato html
out.println("<HTML>");
out.println("
<HEAD><TITLE>Saluto</TITLE></HEAD>");
out.println("
<BODY>");
out.println("
out.println("
<H1> Hello "+output+" </H1>");
</BODY>");
out.println("</HTML>");
}// fine
}// fine servlet
tale listato mostra una semplice servlet che legge il valore del parametro NOME e
produce un contenuto HTML dinamico con il classico ‘HELLO’. Nel caso in cui non si
fornisca un valore al parametro verrà salutato ‘NESSUNO’.
Tale servlet è molto semplice ma ha il difetto di contenere codice HTML. Se dovessimo
riutilizzare la servlet in pagine html diverse dovremmo modificare il codice e quindi
creare classi diverse. Riutilizzare la servlet descritta precedentemente significherebbe
fare un copia e incolla del codice, cambiando la parte html e cambiando nome alla
classe. Questa non è sicuramente la soluzione ottimale.
Una prima soluzione in versione Java a questo problema viene data dalle JSP.
5.3.4.2Jsp
La servlet precedente può essere simulato in JSP in questo modo:
<HTML>
<HEAD><TITLE>Saluto</TITLE></HEAD>
<BODY>
<%String chi = request.getParameter("NOME");
if (chi==null) chi="NESSUNO";
68
Architetture e linguaggi
%>
<H1> Hello <%= chi%> </H1>
</BODY>
</HTML>
tale codice descrive una pagina jsp (Java Server Pages) che ci permette di ottenere lo
stesso risultato della precedente servlet. In questo caso abbiamo, però, il vantaggio che
le eventuali modifiche nella parte HTML non implicano modifiche nella parte java con
conseguente compilazione del codice, o almeno non saremo noi a farla come descritto
nel prossimo paragrafo. Notiamo come con le pagine JSP si possa presentare una
situazione all’opposto di quello che accade nel precedente Servlet, cioè abbiamo codice
java all’interno di codice html.
Page Traslation e Compilation
Alla luce di quanto visto nel paragrafo precedente ci si potrebbe chiedere qual è la reale
differenza tra una servlet ed una pagina JSP. In realtà il risultato è lo stesso: quello che
viene eseguito ad ogni richiesta è un metodo service() di una servlet. La differenza è nel
modo con cui questa servlet viene creata. Nel primo caso programmiamo la servlet
direttamente, mentre nel secondo caso esiste un JspContainer (installato nel
WebServer) che esegue le operazioni di page translation e page compilation che
portano alla realizzazione, in modo automatico, delle servlet che eseguono il servizio
descritto dalle pagine JSP.
Jsp e JavaBean:
L’esempio di pagina jsp realizzato non ci permette ancora di risolvere il problema
relativo alla divisione tra codice java e codice html. Finora abbiamo semplicemente
portato il codice java all’interno del codice html. Fortunatamente le pagine JSP ci
permettono di accedere, con opportuni tag (e quindi non opportune istruzioni Java) ai
servizi offerti da alcuni componenti. È possibile accedere a questi servizi senza vederne
l’implementazione e quindi il codice Java che ci sta dietro.
package com.carli.jsp;
public class SalutoBean {
private
String
chi;
public SalutoBean(){}
public void setChi(String chi){
this.chi=chi;
}// fine
69
Architetture e linguaggi
public String getChi(){
return chi;
}// fine
public String getSaluto(){
return "Hello "+((chi==null)?"NESSUNO":chi);
}// fine
}// fine classe
Supponiamo di voler delegare il saluto della pagina precedente ad un B ean89 che si
chiama SalutaBean. Esso è molto semplice in quando dispone di una proprietà che si
chiama chi e permette di accedere, attraverso il metodo getSaluto(), al saluto da
visualizzare. La logica di creazione del saluto è incapsulata nel Bean. Notiamo anche
che la scrittura dei metodi di accesso alle proprietà seguono le regole descritte nelle
specifiche JavaBean e che prevedono la definizione dei metodi get/set associati alle
varie proprietà. Il seguente listato fornisce un piccolo esempio di utilizzo di un Bean
all’interno di una pagina JSP.
<HTML>
<HEAD>
<TITLE>Prova di una pagina JSP</TITLE>
</HEAD>
<BODY>
<jsp:useBean id="saluta" class="com.carli.jsp.SalutoBean" />
<jsp:setProperty name="saluta" property="chi" param="NOME"/>
<%= saluta.getSaluto()%>
</BODY>
</HTML>
A parte alcune considerazioni relative ai tag da utilizzare è bene sottolineare il fatto che
nella pagina jsp non sia presente codice java ma semplicemente l’utilizzo di alcuni tag
che permettono di accedere a servizi esposti da Bean che ne nascondono
l’implementazione.
Il mio esempio è volutamente semplice ma nulla vieta di creare dei Bean che
permettono di accedere, ad esempio, ad informazioni su un db, che si integrano con
sistemi legacy90 attraverso le librerie RMI o CORBA ecc..
89
bean: modulo java precompilato, i cui metodi e proprietà sono richiamabili all’interno di un file java dopo averne
importato il contenuto
70
Architetture e linguaggi
Aspetti negativi di JSP
•
Java e quindi le JSP mettono a disposizione degli strumenti abbastanza poveri
per lo sviluppo RAD di applicazioni.
•
L’esecuzione delle pagine JSP rispetto alla tecnologia ASP o addirittura alle
pagine PHP è molto più lenta.
•
JSP rende troppo facile mescolare i dettagli di presentazione con le regole di
business (business logic) a meno di usare i javabean. Comunque tale problema
è comune anche a ASP e PHP.
5.3.5 Confronto fra i vari linguaggi
5.3.5.1ASP e CGI
Quali vantaggi offre la tecnologia ASP rispetto alle applicazioni CGI? Un’applicazione
CGI non è altro che un programma scritto in un qualsiasi linguaggio di programmazione
che segue alcune regole per l’interazione con il web server ma è altamente inefficiente.
Innanzitutto c’è da considerare il fatto che il server ad ogni richiesta di esecuzione di
un’applicazione CGI avvia un nuovo processo causando una caduta nelle prestazione
del server. Inoltre la creazione di una nuova istanza di un’applicazione CGI impedisce la
condivisione di risorse e dati se non tramite l’uso di file condivisi o database con
conseguente perdita di prestazioni. Inoltre, poiché le applicazioni CGI sono esterne al
server WEB non vi è possibilità di interagire con esso in modo semplice.
ASP da parte sua non richiede la creazione di un nuovo processo e quindi rende
possibile anche la condivisione di informazioni a livello GLOBALE e a livello di singola
SESSIONE di utente mediante le variabili built-in Session e Application superando
l’assenza di stato tipica del protocollo HTTP.
5.3.5.2ASP e JSP
Gli aspetti da considerare sono molti anche se il principale è dato dal Web Server e
dalla piattaforma utilizzata. Le JSP sono realizzate in Java per cui portabili sotto ogni
piattaforma mentre le ASP sono integrate in un ambiente Mic rosoft (anche se c’è stato
90
Sistemi legacy: sistemi preesistenti strutturati in maniera magari non conforme agli standard attuali
71
Architetture e linguaggi
un tentativo di creare pagine ASP sotto Unix). Sun non ha rilasciato un prodotto ma ha
pubblicato delle specifiche (insieme di interfacce) che diversi produttori di software
possono implementare in modo differente. Le ASP sono in vece legate ad Internet
Information Server 91. Abbiamo visto che all’interno di una pagina JSP si possono
utilizzare i servizi offerti dai JavaBean. Anche le ASP permettono l’accesso a
componenti (ActiveX) la cui implementazione è però legata alla piattaform a Microsoft.
Possiamo quindi dire che le ASP possono essere utili nel caso in cui si utilizzi una
architettura completamente Microsoft. Per quello che riguarda le prestazioni possiamo
dire che le JSP hanno il vantaggio di essere compilate solamente al primo utilizzo
mentre le pagine ASP sono interpretate.
5.3.5.3ASP e PHP
ASP è costruito su un’architettura basata sul modello COM. Quando viene usato
Vbscript, in realtà si stanno usando oggetti del modello COM (le classi Server, Request,
Response, ecc… ne fanno parte). Quando si accede a database si usano oggetti COM
(classi delle librerie ADO: Connection, Recordset), Quando si accede ad un file, tramite
ASP, si sta usando un oggetto COM (classe FileObject). Tutti questi utilizzi di oggetti
COM rendono ASP più lento rispetto a PHP in quanto i vari oggetti debbono
comunicare attraverso l’infrastruttura di rete. Nei moduli PHP ogni cosa gira nello spazio
di memoria del motore PHP. Questo rende il codice più veloce in quanto non c’è
overhead di comunicazione tra oggetti differenti in processi differenti.
Questo però è anche uno svantaggio di PHP in quanto la struttura a componenti di ASP
lo rende più flessibile e scalabile e quindi gode di tutti i vantaggi della programmazione
distribuita. Non solo. Il fatto che giri tutto nello stesso spazio di memoria rende PHP più
vulnerabile, in quanto basta che un solo modulo interrompa improvvisamente
l’esecuzione che tutti gli altri possono saltare rendendo di fatto l’applicazione inusabile.
Il linguaggio usato per PHP ha una sintassi più vicina a Java e a C++ e quindi più facile
da imparare e più produttivo. Inoltre PHP ha un buon supporto per la programmazione
modulare in classi mentre in ASP (VBscript) il supporto per le classi è ancora immaturo.
ASP supporta l’inclusione dinamica di file ma non di tipo condizionale. Quello che
avviene cioè è che se ho uno script header.asp incluso in 20 files tale inclusione
avverrà sempre e comunque nella memoria del server in quanto l’inclusione avviene
91
IIS: server web della microsoft
72
Architetture e linguaggi
prima dell’interpretazione dello script ASP. In PHP, viceversa, esiste l’inclusione
condizionale e quindi è possibile includere solo il file che server quando realmente
serve.
Un punto a favore di ASP nei confronti di PHP è la gestione delle variabili Application
(variabili che hanno una vita e visibilità per tutta la durata del server) che in PHP non
hanno un equivalente.
E’ possibile testare script PHP sotto Linux, Solaris e Windows. D’altra parte ASP è
tecnologia proprietaria Microsoft. Gira solo su server Microsoft (e con molte limitazioni
su qualche altro server) e molti componenti sono a pagamento e di questi spesso non è
disponibile il codice e di conseguenza non è possibile risalire ad eventuali bugs e/o
back-door che possono essere presenti, in modo più o meno voluto, in tali componenti.
E’ anche vero però che disporre di componenti compilati permette una maggiore
sicurezza (se compilati in ‘casa’) in quanto in essi si può nascondere tutta la business
logic eseguendo il tutto anche a maggiore velocità.
5.3.6 Programmazione a componenti
(*)92
Rispetto ad un’architettura tradizionale client/server, nell’architettura 3 -tier, è presente
un livello intermedio che può essere identificato dal middleware93. Gli oggetti business,
cioè entità aziendali quali fatture, ordini e clienti, risiedono nel middleware del sistema
informativo. Il client accede agli oggetti business i quali sono gli unici autorizzati a
dialogare con la base dati.
I moduli client diventano quindi più leggeri, non hanno più l’onere di dialogare
direttamente con il server del database ma usano solo le interfacce esposte dagli
oggetti presenti nello strato intermedio.
I vantaggi di questa architettura sono che i moduli client sono indipendenti dal database
anzi ne ignorano la presenza e che, per il client, esiste solo il middleware.
Grazie a tecnologie come DCOM e CORBA è possibile distribuire gli oggetti,
implementarli con un linguaggio (C++ ad esempio) e richiamarli indifferentemente da
client scritti in java, C, C++, ecc…; i client possono essere, come nel mio caso, pagine
web attive ASP (DCOM), applet java (CORBA, DCOM) o componenti ActiveX (DCOM).
92
Vedi [6], [8], [17] della bibliografia e [4] della sezione ‘Principali siti di riferimento ’
93
Middleware: collezione di componenti interposti tra lo strato applicativo dell’interfaccia e i database
73
Architetture e linguaggi
5.3.6.1Oggetti aziendali
Un oggetto aziendale non è altro che un’entità che ruota intorno ad un’attività ben
definita all’interno di un sistema informativo. Per un’azienda, esempi di business object
possono essere: il cliente, la fattura, l’ordine o combinazioni di essi (effettuate
attraverso relazioni nel linguaggio dei db). I client richiedono, si connettono e usano
oggetti aziendali i quali incapsulano i dati presenti nel server di database. In sistemi così
concepiti raramente vedremo nei client espliciti riferimenti ad istruzioni SQL o ad oggetti
per accesso ai dati (tipo DAO, RDO, ADO, JDBC). Tutta la logica di accesso ai dati
risiederà nel middleware, cioè negli oggetti aziendali e quindi nei server DCOM o
CORBA.
5.3.6.2COM e DCOM
Il Component Object Model è una recente tecnologia Microsoft il cui scopo principale è
quello di consentire lo sviluppo di componenti software riutilizzabili a favore
dell’interoperabilità delle applicazioni magari scritte con linguaggi diversi.
Il Component Object Model è la base su cui poggiano tutte le tecnologie OLE e
ACTIVEX. COM definisce uno standard binario, indipendente da qualsiasi compilatore o
linguaggio di programmazione. Definire uno standard binario significa imporre delle
regole che governano non tanto il modo con cui il software viene scritto, quanto il modo
con cui il software viene compilato.
Un server COM si differenzia dalle normali applicazioni per il fatto che, dovendo
interagire con l’esterno, deve rendere note a priori le proprie funzionalità e come queste
debbano essere richiamate.
Un componente non è altro che un oggetto caratterizzato da dati ed interfacce. I dati
sono informazioni proprie dell’oggetto. Le interfacce sono funzioni che manipolano e
operano sui dati. Il concetto è molto simile alla definizione di oggetto nella OOP 94, nel
caso di COM però c’è distinzione tra interfaccia ed implementazione dell’interfaccia. Un’
interfaccia COM è un insieme di metodi che una classe COM può implementare ma non
rappresenta necessariamente tutti i metodi della classe.
94
OOP: Object Oriented Programming
74
Architetture e linguaggi
Un’ interfaccia è quindi una lista di funzioni, o più precisamente, una lista di puntatori a
funzione. Un oggetto COM è costituito semplicemente da una o più di queste liste di
puntatori, oltre ovviamente che dall’implementazione di queste funzioni.
Quindi un programma che voglia usare un oggetto COM non deve fare altro che
ottenere da quest’ultimo un puntatore ad una delle interfacce implementate e quindi
richiamare una delle funzioni accessibili da quell’interfaccia.
Come è possibile richiedere un puntatore ad un’interfaccia disponibile all’interno di un
altro programma? Ogni programma che vuole fornire delle funzionalità ad altri
programmi deve registrarsi. L’eseguibile in questo modo comunica al sistema che è in
grado di restituire, a richiesta, dei puntatori a queste interfacce. Ma come fa il
programma a conoscere quali siano queste interfacce? Semplice: lo chiede all’oggetto
stesso. Ogni oggetto infatti è obbligato ad implementare le funzioni definite da una
particolare interfaccia, IUnknown95. Una di queste funzioni è QueryInterface e permette
di richiedere all’oggetto se supporta ogni altra interfaccia ritornando così un puntatore
all’interfaccia corrispondente.
COM è indipendente dal linguaggio di programmazione, si possono creare server COM
in C++ e usarli contemporaneamente in client Java, Visual Basic, Visual C++, Delphi
ecc…
Il modo classico per scrivere un server COM è quello di definire gli oggetti e le
interfacce mediante un linguaggio indipendente dai linguaggi di programmazione: l’IDL.
Lo standard COM consente di modularizzare le applicazioni in componenti server
riutilizzabili e client che accedono a tali componenti. Ciò che è richiesto è che server e
client risiedano sulla stessa macchina. DCOM non ha questa limitazione: applicazioni
client possono attivare server DCOM che girano su macchine remote.
DCOM quindi eredita tutti i vantaggi delle soluzioni COM:
95
•
riutilizzo dei componenti,
•
modularizzazione del software,
•
approccio object oriented,
•
interfacce uniformi indipendenti dall’implementazione
IUnknow: nome di un’interfaccia di ogni classe COM che elenca tutte le funzioni implementabili.
75
Architetture e linguaggi
•
e inoltre può risultare più performante.
Infatti si potrebbe pensare di far girare i server più pesanti su macchine più potenti e di
conseguenza rendere più snelle le applicazioni client.
5.3.6.3CORBA
COM è legata al mondo Microsoft ed è ormai standard DE-FACTO. Da qualche tempo
esiste un’alternativa, in via di standardizzazione, CORBA 96, che appunto gestisce le
richieste provenienti da oggetti distribuiti su uno o più computer.
La
definizione
di
oggetto
CORBA
rientra
completamente
in
quella
della
programmazione ad oggetti: un oggetto CORBA è un’entità che supporta il
polimorfismo, l’ereditarietà e l’incapsulamento.
Anche in questo caso i vari oggetti possono essere scritti in uno qualunque dei
linguaggi previsti dallo standard (C, COBOL, C++, JAVA, SMALLTALK, ADA, DELPHI)
e possono risiedere su computer con sistemi operativi diversi. Sarà il CORBA ad
occuparsi dei dettagli come rintracciare l’oggetto di cui si sono richiesti i servizi o il byte
ordering (trasformando quando necessario la rappresentazione da big endian a little
endian e viceversa).
Un oggetto CORBA viene definito utilizzando un linguaggio specifico: IDL.
L’IDL viene usato per descrivere, tramite le interfacce, i servizi che gli oggetti server
offrono ai potenziali client. Una volta compilata l’interfaccia si può passare
all’implementazione
della
stessa
usando
uno
qualsiasi
dei
linguaggi
di
programmazione.
Oggetti diversi che si trovano sulla rete possono comunicare tra loro tramite l’ORB97
che è come un canale di trasmissione dei messaggi che i vari oggetti si scambiano.
Le funzionalità dell’ORB sono suddivise tra il client ed il server, sotto forma di librerie
che vengono aggiunte sia all’uno che all’altro: per far si che entrambi possano
interfacciarsi a queste librerie, il compilatore IDL genera due file, stub e skeleton: il
primo viene linkato al client e il secondo al server.
Lo Stub
96
CORBA: Common Object Request Broker Architecture.
97
ORB: Object Request Broker.
76
Architetture e linguaggi
Lo stub contiene una rappresentazione locale (chiamata oggetto proxy) dell’oggetto
server remoto: il client allora, anziché invocare i metodi dell’oggetto remoto, invoca
quelli dell’oggetto proxy che a sua volta comunicherà con l’oggetto remoto. Tutto ciò è
possibile in quanto il proxy è un oggetto che implementa l’interfaccia del server remoto
anche se i suoi metodi contengono solo una chiamata ad un metodo corrispondente
dello skeleton.
Lo Skeleton
Lo skeleton, da parte sua, compie un lavoro complementare a quello compiuto dal
proxy, perché, dopo aver ricevuto una chiamata da quest’ultimo, si preo ccupa di
invocare localmente il metodo del server richiesto dal client. Una volta che l’esecuzione
del metodo è completata, lo skeleton comunica al proxy l’eventuale risultato restituito
dal metodo: il proxy, a questo punto, presenterà al client il risultato ricevuto dallo
skeleton.
L’uso dell’ORB è giustificato rispetto alla presenza della tecnologia RPC 98 in quanto
sebbene entrambi permettono di invocare dei metodi remoti, ORB segue i principi della
programmazione ad oggetti mentre RPC quelli della programmazione procedurale.
5.4 UML(Unified Modeling Language)
(*)99
Lo Unified Modeling Language (UML) è un consistente linguaggio di specifiche che
permette la visualizzazione, costruzione e documentazione di sistemi software.
Attraverso la modellazione visuale, UML "risponde" ai seguenti requisiti:
•
Definizione formale di un comune metamodello per il progetto e l'analisi degli
oggetti. Tale metamodello include modelli statici, comportamentali, di uso e di
architettura.
•
Specifiche per meccanismi IDL per modellare lo scambio tra gli strumenti OA&D
100
.
98
RPC: Remote Procedure Calling.
99
Vedi [10],[12] della bibliografia e [2] della sezione ‘Principali siti di riferimento ’
100
OA&D: Object and Analysis Design.
77
Architetture e linguaggi
•
Una notazione per rappresentare modelli OA&D.
L'astrazione che permette di focalizzare i dettagli rilevanti e di ignorare gli altri è una
chiave di comprensione e comunicazione.
Questo perché:
1. I sistemi che si devono realizzare sono spesso complessi e non affrontabili da un
singolo punto di vista; cioè con un unico modello.
2. Tutti i modelli devono essere espressi a differenti livelli di astrazione.
In termini di viste di un modello l'UML definisce i seguenti diagrammi:
•
use case diagram: Rappresenta le modalità di utilizzo del sistema da parte degli
attori (persone, altri sistemi, ecc.) che interagiscono con esso; descrive
l’interazione tra attori e sistema ma non la logica interna e’ facilmente
comprensibile anche per i non “addetti ai lavori”; può essere definito a livelli di
astrazione diversi.
•
class diagram: rappresentano le classi che compongono il sistema ed i relativi
attributi ed operazioni mediante le associazioni specifica i vincoli tra le classi.
•
behavior diagram (descrivono il comportamento)
o statechart diagram: specificano il ciclo di vita degli oggetti; quando un
oggetto si trova in un determinato stato può essere coinvolto da
determinati eventi; gli oggetti coinvolti nell’interazione cambieranno i loro
stati interni secondo i messaggi che ad essi arriveranno dalle altre
componenti del sistema;
o activity diagram: servono a rappresentare la logica interna di un
processo; permettono di rappresentare processi paralleli e la loro
sincronizzazione.
•
interaction diagram (descrivono l’interazione fra le istanze delle varie classi)
o sequence diagram: specificano la sequenza dei messaggi che gli oggetti
si scambiano; evidenziano gli scenari che si possono creare per ogni
interazione; l’enfasi è sulla successione dei messaggi scambiati.
o collaboration diagram: specificano gli oggetti che collaborano in un dato
scenario; evidenziano i legami tra gli oggetti; l’enfasi è sugli oggetti e sul
loro modo di collaborare.
•
implementation diagram (descrivono il sistema finale)
78
Architetture e linguaggi
o component diagram: servono per mostrare la struttura del codice;
servono per evidenziare le dipendenze tra le varie componenti software
implementate;
al
loro
interno
un
modulo
software
può
essere
rappresentato come un componente stereotipato;
o deployment diagram: servono per mostrare la struttura del sistema a
tempo di esecuzione.
Di fronte all'incremento della complessità dei sistemi l'UML è lo "strumento" ben definito
e ormai da tutti accettato come risposta alle esigenze di modellazione, è, infatti, il
linguaggio visuale di modellazione più utilizzato per la costruzione di sistemi object oriented e component-based e qui viene usato come linguaggio di modellazione di
applicazioni web.
5.4.1 Uml e la modellazione di una piattaforma di CE
(*)101
Un sito di commercio elettronico è composto da un’infrastruttura server, da una parte
logica e dall’interfaccia utente. L’infrastruttura server: database server, server web,
componenti e la loro collocazione fisica
possono essere modellati attraverso dei
diagrammi UML ma tale modellazione non apporta reali benefici se non nella
comprensione di come e dove tali server debbano essere dislocati.
Ha molta importanza la descrizione del database inteso come schema.
Un sito di e-commerce è infatti sia una web application che un database application.
Una definizione di database application può essere quella di una applicazione
dominata da memorizzazione e recupero dei dati verso e da un database. In questo
senso ci viene aiuto l’UML attraverso l’estensione Uml Data Modeler che ci permette di
descrivere il database in tutti i suoi dettagli.
Un sito di e-commerce è anche una web application.
Per definizione, una web application si distingue da un sito web in quanto
un’applicazione modifica il suo stato mediante l’input dell’utente (attraverso l e FORM).
Molto semplicemente un’applicazione WEB si costituisce di un server web, una
connessione di rete e molti browser client. Il server web distribuisce pagine di
informazione formattata ai client che l’ hanno richiesta attraverso un rete.
101
Vedi [2] della sezione ‘Principali siti di riferimento ’
79
Architetture e linguaggi
Figura 14: Relazioni fra pagine server e pagine client
102
In alcune situazioni il contenuto di una pagina non è necessariamente contenuto in un
file. Esso può essere ‘assemblato’ a runtime a partire dalla combinazione di
informazioni contenute nel database e da quelle immesse dall’utente in quel momento e
dalle istruzioni di formattazione contenuto in una pagina chiamata Script.
Figura 15: Relazioni tra i diversi componenti di una web application
103
Per modellare le web application ho usato l’estensione a UML denominata WAE (Web
Application Extension).
102
Vedi [2i] della sezione ‘Principali siti di riferimento ’
103
Vedi [2i] della sezione ‘Principali siti di riferimento ’
80
Architetture e linguaggi
5.4.1.1Uml e la modellazione delle basi dati relazionali
La struttura relazionale del modello entità relazioni si avvicina molto a quella del
modello a oggetti tipico della notazione UML anzi possiamo dire che il modello UML è
solo un modello entità relazioni esteso.
Ci sono 2 aspetti per implementare i modelli UML sui database relazionali. Effettuare:
•
modellazione della struttura (definizione tabelle, chiavi e relazioni),
•
modellazione delle funzionalità (definizione delle query).
Modellazione delle tabelle
Le tabelle di un modello entità relazioni possono essere mappate in una classe del
modello UML dove gli attributi/colonne si trasformano in attributi della classe. I
trigger104/stored procedure associati
ad una tabella possono essere mappati con i
metodi della classe.
Definizione chiavi
Per la definizione delle chiavi primarie ci sono 2 approcci:
•
Existence-based identity: Si ottiene con l’aggiunta di un attributo di tipo
identificativo (di norma è un indice incrementale) che identifica ogni record. Il
vantaggio di questa scelta è che si tratta di un singolo attributo, piccolo e di
dimensione uniforme. Non ha problemi di performance ma non ha un significato
intrinseco rispetto alla tabella a cui si riferisce.
•
Value-based identity: e’ costituita da una combinazione reale di attributi della
tabella. Un primo vantaggio è che ha un significato intrinseco legato agli oggetti
memorizzati nella tabella quindi risulta più facile il debugging e la manutenzione
della tabella stessa. Al contrario ha lo svantaggio di essere difficile da cambiare
in quanto tale cambiamento può consistere in un cambiamento propagato per
tutte le foreign key che la referenziano. Inoltre in caso di chiave co n molti attributi
si possono ottenere tabelle con moltissime foreign key che possono dare
problemi di performance.
E’ buona norma usare il primo tipo di chiave per modelli con più di 30 classi.
104
trigger: porzione di codice SQL memorizzata all’interno del DBMS eseguita automaticamente in seguito ad un
inserimento, aggiornamento o cancellazione.
81
Architetture e linguaggi
La struttura di un modello entità relazioni prevede la prese nza di:
•
chiavi candidate (combinazioni minimale di uno o più attributi che identificano in
modo univoco i record in una tabella),
•
chiavi primarie (una chiave candidata scelta arbitrariamente),
•
chiavi secondarie (referenziano una chiave primaria di un’altra tabella).
Modellazione delle foreign key
Per quanto riguarda le foreign key e quindi le relazioni fra tabelle queste possono
tradursi facilmente in associazioni tra classi.
Modellazione della generalizzazione
Un’altra trasformazione tra modello ER 105 e modello OO106 è quello che riguarda la
generalizzazione.
Il modo più semplice di mappare le due situazioni è quello di associare alla superclasse
e alle sottoclassi una tabella ciascuno nelle quali viene condivisa la chiave primaria
della superclasse [vedi fig. 16].
105
Entità relazioni
106
Object Oriented
82
Architetture e linguaggi
Figura 16: Esempio di modellazione della generalizzazione (vedi 6.7.2)
Modellazione delle funzionalità
Per quanto riguarda il mapping delle funzionalità dobbiamo ricordare che esse
riguardano quali query possono essere create e come possono essere formulate. Come
si può mappare un codice SQL in un modello Uml? Attraverso la navigazione sul
modello stesso. E per descrivere tale navigazione si fa uso del linguaggio OCL. La
notazione dot (punto) ci permette di andare da oggetto a oggetto e da oggetto a
attributo; la notazione [] ci permette di aggiungere filtri su collezioni di oggetti; la
notazione : ci permette di usare la generalizzazione.
Esempio
Espressione OCL
ABasket.product
Significato
Dato un carrello mi restituisce il Select optionarticleid from articleincart
suo contenuto
Abasket.product.quantity
Codice SQL
where cartid= :ABasket;
Dato un carrello mi restituisce la Select quantity from articleincart where
83
Architetture e linguaggi
quantità dei prodotti ivi contenuti
cartid= :Abasket;
Abasket.product[quantity>aQuantity].S Dato un carrello, mi restituisce la Select ShortDescription from articleincart
descrizione breve dei prodotti ivi where cartid= :Abasket and quantity>
hortDescription
contenuti
la
cui
quantità
è :Aquantity
maggiore di aQuantity
Abasket.
Dato un carrello, mi restituisce i Select
product[quantity>aQuantity].Store[Stor
negozi che hanno i prodotti nel optionarticle where cartid= :Abasket and
eid==AStore]
carrello suddetto in una quantità articleincart.quantity>
superiore a d una data.
Storeid
from
articleincart,
:aQuantity
and
optionarticle.storeid= :Astore
Figura 17: Esempio di modellazione delle funzionalità
5.4.1.2Rational Rose e la modellazione dei dati
Il database è il sistema per archiviare e controllare l’accesso ai dati memorizzati. E’ il
più grande elemento che deve supportare il modello dei dati.
Lo stereotipo107 <<Database>>, quando usato per un componente UML, definisce un
database e viene descritto nella Component View essendo di fatto un componente
Fisico.
La descrizione completa del modello di dati che deve essere usata per leggere e
memorizzare i dati è a sua volta memorizzata in uno schema all’interno del database.
Lo schema è l’unità più grande con la quale si può lavorare in un dato momento. Un o
schema di database è rappresentato in un modello UML da un package con lo
stereotipo <<Schema>> e viene posto nella Logical View.
Una tabella è la struttura di modellazione di base per un database relazionale. Questa
rappresenta un insieme di record della stessa struttura, chiamati anche righe della
tabella. Una classe con stereotipo <<Table>> rappresenta una tabella relazionale in
uno schema di database e viene posta all’interno del package Schema prima definito.
Le chiavi sono usate per accedere ad una tabella. La chiave primaria, Primary Key,
identifica univocamente le righe di una tabella. Le chiavi secondarie, Foreign Key,
permettono di accedere ai dati di altre tabelle.
La chiave è rappresentata come un vincolo ed un tagged value della colonna: PK per le
primary key e FK per le foreign key. La foreign key A nella tabella ‘mytable’ viene
107
Uno stereotipo è un ornamento che ci permette di definire un nuovo significato semantico agli oggetti del
modello. Attraverso gli stereotipi si possono disegnare diagrammi contenenti classi con icone personalizzate che le
distinguono meglio da altri tipi di classi permettendo di inserire tipi di attributi e funzioni diversi da quelli standard.
84
Architetture e linguaggi
automaticamente generata nel momento che si crea un’associazione fra la tabella che
contiene la chiave primaria A e la tabella ‘mytable’.
Un indice è una struttura dati fisica che velocizza l’acceso ai dati. Un indice non cambia
la qualità dei dati che vado ad interrogare. Un indice non esiste nella vista logica ma
può essere rappresentato come uno stereotipo <<index>> di fronte all’operazione a cui
fa riferimento un indice.
Una dipendenza di qualsiasi tipo tra tabelle in un modello di dati è chiamata relazione.
Una relazione è data da un’associazione stereotipata e da un insieme di primary key e
foreign key.
Esistono 2 tipi di associazioni:
•
non-identifying che rappresenta una relazione tra 2 tabelle indipendenti in cui la
foreign key della tabella secondaria non contiene tutte le colonne della primary
key
•
identifying che rappresenta una relazione fra 2 tabelle dipendenti dove la tabella
secondaria non può esistere senza la tabella primaria. Tutte le primary key della
primaria diventano primary e foreign key della secondaria.
Possibili mapping:
1. Le associazioni 1:1 si possono mappare con relazioni non identifying.
2. Le associazioni 1:N si mappano con relazioni non identifyi ng.
3. Le associazioni M:N diventano 3 tabelle legate fra loro da relazioni
identifying.
4. Le aggregazioni by reference diventano relazioni non identifying.
5. Le aggregazioni by value diventano relazioni identifying.
6. La generalizzazione diventa relazione identifying.
Le colonne diventano attributi con tagged value.
Un constraint o vincolo è una regola applicata alla struttura del database (colonna o
tabella che sia) e viene definito come uno stereotipo <<constraint>>.
Un trigger è un’attività eseguita dal DBMS come effetto collaterale o al posto di una
modifica di un tabella per assicurarne la consistenza. Lo stereotipo <<Trigger>> su un
operazione rappresenta il trigger di una tabella.
Il vincolo <<valid value>> controlla che il valore di un dato sia conforme a una data
operazione e viene rappresentata da uno stereotipo <<Check>> (saldo>0)
85
Architetture e linguaggi
Il vincolo di unicità assicura che ogni riga contenga un valore differente di una data
colonna e viene rappresentato con lo stereotipo <<Unique>> applicato ad una colonna.
5.4.1.3Uml e la modellazione delle applicazioni Web
Un’applicazione WEB è composta da una business logic che implementa le regole e i
processi del business e da una presentation logic che include: menu, link, immagini e
tutto ciò che contribuisce al look and feel di un’applicazione.
Per quanto riguarda la business logic essa è può essere implementata sia a livello si
server scripting e/o componenti che a livello di client scripting seppur con molte
limitazioni in quanto gli script lato client (Java applets, ActiveX control, Javascript) non
possono accedere alle risorse server (databases, files, componenti middle -tier, ecc…)
ma soltanto agli oggetti definiti da DOM Document Object Model e quindi cookies, form,
link, querystring, immagini ecc… e quindi il loro compito si riduce a validazione di campi
richiesti, date valide ecc…
Per quanto riguarda la presentation logic essa riguarda come e dove vengono utilizzati:
immagini, link, frames, form e tabelle nonché applet Java e animazioni Flash.
Modellare le pagine, i link fra esse, e tutto il contenuto dinamico che contribuisce alla
visualizzazione delle pagine sul browser dell’utente è molto importante.
La Web Application Extension (WAE) è un tentativo di definire un meccanismo che ci
permette, come disegnatori e architetti WEB, di esprimere, attraverso UML, i modelli di
design che contengono elementi HTML.
In questo modo abbiamo:
•
un modello di analisi e disegno per tutta l’applicazione
•
la capacità di esprimere il disegno di specifici componenti WEB ad un
appropriato livello di astrazione.
Tale estensione è definita mediante un insieme di stereotipi, tagged values 108 e vincoli.
I vincoli possono essere espressi con OCL.
Per quanto riguarda la modellazione vera e propria dobbiamo iniziare a dire che le
pagine web ( <<web pages>> è il primo stereotipo che incontriamo) vengono mappate
one to one con ciò che in UML viene chiamato componente. Un componente è una
108
I tagged values sono coppie di valori chiave che possono essere associati a elementi del modello che ci
permettono di definirli meglio.
86
Architetture e linguaggi
parte fisica del sistema. La component e l’implementation view descrivono proprio i
componenti e le relazioni del sistema. In sostanza una component view è la mappa di
un sito.
Figura 18: Esempio di diagramma WAE
Una pagina WEB è quindi una classe UML nel modello logico che è in relazione con le
altre pagine web con i link che in UML sono rappresentati con le associazioni
stereotipate <<link>> tra classi. Ma abbiamo detto che le pagine web si distinguono in
pagine web server e client. Per distinguerle UML fa uso degli stereotipi <<server
pages>> e <<client page>>. L’associazione stereotipata <<build>> tra queste 2 classi
ci permette di definire il fatto che il web server crea una pagina client a partire da una o
più pagine server.
I tagged values ‘’parameters’’ sono usati per definire i parametri che sono passati
attraverso i link.
Le operazioni di una <<server page>> classe diventano le funzioni di uno script server
side e gli attributi variabili globali di una pagina. Le operazioni e gli attributi di una classe
<<client page>> sono le funzioni e le variabili visibili sul browser-client.
Le form sono definite in UML come una classe con lo stereotipo <<form>>. Tale classe
non ha operazioni. Se bisogna definire funzioni che validano l’input allora bisogna
inserirle nella classe che contiene tale form (nella classe che modella la pagina client).
87
Architetture e linguaggi
Gli attributi di tale form sono i campi del modulo steso stereotipato con <<text>>,
<<password>>, <<submit>>. Una form può avere relazioni con applet e controlli
activeX che agiscono come controllori dell’input. Ogni form ha una relazione
stereotipata con <<submit>> con una pagina server che processa la submission del
form.
Figura 19: Modellazione del form di ricerca di VirtualMarket
Infine bisogna descrivere i frames. In HTML un frame permette che più pagine appaiano
contemporaneamente in una singola pagina html sul browser dell’utente. Per modellare
tale situazione in UML si usano 2 stereotipi, frameset e target e un’associazione
stereotipata <<targeted link>>. Una classe di tipo frameset rappresenta un contenitore
che contiene pagine client e targets. Una classe target è un frame che è referenziato da
un’altra pagina client. Un’associazione di tipo <<targeted link>> è un link ad un’altra
pagina ma che è renderizzata in un target specifico.
88
Progettazione
6 Progettazione
6.1 Analisi sistema esistente
Il primo passo da fare dopo aver analizzato i requisiti e studiato l’ambito del problema è
effettuare alcune considerazioni su ciò che è stato trovato all’interno dell’azienda.
L’azienda in questione dispone di un’infrastruttura di e-commerce basata su piattaforma
Microsoft NT4 e IIS4, database MS-ACCESS e sito strutturato con pagine html e
javascript (linguaggio client side) e alcune pagine ASP per l’accesso al db.
Il negozio (di tipo singolo, contenente cioè la vetrina di un sono negozio contrariamente
a come viene strutturato un mall) è costruito in massima parte usando un applicativo di
terze parti (‘Shop-Factory’) che a partire dal catalogo dei prodotti costruisce una vetrina,
il carrello e imposta le pagine per la gestione dei pagamenti. Nel database sono
presenti i prodotti completi di foto e descrizioni e prezzi. Vi sono anche le tabelle relative
alla gestione delle chiavi di Banca Sella per il protocollo SSL e un minimo di
informazioni sui corrieri.
6.1.1 Considerazioni e aspetti negativi
Risulta evidente quindi la scarsa propensione alla scalabilità, efficienza e flessibilità di
tale negozio in quanto:
•
il database ACCESS è limitato nel numero di accessi contemporanei a dieci
utenze, non supporta i trigger 109, le transazioni, quindi per un uso intensivo e più
performante è necessario usare un DBMS professionale;
•
l’uso di javascript per la gestione del carrello oltre che per la validazione
dell’input rende il sito troppo legato alla tecnologia dei browser utilizzati dagli
utenti. Infatti sia la presenza di diverse versioni di Javascript, sia la possibilità
che diversi utenti possano disabilitarne l’uso, sia la presenza (esigua) di browser
che non lo supportano affatto, rendono indispensabile o, non usare per nulla tale
linguaggio e rinunciare alle sue caratteristiche, o scrivere due versioni del sito:
109
Trigger: una Stored Procedure, ovvero una porzione di codice SQL, che viene eseguito automaticamente in
seguito ad un inserimento, modifica o cancellazione di record.
89
Progettazione
una per i possessori di browser con Javascript abilitato e una per coloro che
avessero rinunciato a tale tecnologia;
•
l’uso dei cookies110 per la memorizzazione del carrello rende il sito esposto a
pericolosi quanto facili attacchi da parte di utenti maliziosi in quanto è possibile
invalidare e/o modificare i valori contenuti nel cookie. Inoltre se tale file viene
manipolato o addirittura cancellato dopo la transazione, l’autenticazione
automatica dell’utente e l’attribuzione allo stesso dell’ultimo carrello salvato non
può avvenire o avviene in forma sbagliata. Inoltre non tutti i browser supportano i
cookies e non tutti gli utenti abilitano i loro ‘browser’ a tale tecnologia rendendo di
fatto inutilizzabile tutta la gestione delle transazioni;
•
l’uso dei frames rende di fatto difficile l’indicizzazione del sito in esame da parte
dei motori di ricerca che hanno difficoltà a analizzare e a memorizzare i siti che
usano tale tecnologia. Inoltre non tutti i browser la supportano e quindi obbligano
lo sviluppatore a dover scrivere una doppia versione del sito stesso: una con
frames e una senza.
Inoltre sono presenti anche altre caratteristiche negative:
110
•
poca dinamicità nella creazione delle pagine,
•
gestione del profilo del consumatore molto povera,
•
nessuna analisi dei dati provenienti dai moduli HTML 111 per l’inserimento dati,
•
nessuna analisi della navigazione dei visitatori,
•
database povero e poco flessibile nelle funzionalità gestibili
•
gestione delle cross promotions 112 inesistente,
•
memorizzazione dei dati provenienti dal contact center 113 inesistente.
Cookies: piccoli files di testo generati durante la navigazione su Internet usati per lo più per il riconoscimento
utente.
111
Moduli HTML: tecnicamente si chiamano Form.
112
Cross promotion: promozione incrociata fra prodotti diversi valida solo se venduti assieme.
113
Contact Center: infrastruttura di comunicazione capace di dialogare attraverso molteplici strumenti (chat, posta,
email, forum, telefono)
90
Progettazione
6.1.2 Conclusioni
Concludendo, il requisito per cui il sito debba essere visibile senza problemi dalla
maggior parte degli utenti, l’assoluta sicurezza che non possano avvenire frodi da parte
di utenti maliziosi, la certezza che il sito possa essere indicizzato in maniera corretta da
parte dei motori di ricerca, la disponibilità ad avere una gestione dei profili utente
avanzata e la necessità di avere un sito scalabile, modulare e perfor mante e facilmente
espandibile mi obbliga a pensare che tale soluzione sia assolutamente insufficiente per
i nostri scopi.
La necessità di realizzare una piattaforma di Customer Relationship Management;
l’esigenza di creare un sito completamente dinamico ma leggero e veloce con
riconoscimento automatico dell’utente con proposizione automatica di offerte mirate e
personalizzate, il bisogno di raccogliere e analizzare i dati provenienti dai form compilati
dagli utenti, i dati provenienti dalla navigazione e dagli acquisti fatti, l’ importanza di
avere a disposizione alcuni indici di qualità che riguardano le prestazioni dei corrieri,
nonché dei fornitori, nonché degli utenti stessi mi porta alla conclusione che, molte
sarebbero le modifiche e aggiunte assolutamente da fare e che, quindi, progettarne e
realizzarne uno completamente nuovo sarebbe la soluzione migliore.
6.2 Studio fattibilità/esigenze
(*)114
Il web fornisce alle aziende una immensa opportunità di analizzare il comportamento e
le preferenze degli utenti. Ogni visita ad un sito web genera dati importanti sul
comportamento degli utenti indipendentemente dall’eventualità che egli faccia un
acquisto. Nasce quindi l’esigenza di strutturare il sito in modo tale da acquisire nella
maniera più opportuna tali dati. Il processo di “scavare” i dati web è complicato a causa
della diversità dei dati raccolti. Una singola visita ad un sito può essere catturata non
solo nei file di log del server ma anche nei cookies generati alla pressione di un banner
o nei databases creati da script cgi in seguito alla compilazione di form di registrazione
o di acquisto. Una delle sfide iniziali quindi è stata quella di organizzare in una forma
coesa e coerente tutti questi dati per creare quindi profili dei nostri consumatori.
La prima forma di acquisizione di tali dati è rappresentata dai
114
Vedi [1a] della sezione ‘Principali siti di riferimento ’
91
Progettazione
•
file di log,
•
cookies,
•
Form.
6.2.1 File di Logs:
i server log file forniscono i tipi di dominio, il tempo di accesso, le parole chiave e i
motori di ricerca usati dai visitatori. La sezione referrer di un tipico file di log include la
provenienza di questi visitatori e da qui quindi tutta una serie di informazioni sui motori
di ricerca che indicizzano il nostro sito, le parole chiave che vengono usate dai visitatori,
il numero di banner in cui il nostro sito è presente, la lunghezza della navigazione ecc...
6.2.2 Cookies:
i cookies scritti dal server, in cui il web è presente, possono tracciare le visite di un
determinato browser, le pagine viste e quindi anche il numero di volte che un visitatore
accede alle nostre pagine e quali sezioni del nostro sito egli preferisce. I cookies sono
delle particolari intestazioni http che il server passa al browser e che vengono
memorizzati in piccoli file di testo nell’ hard disk del browser.
Tipici momenti in cui un cookie viene scritto sono:
•
la prima volta che un visitatore accede ad una particolare sezione del sito,
•
all’atto del submit da parte del visitatore di una form per scoprirne le preferenze,
•
all’atto della registrazione dello stesso per associare un cookie ad un ID del
database degli utenti.
6.2.3 Forms:
uno dei primi e validi metodi per carpire dati sui clienti è quello dei form di registrazione
e di acquisto.
La sottomissione di un modulo può lanciare un programma CGI che ritorna una risposta
al visitatore che può essere una semplice pagina html oppure una mail. Le forms sono
dei semplici meccanismi browser-to-server attraverso i quali l’interazione web-cliente
può essere registrata e analizzata.
Quanto più si interagisce con i clienti quanto più un numero sempre c rescente di
informazioni sui loro interessi, bisogni e scelte vengono catalogate nei db. Il pericolo
però è che le domande che vengono poste all’utente siano lunghe e noiose e che quindi
rendano falsificato il sondaggio. A nessuno piace scrivere la stessa informazione più di
92
Progettazione
una volta e quindi bisogna stare attenti a porre solo le domande essenziali e mai più di
una volta. Per esempio il form di registrazione può servire ad evitare che l’utente ad
ogni acquisto inserisca tutti i dati di interesse. Infatti al momento del pagamento basterà
chiedere uno username e una password e automaticamente verranno trovati nel db tutti
gli altri dati.
6.2.3.1Tipi di informazioni richieste con le form
Delle tre sorgenti di acquisizione dati: log, cookies e form quest’ultimi rappresentano la
via più ‘facile’ per aggiungere dati più importanti ai nostri db dei clienti.
Tali dati possono essere per esempio: il reddito, l’automobile, il numero dei figli.
La conoscenza del codice di avviamento postale ci può permettere di inviargli via posta
per esempio tutta una serie di servizi come notizie locali, il meteo, coupons per sconti
su locali vicini la sua residenza in modo da catturare sempre più la sua attenzione.
La possibilità che l’utente abbia un telefono mobile ci permette di offrirgli ulteriori servizi
via SMS come oroscopi, ricetta del giorno, risultati delle partite di calcio della squadra
del cuore.
Tutte queste notizie ci permettono di arricchire il suo profilo permettendoci per esempio
di fargli un offerta personalizzata su un biglietto di una partita importante della sua
squadra del cuore o di ricordargli via sms che il giorno successivo è l’anniversario di
matrimonio e proporgli dei regali per la moglie/marito. La conoscenza del tipo di
automobile, l’età dell’abitazione ci permette di ricordargli delle scadenze relative a
tasse, obblighi ma anche di fornirgli offerte per la manutenzione della casa e della
automobile. Insomma l’utente deve avere l’impressione di ricevere un servizio
gradevole ma mai invadente e indesiderato.
6.3 Scelte progettuali
6.3.1 Livello di presenza
Il livello di presenza scelto per Virtualmarket è alto orientato alla vendita B2C115, con
un forte customer care 116. Ci si prefigge quindi: massimizzare la fiducia nel rapporto con
115
B2C: Business to Consumer
93
Progettazione
i clienti, customer care, assistenza tecnica on-line, assistenza pre e post vendita,
gestione ordini e acquisti e pagamento elettronico tramite transazioni sicure usando
carta di credito, contrassegno, bonifico.
6.3.2 Architettura
Ho scelto l’architettura 3-tier suddividendo quindi l’applicazione in 3 livelli: livello di
presentazione, livello aziendale e livello fisico.
6.3.2.1Impostazione livello presentazione
La mia scelta è quella di limitare al massimo le funzionalità dell’applicazione dipendenti
dal browser, relegandole solo all’implementazione di particolari estetici (animazioni
Flash, banner javascript) che non pregiudicano il corretto e completo funzionamento
delle singole transazioni. Sono evitati tutti i controlli lato client per la validazione dei
campi delle form; l’uso dei cookies e delle variabili di sessione è completo ma ci sono
controlli per assicurarne il funzionamento solo nei browser che li supportano. Per gli altri
browser sono stati adottati meccanismi alternativi come la presenza di una variabile di
querystring (vmid) che permette, nel passaggio da una pagina all’altra, di mantenere
uno stato sopperendo di fatto alla mancanza delle variabili di sessione. Tale strategia è
però pericolosa e onerosa in termini di risorse in quanto per evitare che l’utente cambi
tale valore, vengono effettuati controlli incrociati con valori posti all’interno del database,
valori che legano vmid, all’indirizzo ip dell’utente, al suo browser, al suo sistema
operativo, seguendo il principio per cui è impossibile che ci sono 2 vmid uguali che
riguardano utenti con ip diversi, browser e so diversi. Per quanto riguarda la mancanza
dei cookies, si rinuncia al riconoscimento utente.
La maggior parte del calcolo, compreso quello del layout delle pagine è demandato al
server, il quale, costruisce l’output prelevando i dati direttamente dal db. Questa scelta
implica una notevole mole di lavoro da parte del server ma riduce spiacevoli
inconvenienti da parte di coloro che usano, per esempio, Mosaic per Linux come
browser (ben pochi ma ci sono). La pagina prodotta dal Web server è conforme alle
specifiche HTML 3.2 con alcune concessioni sui fogli di stile e HTML dinamico per
quanto riguarda funzionalità accessorie.
116
Customer Care: rientra in questa definizione tutto ciò che riguarda l’assistenza pre e post vendita verso i clienti
riguardo acquisto di prodotti e servizi.
94
Progettazione
L’impostazione delle pagine principali prevede la presenza di molti file comuni da
includere, in modo da suddividere le varie problematiche da affrontare in file distinti
inclusi poi in uno stesso file server. In questo modo è possibile abilitare le diverse
funzionalità agendo solo su tali file senza intaccare il resto.
Es: esiste un file gestione_pagamenti_euro.asp che può essere incluso da tutti quei file orderdtl.asp dei negozi che prevedono il
pagamento in euro. Eventuali modifiche alla gestione di tale pagamento verrà eseguito solo su un file e non su tutti gli orderdtl.asp
dei negozi riducendo i tempi e la complessità della manutenzione del sito anche se a discapito della velocità di risposta del server
web. (il server prima include i file, poi li interpreta e infine li spedisce al browser dell’utente che li aveva richiesti).
6.3.2.2Impostazione livello aziendale
Ho scelto una soluzione ibrida che, da un lato, preferisce la scrittura di script ASP per la
presentation logic, senz’altro più rapida e immediata e, dall’altro, l’uso di componenti
COM per l’accesso al db, la gestione del carrello e quella dei punti fidelity117. Quasi
sempre si è fatto uso di componenti scritti da terzi parti. In qualche caso sono stati scritti
componenti personalizzati. I componenti sono stati registrati e quindi posizionati nello
stesso server WEB, in quanto si è pensato, almeno per le fasi iniziali, dove c’è poco
carico elaborativo, di sfruttare le migliori performance di componenti eseguiti nella
stessa area di elaborazione del server WEB. La registrazione di tali componenti in
server diversi da quello di IIS richiede l’uso di DCOM che ovviamente rende più lenta
l’esecuzione, a causa della comunicazione tra i processi.
6.3.2.3Impostazione livello fisico
Ho scelto di usare sia le Stored Procedure che l’SQL dinamico 118 con una netta
preponderanza della seconda possibilità rispetto alla prima.
Le Stored Procedures realizzate riguardano una serie di query molto complesse (insert,
update) che, se implementate in modo dinamico, avrebbero appesantito l’elaborazione
del server in quanto trattasi di join multipli e tutte quelle query che debbono rilasciare
una chiave ‘incrementale’ della tabella. In questa seconda situazione, purtroppo, non ho
117
Vedi paragrafi ‘punti fidelity program ’ 6.7.1 e ‘il carrello ’ 6.6.2.1.2
118
Sql dinamico: è un metodo mediante il quale un’istruzione SQL da eseguire viene presentata al sistema di
gestione del database in modo che l’istruzione non debba essere nota prima che il programma (in questo caso pagine
server), dalla quale viene eseguita, sia lanciato. In altre parole l’istruzione viene costruita durante l’esecuzione del
programma.
95
Progettazione
potuto evitare di usare le SP 119 in quanto, con l’SQL Dinamico nelle pagine server, non
si riesce a calcolare l’indice della tabella in cui si è appena inserito un nu ovo record.
Tutte le altre query sono state scritte nelle pagine ASP e rese quindi dinamiche.
Qualsiasi query SQL che necessita di un parametro, nell’architettura ASP,
automaticamente diventa dinamica.
Es: sqlstr=”select * from ”&nometabella&” where campo=’”&valorecampo&”’
‘Dove nometabella e nomecampo sono le variabili.
Il motivo principale di tale scelta è l’esigenza di avere un sistema indipendente dal
DBMS usato anche rinunciando ad una maggior velocità. In questo modo infatti
cambiando il database gli script rimangono inalterati mentre se si fossero usate le SP si
sarebbero dovute riscrivere nel nuovo DBMS.
Ho scelto di impostare un database unico anche in virtù della presenza di più negozi a
carrello distinto, per questioni pratiche. Infatti sebbene i negozi siano separati, molti
servizi e prodotti possono essere condivisi (tipologia di spedizione e pagamento,
promozioni cross120). Il database finale comunque è reso distribuito/replicato seguendo
la logica per cui vengono separati, in archivi differenti, i dati delle vendite, dai dati degli
utenti, dai dati del catalogo, dai dati dei corrieri.
6.3.2.4Altre scelte
Ho ritenuto di impostare il sistema in modo che l’utente (sarebbe più corretto dire: il pc)
sia riconosciuto tramite cookie ma che tale riconoscimento non associ alcun profilo o
carrello salvato all’utente corrente in virtù del fatto che, sebbene il pc sia lo stesso,
questo può trovarsi in un Internet Point o in una casa, dove i diversi componenti
possono
usarlo
in
tempi
distinti.
L’associazione
pc-cookie
rende
possibile
l’aggiornamento del database dei profili per quanto riguarda le pagine viste, i prodotti
selezionati ecc… ma tutto ciò che riguarda la transazione vera e propria richiede il login
esplicito dell’utente.
Inoltre, se dall’analisi dei profili risultasse che, da uno stesso pc, si collegasse sempre
la stessa persona, si potrebbe allora ritenere attendibile il riconoscimento tramite cookie
119
SP: stored procedure
120
Promozioni Cross o incrociate: promozioni che riguardano l’acquisto combinato di prodotti diversi.
96
Progettazione
e quindi si potrebbe personalizzare il sito in maniera più azzardata attraverso l’analisi
del profilo utente. Queste considerazioni possono essere fatte solo con un profilo ormai
consolidato nel tempo e validato da una serie di questionari in cui viene chiesto
esplicitamente da dove ci si collega e se il pc viene usato solo dalla stessa persona.
6.4 Scelta degli strumenti
Fatte quindi tutte le precedenti considerazioni non risulta altro che decidere quali
strumenti adottare:
•
architettura
•
sistema operativo
•
database
•
web server
•
ambiente di sviluppo
•
descrizione del sistema
Le scelte sui vari punti sono influenzate dall’uso che se ne deve fare, dai tempi di
apprendimento dello strumento, dalla possibilità di avere un valido supporto da parte
della casa produttrice del software, dalla facilità con cui tali strumenti possono essere
usati, da una migliore gestione della concorrenza delle transazioni, bilanciamento del
carico, le repliche delle tabelle, uso di stored procedures e trigger da parte del DBMS, la
facilità con cui si possono implementare promozioni, profili utente, la possibilità di avere
un ambiente distribuito e/o transazionale.
6.4.1 Alternative
La scelta è stata quindi tra:
1) piattaforma Windows NT + IIS4 121 + SQL SERVER7122 + ASP + Site Server 3123
COMMERCE EDITION + architettura COM 3-tier attraverso MTS124
121
IIS: Integrazione con i servizi di elenchi in linea e di protezione di windows NT server, modello di oggetti ASP,
Servizi FTP, News, SMTP e WEB incorporato, supporto per il debug delle applicazioni, messaggi di errore http
personalizzati
97
Progettazione
2) piattaforma Windows NT + Lotus Domino GO + DB2 + IBM Net Commerce125 +
architettura CORBA 3-tier
3) piattaforma Windows NT + Java web server + (sybase, db2, oracle) + (Jsp,
servlet) + architettura CORBA 3-tier
4) piattaforma Linux + apache + (oracle, db2, interbase, postgres) + (php4, Jsp)
Tutte le alternative hanno dei pro e dei contro:
la soluzione 1 ha come
1. pro: la forte interoperabilità e coesione e integrazione dei vari strumenti offerti, la
presenza di un ambiente distribuito (COM + MTS) e la programmazione a
componenti di ASP.
2. contro: la nota instabilità e scarsa scalabilità del sistema operativo nonché la
scarsità degli strumenti messi a disposizione dall’applicativo ‘SITE SERVER’ e la
inferiorità del DBMS rispetto ai concorrenti.
la soluzione 2 ha come
1. pro: la potenza di un DBMS come ‘DB2’ della IBM pienamente integrato con il
web server Go della lotus e con l’applicativo ‘NET COMMERCE’, completo nelle
caratteristiche supportate è già implementate (carrello, gestione pagamenti,
gestione corrieri, profilo dell’utenza), realizzato in modo modulare e pienamente
espandibile e configurabile usando linguaggi proprietari (NET-DATA) e non
(C++,Java).
2. contro: elevate richieste HW per il server di riferimento e una elevato tempo di
apprendimento per Net Commerce;
la soluzione 3 ha come
122
SQL Server: Perfettamente integrato con IIS e visual interdev oltre che con ODBC, ADO permette di usare
trigger, Stored Procedures, indici nonché offre un supporto per le transazioni e la capacità di gestire in diverse
modalità le repliche di database distribuiti.
123
Site server è una piattaforma Microsoft per lo sviluppo di siti di commercio elettronico.
124
MTS: Gestisce i componenti di connessione al db e la loro transazionalità effettuando un pooling dei componenti
in base alle risorse dell’intero sistema rendendo di fatto scalabile l’intero sistema.
125
Net Commerce è la proposta IBM per lo sviluppo completo di siti di commercio elettronico.
98
Progettazione
1. pro: l’elevata qualità in termini di prestazione e scalabilità dei DBMS e la
intrinseca modularità e efficienza di JSP.
2. contro: la lentezza di Java e quindi l’elevata richiesta in termini di potenza di
calcolo, nonché la scarsa coesione tra i DB e l’ambiente JAVA, la scarsa
produttività della programmazione JSP e l’instabilità del SO NT;
la quarta soluzione ha come
1. pro: l’elevata affidabilità dell’ambiente LINUX, l’estrema semplicità e velocità del
linguaggio PHP4.
2. contro: ha una scarsa integrazione fra DB e PHP nonché la difficoltà di creare
un ambiente distribuito che avrebbe reso la piattaforma e commerce più
scalabile.
6.4.2 Scelta effettuata
La scelta finale è ricaduta sulla 1 opzione in quanto:
•
le richieste HW non sono esose,
•
c’è già una sufficiente conoscenza di tutti gli strumenti HW e SW riducendo di
fatto i tempi di realizzazione,
•
c’è la possibilità di avere un ambiente distribuito grazie a COM + MTS e quindi di
scegliere senza problemi l’architettura 3-tier di COM.
La profonda integrazione tra gli strumenti ci ha convinto che una attenta progettazione e
programmazione delle varie parti ci avrebbe evitato di imbatterci nei problemi di
instabilità di windows NT anche perché l’imminente uscita di Windows2000 ci avrebbe
risolto molti dei nostri problemi.
6.4.3 Disposizione fisica dei server
La disposizione dei vari server è la seguente:
•
1 server web IIS 4,
•
1 server dei componenti (MTS) locato nella stessa macchina del server web,
•
1 server Database SQL Server 7 posto in una macchina distinta,
99
Progettazione
•
1 server di staging126 dotato del server web, di MTS e del DBMS e delle repliche
di tutti i negozi
Figura 20: Disposizione dei server
Figura 21: Architettura 3-tier dell'applicazione VirtualMarket
126
Server di staging: usato per i test delle funzionalità appena sviluppate
100
Progettazione
Figura 22: Server Component
Figura 23: Presentation Logic
101
Progettazione
Figura 24: Business Logic
6.4.4 Strumenti di sviluppo
•
Frontpage per l’impostazione iniziale della pagine
•
Visual InterDev per lo sviluppo delle pagine ASP e dei componenti CO M. Tale
strumento permette l’integrazione completa tra SQL server e MTS,
•
Site Server come infrastruttura tecnologica che fornisce sia componenti, sia
interfacce per la gestione delle pipeline, un modulo per il carrello e per le
transazioni,
•
Rational Rose per la modellazione dell’intero sistema.
6.5 Indicatori per la progettazione del database
(*)127
Affinché si possa spostare l'attenzione da un'analisi delle iniziative di marketing basata
sul prodotto ad una con maggior enfasi sul cliente e sul profitto è neces sario poter
disporre di una serie di indicatori, parametri chiave, da inserire, come campi, nelle
127
Vedi [5] della bibliografia
102
Progettazione
tabelle del database e che possano riflettere l'andamento più o meno negativo di una
serie di eventi. La presenza di questi indicatori, trattati come dimensio ni all’interno di un
Data-WareHouse,
permetterà,
in
seguito 128,
di
facilitare
la
'navigazione
multidimensionale' tra i dati utilizzando gli operatori OLAP descritti nel paragrafo
‘OLAP’.
In sostanza, tramite le interviste fatte con il management dell’azienda e tramite le
ricerche effettuate sul web, è possibile stabilire quali siano i valori chiave, le dimensioni
appunto, che un esperto di marketing voglia poter usare, per esempio, nell’analisi dei
dati sulle vendite della propria attività.
Con tali esperti, si prefiggono gli obiettivi da raggiungere (analisi delle vendite, analisi
dei profitti, degli utenti, analisi delle strategie di marketing da adottare in base ai risultati
di quelle in corso, analisi delle performance dei corrieri, ecc…) e quindi si cerca di
individuare quali possano essere le dimensioni che possano aiutarlo a pensare in
maniera ‘multidimensionale’ (ad es. analizzare le performance dei corrieri nel 1999 in
Italia tendendo conto degli articoli trasportati).
Le dimensioni più importanti sono:
•
Quando (indicatori: trimestre, mese, giorno, anno)
•
Chi (indicatori: quale divisione di vendita, produzione, quale cliente, quale
fornitore)
•
Cosa (indicatori: prodotto, unità di produzione, marca, id del prodotto, linea di
prodotto)
•
Dove (indicatori: canale di vendita)
•
Risultato (indicatori: guadagno, costi, margine)
Per quanto riguarda l'obiettivo da raggiungere bisogna considerare ben 7 aree su cui
concentrarsi:
128
•
Finance,
•
Sales (Vendite),
•
Marketing,
•
Purchasing (Acquisti),
in seguito in quanto per questo progetto non è stato implementato un datawarehouse. Vedi paragrafo 6.6.2.4.
103
Progettazione
•
Production (Produzione),
•
Distribution (Distribuzione),
•
Customer Service (Assistenza clienti)
Per il management di Virtualmarket le aree Production e Purchasing sono di poco conto
anche se sono molto importanti per i singoli gestori dei negozi, in quanto, quest’ultimi,
possono avere il problema della produzione e dell'acquisto dei materiali. Anche l'area
Finance non è stata considerata per il progetto in quanto esiste già un software adatto.
Comunque di tutte le aree esporrò gli obiettivi mentre per le altre esporrò anche le
dimensioni e quindi gli indicatori rilevati:
Finance:
Obiettivi
•
Conto profitti e perdite multidimensionale
•
Analisi drill-down del profitto
•
Bilancio multidimensionale
•
Rapporti sui punti chiave dell’investimento finanziario
•
Analisi del cash flow
Vendite:
Obiettivi
•
Analisi delle vendite
•
Analisi delle profittabilità dell’utente
•
Previsioni e piano di vendita
•
Strutturazione delle vendite
Dimensioni
•
tener conto di dati per anno, quadrimestri, mesi e possibilità di navigazione anno
per anno, mese per mese etc...
•
tener
conto
delle
vendite
di
ogni
singolo
negozio,
di
ogni
singolo
reparto/categoria di prodotto,
•
tener conto per ogni prodotto della linea di prodotto, della marca, dello SKU
•
tener conto per i clienti del range di acquisto, della posizione in classifica dei
migliori acquirenti,
104
Progettazione
•
tener conto del tipo di vendita, nuovo, saldi, fondi di magazzino
•
tener conto della probabilità di vendita di un prodotto in un certo periodo
Indicatori rilevati da inserire nel database
unità ordinate, ordini cambiati, unità vendute, incasso, sconti, percentuali degli sconti,
prezzo medio di vendita, percentuale dei reclami, percentuale delle spedizioni.
Marketing:
Obiettivi
•
Analisi di marketing strategico
•
Analisi di marketing tattico
Dimensioni
•
tener conto di dati per anno, quadrimestri, mesi e possibilità di navigazione anno
per anno, mese per mese ecc...
•
tener conto della linea di prodotto, della marca, dello SKU,
•
tener conto del numero di clienti,
•
tener conto della profittabilità dei segmenti dei clienti,
•
tener conto della tipologia e caratteristiche del prodotto: colore, taglia, materiale,
•
tener conto del tipo di campagna di marketing adottata e verso chi,
•
tener conto dei messaggi inviati ai clienti,
•
tener conto del territorio di vendita, gruppi demografici,
Indicatori
costo del marketing, numero di esposizioni, risposta alle esposizioni, percentuale di
successo delle iniziative di marketing.
Acquisti materiali:
Obiettivi
•
analisi dei punti di riordino,
•
tabella performance fornitori
Produzione
Obiettivi
•
capacity Management,
•
costi standard e qualità dei prodotti
105
Progettazione
•
motivi di scarsa qualità
Distribuzione:
Obiettivi
•
Tabella performance dei corrieri
Dimensioni
•
suddivisione dei dati per anno, quadrimestri, mesi
•
suddivisione per tipo di spedizione (truck, treno, aereo, nave)
•
suddivisione per destinazioni (regioni, territori e città)
•
suddivisione per clienti o segmenti di clienti
•
suddivisione per fattori di distanza
•
suddivisione per tipo di cliente: just in time o buy and hold
Indicatori
numero di viaggi, peso trasportato, distanza, costo per km, costo per kg percentuale di
viaggi in tempo.
Assistenza clienti:
Obiettivi
•
Consegne nei tempi prestabiliti
•
Reclami, richieste e restituzioni
•
Costi del servizio clienti
Dimensioni
•
suddividere i dati per anno, quadrimestre e mese
•
tener conto di linee di prodotto, marche e SKU
•
memorizzare le locazioni in cui avvengono le transazioni,
•
avere riferimenti a clienti e segmenti di clienti,
•
memorizzare i tempi di consegna suddividendoli in fasce di tempo
•
memorizzare lo stato di un ordine
•
memorizzare il motivo per cui un pacco è stato rifiutato,
•
memorizzare i difetti riscontrati
Indicatori
106
Progettazione
numero pacchi accettati, percentuale pacchi accettato, percentuale spedizioni
completato, numero di reclami, numero di pacchi rimandati indietro, numero di offerte
speciali, numero di cambi d'ordine
6.6 Moduli base e diagrammi UML
Attraverso l’analisi dello Use Case [fig. 25] che mostra le possibili attività che un utente
può fare sul mall possiamo dedurre quali siano i moduli che compongono l’applicazione.
Figura 25: Use Case Diagram: user profiling
E’ facile individuare la necessità di un modulo per la gestione dei negozi, uno per la
memorizzazione e visualizzazione del catalogo, uno per la gestione del carrello, uno per
la gestione delle spedizioni e dei pagamenti, uno per il controllo del Contact Center, uno
107
Progettazione
per lo user profiling. Saranno descritti, in seguito 129, anche se non indicati dallo Use
Case Diagram, altri moduli come la gestione dei partner e la gestione dei punti Fidelity
che possono considerarsi aggiuntivi all’insieme di funzionalità base che un mall deve
poter offrire.
Per la descrizione dei vari moduli che compongono l’applicazione Virtualmarket bisogna
dapprima
introdurre le varie tipologie di utenza che possono interagire con
l’applicazione, in quanto in ognuno dei moduli, saranno presenti, e quindi descritte,
scenari tipici fra l’applicazione e il mondo esterno.
Di ogni utente dobbiamo gestirne l’attività principale, il profilo e la storia dell’interazioni
con il mall [fig. 26].
Figura 26: Use Case Diagram: utente
Gli utenti possono essere semplici utenti web che si collegano e visitano il sito. Per
questi viene progettato e realizzato appositamente un modulo per la memorizzazione e
analisi dei dati scaturiti dalla navigazione e dalle transazioni effettuate sul mall.
Altra tipologia di utenza è quella dei manager dei negozi o del mall che possono
intervenire, se dispongono degli opportuni privilegi, sul layout o sulle funzionalità del
sito, usufruendo di appositi script.
129
Vedi paragrafo ‘moduli aggiuntivi ’ 6.7
108
Progettazione
Ultima tipologia di utenza è quella dei partner che, procurando nuovi negozi o
convogliando traffico sul mall mediante banner, usufruiscono di commissioni sul
venduto.
In seguito, in questo documento, verranno approfondite le singole tipologie di utenza
mediante opportuni diagrammi.
Tutti gli utenti appena accennati possono essere modellati con il diagramma degli
oggetti successivo [fig. 27].
Figura 27: Tipologia di utenza
109
Progettazione
Come si può notare la classe Virtualmarketuser descrive l’utente generico registrato di
cui possiamo conoscere il nome, la data di nascita e la data della prima visita. Poi ci
sono le classi che lo specializzano: abbiamo così la classe dei partner PartnerSpec a
sua volta divisa in classe dei partnerB2B e partnerB2C che si differenziano per il fatto
che un partnerB2C non può avere subpartner dai quali maturare commissioni. Poi
abbiamo la classe di manager suddivisa in manager di negozio e manager dell’intero
mall e infine la classe che descrive l’utente web generico ma registrato.
Il successivo diagramma degli stati [fig. 28] mostra come possano essere modellati gli
stati delle istanze della classe Virtualmarketuser.
Figura 28: StateChart Diagram: VirtualMarketUser
6.6.1 Front end
6.6.1.1Sistema di gestione del catalogo
Dalla specifica dei requisiti emerge che bisogna soddisfare una serie di esigenze:
•
inserimento e modifica di n gestori negozi,
•
inserimento e modifica di n partner commerciali,
•
inserimento e modifica di n negozi associati ai gestori,
•
inserimento e modifica di n categorie e sottocategorie,
•
possibilità di nascondere le categorie se gli articoli in esse contenuti non sono
disponibili per l’acquisto,
110
Progettazione
•
possibilità di visualizzare i contenuti in diverse lingue,
•
inserimento e modifica di n prodotti,
•
possibilità di non visualizzare i prodotti non disponibili per l’acquisto,
•
possibilità di visualizzare ma di non rendere ordinabili determinati prodotti,
•
indicazione delle quantità minime per l’acquisto,
•
indicazione per l’Iva specifica per ogni prodotto,
•
gestione opzioni dei prodotti,
•
gestione magazzino,
•
gestione promozioni.
Queste esigenze vengono soddisfatte in fase di progetto ma è stato richiesto che
possano essere soddisfatte anche a run-time attraverso l’intervento da remoto da parte
dei manager del mall e dei singoli negozi. I dettagli di questa sezione saranno
approfonditi nel paragrafo sulle tipologie di manager.
Per quanto riguarda il catalogo ho pensato di affrontare il problema concentrandomi
sulla parametricità del database. Dato che bisogna permettere di gestire un numero
variabile di negozi, categorie, prodotti, promozioni non posso creare un db che
necessita di continui aggiornamenti.
Possiamo quindi rappresentare con un diagramma delle classi [fig. 29], creato nella
fase di analisi, le entità coinvolte. Tale diagramma, con le regole esposte nel paragrafo ‘
UML e la modellazione delle basi dati relazionali ’ verrà trasformato in un diagramma ad
oggetti ‘Data Modeling ‘ [vedi fig. 41] dal quale sarà facile derivare il diagramma entità
relazioni del database finale.
111
Progettazione
Figura 29: Diagramma delle classi iniziale sui prodotti e i negozi
In questo diagramma le entità fondamentali sono: negozi e prodotti e le loro opzioni.
Si può vedere come i dipartimenti sono distribuiti ad albero attraverso il campo
‘categoria padre ’. Si può notare la presenza delle tabelle ‘parole chiave ’ e ‘marche ’
che specificano meglio il prodotto. Nella tabella delle parole chiave esiste un campo
‘priorità ’ che attribuisce un ordine e, quindi, un’importanza, ai vari articoli in modo da
pilotare l’output del motore di ricerca interno. In sostanza tale attributo definisce una
sorta di ranking, utile quando si vuole promuovere un prodotto anche con il semplice
fatto di posizionarlo meglio, rispetto agli altri, nell’output di una ricerca.
112
Progettazione
Sono state inserite anche una tabella ‘commenti ’ e una tabella ‘web promotion’. La
prima memorizza le opinioni degli utenti sui i vari prodotti e la seconda i dettagli sulle
forme di applicazione delle promozioni dei prodotti stessi. In sostanza in questa tabella
si conosce come, dove, quando e a chi un determinato prodotto viene posto in
promozione ‘visiva ’ ovvero viene messo in un banner, in una finestra a pop up, viene
posto ai primi posti del motore di ricerca o viene visualizzato nelle vetrine della home
page.
Infine le tabelle ‘virtualmarketuser ’ e ‘partnerspec ‘ rappresentano il legame fra prodotti,
negozi e alcune tipologie di utenza descritte in seguito (manager, partner, utenti).
I negozi
Secondo le specifiche del committente, il sistema deve poter gestire un numero
indefinito di negozi che devono appartenere ad un unico proprietario ma che possono
avere più di un partner commerciale 130. Un proprietario può avere anche più negozi.
Come appare dal diagramma [fig. 30], nella tabella dei negozi (Stores) appaiono diverse
informazioni come il nome del negozio, la partita Iva del negozio, l’email associata a
quel negozio, un codice valido ai fini fiscali per quel negozio, l’indirizzo web del negozio,
il logo ma soprattutto i riferimenti tramite chiavi esterne:
•
allo stato di un negozio (attivo, disattivo, in costruzione etc…), (tabella Status)
•
il riferimento al proprietario del negozio che può anche averne degli altri (notare
la cardinalità della relazione 1 a molti) (tabella StoreOwner)
•
il riferimento alla valuta di default che il negozio accetta per le transazioni
economiche ma anche a tutte le altre valute che può accettare (tabella ROE).
Inoltre è descritta anche una tabella Shops che rappresenta tutti i dati tecnici relativi a
quel negozio come il nome della directory all’interno del server, il percorso ODBC dei
negozi da dare al motore ASP. In questo modo, ci si prepara a rendere distribuito il
database in quanto ogni negozio è raggiungibile via ODBC in maniera distinta dagli altri.
130
Partner: figura che procura a VirtualMarket visite e negozi in cambio di un compenso. La gestione dei partner
non viene sviluppata in questo modulo ma in uno diverso per motivi legati alle performance e alla omogeneità dei
dati. Ho pensato infatti che porre in questo database i dati relativi ai compensi dei partner sarebbe stato pericoloso
per la sicurezza dei dati e comunque poco consono rispetto al dominio dei dati di negozi e articoli e promozioni.
113
Progettazione
Figura 30: Class Diagram Data Modeler: negozi
Ci sono 2 livelli per i manager dei negozi.
•
manager dell’intero mall: può intervenire sui diritti che i singoli utenti compresi i
gestori dei negozi possono avere su Virtualmarket.
•
manager del singolo store: è in grado, attraverso degli opportuni script, di poter
aggiornare il proprio negozio aggiungendo reparti e prodotti o modificando quelli
esistenti.
Tra i compiti più importanti del manager del mall posso elencare:
•
attribuire ad un determinato negozio il tema grafico,
•
scegliere le tipologie di pagamento e di spedizione consentite,
•
vietare o permettere che un determinato gestore di negozio possa cambiare il
layout della vetrina,
•
vietare o permettere che possa gestire le promozioni,
114
Progettazione
•
vietare ad un particolare utente di fare acquisti in un determinato negozio,
•
vietare di usarvi la carta di credito e permettendogli invece di usare il
contrassegno.
La figura 31 mostra, attraverso uno Use Case diagram, tutte le possibili attività di un
manager del mall.
Figura 31: Use Case Diagram: Mall Manager
Con la premessa che un manager dello store può eseguire determinate operazioni solo
se gli è stato consentito dal manager del mall, posso elencare le operazioni più
importanti che può eseguire su un negozio:
•
impostare e modificare promozioni e sconti sui prodotti del suo negozio,
•
modificare il layout della vetrina,
•
impedire il pagamento con carta di credito a determin ati utenti,
•
aggiungere il supporto per nuove valute,
115
Progettazione
•
gestire metodi di spedizione ecc…
Figura 32: Use Case Diagram: Store Manager
Il mall manager è anche uno store manager in quanto può intervenire sui singoli negozi;
In
tal
caso
viene
descritto
come
attore
che
restringe
e
specializza
le
proprietà/funzionalità del mall manager.
Per ogni negozio sono quindi disponibili e attivabili le seguenti features:
131
•
più modalità di spedizione,
•
più modalità di pagamento,
•
più listini,
•
diverse tipologie di vetrina (random 131 o dinamica132),
Random: I prodotti per la vetrina vengono scelti in modo casuale.
116
Progettazione
•
diversi tipi di promozioni,
•
diversi tipi di interazione con i clienti (chat, forum, numero verde, posta),
•
gestione del magazzino,
•
gestione partner,
•
gestione del traffico,
•
gestione della visibilità di un prodotto sulla vetrina.
Tali caratteristiche sono implementate prendendo in considerazione la struttura del
database e delle pagine ASP. E’ necessario, quindi, di un insieme di tabelle che
memorizzino, negozio per negozio e utente per utente, quali features siano applicabili e
tabelle che memorizzino i livelli di autorizzazione con cui, determinati utenti, in questo
caso manager, possono accedere a determinate risorse [vedi fig. 33].
Figura 33: Class Diagram Data Modeler: utenti e autorizzazioni
132
Dinamica: I prodotti per la vetrina vengono selezionati o in base al profilo dell’utente corrente o in base alle
promozioni in corso.
117
Progettazione
Per quanto riguarda le autorizzazioni bisogna dire che la tabella T_KindOfUser
memorizza i tipi di utenza che possono navigare su Virtualmarket: partner, manager,
simpleuser, operator, ecc… La tabella T_Authoritation raccoglie i vari tipi di
autorizzazioni: lettura, scrittura, inserimento prodotti, inserimento categorie, gestione
template, gestione utenti, ecc…. La tabella T_UserAuth realizza l’associazione molti a
molti tra gli utenti e le autorizzazioni memorizzando: l’utente, il tipo di autori zzazione, il
negozio su cui può agire, il manager che gli ha concesso l’autorizzazione e la data di
autorizzazione.
Per le features come: gestione magazzino, gestione template, visualizzazione
intelligente dei prodotti, servizio cortesia su sms ecc.. basta prevedere una tabella
T_Features che le memorizza e legarla molti a molti con la tabella dei Negozi T_Shops
memorizzando in un campo value un valore che viene scritto nei files di configurazione
delle features e che in genere è ‘enabled’ [vedi fig.34].
Figura 34: Class Diagram Data Modeler: memorizzazione delle features
Per la gestione dei pagamenti e delle spedizioni [vedi fig. 35] il discorso è simile. Nelle
tabelle ShippingMethod e PaymentMethod ci sono tutti i tipi permessi di spedizione e
pagamento (corriere, posta ordinaria, carta di credito, contrassegno, ecc…). Basta
legare tali tabelle con quella dei negozi (relazione molti a molti) e ottenere
118
Progettazione
T_Stores&Shipping e T_Stores&Payment. In tali tabelle viene memorizzato anche la
data in cui tale associazione è stata effettuata, da quale manager e per quali utenti è
disponibile.
Figura 35: Class Diagram Data Modeler: attribuzione dei sistemi di pagamento e spedizione
Grazie alla presenza di tabelle che memorizzano le features attivabili, i negozi, i gestori
dei negozi, i vari utenti registrati e le relazioni che li legano, si possono realizzare
facilmente degli script lato-manager che accedono a tali tabelle; in questo modo si
accede a dei valori che indicano se, per un determinato negozio, una determinata
tipologia di spedizione è attivata o meno oppure se per un determinato utente la
possibilità di pagare in un certo negozio con carta di credito è attivata o meno.
Le figure successive [36-39] mostrano dei prototipi di ‘pagine lato-manager ‘ che
permettono al manager di modificare il setup di uno o più negozi.
119
Progettazione
Figura 36:Pagina lato manager per la modifica dei dati di un negozio
Figura 37: Pagina lato manager per l'aggiunta di un corriere
120
Progettazione
Figura 38: Pagina lato manager per la modifica dei dati di un prodotto
121
Progettazione
Figura 39: Pagina lato manager per la modifica dei privilegi/autorizzazioni degli utenti
Il contenuto delle tabelle modificate da questi script, viene letto all’interno del
global.asa133 e dei vari files che implementano fisicamente l’attivazione o meno di una
determinata caratteristica; files che riguardano l’elencazione delle categorie di un
negozio, la visualizzazione delle caratteristiche dei prodotti ivi presenti, la gestione del
carrello, la gestione delle transazioni ecc…
I prodotti e le categorie
Il database dei prodotti e dei negozi è l’archivio più delicato in quanto la mole di dati che
deve poter contenere è considerevole 134.
Ogni prodotto deve essere identificato in modo univoco all’interno di tutto il database;
può essere collocato in reparti di nome diverso all’interno dei singoli negozi e all’interno
133
Global.asa vedi paragrafo ‘il file global.asa ’ 6.8
134
Il mall deve contenere un numero indefinito di negozi, reparti e prodotti.
122
Progettazione
di un negozio può apparire in reparti diversi. Ogni articolo può avere diverse opzioni
ognuna con un prezzo e disponibilità diverse. Il prodotto base, per semplicità, viene
considerato comunque un prodotto con una particolare opzione. Ogni articolo avrà uno
stato attraverso la cui lettura si potrà decidere di metterlo in vetrina, oppure di non
venderlo più, oppure di scrivere che ci sono nuovi arrivi ecc…
Figura 40: Class Diagram Data Modeler: prodotti e le categorie
Nella figura 40 si può notare come la tabella Articles contenga le informazioni
necessarie per l’identificazione del prodotto quali il nome, un codice di chi lo ha
123
Progettazione
prodotto, una breve e una lunga descrizione, uno stato, l’URL delle immagini, un indice
alla marca e un indice alla tabelle che contiene le varie dimensioni.
La tabella delle marche (Brands) è stata inserita per convenienza in quanto può essere
utile nei motori di ricerca ricercare tutti i prodotti di una certa marca. L’attributo
manufacterID si riferisce al produttore dell’articolo (es: Barilla per Mulino Bianco).
La tabella Department si occupa di memorizzare i nomi di tutti i dipartimenti. La
relazione tra negozi e dipartimenti è stata realizzata con la tabella StoresAndArticles
che fa in modo che ogni prodotto sia associato al negozio che lo vende e alla categoria
che lo contiene. Risulta chiaro dalla struttura della tabella che uno stesso prodotto può
essere venduto da negozi diversi in categorie diverse e dallo stesso negozio in
categorie diverse. Il campo DeptFatherID serve a risalire alla struttura dell’albero delle
categorie. Se infatti un prodotto può appartenere a più categorie, dalle specifiche
appare che la struttura dei reparti deve apparire come un albero e non come un grafo.
La tabella RelatedProduct e la tabella TypeOfRelationBetweenProduct servono a
modellare l’esigenza di avere dei prodotti legati fra loro indipendentemente dal fatto di
appartenere alla stesa categoria o di avere delle parole chiave in comune. Per esempio
se un prodotto è un accessorio di un altro, o un suo pezzo di ricambio, tali tabelle
memorizzano questa forma di relazione.
La gestione delle opzioni è abbastanza complessa in quanto bisogna permettere che
ogni prodotto abbia un numero indefinito di opzioni e che ognuna di esse possa essere
disponibile135 e rappresentabile con una foto.
Tali caratteristiche sono state implementate attraverso la tabella OptionArticles che
memorizza l’id del prodotto, del negozio, della valuta, il prezzo, la quantità disponibile,
la quantità ordinata e l’indirizzo della foto. Inoltre viene memorizzato, tramite chiave
esterna, un riferimento alla tabella OptionsValueList che contiene, per ogni opzione
(colore, tipovernice, numero porte, capacità), i suoi valori (giallo, metallizzata, 5, 10
giga) e una descrizione.
La gestione degli sconti prevede che si possano gestire diversi tipi di offerte
promozionali:
•
135
sconto generalizzato verso uno o più prodotti;
indicando anche la quantità in magazzino e l’eventuale quantità in ordine e quindi in arrivo
124
Progettazione
•
sconto su uno o più prodotti se acquistato in una certa misura;
•
sconto su uno o più prodotti se acquistato in combinaz ione con altri prodotti;
•
sconto su uno o più prodotti se prenotato in un certo numero di elementi entro
una certa data;
•
sconto su uno o più prodotti se si acquistano in combinazione con altri in un
intervallo limitato nel tempo;
•
la possibilità di offrire in sconto un prodotto o un servizio se si effettua una spesa
superiore ad una certa cifra.
Si dovrà tenere traccia di tutte le promozioni, in modo da giustificare e valorizzare le
varie iniziative di marketing in base al loro successo ottenuto.
Figura 41: Class Diagram Data Modeler: Gestione promozioni, sconti, richiesta informazioni,
suggerimento prodotti e commenti
125
Progettazione
Nella figura 41 viene visualizzato il class diagram relativo a promozioni, sconti e
commenti. La tabella Discounts per esempio memorizza l’id del negozio e dell’articolo in
promozione, le date di inizio e fine promozione, l’intervallo di tempo che intercorre
dall’acquisto di un certo prodotto e quello in promozione, un valore che indica il tetto
minimo di prenotazione grazie al quale si potrà beneficiare di uno sconto, la quantità di
prodotto da ordinare per beneficiare dello sconto, il valore minimo da spendere, l’entità
dello sconto e l’id del negozio e del prodotto associato ad esso per lo sconto nonché la
quantità del prodotto scontato da ordinare per beneficiare dello sconto.
Facciamo un esempio:
se un consumatore acquista almeno un prodotto A e 2 prodotti B allora ha diritto ad uno sconto del 30% se acquista il prodotto C e il
prodotto D entro 10 giorni. Offerta valida dal 1 gennaio e 30 gennaio.
Nel record della tabella ci sarà
un ID per la promozione,
0 per il limite della prenotazione (in quanto non c’è questa opzione),
1 per la quantità minima,
1/1/2001 per la data di inizio,
30/1/2001 per la data di fine,
10 giorni per la durata,
30 per lo sconto,
1 per la quantità del prodotto scontato C,
storeID,
l’id per il prodotto A,
storeID,
l’id per il prodotto C;
poi ci sarà un altro record con
lo stesso ID per la promozione
0 per il limite della prenotazione (in quanto non c’è questa opzione)
1 per la quantità minima
1/1/2001 per la data di inizio
30/1/2001 per la data di fine
10 giorni per la durata
30 per lo sconto
1 per la quantità del prodotto scontato
storeID
l’id per il prodotto B
storeID
l’id per il prodotto D
In sostanza, l’unione dei prodotti scontati mi da l’insieme dei prodotti da dare in offerta
mentre l’unione dei prodotti in promozione mi da l’insieme dei prodotti grazie ai quali si
126
Progettazione
può ottenere un beneficio. Ovviamente quello da me rappresentato è un esempio limite.
Difficilmente si avrà nella realtà una tale situazione ma in un mall dinamico e altamente
personalizzato bisogna studiare ogni singola possibilità.
Molto semplice l’estensione ai servizi, che possono essere considerati come ‘ prodotti in
offerta ’. Se volessimo rendere gratuita, la spedizione di un certo prodotto, solo se si
effettuano acquisti per più di 100000 lire basterà specificare 100000 nella colonna
cifra_minima, non indicare niente per i campi relativi al prodotto in promozione e al
negozio di appartenenza e specificare un id per il ‘prodotto’ spedizione appartenente ad
un negozio che per convenienza chiamiamo vm136.
Viene descritta in questa sezione una forma di promozione molto comune nei siti web e
quindi anche in Virtualmarket che è quella dell’esposizione più o meno calcolata di un
determinato prodotto (Web Promotions) [fig. 42]; tale esposizione o impression può
avvenire via banner, attraverso finestre pop up, oppure pilotando l’output del motore di
ricerca, attraverso direct mailing137 o attraverso la vetrina dei prodotti del giorno. In
questo modo, avendo più visibilità, un prodotto ha più probabilità di essere venduto. Tali
dati vengono memorizzati nella tabella PromotedArticles, in cui vengono specificati: la
data di inizio e fine promozione, il prodotto e il tipo di campagna promozionale (banner,
direct mailing, ecc…).
Figura 42: PromotedArticles
La gestione dei commenti degli utenti è stata inserita in questo database per il semplice
fatto che ciò che i vari visitatori esprimono sui prodotti messi in vetrina è parte
136
vm: Si è adottata la convenzione per cui tutto ciò che non appartiene specificatamente a nessun negozio ma che è
incluso in tutti in un modo o nell’altro, appartiene ad un negozio fittizio chiamato appunto vm.
137
Direct mailing: forma di promozione diretta che prevede di spedire cataloghi pubblicitari contenenti offerte
personalizzate solo a destinatari con alta probabilità di acquisto/interesse.
127
Progettazione
integrante della vetrina stessa. La possibilità di poter leggere i commenti espressi da
altri sul prodotto che suscita interesse in una persona, fa aumentare, per l’utente, la
sensazione che il prodotto possa essere di proprio gradimento. Inoltre sulla pagina è
possibile spedire i commenti a degli amici e scriverne degli altri. E’ considerato un
commento anche una valutazione numerica del prodotto espresso per esempio
mediante simboli opportuni. La media di tale valore sarà indicata sulla pagine descrittiva
del prodotto per offrire un servizio di valore aggiunto al consumatore.
Figura 43: Commenti
La gestione dei commenti è molto semplice in quanto è stata realizzata una tabella
(Comments) [vedi fig. 43] che memorizza la data, il prodotto (e il negozio di
appartenenza), un identificativo di chi ha lasciato il commento che può essere più o
meno registrato, il tipo di commento (CommentType) che può essere un commento
testuale, una valutazione numerica o altro e la data in cui tale commento è stato inviato.
Mediante l’id all’articolo si può risalire al prodotto e quindi al negozio e quindi scrivere in
esso in una sezione opportuna tutte le recensioni relative ad esso. Si può esprimere
una votazione sintetica del prodotto la cui media verrà visualizzata a fianco della
descrizione del prodotto.
Ogni prodotto può essere suggerito ad un amico tramite opportuno form, presente in
ogni pagina di descrizione del prodotto, nel quale viene richiesto di inserire un
commento, e l’email o il numero di cellulare al quale mandare il commento. Tali
128
Progettazione
suggerimenti con tutti i dettagli ad essi relativi vengono memorizzati nella tabella
SuggestedProduct [vedi fig. 44].
Figura 44: Suggested Product
Durante la navigazione sul sito ci si può imbattere in prodotti estremamente interessanti
di cui vogliamo conoscere più informazioni o semplicemente sapere quando verranno
proposte iniziative promozionali, ad essi relativi. In questo caso l’utente potrà effettuare
richieste di ulteriori informazioni, attraverso un semplice form e i dati che immetterà
verranno memorizzati nella tabella ProductInfoRequest [vedi fig. 45].
Figura 45: ProductInfoRequest
Riepiloghiamo, attraverso un diagramma degli stati della classe Articles, quali possano
essere gli stati di un’istanza di tale classe durante una transazione [vedi fig.46].
129
Progettazione
Figura 46: StateChart Diagram: istanza classe Articles
6.6.1.2Motore di visualizzazione
Gli obiettivi che vanno raggiunti, per quanto riguarda la struttura delle pagine, sono
essenzialmente:
•
Presentazione dell’azienda
1. Informazione sull’attività
2. Contatti
3. Credenziali e informazioni aggiuntive
•
Personalizzazione del sito
•
Selezione del modello grafico più consono all’esercente
•
Selezione del font con cui si presenta il sito
•
Selezione del colore dei testi
130
Progettazione
•
Selezione degli sfondi delle pagine
•
Selezione delle immagini per loghi, prodotti e categorie
Scopo della tesi non è quello di definire uno standard per il layout delle pagine di
Virtualmarket, scegliendo font, colori ecc… ma tentare di definire la struttura delle
pagine più importanti attraverso la modellazione UML e l’estensione WAE.
Per meglio modellare le pagine in questione c’è bisogno di sapere cosa si aspetta di
trovare un utente su un sito di commercio elettronico.
Figura 47: Use Case Diagram: Comportamento utente
Le pagine più importanti risultano essere quindi quelle che permettono di scegliere i vari
negozi che compongono il mall, di selezionarne facilmente i reparti e di visualizzarne i
prodotti in essi contenuti. Dovrà essere poi accessibile: una sezione ai servizi, una per
le FAQ e aiuti vari e poi una per la memorizzazione e modifica del proprio profilo.
131
Progettazione
Vediamo come si comporta un utente, in una tipica interazione con le pagine del mall,
descrivendo il tutto con sequence e collaboration diagram.
Figura 48: Sequence Diagram: Interazione semplice
Come si può vedere dal diagramma [fig. 48], l’utente interagisce con il mall a diversi
livelli, scegliendo dapprima un negozio, poi una categoria e infine un prodotto.
Nel prossimo diagramma [fig. 49] di collaborazione si può invece vedere meglio
l’interazione fra i vari componenti ovvero il dialogo fra l’utente e le varie pagine.
132
Progettazione
Figura 49: Collaboration Diagram: interazione semplice
Un secondo sequence diagram [fig. 50] ci può mostrare un percorso alternativo nel
quale l’utente sceglie più negozi, più categorie e più prodotti, in qualsiasi punto esso si
trovi. L’applicazione quindi dovrà permettere all’utente di poter scegliere nuovi negozi,
categorie e prodotti in qualsiasi pagina stia visitando.
Questo diagramma ci permette di vedere come le tipologie di pagine necessarie a
soddisfare la navigazione appena modellata possono essere 3: una pagina index dalla
quale è possibile agevolmente scegliere i negozi, leggendone magari una descrizione,
una pagina che contiene i prodotti di una determinata categoria e la pagina descrizione
di un prodotto.
133
Progettazione
Figura 50: Sequence Diagram: Interazione alternativa
Il seguente collaboration diagram [vedi fig. 51] ci conferma visivamente questo scenario
mostrandoci con più chiarezza le scelte effettuate dall’utente, anche mediante la
notazione 5a e 5b che esprime la possibile alternativa tra 2 eventi. Nel sequence
diagram, come implementato da Rose, questa possibilità è descritta mediante due
frecce allo stesso livello che vanno in direzioni differenti.
134
Progettazione
Figura 51: Collaboration diagram: Interazione alternativa
Il diagramma degli stati, posto nella figura 52, ci mostra quali possono essere gli stati di
un oggetto pagina, qualunque esso sia (index, categorypage, productdetail),
evidenziando anche i passi che il server web compie dalla richiesta alla visualizzazione
di una pagina server.
Figura 52: StateChart Diagram per un oggetto di tipo ‘server page’
135
Progettazione
La struttura delle pagine
Per quanto riguarda la struttura delle pagine, debbo ricordare, che il motore che le ‘
costruisce ’ è fortemente dinamico, in quanto, i principi per i quali i prodotti saranno
visualizzati sono essenzialmente 2:
•
necessità di esposizione del prodotto che deve essere assolutamente messo in
promozione,
•
stretto legame del prodotto con il profilo dell’utente.
La combinazione di questi 2 fattori permette di visualizzare i prodotti che molto
probabilmente attireranno l’attenzione dell’utente che quindi probabilmente acquisterà.
E’ chiaro che se l’utente non ha un profilo avanzato viene usato solo il grado di ‘
promozionalità ’ associato ai prodotti mostrando quindi gli articoli da pubblicizzare.
Il layout grafico di Virtualmarket rispecchia in pieno i requisiti in quanto:
•
in ogni pagina è possibile risalire ai negozi presenti nel mall,
•
ovunque ci si trovi è possibile conoscere il reparto corrente e navigare tra tutte le
categorie presenti privilegiando dapprima quelle del negozio corrente e poi le
altre,
•
in ogni pagina ci sono link ai servizi legati al prodotto/categoria che si sta
visitando (inserisci commento, segnala ad un amico ecc…) e
•
ai servizi aggiuntivi più importanti (partecipa forum, usa la chat ecc…)
La organizzazione dei reparti è essenzialmente ad albero e permette all’utente di
trovarsi in un ambiente simile a quello di un normale supermercato dove i prodotti
omogenei si trovano nello stesso reparto e reparti simili o affini si trovano vicini tra loro.
La presenza di richiami ad altri reparti sotto forma di link permette comunque di saltare
da una categoria all’altra con pochissimi click.
La struttura delle pagine, intesa come codice ASP, permette di implementare, in modo
agevole, le features dei negozi. Ricordo infatti che ogni negozio è gestito in remoto dai
propri manager mediante degli script opportuni. Attraverso questi script si possono
scegliere i prodotti/categorie da visualizzare, i metodi di spedizione/pagamento da
elencare, ma anche il tema grafico da applicare.
Questo requisito è stato soddisfatto mediante l’uso del server side include di ASP.
Infatti all’interno del file sarà presente un codice del tipo:
<%
136
Progettazione
<!--#include(caratteristica1.inc)-->
<!--#include(caratteristica2.inc)-->
‘resto del codice
<!--#include(caratteristica3.inc)-->
%>
All’interno
di
tali
files
ci
sarà
un
controllo
sul
valore
delle
variabili
di
applicazione/sessione che determinano l’abilitazione o meno di una caratteristica e con
l’aiuto del db verranno permesse determinate operazioni.
Quindi possiamo dire che in genere aggiungere nuove features significa aggiungere
nuove inclusioni di files in punti opportuni.
Vediamo come tale idea può essere schematizzata:
Figura 53: Server side include e la gestione delle features
137
Progettazione
L’operazione può essere semplificata se i file dove includerli sono relativamente pochi.
Questo è stato semplice da risolvere in quanto si è pensato di inserire tali file inclusione
all’interno dei files dei temi grafici138. Infatti, dato che tali temi sono in numero molto
minore dei negozi, attualmente i temi sono 5 e i negozi 35, basta modificare tali files per
implementare una ‘feature ’. Nel global.asa139 di ogni negozio avviene l’attribuzione, per
quel negozio, di un determinato tema, attraverso l’inclusione di alcuni file e quindi non
sarà necessario fare altro.
La tipologia delle pagine dell’applicazione VirtualMarket si può descrivere riferendosi
alle seguenti 7 categorie:
1. Home page
2. Pagina reparto intermedia
3. Pagina reparto finale
4. Pagina prodotto
5. Pagina gestione carrello
6. Pagina gestione transazione
7. Pagina gestione ordini
Home Page
Nella pagina principale (index) vengono presentati:
•
un prodotto posto al centro della pagina, scelto tra quelli legati maggiormente al
profilo utente o che il negoziante vuole assolutamente promuovere,
•
alcuni prodotti con un grado di appetibilità minore. Tali prodotti saranno
visualizzati a destra in un frame separato,
•
una lista di categorie/negozi che contengono prodotti selezionati in quanto:
1. trattasi di prodotti già acquistati,
2. oppure di accessori di prodotti acquistati,
3. oppure di prodotti collegati a eventi di nota per l’utente corrente
(anniversari, feste particolari),
4. oppure di prodotti selezionati in base alle risposte date nei form o tratte
dalla navigazione nel sito.
138
Tema grafico: insieme di immagini, font, e layout che caratterizzano un negozio rispetto ad un altro.
139
global.asa: vedi [5.3.1.1] e [6.8]
138
Progettazione
Oltre ai prodotti sono previste particolari finestre nelle quali l’utente potrà conoscere:
•
una selezione di prodotti scontati
•
una serie di servizi del sito che si vuole comunque promuovere
•
selezione di siti preparati per lui in base al suo profilo
•
notizie che possono interessarlo dei più disparati argomenti (economia, sport,
cronaca)
Dopo aver elencato quali possano essere i servizi e le informazioni da elencare nella
pagina, è risultato utile schematizzare la pagina principale attraverso un prototipo [fig.
54].
Figura 54: Prototipo dell' home page
Tale schema di pagina può essere modellata con molta efficacia e semplicità attraverso
l’UML e i diagrammi WAE.
139
Progettazione
In tutti i diagrammi che descriverò, verranno inseriti oltre che le pagine server complete
delle funzionalità e proprietà più importanti, anche delle pagine client che verranno
generate nonché dei componenti aziendali che vengono richiamati.
Purtroppo a questo livello vengono usati anche alcuni elementi del database degli utenti
che verrà descritto solo più avanti.
La maggior parte dei diagrammi descritti in questa sezione è stata inserita nel package
Presentation Logic in quanto descrivono elementi tipici delle interfacce grafiche: link,
immagini, frame, finestre, tabelle. Altri diagrammi invece sono stati posto nel package
Business Logic in quanto descrivono le entità (quasi sempre componenti COM
aziendali) che, facendo da tramite tra il DB e lo strato esterno, trasmettono i dati
formattati in maniera opportuna alle pagine ASP dell’interfaccia, le quali, si
preoccuperanno solo di visualizzarle nella maniera più opportuna. Insomma tale tipo di
struttura: strato server, strato logico e strato esterno è tipico dell’architettura 3-tier che
ho cercato di rispettare ogni qualvolta se ne fosse presentata l’occasione. Tutto ciò che
riguarda il layout della pagina è parte della Presentation Logic, tutto ciò che è
elaborazione dati o trasferimento degli stessi dal DB all’ interfaccia è Business Logic, il
resto è Server Component e quindi DB e file di configurazione del web server. In ogni
caso, in qualche diagramma si fa riferimento esplicito al componente che si preoccupa
di prelevare i dati e di elaborarli; il più importante tra questi è senza dubbio ICustomer,
descritto in seguito [vedi fig. 58]. Molte volte nei diagrammi non appare esplicitamente
nessun componente in quanto viene fatto uso dei componenti ADO connection e
recordset che si connettono e prelevano dati dal DB. Tali componenti non vengono
quasi mai citati per non appesantire i diagrammi.
In questo e nei successivi diagrammi viene descritta la pagina server che costruirà la
pagina client ma vengono anche accennate, le pagine server ivi incluse attraverso
un’associazione stereotipata con i packages che le racchiudono. Si trat ta della pagina
che disegna l’header, della pagina che visualizza l’elenco dei negozi e delle categorie,
la pagina che mostra il form per il motore di ricerca, la pagina che elenca una serie di
offerte più o meno personalizzate e della pagina che disegna il footer. La struttura
modulare della pagina rende possibile il riuso del codice (l’header è lo stesso per tutte
le pagine e quindi basta includere lo stesso codice in ognuna di esse) e semplifica il
lavoro in team in quanto si può lavorare contemporaneame nte su diversi codici senza
problema.
140
Progettazione
Tutte questi moduli sono stati inseriti in appositi packages che verranno descritti in
seguito. Descriverò in questa sezione, con dei diagrammi UML, il modulo che costruisce
l’header e quello che si preoccupa del recupero dal DB e della visualizzazione della lista
dei negozi e delle categorie.
Figura 55: Class Diagram WAE: Pagina Index
I metodi presenti all’interno della pagina server Index [vedi fig. 55] permettono di
invocare metodi presenti nei moduli esterni come quelli che riguardano il prelievo dei
dati sui negozi, dei prodotti e dei dipartimenti nonché la realizzazione del layout
dell’header e del footer. Questo è necessario in quanto dal diagramma non emergono le
funzionalità offerte dalle pagine presenti nei packages esterni.
La pagina client è composta essenzialmente da una vetrina (una tabella HTML) che
contiene la descrizione, una foto e il prezzo di un prodotto da promuovere. Ovviamente
141
Progettazione
ciò che vedrà l’utente sarà molto di più in quanto tutti i packages prima accennati
contengono pagina server che produrranno del codice html che per semplicità e
chiarezza ho lasciato e descritto all’interno dei packages stessi. Ovviamente, al termine
dell’elaborazione di questa pagine server (index.asp + i file inclusi) verrà prodotta una
sola pagina client composta dal codice html scritto da ciascuna di queste pagine.
All’interno del diagramma, sulle linee di relazione che legano le pagine con i packages,
sono stati inseriti i parametri che vengono passati da un package all’altro. Nella realtà
tali valori sono condivisi comunque in quanto trattasi di variabili session e application o
di valori presenti nella querystring della URL. Tale rappresentazione è stata necessaria,
oltre a quella di specificare lo stereotipo della relazione <<include>> per evidenziare su
quali valori tali moduli lavoreranno. Anche la presenza, all’interno della pagina
index.asp, delle proprietà di pagina: vmid, shopid e deptid, si è resa utile per
evidenziare su che tipo di variabili lavorano i metodi ivi descritti. In ogni modo, ho
dovuto legare tale oggetto con gli oggetti application, session e request per specificare
che tali valori di variabili derivano dai valori delle variabili application, session e request
del linguaggio ASP.
Il diagramma successivo [fig. 56] riguarda i file che compongono il package header.
142
Progettazione
Figura 56: Class Diagram WAE: package HEADER
Si può notare come in tale diagramma siano presenti le pagine che si occupano di
disegnare l’intestazione vera e propria compresi i menù di navigazione e i servizi one to
one ma ci sono anche riferimenti a package che contengono file da includere. Tali files
si occupano della gestione del partner intesa come rilevamento del valore del partnerID
contenuto all’interno della querystring (vedi paragrafo gestione partner 6.7.2) e della
gestione del profilo utente intesa come memorizzazione delle pagine che l’utente
corrente sta visitando.
Il diagramma successivo [fig.57] riguarda il package Shop&Department
143
Progettazione
Figura 57: Class Diagram WAE: package Shop&Department
Il diagramma [fig. 57] si riferisce alle classi del package Shop&Department che si
occupano di prelevare dal database l’elenco dei negozi, delle categorie e di
visualizzarlo, in questo caso, nella parte sinistra della pagina. Le pagine descritte che
adempiono a questo compito sono ShopList, CategoryList che prelevano dal DB, tutti i
negozi e tutte le categorie ma che possono eventualmente filtrare tale lista usando il
profilo dell’utente (verranno visualizzate solo le categorie/negozi più interessanti),
oppure usando le informazioni sulle promozioni (verranno visualizzate solo le
categorie/negozi con promozioni in corso) oppure una combinazione delle due.
Ovviamente c’è la possibilità di conoscere anche i prodotti appartenenti ad una
determinata categoria (ProductInCategory) e filtrarli in base al profilo utente o alle
144
Progettazione
promozioni. Come si può vedere, nel diagramma sono state inserite, per completezza,
anche le pagine index e i vari package coinvolti. In questo modo è possibile conoscere i
legami, attraverso link, tra le varie pagine. La classe colorata in blu rappresenta
un’interfaccia ovvero una parte del componente COM ‘Customer ’ usato per descrivere
in ogni forma il cliente mantenendo a run-time tutte le informazioni che su di esso
abbiamo. In questo modo, chiamando i metodi di tale interfaccia, è possibile risalire a
tutta una serie di informazioni che ci permettono di disegnare nel migliore dei modi le
pagine del sito.
La figura successiva [fig. 58] mostra il diagramma che descrive le entità coinvolte
dall’interfaccia ICustomer nel prelievo dei dati.
Figura 58: Class Diagram WAE: ICustomer Interface
Questo diagramma è stato inserito nel package Business Logic in quanto prelevando i
dato dal DB permette allo strato esterno della Presentation Logic di avere in maniera
‘formattata ’ i giusti dati.
Si può vedere come tra i metodi più importanti di questa interfaccia ci sono quelli che
permettono di visualizzare e modificare un profilo utente, quelli che permettono di
145
Progettazione
trovare un cliente all’interno del DB, quelli che permettono di visualizzare e modificare i
dati provenienti dai file di log, quelli di analizzare gli acquisti fatti, quelli di analizzare le
interazioni con il contact center, quelli di visualizzare il conto per i punti fidelity [vedi
6.7.1] e per finire quelli per visualizzare una serie di dati come le stringhe inserite nel
motore di ricerca, i prodotti suggeriti agli amici, i prodotti sui quali vuole essere
informato ecc…
In questo diagramma è possibile vedere come tale componente faccia uso dei
componenti ADO Connection e Recordset che permettono di accedere a DB e eseguire
query sulle sue tabelle. Sono state inserite per completezza anche gli schemi delle
tabelle coinvolte. In seguito verranno disegnate tutte le tabelle.
Come per il cliente, anche per i negozi e le categorie esistono dei componenti ad -hoc
utili per il recupero veloce dei dati. Tali componenti sono stati realizzati soprattutto per il
modulo di Shop&Departement nel quale vengono prelevate descrizioni di negozi e le
categorie ivi presenti, praticamente ogni qualvolta viene richiesta una determinata
pagina.
Come si può vedere dalla figura [fig. 59] sono presenti metodi tipici per il prelievo, dal
database, di questo tipo di dati come l’elenco dei sotto reparti di un reparto, oppure
visualizzare la descrizione di un negozio e il suo proprietario o visualizzare tutte le
categorie di un determinato negozio oppure tutti i negozi che hanno quella categoria di
prodotto come reparto.
Sono state visualizzate anche le tabelle coinvolte per facilitare la comprensione dei
meccanismi di data-retrieving.
146
Progettazione
Figura 59: Class Diagram: componenti IShop e IDepartment
Nella figura successiva [fig. 60] viene mostrato il diagramma che descrive il package
Productuseroffer
che
permette
la
visualizzazione
delle
offerte
più
o
meno
personalizzate (dipende dal grado di precisione del profilo utente) poste sulla part e
destra della pagina. La struttura della pagina è simile a quella che preleva i prodotti
all’interno delle varie categorie (ProductInCategory) con la differenza che in questa
sezione si è svincolati dal reparto che l’utente sta visitando. In sostanza, non ostante
abbia disegnato 2 diagrammi con 2 pagine server diverse, buona parte del codice ivi
presente è lo stesso. Viene cambiato il codice della query e la disposizione grafica del
risultato.
Ovviamente se l’utente si trova in una pagina descrittiva del prodotto le ‘vetrine
promozionali’ sul lato destro avranno un’importanza minore per non distogliere troppo
l’attenzione dell’utente. Saranno presenti solo piccoli richiami ai lati della pagina.
147
Progettazione
Figura 60: Class Diagram WAE: ProductUserPackage
Pagina Reparto
Rappresenta il contenuto di un determinato reparto che può consistere in prodotti ma
anche sotto-reparti.
Nel caso in cui non ci siano più sottoreparti da mostrare, non viene visualizzata la lista
delle categorie ma solo i prodotti ivi contenuti. Lo schema di questa tipologia di pagina
riflette quello precedente con la differenza che mancano, come è ovvio, le sotto
categorie. C’è una maggiore enfasi per i prodotti ivi contenuti e si cerca di non
distogliere l’utente da eccessivi richiami esterni ed estranei alla navigazione. Se l’utente
è arrivato fin qui probabilmente è molto interessato a ciò che sta leggendo e quindi si è
cercato di non inserire troppi elementi di disturbo.
Di seguito viene mostrato [fig. 61] il prototipo di una pagina reparto e la sua
modellazione in UML [fig. 62].
148
Progettazione
Figura 61: Prototipo Pagina Reparto
Figura 62: Class Diagram WAE: Pagina Reparto
149
Progettazione
In questo diagramma possiamo vedere come i metodi
RetrieveSubDept() e
RetrieveProduct() servano a prelevare tutte le eventuali sotto-categorie della categoria
selezionata , tutti i prodotti ivi presenti, o una selezione di essi se di numero elevato.
Per quanto riguarda la pagina html creata, essa è essenzialmente composta da una
vetrina che contiene 6 prodotti comprensivi di nome, descrizione, fotografia, prezzo e un
link alla pagina con la descrizione completa.
Pagina Prodotto
Nella pagina descrittiva di ogni prodotto vengono ridotti all’osso tutti gli elementi di
disturbo e si enfatizzano le informazioni sul prodotto che possono spingerlo ad
acquistarlo.
Tali informazioni possono essere sia descrittive del prodotto che legati a servizi utili ad
aiutarlo nella scelta.
Le descrizioni del prodotto ne dettagliano le caratteristiche ma riguardano anche il
prezzo, eventuali sconti, promozioni e la disponibilità.
I servizi invece riguardano:
•
lettura dei commenti che altri utenti hanno lasciato sul prodotto
•
lettura di commenti scritti da terze parti (gestori del negozio, commenti editoriali,
altro)
•
scrittura dei propri commenti
•
visualizzazione di una valutazione sintetica del prodotto
•
possibilità di suggerire il prodotto via email o sms ad un amico
•
visualizzazione dei prodotti simili o legati a quello corrente
•
visualizzazione dei prodotti che gli utenti hanno acquistato assieme a quello
corrente
Insomma le possibilità di personalizzazione del sito sono notevoli e mai invasive nel
senso che in una pagina i punti di interesse principale non sono più di un paio, mentre
gli altri riferimenti che possono attirare l’attenzione del visitatore non sono mai più di 5.
Il modo in cui tali finestre sono state disposte esula dagli scopi della tesi.
150
Progettazione
La figura successiva [fig. 63] mostra lo schema di una tipica pagina prodotto.
Figura 63: Schema Pagina Prodotto
La figura successiva [fig. 64] mostra il diagramma UML che descrive una pagina
prodotto e i suoi componenti.
151
Progettazione
Figura 64: Class Diagram WAE: Pagina Prodotto
Si può notare come siano presenti, oltre ai package già descritti alcune nuove entità.
La pagina server ProductDetailPage serve semplicemente a prelevare tutti i dettagli del
prodotto prescelto, comprese le opzioni e a mostrarli a video. Questo prelievo viene
effettuato mediante l’interfaccia IProduct descritta nel paragrafo successivo [fig. 65].
Il metodo UpdatePrice() serve a aggiornare il prezzo qualora l’utente scelga il prodotto
con un’opzione con sovrapprezzo. Tale metodo viene invocato automaticamente
quando viene scelta una nuova opzione.
Viene così costruita la pagina ClientProductDetail costruita essenzialmente da un form
con il quale si può scegliere di acquistare, di richiedere informazioni ulteriori e un form
152
Progettazione
per la scelta delle opzioni. Queste 2 eventualità sono state descritte dalle pagine Basket
e RequestProductInfo. Per meglio comprendere tale diagramma sono state inserite
alcune delle tabelle SQL coinvolte.
Abbiamo visto come importante siano state in precedenza le interfacce dei componenti
Customer, Dept e Shop. Adesso descrivo brevemente l’interfaccia IProduct in quanto è
stata introdotta esplicitamente per la prima volta in questo paragrafo.
Figura 65: Class Diagram: Interfaccia IProduct
Si può notare come attraverso il componente IProduct si possono prelevare
informazioni essenziali oltre alla semplice descrizione del prodotto. Riguardo un
prodotto si possono gestire dati riguardanti:
153
Progettazione
•
tutti gli utenti che lo hanno acquistato,
•
tutti i commenti su di esso ,
•
tutti gli sconti ad esso relativi,
•
tutti gli utenti che ne hanno richiesto informazioni,
•
tutti gli utenti che ne hanno visitato la pagina,
•
tutte le promozioni e le impression mediante banner o mediante le icone del
Punti Fidelity Program,
•
tutte le parole chiave,
•
tutti i carrelli che lo contengono,
•
tutte gli interventi al contact center che ne parlano.
Riepilogando, possiamo racchiudere nel prossimo diagramma delle attività, i passi e
quindi le attività che un utente compie sul mall visitando le varie pagine.
Figura 66: Activity Diagram: Interazione uomo-mall
154
Progettazione
Pagina gestione transazione (carrello, scelta spedizione e pagamento)
Per spiegare meglio cosa si aspetta di trovare un utente durante la fase di acquisto del
prodotto che ha selezionato dal catalogo, possiamo descrivere un elenco di funzionalità
da realizzare, per metterlo in condizione di terminare la transazione. Quello che si può
dire è che serve un supporto per la scelta delle quantità di prodotto da acquistare, la
scelta delle opzioni disponibili con conseguente aggiornamento del prezzo espresso in
diverse valute, la scelta di un metodo di spedizione e di pagamento e infine un supporto
che permetta l’utente di inserire in modo sicuro gli estremi della carta di credito [fig. 67].
Figura 67: Use Case Diagram: transazione commerciale
155
Progettazione
Pagina gestione carrello
Per spiegare adeguatamente come deve essere realizzata una pagina di gestione del
carrello bisogna dapprima descrivere uno scenario tipico in cui l’utente dopo aver
visitato alcune pagine sul sito, inserisce uno o più prodotti nel carrello, ne modifica la
quantità e ne salva il contenuto. Bisogna prevedere anche che il carrello possa essere
prelevato in seguito e che quindi i prodotti ivi contenuti possano essere eliminati
dall’utente e che, in caso di mancata disponibilità del prodotto, venga visualizzato un
messaggio in cui si avverte che un determinato articolo non può restare nel carrello in
quanto non è più disponibile.
Figura 68: Sequence Diagram: gestione carrello
Come si può osservare dal sequence diagram appena visualizzato, un utente, nel
momento che decide di acquistare il contenuto del carrello, termina di gestirlo e passa
156
Progettazione
alla scelta del metodo di spedizione e del metodo di pagamento, i quali, verranno
descritti in seguito.
La successiva immagine descrive il diagramma a oggetti relativo alla pagina di gestione
dei carrelli.
Figura 69: Class Diagram WAE: gestione del carrello
Come si può osservare dal diagramma a oggetti, attraverso la pagina server Basket si
possono invocare i metodi di eliminazioni prodotto, modifica quantità, cambio valuta
ecc…
157
Progettazione
Tale pagina server costruirà una pagina client costruita essenzialmente da un form per
l’inserimento della quantità, visualizzazione dettaglio del prodotto ecc… ma anche dalla
lista delle possibili valute e dai bottoni di salvataggio e caricamento dei precedenti
carrelli.
La struttura del database dei carrelli verrà descritta in seguito [fig. 82] ma posso
visualizzare il diagramma delle attività relativo all’interazione che l’utente ha con il
carrello.
Figura 70: Activity Diagram: Gestione del carrello
Si può notare come il passo successivo sia quello della scelta del metodo di spedizione.
Pagina scelta metodo di spedizione e pagamento
158
Progettazione
Sia la pagina della scelta del metodo di spedizione che il metodo di pagamento
possono essere descritti con un solo diagramma a oggetti in quanto sono molto simili
[fig. 71].
Figura 71: Class Diagram WAE: scelta metodo di pagamento
Quello che si può affermare è che, in entrambi i casi, prima di visualizzare la lista dei
possibili metodi di pagamento o di spedizione, viene analizzato il profilo utente e
mediante il metodo RetrievePaymentMethod() e RetrieveShippingMethod(), che ha
come parametro l’ID utente, si può stabilire con certezza quali metodi sono applicabili
all’utente corrente. Abbiamo già descritto infatti che ogni utente può avere una
personalizzazione anche nei modi in cui può pagare un bene o come può farselo
spedire in base al suo grado di affidabilità. La presenza di tabelle come
Stores&Payment e Stores&Shipping permette di sapere in ogni negozio e per ogni
utente i tipi di spedizione e pagamento amme ssi e quindi di visualizzare solo questi.
159
Progettazione
Nel diagramma [fig. 71] è stata anche descritta la pagina che viene visualizzata dopo
l’immissione dei dati della carta di credito, in quanto, prima di accettare un pagamento
via carta di credito, i dati inseriti dall’utente (nome, scadenza e numero carta) vengono
validati in SSL da un gateway di pagamento esterno al mall. L’avvenuta autenticazione
viene resa visibile con una pagina di risposta la quale memorizza anche gli estremi del
pagamento nella tabella opportuna che verrà descritta meglio nel paragrafo delle
vendite.
Figura 72 Activity Diagram: Scelta tipo spedizione e pagamento
6.6.1.3Motore di ricerca e categorizzazione
Per quanto riguarda il motore di ricerca interno è stato deciso di puntare molto sul
ranking dei prodotti, ranking che può essere stabilito in base a delle parole chiave, alle
promozioni in atto, al grado di interesse espresso dagli utenti verso quel prodotto.
160
Progettazione
Figura 73: Class Diagram Data Modeler: Motore di ricerca
Nel diagramma appena visualizzato si possono notare tutte le tabelle coinvolte per la
categorizzazione dei prodotti. La tabella degli sconti (Discounts) e delle promozioni
(PromotedArticles140) ci permettono di mostrare nei primi posti di un tipica lista di output
del motore di ricerca, i prodotti che ci interessa vendere in maggior quantità. La tabella
ProductInfoRequest (memorizza i prodotti dei quali determinati utenti desiderano
conoscere particolari e iniziative promozionali a loro legati), la tabelle Comments e
SuggestedProduct (memorizzano i commenti degli utenti e i prodotti suggeriti mediante
sms o email ad amici/parenti) esprimono il grado di interesse di determinati articoli e
quindi, sfruttando tale valore, li si può spingere in alto in tale lista. Infine la tabella
Key_and_Product permette di associare ad ogni prodotto una o più parole chiave in
140
Ricordo che tale tabella memorizza i prodotti che sono in promozione.
161
Progettazione
modo da categorizzare 141 meglio il prodotto stesso e quindi rendere più efficace il lavoro
del motore di ricerca.
La gestione del motore di ricerca interno richiede, quindi, la presenza di una serie di
parole chiave da associare ai singoli articoli ma anche la possibilità di ‘pilotare’ l’output
del motore usando delle priorità.
Supponiamo infatti di elencare delle keyword come colore, dimensione e walkman.
Queste keyword saranno associate ad articolo di un certo negozio e se si volesse
privilegiare durante la visualizzazione dell’output un articolo piuttosto che un altro si
userà una priorità per quel record. In questo modo se un ‘negoziante’ vorrà far apparire
il suo prodotto in alto, nella lista, basterà usare questo valore per stabilire l’ordine di
visualizzazione.
Per quanto riguarda la gestione del motore di ricerca il discorso si semplifica in quanto
esiste una sola tabella che racchiude sia i prodotti che le keywords unite ad un valore
intero che specifica la priorità da attribuire ad una tripla: negozio, articolo, parola chiave.
Il lavoro di ricerca viene svolto da un componente descritto in seguito 142,
SearchEngineComponent che pone in una tabella T_SearchEngineWords le parole
inserite nel form di ricerca al fine di conoscere i prodotti più cercati dagli utenti. Si è
pensato di tenere traccia di tutte le ricerche in termini di parole inserite nel form,
aggiungendo un riferimento alla tabella degli utenti (T_PcLog) che ci potesse aiutare
per l’identificazione dell’utente, la data in cui tale ricerca è stata effettuata e il riferimento
del negozio dal quale tale ricerca è partita.
141
una forma di categorizzazione è data anche dall’appartenenza del prodotto ad una o più categorie/reparti
142
vedi [fig. 74], [fig. 75]
162
Progettazione
Figura 74: Class Diagram: Componente SearchEngine
Per quanto riguarda la descrizione del form di ricerca e come questo interagisca con il
componente appena descritto basta leggere il diagramma posto in seguito.
163
Progettazione
Figura 75: Class Diagram WAE: Search Engine Script
6.6.2 Back end
6.6.2.1Sistema di gestione degli ordini
I requisiti su ciò che va memorizzato nel database, in seguito ad una transazione
commerciale, sono molto vincolanti, basandosi molto sui dati che una normale attività
commerciale può richiedere per analizzare successivamente l’andamento delle vendite.
Attraverso tali informazioni si deve poter permettere al manager di poter seguire
l’andamento delle vendite e all’utente di poter controllare lo stato del proprio ordine in
maniera semplice e chiara.
Gli ordini e le spedizioni
Per quanto riguarda i dati degli ordini da memorizzare posso anticipare che, attraverso
questi dati, sia il manager che l’utente, deve poter conoscere con esattezza i dettagli dei
164
Progettazione
propri acquisti in termini di prodotti, estremi pagamento, tipologia di spedizione nonché
stato dell’ordine come visualizzato in [fig. 76].
Figura 76: Use Case Diagram: Visualizzazione stato ordini
Ciò che serve è un numero d’ordine unico tramite il quale sia possibile risalire al
dettaglio della vendita in termini di quantità e descrizione dei vari articoli, prezzo al netto
di tasse e sconti, prezzo complessivo, l’indirizzo di spedizione e i dettagli del
pagamento. Tutti questi dati devono restare nel db anche in seguito a eliminazione di
prodotti dalla vetrina o dal catalogo, cancellazioni dei clienti o degli spedizionieri. Si
deve trovare quindi un modo per denormalizzare la base di dati portandoci dietro i
dettagli dei prodotti. In questo modo, sebbene sia possibile risalire all’entità degli sconti
e delle caratteristiche dei prodotti non più a catalogo usando le relazioni e le chiavi
esterne (per scelta progettuale i record non vengono mai cancellati ma viene settato lo
stato di quelli che si devono eliminare con il valore ‘ cancellato ’) si è pensato di
velocizzare il processo di recupero dati con il mantenimento di queste informazioni in un
altro database, quello delle vendite appunto, che rappresenta quindi un archivio di
informazioni storicizzate e statiche. Una volta che un prodotto è stato venduto a
165
Progettazione
determinate condizioni, tutti i dettagli ad esso relativi vengono memorizzati nel
database.
I valori da memorizzare possono essere facilmente descritti nel seguente diagramma
delle classi derivato dalla fase di analisi [fig. 77].
Figura 77: Class Diagram iniziale vendite
Il diagramma [fig. 77] ci dice come le varie entità sono collegate. In realtà le
trasformazioni da modello a oggetti a modello entità-relazioni e i successivi affinamenti
mi permettono di descrivere il database delle vendite definitivo nel seguente
diagramma.
166
Progettazione
Figura 78: Class Diagram Data Modeler: Vendite
Si può notare in questo diagramma come vengono gestiti gli ordini e le spedizioni: da
una parte c’è una tabella Order che memorizza semplicemente l’id del cliente, la data
dell’ordine e lo stato dell’ordine (evaso, nuovo, in evasione, annullato ecc…) e un id
dell’ordine che viene creato in modo univoco dal gestore degli ordini. Tale tabella viene
collegata mediante chiavi esterne alla tabella dei dettagli degli ordini OrderDtl e
OrderDtlOther, create semplicemente per snellire le operazioni di recupero dei dati
separando le informazioni più importanti e di frequente accesso da quelle che
167
Progettazione
aggiungono solo dettagli. In tali tabelle vengono memorizzate informazioni sugli sconti
praticati, sui punti acquisiti dal cliente in seguito all’acquisto, sulla data di spedizione e
di consegna del prodotto, sulla data del pagamento nonché sui dettagli del pagamento,
il tipo e il numero del corriere e infine le righe d’ordine, cioè i dettagli sul prezzo, le
quantità e le descrizioni degli oggetti acquistati.
La molteplice e differenziata presenza dei dati relativi agli sconti è utile in quanto,
prevedendo un’alta quantità di offerte mirate e personalizzate, si è ritenuto necessario
memorizzare quante più informazioni possibile su tali iniziative, per analizzare, in
seguito, l’influenza della presenza di uno sconto sull’andamento delle vendite.
Sono state inserite in questo diagramma le tabelle delle spedizioni e dei pagamenti
(Shipping e Payment). Per quanto riguarda le spedizioni possiamo dire che una tabella
memorizza l’indirizzo presso il quale sarà inviata la merce che necessariamente non
deve essere l’indirizzo del compratore, il quale, può considerare l’articolo acquistato, un
regalo e quindi farlo recapitare ad una diversa destinazione.
La tabella Shipping riepiloga i dati della spedizione (può verificarsi anche l’eventualità
che un ordine composto da più righe d’ordine venga evaso in tempi diversi). La chiave
primaria è rappresentata dalla coppia Shippingnumber e OrderDtlID in quanto per un
ordine è possibile avere più spedizioni. Vengono memorizzate anche le date di
spedizione e la data prevista e quella effettiva di arrivo. La presenza di un valore atteso
e quello effettivo rende possibile una stima dell’affidabilità di un corriere piuttosto che di
un altro in base al rispetto dei tempi di consegna. Vi è poi un riferimento sulla tariffa
applicata per la spedizione in quanto ogni corriere può avere tariffe differenziate e su
una tabella descritta nel diagramma dei corriere vi saranno tutte le tariffe applicate.
Con i due diagrammi successivi mostro l’avanzamento dello stato di un ordine durante
tutta la sua ‘vita’ [fig. 79] e le attività da seguire durante la visione dei dettagli di un
ordine [fig. 80].
168
Progettazione
Figura 79: StateChart Diagram: istanza della classe Order
169
Progettazione
Figura 80: Activity Diagram: Visualizzazione Ordine
Il carrello
Riguardo i requisiti della gestione dei carrelli viene richiesto che l’utente possa salvare il
contenuto del suo carrello per poi caricarlo e modificarlo a suo piacimento in tempi
successivi. L’eventualità che un utente possa salvare un ca rrello e riaprirlo a distanza di
mesi mi obbliga a dotare questo database di meccanismi attraverso i quali fosse
possibile risalire a tutta la storia datata di uno shopping-cart in termini di operazioni
effettuate su di esso (‘nuovo’, ‘inserisci prodotto’, ‘salva’, ‘carica’, ‘modifica contenuto’,
‘cancella’, ‘acquista’) e del suo contenuto che nel tempo avrebbe potuto dare dei
problemi. Cosa fare infatti qualora l’utente aprisse un carrello salvato mesi prima e il
suo contenuto fosse non più disponibile perché ormai fuori catalogo? In termini
progettuali è sconsigliabile l’ipotesi di legare tale carrello, via chiavi esterne, al database
dei prodotti proprio perché in caso di modifica delle caratteristiche di uno di essi
170
Progettazione
(prezzo, offerte promozionali) la base dati non sarebbe più coerente. Si è pensato così
di inserire tutti i dettagli dei prodotti scelti così come l’utente li seleziona dal sito
soddisfacendo anche il requisito dell’efficienza (non c’è bisogno di effettuare join
laboriosi con le tabelle dei prodotti).
Il diagramma mostrato in [fig. 81], derivato dalla fase di analisi mostra le varie tabelle
coinvolte e le loro relazioni.
Figura 81: Class Diagram iniziale: Carts
Il diagramma in [fig. 82] mostra il diagramma delle classi finale, dopo tutti gli affinamenti
eseguiti nel progetto di sistema e degli oggetti.
171
Progettazione
Figura 82: Class Diagram Data Modeler: Carts
Il diagramma mette in luce la presenza di una tabella di tutti gli articoli comprensivi di
descrizione, prezzo, e sconti ad esso applicati ArticlesinCart.
La solita tabella degli stati Status provvede a mantenere tutti i possibili stati che un
carrello può avere.
La tabella CartHistory con chiavi primarie CartID, ActionID e OptionarticleID serve a
tracciare la storia di un carrello dalla creazione alla sua distruzione in termini di
operazioni datete, eseguite su un determinato carrello, riguardo determinati prodotti. Il
campo action, proveniente dalla tabella TypeOfAction, descrive l’azione che l’utente ha
intrapreso sul carrello in un determinato momento (salva, carica, elimina, modifica
quantità, cancella). Risulta evidente quanto importante possa essere l’analisi dei vari
carrelli a fini di esplorazione delle attività degli utenti per carpirne i desideri ed
172
Progettazione
invogliarne l’acquisto se talli carrelli restano non venduti tramite iniziative di marketing
riservate ai prodotti presenti nel carrello.
Infine c’è la tabella Carts che memorizza l’utente che ha creato il carrello, la password
richiesta ogni volta che vorrà ricaricare il carrello, lo stato del carrello e lo sconto che
l’utente aveva nel momento in cui il carrello è stato salvato l’ultima volta.
Il diagramma succesivo [fig. 83] mostra gli stati possibili di un’istanza della classe Carts
durante l’interazione con il cliente.
Figura 83: StateChart Diagram: istanza della classe Carts
I corrieri
Per quanto riguarda i corrieri, le specifiche richiedono che si debba mantenere un
database di tutti i listini dei vari corrieri che ovviamente possono fornire prezzi
diversificati in base al costo del prodotto, le dimensioni e la destinazione. Un’ulteriore
complicazione deriva dal fatto che è difficile mantenere un database di tutte le possibili
173
Progettazione
destinazioni. Se per esempio un corriere ha un listino per le spedizioni all’interno della
regione, un altro per le destinazioni nazionali, un altro per quelle all’interno dello stesso
continente è chiaro che risulta difficile calcolare la spesa per una spedizione
direttamente dalla pagina web ma è altresì chiaro che questo requisito deve essere
soddisfatto dal cliente per una maggiore chiarezza nei rapporti: venditore -consumatore.
Figura 84: Class Diagram iniziale: Courier
La soluzione implementata vedi [fig. 85] è quella di creare diverse tabelle con tutte le
destinazioni previste dai corrieri: Continent, Country (Italy, Usa), State (Virginia, Lazio),
e City. Qualora un cliente inserisca nel form riguardante i dettagli della spedizione, una
città non presente nella tabella city, il sistema cerca, nella tabella State, un riferimento
alla regione indicata dall’utente. Se anche questa ricerca
desse esito negativo si
passerebbe alla nazione e così via. Il motivo di questa scelta è dovuto alla provenienza
italiana dei prodotti venduti. In questo modo, considerando l’alta percentuale di clientela
italiana, si adottano e privilegiano corrieri con tariffe particolareggiate per l’Italia
(vengono memorizzate anche le regioni nella tabella State) scegliendo una scala di
dettaglio continente-nazione-regione-città, mentre per le nazioni estere, il livello di
dettaglio va da continente-nazione-città. Quindi per le destinazioni italiane e europee in
genere, nella tabella State ci saranno le regioni (in Country ci sarà il nome dello Stato),
per le destinazioni americane ci saranno i nomi dei singoli Stati (in Country ci sarà
‘USA’), mentre per tutte le altre destinazioni si passerà dal nome dello stato contenuto
in Country al nome della città contenuto in City.
174
Progettazione
Attraverso 2 campi, ProductCostMin e ProductCostMax, si gestisce l’eventualità che un
corriere abbia una stessa tariffa, sia se il prodotto sia costato 5000 che 10000 lire. Più
importante è la distinzione fra i vari tipi di peso. Riguardo ciò è stata fatta una tabella
CostbyDimension
che
tramite
2
chiavi
secondarie
in
FareCodeName,
DimensionRangeIDMin e DimensionRangeIDMax, aiuta a distinguere le tariffe in base
alla dimensione minima e massima che un articolo può assumere. Una tabella
riepilogativa dei corrieri, Courier, in relazione molti a molti con la tabella di tutte le tariffe
crea una nuova tabella FareCodeName che contiene corriere per corriere tutte le tariffe
da esso applicate. In questo modo sarà molto semplice offrire al cliente la migliore
tariffa disponibile al momento in base ai dati del prodotto da lui acquistato (dimensione
e prezzo) e ai dati circa la destinazione.
Figura 85: Class Diagram Data Modeler: Courier
175
Progettazione
6.6.2.2Sistema di gestione delle transazioni
Per ciò che riguarda le transazioni economiche bisogna dire che la mia scelta è stata
quella di supportare il pagamento con contrassegno, bonifico e carta di credito. Mentre
per i primi due sistemi di pagamento non ci sono particolari problemi per il terzo bisogna
scegliere se ospitare fisicamente, all’interno del mall, un gateway di pagamento che
autenticasse e validasse i dati dei possessori di carta di credito o facesse riferimento ad
un gateway esterno presso un ente certificato. La mia scelta è ricaduta sulla seconda
opzione in quanto ciò ci solleva dalle enormi responsabilità di progettare, realizzare e
testare un sistema di autenticazione che comunque non rientra nel core business
dell’azienda. Tutto questo implica che nel momento in cui un utente decide di pagare
con carta di credito attraverso SSL o SET (dipende dal circuito scelto) viene direzionato
presso un gateway esterno situato all’interno dei sistemi informativi di una banca che
provvede a validare i dati immessi (nome titolare, data scadenza e numero carta di
credito). Se i dati corrispondono la transazione va a buon fine altrimenti viene
visualizzata una pagina di errore.
Un’ultima menzione va fatta per i modi e i tempi con i quali un utente effettua un
pagamento. I pagamenti possono avvenire anche in tempi diversi (pag amenti rateali) e
con metodologie diverse (carta di credito, bonifico, contrassegno etc…). Serve un
meccanismo che tenga conto di tutte queste eventualità e che tracci nel tempo tutte le
transazioni economiche. Dato che il sistema non deve supportare un ga teway di
autenticazione delle transazioni economiche interno ma appoggiarsi alle varie banche
affiliate al nostro sito le uniche cose che si devono tracciare sono:
•
un codice di autenticazione della transazione speditoci dalla banca,
•
la data del pagamento (chiave primaria),
•
l’id dell’ordine (chiave primaria),
•
il mezzo con cui si è pagato,
•
il valore,
•
la valuta.
176
Progettazione
Figura 86: Class Diagram: particolare tabella pagamenti
6.6.2.3Catalogazione degli utenti
Modulo Profili utente
La modellazione dei profili utenti prevede che ogni utente (sarebbe meglio dire ogni pc)
venga riconosciuto attraverso un cookie e che tale riconoscimento venga validato nel
momento in cui tale utente si identifica. Tutte le informazioni prelevate in questa fase
sono fondamentali per poter creare e modificare nel tempo un profilo di comportamento
dei nostri utenti.
Attraverso una parte manager di tale sezione si possono conoscere utente per utente
vedi [fig. 87]:
•
le pagine visitate,
•
la durata della visita,
•
la frequenza,
•
le pagine di ingresso,
•
le pagine di uscita,
•
l’indirizzo di provenienza,
•
la parole ricercate sul motore di ricerca interno,
•
i prodotti scelti,
•
quelli acquistati,
•
i carrelli salvati,
•
i suggerimenti dati agli amici,
•
i commenti lasciati sui prodotti/servizi,
•
le richieste di informazione su prodotti/servizi,
177
Progettazione
•
la partecipazione a chat e forum,
•
la partecipazione a giochi/iniziative promosse dal mall,
•
le risposte ai test,
•
i prodotti resi o oggetto di lamentela
Figura 87: UseCase Diagram: User data analysis
Da questo Use Case diagram emerge quali siano le entità da trattare al fine di
realizzare un’analisi completa. Ma per poter trattare questi dati, bisogna dapprima saper
riconoscere l’utente all’atto di una sua nuova visita, aggiungendo quindi nuove
informazioni al profilo già memorizzato. Possiamo quindi affermare che le fasi di una
profilazione utente sono essenzialmente 3:
•
registrazione,
•
riconoscimento,
•
analisi dati.
178
Progettazione
Per quanto riguarda la registrazione, le informazioni importanti da richiedergli sono,
oltre a quelle demografiche e anagrafiche, informazioni su hobbies e interessi,
composizione del nucleo familiare e in che modo è venuto a conoscenza del sito.
La gestione degli utenti deve permettere un alto grado di interattività c on essi grazie ad
una elevata conoscenza delle loro abitudini, nonché dei loro hobbies e delle trascorse
interazioni sul sito. Bisogna quindi prevedere degli archivi per i dati anagrafici, archivi
per i dati riguardanti le visite e gli archivi che mantengano le risposte ai vari quesiti che
vengono posti loro abitualmente. Bisogna gestire anche l’archiviazione di tutti i contatti
che avvengono tra il mall e l’utente stesso.
Può essere interessante anche offrir loro, una serie di servizi come la possibilità d i
registrarsi a delle mailing-list (si possono capire i reali interessi), offrire la possibilità di
usare chat e forum per dialogare con il servizio clienti o con gli altri utenti, nonché
proporre delle iniziative promozionali di benvenuto.
La specifica dei requisiti richiede che ci sia un’attenzione particolare per i dati che ogni
navigatore può fornire in modo diretto o indiretto durante la navigazione: pagine,
prodotti visitati, tempo di permanenza in una pagina, pagina di ingresso e pagina di
uscita, frequenza di visita. Inoltre bisogna evitare che siano tracciati gli accessi da parte
dei motori di ricerca che avrebbero sfalsato questo tipo di reporting. Per accentuare la
validità dei risultati è richiesto di porre un cookie nel browser del visitatore in modo che i
dati aggregati delle varie visite possano accrescere la mole di informazioni. Bisogna
porre un’attenzione particolare alla sicurezza e alla coerenza dei dati stessi in quanto
un determinato navigatore può spacciarsi per un altro.
Una prima soluzione è quella di poter creare degli agenti che analizzino i log del server
web (allo stato attuale delle cose è IIS4) ma la possibilità che i server web possano
essere cambiati nel tempo e quindi anche il formato dei log con conseguente riscrittura
dell’agente ci ha convinto di inserire del codice all’interno di ogni singola pagina web
che scrive nelle tabelle opportune solo le informazioni che desideriamo.
179
Progettazione
Figura 88: Class Diagram iniziale: Database Utenti
All’atto della registrazione viene scritto, posto che sia possibile, un cookie sulla
macchina dell’utente i cui valori vengono memorizzati nella tabella T_ PcLog, mentre le
pagine visitate vengono memorizzate nella tabella T_PagineLog vedi [fig. 92].
180
Progettazione
Figura 89 Class Diagram Data Modeler: database utenti
I dati della tabella T_Member saranno quindi: email e password, una domanda con
risposta per il recupero della password, lo sconto utente, il tipo di utente (utente
semplice, manager, partner, ecc…), il nome della compagnia di cui fa parte. Nella
tabella T_Interests verranno memorizzati, all’atto della registrazione, gli interessi e
hobbies dell’utente. Nella tabella T_MailingList verranno inserite le mailing list a cui
l’utente è iscritto ma anche la data di iscrizione, di cancellazione e il motivo della
cancellazione. Nella tabella T_MoreaboutMember ci saranno i dati riguardanti l’indirizzo
e il telefono mentre in T_AdditionalAddress un’eventuale recapito alternativo. In
T_Demographics ci saranno dati come il sesso, il numero di componenti familiari, l’età e
181
Progettazione
la professione. In T_VMCStore ci saranno i giudizi che del sito, l’utente da all’atto della
registrazione più un’indicazione di come vi è venuto a conoscenza.
Una volta registrato, l’utente è libero di navigare nel sito e di ritornarvi senza dover
rispondere nuovamente a domande sulla propria età o sul proprio nucleo familiare. Se il
browser dell’utente ha i cookie abilitati, egli verrà riconosciuto (quantomeno viene
riconosciuto il pc con il quale l’utente si è collegato), e quindi si possono aggiornare una
serie di tabelle sapendo che si tratta di un vecchio utente. Dato che la certezza che si
tratti proprio di lui non si può avere, (si può trattare di un pc in un Internet Cafè e quindi
usato da gente molto diversa tra loro) viene chiesto di identificarsi al momento
dell’inserimento del primo prodotto nel carrello. Come viene gestito il riconoscimento
dell’utente e quali sono le tabelle coinvolte?
Dai prossimi diagrammi [fig. 90], [fig. 91] si può vedere come, prima di leggere il
contenuto di una pagina, l’utente sia stato già riconosciuto tramite dei metodi invocati
all’interno del file global.asa e che i dettagli della pagina visitata siano inseriti in
un’opportuna tabella (T_PagineLog). Dopo tutto questo vengono invocati i metodi per il
recupero dei dati sui negozi, sulle categorie e sui prodotti e quindi per la visualizzazione
completa della pagina.
182
Progettazione
Figura 90: Sequence Diagram: Interazione lato server
Figura 91: Collaboration Diagram: Interazione lato server
183
Progettazione
La classificazione degli utenti ha seguito il principio per cui ogni utente registrato
dapprima è un utente normale cioè di cui non disponiamo di un profilo certo, del quale
possiamo tracciarne l’attività tramite cookies e l’analisi dei log. In effetti, nel momento in
cui l’utente visita per la prima volta il nostro sito riceve dal sistema un cookie che fa si
che, nelle visite successive, egli stesso (per la precisione il pc) venga riconosciuto. Tutti
i dati della navigazione vengono posti nel database utenti il cui schema è descritto nel
successivo diagramma delle classi di [fig. 92].
Figura 92: Class Diagram Data Modeler: database utenti
La scelta effettuata prevede la realizzazione di ben 4 tabelle che consentono al sistema
di memorizzare sia la provenienza in termini di indirizzo web e dello user-agent del
visitatore, nonché il negozio e le pagine in esso contenute che il cliente visita.
La tabella T_PcLog, in particolare, memorizza nel campo browser la stringa user-agent
che identifica il navigatore usato, nel campo ip_address l’indirizzo web del visitatore
mentre in sessionid si memorizza una stringa generata dal server web che ha la
proprietà di essere unica in quel momento per tutti i visitatori del sito. Attenzione
particolare merita il campo pcid che assume lo stesso valore di pclogid quando l’utente
non è stato riconosciuto correttamente mediante cookie altrimenti assume il valore
trovato nel cookie. In sostanza la prima volta che un utente visita una pagina del sito gli
viene inviato un cookie nel quale è memorizzato il valore pclogid del record che
184
Progettazione
descrive tale visita. Successivamente, in una sessione distinta, viene letto tale valore
dal cookie e quindi se risulta valido viene scritto nel campo pcid del nuovo record della
tabella T_PcLog che descrive appunto questa nuova visita. Ho parlato di validità del
valore contenuto del cookie. In realtà è stata posta particolare attenzione al fatto che
l’utente possa cambiare manualmente e intenzionalmente tale valore. Per evitare ciò,
nel cookie viene inserita una coppia di valori, un indice della tabella T_SessionTbl e un
valore di tipo uniqueidentifier143 chiamato guid memorizzati assieme al pcid
nella
tabella T_SessionTbl. In tal modo non appena l’utente visita la prima pagina sul nostro
sito, viene letta questa coppia di valori dal cookie e se corrisponde ad una coppia valida
in tale tabella allora l’utente non avrà manomesso alcunché e si procederà al prelievo
del valore pcid che sarà poi inserito nel nuovo record in T_PcLog appena immesso 144.
Figura 93: StateChart Diagram: stati di uno scenario tipico utente-mall
143
una variabile di tipo uniqueidentifier è un valore a 32 bit generato partendo dal valore di MAC ADDRESS della
scheda di rete ed è unico per tutti gli utenti connessi ad Internet.
144
vedi paragrafo [5.3.1.1] e [6.8] e [fig. 92] e [fig. 93].
185
Progettazione
Il campo shopid serve per identificare il negozio visitato in modo da rendere più veloce
l’analisi dei log.
La tabella T_PagineLog contiene tutti i nomi delle pagine visitate, i tempi di visita,
nonché i referrer e le querystring di una sessione-utente. Dall’analisi di questi dati è
possibile risalire ai prodotti che interessano più l’utente o intere categorie e quali sono le
pagine visitate più di frequente. Tali analisi sono molto più importanti delle risposte che
l’utente stesso può dare nei form in quanto le sue risposte possono sempre essere
falsate. In questo modo possiamo sapere quasi con certezza quali articoli o categorie di
prodotto interessano più l’utente anche se non effettua nessun acquisto. In questo
modo è possibile proporgli delle offerte mirate e personalizzate solo per quel prodotto
con la certezza che sarà cosa a lui gradita, sperando in un suo consequenziale
acquisto.
La presenza della tabella T_BlackList è giustificata dal fatto che ci sono dei motori di
ricerca interni o esterni, dei siti facenti parte della intranet o dei siti particolari che non
necessitano di essere tracciati o perché di scarso interesse o perché falserebbero le
analisi. In tale tabella verranno elencati manualmente e in taluni casi automaticamente
gli indirizzi da escludere da tale analisi. In questo caso la visita del sito da parte di un
motore di ricerca non comporterà nessun aggiunta di record né nella tabella
T_SessionTbl, né nella tabella T_PcLog né nella tabella T_PagineLog.
186
Progettazione
Figura 94: Activity Diagram: riconoscimento utente tramite cookie e global.asa
Il ruolo principale dell’analisi dei dati è quella di creare profili 145 le cui, diverse tipologie
ricordo che sono:
•
un profilo anagrafico, ottenuto mediante la consueta form di registrazione;
•
un profilo di navigazione, ottenuto mediante un approfond imento delle statistiche
offerte dal server web;
•
un profilo degli interessi ottenuto mediante l’analisi delle pagine prodotto visitate
e dal click-throught dei banner;
•
il profilo delle idee ottenuto mediante l’adesione dell’utente a sondaggi e forum di
discussione;
145
vedi 4.2.1.2
187
Progettazione
•
il profilo post vendita derivato dall’analisi delle mail, fax, telefonate ecc.. che
l’utente fa in seguito ad un acquisto per segnalare delusione, problemi,
soddisfazione e commenti in genere del prodotto acquistato.
Tutto ciò che può essere importante per l’analisi del profilo utente è riassunto nel
prossimo use case [fig. 95].
Figura 95: Use Case Diagram: User Profiling
Conoscendo meglio il cliente, è possibile calcolare la probabilità che un abbia un certo
comportamento e quindi derivare la propensione all’acquisto di un determinato prodotto.
188
Progettazione
Lo scoring146 è un metodo molto usato dagli esperti di marketing in quanto attraverso di
esso è possibile prevedere per esempio l’efficacia di una certa campagna di marketing
stimando a priori il relativo successo e quindi ottimizzando i costi proponendo l’offerta
solo a coloro che ne saranno interessati.
Per calcolare questo valore si possono anche proporre dei test e assegnare dei
punteggi ai percorsi e alle azioni che gli utenti compiono sul mall durante la
navigazione.
La possibilità di impostare dei questionari su argomenti apparentemente generici
oppure su prodotti e servizi del mall oppure semplicemente sulle necessità e abitudini
del cliente ci permette di conoscerlo meglio e più rapidamente.
Una stessa domanda può essere posta anche più volte nel tempo in modo da poter
analizzare la variazione delle risposte date.
Le domande potranno essere associate alle categorie e ai prodotti in modo che, se
l’utente stia navigando in una determinata categoria o leggendo le caratteristiche di un
certo prodotto e che sia tempo di rispondere ad una particolare domanda, questa gli
venga posta.
Figura 96: Class Diagram Data Modeler: dettaglio sui questionari
146
scoring: tecnica di marketing che prevede l’assegnazione di punteggi a eventi particolari, con cui stimare
comportamenti futuri del soggetto in esame.
189
Progettazione
Quello che si è fatto è stato semplicemente impostare una serie di domande associate
ad un tempo che indica l’intervallo dopo il quale la stessa domanda può essere
riproposta e inserire questi dati nella tabella T_Test. Poi si sono associati questi test ai
prodotti reparti o negozi sui quali desideriamo conoscere un’opinione includendo anche
una data, a partire dalla quale, tale test (suggerito via mail o via web) viene proposto e
un intervallo grazie al quale si può sapere ogni quanto tempo richiedere all’utente di
fornire una risposta (T_TestTarget). Infine, la tabella T_AnswerTest contiene tutte le
risposte comprensive di data a questi questionari.
Molto importante è anche l’analisi dei percorsi e delle azioni compiute da un
determinato utente, sul sito, assegnando a tali eventi un punteggio.
Ecco le possibili azioni nel dettaglio:
•
visitare la home page,
•
visitare pagina prodotto,
•
visitare pagina informazioni su spedizione, garanzia,
•
riempire il carrello,
•
svuotare il carrello,
•
effettuare l’acquisto,
•
scegliere lo spedizioniere,
•
effettuare il pagamento,
•
parole cercate nel motore,
•
richiesta info su un prodotto,
•
partecipazione chat/numero verde,
•
acquisti precedenti,
•
resi precedenti,
•
lamentele.
Attraverso il diagramma delle attività di [fig. 97] relativo ad un oggetto di tipo
Virtualmarketuser si possono notare quali possano essere gli eventi scaturiti sul sistema
dall’attività dell’utente e derivare le azioni più importanti a cui assegnare un punteggio.
190
Progettazione
Figura 97: Activity Diagram: istanza classe T_Member
Per quanto riguarda le pagine visitate e quindi i prodotti interessanti, nonché le
frequenza di visita ho già parlato. Resta da spiegare come possono influenzare l’analisi
le altre tipologie di dati che possiamo avere a disposizione.
191
Progettazione
Figura 98: Possibili sorgenti di dati
Tramite il diagramma appena esposto è possibile vedere come i vari moduli del
progetto possano contribuire in maniera rilevante alla creazione del profilo utente. In
particolare vengono mostrati il modulo che raccoglie negozi, prodotti e dipartimenti, il
modulo che descrive le vendite e quello che descrive gli utenti. Viene fatto riferimento
anche agli indici di tabelle che vengono usati come parametri nelle funzioni: vmid,
memberid. Mentre il primo è l’indice della tabella T_SessionTbl che maschera in un
certo modo i valori indice pcid della tabella T_PcLog, il secondo è l’indice della tabella
T_Member. Con il primo indice possiamo tracciare l’attività di un utente anche quando
non siamo sicuri della sua vera identità usando i cookie e le querystring. Con il secondo
indice, invece, calcolato in seguito all’identificazione dell’utente mediante email e
password possiamo con certezza attribuirgli determinate azioni e quindi migliorare il
profilo.
192
Progettazione
Figura 99: Class Diagram: differenze fra vmid,pclogid e memberid
Con il diagramma successivo mostro nel dettaglio tutte le tabelle coinvolte nel processo
di analisi dei dati.
193
Progettazione
Figura 100: Class Diagram Data Modeler: profilo avanzato utente
Questo diagramma e i seguenti, nel dettaglio, esprimono i legami tra le varie entità
necessarie per estrapolare i dati utili allo user profiling. Si può notare come le tabelle
OptionArticles, T_PcLog e T_Member siano quelle più ricche di tali informazioni.
Vediamo nel dettaglio le singole tabelle e quali indicazioni ci possono dare.
Il primo gruppo di tabelle che vado a descrivere è quello relativo al package
Stores&Articles.
194
Progettazione
Figura 101: Class Diagram Data Modeler: User Profiling Store&articles
Con le tabelle del diagramma [fig. 101] possiamo ricavare:
•
gli articoli nei carrelli e i loro proprietari,
•
i commenti espressi dagli utenti e su quale prodotto,
•
gli articoli, oggetto di suggerimento da parte degli utenti,
•
gli articoli sui quali gli utenti hanno espresso la necessità di conoscerne i dettagli
e nuove promozioni.
In questo modo conosciamo sia i prodotti più interessanti che gli utenti più attivi e più
recettivi in termini di risposta a sollecitazioni all’acquisto.
Il prossimo diagramma [fig. 102] descrive le tabelle del package Sales che sono
interessanti per il profiling avanzato.
In questo diagramma possiamo vedere come l’analisi della tabella dei dettagli di
ciascun ordine ci possa dire i prodotti realmente acquistati e da chi e in quale periodo,
mentre l’analisi della tabella dei pagamenti ci può dire come paga ciascun utente.
195
Progettazione
Figura 102: Class Diagram Data Modeler: User Profiling Sales
Figura 103: Class Diagram Data Modeler: User Profiling User
196
Progettazione
Il diagramma appena mostrato [fig. 103] ci dice come le tabelle dello schema S_ User
possano influenzare in maniera notevole lo user profiling. Ho già spiegato che la tabella
T_PcLog e T_PagineLog contengano i dati della navigazione di ciascun utente con la
possibilità di riconoscimento tramite cookie o, nella peggiore delle ipotesi, tramite
identificazione con email e password. La tabella T_SearchEngineWords ci dice le
parole e quindi gli argomenti che ciascun utente si aspetta di trovare sul mall e quindi
l’analisi di questi dati ci può spingere a mostrare meglio prodotti esistenti che vengono
cercati e non trovati o a mettere in vetrina articoli che vengono cercati ma che non sono
disponibili. La tabella T_Campaign ci dice quale tipo di campagne promozionali, verso
chi e quando sono state applicate per valutarne l’effetto sulle vendite. La tabella T_Calls
ci informa sul tipo di dialogo e sui contenuti di tutte le interazioni utente - mall in modo
da conoscere, nel tempo, il grado di soddisfazione degli utenti in base a ciò che è stato
detto al contact center. Possono essere utili anche informazioni riguardanti come, dove
e quando un utente abbia partecipato a forum e chat. Ciò può esprimere un gradimento
o un certo interesse verso articoli del mall. La tabella T_Interest raccoglie i prodotti di
cui gli utenti hanno espresso interesse mediante form. La tabella T_ MailingList ci può
dire a quali mailing list un utente è iscritto. Tale dato è utile in quanto esprime un
interesse diretto verso una o più tematiche precise. La tabella T_ AnswerTest ci dice a
quali test un utente a fornito una risposta, che tipo di risposta e la data.
Grazie alla modellazione WAE, si possono descrivere [fig. 104 e 105] le pagine server e
i componenti, in termini di metodi, proprietà e interazione con il database, che
gestiscono il flusso dei dati da e verso le tabelle appena descritte. Le classi che
modellano sia le pagine server che i componenti COM, fanno parte del package
business logic.
197
Progettazione
Figura 104: Class Diagram WAE: BusinessLogic 1
198
Progettazione
Figura 105: Class Diagram WAE: Business Logic 2
La gestione del contact-center
I requisiti del sistema richiedono una particolare attenzione al rapporto con i clienti e al
supporto che bisogna offrire loro pre e post vendita. Si è pensato che un maggior
199
Progettazione
dialogo con gli utenti che li guidi o meno all’acquisto sia fondamentale per rendere one
to one il rapporto tra negozio e clienti - acquirenti.
Per fare ciò c’è bisogno di un sistema che dialoghi con il cliente nei modi più disparati e
simpatici:
•
call center tradizionali,
•
email,
•
chat testuali e video,
•
forum di discussione,
•
commesso virtuale (e-clerk)
La cosa importante è però che tutti i dialoghi avvenuti in quello che abbiamo definito un
contact center (per la moltitudine di forme in cui il dialogo avviene) siano memorizzati in
un database in modo da usare le passate interazioni per rafforzare il dettaglio del
profilo.
L’idea che mi è venuta in mente è stata quella di realizzare un sistema di
comunicazione quanto mai multi-modale nel senso che prevedesse diverse forme e
mezzi di interazione tra il cliente e l’assistenza. Posso tralasciare la descrizione del call
center inteso in modo tradizionale in quanto non ha nulla di innovativo se non la
completa registrazione di tutte le comunicazioni utente-mall; posso tralasciare anche la
descrizione delle comunicazioni via posta per lo stesso motivo; la vera novità è la
possibilità di interagire attraverso una chat e un forum di discussione interni a
VirtualMarket. In questo modo viene creata una virtual community degli utenti del mall, i
quali possono ritrovarsi per scambiare chiacchiere non collegate all’attività del centro
commerciale e pareri sulle attività del centro. In sostanza anche il solo fatto che si
possa usare la chat per chiacchierare del più o del meno è positivo in quanto, data
l’integrazione della chat con le pagine del mall, è molto semplice visualizzare banner
pubblicitari, durante il chatting, che renderanno probabile l’interessamento di alcuni
chatters147 a prodotti del sito.
La gestione dei banner sarà tanto più efficace se verranno esposti prodotti affini a quelli
del reparto del quale i clienti stanno usando gli strumenti di chat e di forum di
discussione.
147
nel gergo i chatters sono coloro che usano sistemi di chat
200
Progettazione
L’idea è venuta un anno fa quando nessun sito aveva queste caratteristiche
implementate ma adesso non è difficile trovarne in giro di più o meno avanzate.
L’idea che sta alla base di questi due moduli è quindi cercare di far sentire l’utente
come se fosse nel negozio sotto casa con la libertà di acquistare ciò che vuole, quando
vuole chiedendo, se lo ritiene necessario, consiglio al negoziante o a coloro che in quel
momento si trovano insieme a lui nel negozio o addirittura a coloro che in un tempo
passato hanno acquistato nello stesso negozio o in un altro quello stesso prodotto.
Figura 106: Class Diagram Data Modeler: Contact Center
Il diagramma appena visualizzato mostra le diverse parti del database che riguarda il
Contact Center. Il nucleo fondamentale è rappresentato dalla tabella T_Calls che
memorizza il tipo di contatto avuto (chat, forum, numero verde, mail ecc…), il soggetto
201
Progettazione
del
contatto
(protesta,
apprezzamento,
consigli),
il
prodotto
oggetto
della
comunicazione, la data, l’operatore del contact center e ovviamente un riferimento
all’utente.
Inoltre sono rappresentati in questo schema anche le tabelle che memorizzano tutte i
dettagli riguardanti le campagne promozionali verso gli utenti intese come direct
mailing, tele marketing, banner pubblicitari ecc… in sostanza la tabella T_Campaign
memorizza chi riceve l’iniziativa di marketing, la data, il tipo di iniziativa e il prodotto che
si intende promuovere. Lo storico che se ne deriva dalla tabella in questione ci permette
di fare considerazioni precise sull’effettiva validità di una campagna piuttosto che di
un’altra.
La possibilità di chiedere, in modo istantaneo e con risposta immediata, un consiglio al
negoziante o ad altri utenti in quel momento presenti nel mall è stata la spinta che mi ha
fatto pensare ad una chat più o meno testuale. La presenza di una chat a stanze148, con
la possibilità di dialogare in privato con uno o più persone, crea nel mall una vera e
propria comunità virtuale nella quale il cliente si trova libero di esprimere le proprie
opinioni.
L’idea che sta dietro la chat è quella di creare un ambiente familiare (i sistemi di chat
sono ormai usati da moltissimi navigatori) con cui l’utente possa dialogare con
l’assistenza (commesso virtuale) e con gli altri utenti che in quel momento si trovano nel
centro commerciale. La chat è, quindi, una chat multistanza in quanto si può scegliere
di dialogare con tutti gli utenti del centro, oppure quelli di un singolo reparto per
chiedere informazioni e consigli sui prodotti esposti. Si cerca di ricreare l’ambiente di un
normale negozio dove davanti allo scaffale ci viene naturale chiedere a chi ci sta
accanto se quel prodotto è buono o meno o se ne ha provati di altri . Ci può venire
spontaneo anche di chiederlo ad un commesso che, in questo caso, diventa virtuale (e clerk) e la comunicazione con esso si fa privata nel senso che gli altri non possono
sapere cosa viene detto. Insomma la chat, realizzata in ASP, prevede u na
comunicazione pubblica e privata tra utenti disposti su più stanze che comunque sono
liberi di non partecipare alla discussione che viene aperta solo su richiesta dei singoli.
L’unica figura che è sempre presente e disponibile alla chat è il commesso vi rtuale che
148
si definisce chat a stanze, una chat con la possibilità di filtrare la lista delle persone con cui si vuol parlare
riducendola a membri di una stanza appunto, che nel nostro caso può essere un reparto.
202
Progettazione
deve rispondere alle domande degli utenti. Il commesso virtuale non è altro che un
esperto dei prodotti del mall che può essere sia dipendente del singolo negozio che
dipendente dell’intero mall.
Figura 107: Use Case Diagram: Chat
Dallo Use Case Diagram di [fig. 107] emerge quali siano le funzionalità da
implementare nella chat che sono tra l’altro quelle tipiche di un sistema di
comunicazione basato sull’instant messaging.
Le pagine server che implementano tale chat possono essere modellate attraverso il
seguente diagramma [fig. 108].
203
Progettazione
Figura 108: Class Diagram WAE: Chat
Ogni utente può partecipare alla chat semplicemente cliccando su un link presente in
ogni pagina del mall. Tale link però è realizzato in modo che a seconda della pagina in
cui viene cliccato la chat visualizza per default gli utenti collegati che si trovano in quella
determinata sezione. Ad esempio se l’utente inizia una chat mentre visita il reparto dei
casalinghi allora la chat visualizza gli utenti collegati che si trovano nel medesimo
reparto.
Per quanto riguarda il forum, devo dire che l’idea di fondo è la necessità di creare uno
spazio in cui l’utente potesse lasciare le proprie opinioni su prodotti/servizi e leggere
quelle degli altri ‘ off-line ‘. A differenza della chat nella quale l’interazione è immediata e
simmetrica (la domanda e la risposta avvengono immediatamente e ognuno sa con chi
sta parlando) nel forum di discussione, ognuno interviene essendo consapevol e che il
suo post può essere letto da chiunque in un tempo qualsiasi, non necessariamente in
quel momento stesso. In questo modo il dialogo si fa più pacato e riflessivo in quanto
non c’è la fretta di rispondere a determinate domande e inoltre con tutta tr anquillità si
può decidere di non rispondere. L’altro vantaggio è che, mentre per la chat si deve
sperare che ci sia qualcuno (che può anche non esserci) in quel momento capace di
rispondere alla propria domanda, con il forum si ha la certezza che più pers one, nel
tempo, possono leggere la propria domanda e porre quindi una risposta.
204
Progettazione
Figura 109: Use Case Diagram: Forum
Ogni utente nel momento che partecipa al forum di discussione ha la possibilità di
scegliere l’argomento principale che nel nostro caso è rappresentato dalle categorie del
mall. Una volta scelto l’argomento, può leggere tutto ciò che è stato detto sui prodotti
appartenenti a quella categoria. Ovviamente ci sono argomenti speciali come: i servizi
del mall, l’assistenza post vendita e ognuno è libero di proporre un nuovo argomento al
moderatore che, in caso positivo, lo inserirà nella lista.
Dall’analisi dei dialoghi degli utenti si possono ricavare utili informazioni sull’effettiva
qualità di un prodotto e sulla sua vendibilità.
Il successivo diagramma [fig. 110] mostra la modellazione delle pagine server che
implementamo il forum.
205
Progettazione
Figura 110: Class Diagram WAE: Forum
La pagina client del forum è composta da un modulo in cui si possono scrivere i post
(ForumForm), uno dove si possono scegliere i subject presenti o proporne di nuovi
(ForumSubjectList) e uno in cui si possono scegliere e leggere i post scritti da altri
(ForumPostList) selezionandoli per data, subject.
6.6.2.4Sistemi di data-mining e datawarehousing
Per quanto riguarda i sistemi di data-mining e datawarehousing devo dire che gran
parte del lavoro svolto è incentrato sulla memorizzazione quanto più completa di dati
tipici di un negozio virtuale con un’attenzione particolare ai dati che possono creare
servizi a valore aggiunto e la profilazione degli utenti. Una volta che Virtualmarket
raggiungerà le dimensioni aspettate allora parte dei dati verranno immessi in un
datawarehouse. A tali dati verranno applicati algoritmi di data min ing appropriati per
analisi di tipo predittivo-statistico. Il motivo per cui non è stato realizzato un sistema
siffatto ma solo ‘preparato’ (i dati che vi verranno inseriti ci sono tutti e già nella forma
più consona e opportuna) è che ci sono pochi dati e tale scarsità (pochi negozi, pochi
visitatori, pochi articoli) rende inapplicabili e quindi poco attendibili i risultati degli
algoritmi di Data-Mining. Nel momento in cui si avranno a disposizione alcuni giga di
dati allora, molto semplicemente, tali dati verranno spostati su un Data-Warehouse la
206
Progettazione
cui struttura, in termini di entità da memorizzare, rifletterà buona parte del database
esistente. Servirà solo una attenzione particolare alla realizzazione delle dimensioni e
quindi dei cubi relazionali al fine di avere un DataWarehouse più performante e quindi
analizzabile più efficacemente con tecniche OLAP.
6.7 Moduli Aggiuntivi
6.7.1 Punti Fidelity Program
Il modulo dei punti fidelity è stato pensato per aumentare il numero di visite al sito sia in
termini di registrazione di nuovi utenti che in termini di traffico.
L’analisi delle visite del sito mi ha portato alla conclusione che, nonostante il sito si
presenti con centinaia di prodotti molto vari tra loro e ben categorizzati, ben pochi
visitatori si registrano e ancor meno si identificano prima della navigazione. Pur
rimanendo di grande interesse la notevole quantità di dati scaturiti da queste
navigazioni ‘ anonime ’ mi è sembrato più opportuno sapere con esattezza chi visita
cosa e quando. La conoscenza esatta dell’utente che in quel momento sceglie un
prodotto piuttosto che un altro o che ponga determinate domande nel forum o sulla chat
risulta quindi fondamentale per la creazione di profili utente sempre più dettagliati e
spinti.
Allo stato attuale delle cose solo chi vuole gestire il carrello è obbligato ad identificarsi,
riducendo, di fatto, il numero di navigatori riconoscibili in modo sicuro. Si è fatta una
stima che solo il 5% dei navigatori effettua il log-in mentre i navigatori abituali sono solo
il 10%. Serve qualcosa che stimoli sempre nuovi clienti ma che soprattutto invogli i
vecchi clienti a tornare e ad identificarsi prima di visitare il sito.
Perché un utente dovrebbe trovare comodo registrarsi in un sito? Perché dovrebbe
tornare spesso in un sito? Perché dovrebbe sfogliare le pagine del sito in questione
manifestando la propria identità?
Le risposte potrebbero essere 149:
149
dati derivati da un questionario posto agli utenti del sito
207
Progettazione
•
perché il sito offre contenuti stimolanti, sempre nuovi e interessanti,
•
se si tratta di un sito di e-commerce, perché offre prezzi e condizioni vantaggiose
sui prodotti che vende,
•
perché ci sono continue promozioni,
•
perché ci sono dei giochi che lo divertono,
•
perché si può trovare una comunità di persone che lo attira,
•
perché la visita è ricambiata in qualche modo.
Tutte queste situazioni sono state studiate e realizzate in modo da rendere attraente la
navigazione in Virtualmarket ma evidentemente, data la giovane età del sito, serve
qualcosa di nuovo che attiri, con il passaparola, nuovi e vecchi utenti.
L’idea è quella di offrire dei punti convertibili in sconti sui prodotti o servizi a tutti coloro
che si registrano e a tutti coloro che rinuncino all’anonimato durante le successive
navigazioni. Ma come spingere gli utenti a visitare alcune pagine piuttosto che altre in
modo da aumentare la visibilità di un prodotto e di conseguenza la probabilità di essere
venduto? Ogni utente registrato ed iscritto al PF-Program ha a disposizione una serie di
punti giornalieri da acquisire in seguito al ritrovamento di diverse icone sparse qua e la
nel sito nelle pagine di descrizione dei prodotti. L’utente conosce quanti punti può
raccogliere in quel giorno (i punti possono cambiare giorno per giorno e utente per
utente in base al profitto che un certo utente ha), sa che per ottenere tali punti deve
cliccare su opportune icone disposte nelle pagine del sito ma non sa dove esse sono
disposte.
Il sistema dispone tali icone in modo casuale se:
•
non esiste nessun prodotto da promuovere,
•
l’utente non ha un profilo sufficiente per determinare una tipol ogia di prodotto per
lui interessante.
Il sistema dispone le icone in modo intelligente se:
•
esistono determinati prodotti da promuovere,
•
in base all’analisi degli acquisti fatti dall’utente, degli interventi nei contact-center,
delle precedenti navigazioni ci sono dei prodotti che con alta probabilità risultano
appetibili all’utente.
In questo modo il sito risulta essere altamente personalizzato anche se l’utente non se
ne accorge.
208
Progettazione
Figura 111: Use Case Diagram: Punti Fidelity
Come vengono gestiti i punti maturati? L’utente all’atto dell’accettazione delle condizioni
conosce che tali punti equivalgono a sconti su prodotti e servizi che il sito gli offre. Ogni
giorno l’utente può conoscere i punti maturati e i prodotti/servizi che può ottenere a
prezzo scontato previo uso dei punti accumulati. L’entità dello sconto è stabilito dalla
società caso per caso ma ogni utente conosce sin dall’inizio quali sono questi prodotti.
La società si riserva la possibilità di modificare in meglio per il singolo utente l’entità di
tali sconti comunicando ciò mediante comunicazione privata.
209
Progettazione
Figura 112: Class Diagram Data Modeler: Punti Fidelity
Il database del PF-Programme prevede una tabella-estensione (PF_User_Account) di
quella degli utenti, (T_Member) vista in precedenza, che aggiunge dei campi per
l’annovero dei punti che spettano giornalmente ad un certo utente, i punti già acquisiti
(questi 2 campi sono in realtà campi calcolabili da query eseguite sulla tabella
PF_Point_Product_User che memorizza i dettagli dei punti ma per motivi di prestazioni
sono stati inseriti in questa aggiornati volta per volta),e la data di accettazione del
regolamento del concorso. L’entità più importante è PF_Point_Product_User in quanto
in essa vengono trattati i dati dei prodotti che devono contenere l’icona clicca-punti, la
data in cui tale icona appare, la data in cui tale icona viene trovata e cliccata e la data in
210
Progettazione
cui i punti ad essa associati vengono consumati. L’inserimento dei dati in questa tabella
permette di ottenere il mapping più o meno intelligente tra l’utente -visitatore e il prodotto
nella cui pagina descrittiva è situata l’icona. Le altre entità descritte sono
PF_Promotions e PF_Promo_Discount_Products e PF_Promo_Discount_Services. La
prima di queste tabelle memorizza la promozione a cui si ha diritto, la durata di validità
della promozione sia in termini assoluti che in termini relativi. Dato che la promozione
poteva essere sia in termini di sconto su prodotti che su servizi di qualunque genere si è
pensato di usare 2 tabelle distinte (le altre due) che potessero descrivere sia i prodotti
che i servizi offerti (esempio di servizio: la consegna gratuita). Di ogni promozione
acquisita l’utente può disporre sia della fruizione dello sconto così come viene fornito
sia della conversione di tale sconto in punti (campo convertedtopoint) da accumulare
con gli altri per usufruirne in seguito.
Con l’Activity Diagram successivo si possono vedere quali siano le attività da svolgere
durante la navigazione di un utente su un negozio con il programma dei Punti Fidelity
attivato.
211
Progettazione
Figura 113: Activity Diagram: Punti fidelity
6.7.2 Partner Program
Le specifiche del Partner Program richiedono che possano essere gestite le figure di
partner appunto che hanno un ruolo fondamentale ai fini di acquisizione nuovi negozi e
incremento delle visite.
Vengono definiti 2 partner:
1. partner b2b: sono figure che procurano negozi per il mall e che percepiscono una
commissione sul venduto di quel negozio
212
Progettazione
2. partner b2c: sono utenti web che, previa registrazione, possono acquisire denaro
sulle vendite effettuate da utenti che hanno raggiunto Virtualmarket mediante un
banner opportunamente configurato e posto nel loro sito.
Per il Partner Program viene richiesto di sviluppare 2 moduli:
•
sviluppo delle pagine web che:
1. debbono riconoscere, mediante analisi della querystring, il partner
b2c, dal cui sito, il visitatore proviene
2. debbono attribuire una determinata commissione, legata al
partner b2c e b2b (se il negozio in questione ne è provvisto)
•
sviluppo script di gestione che devono permettere ai partner di poter
consultare il proprio credito accumulato, il profilo, la situazione dei subpartner e la situazione delle liquidazioni.
Un’ulteriore complicazione è data dall’eventualità che i partner b2b possano avere a
loro volta dei sotto-partner a cui dare una parte della loro commissione.
Es. il partner A registrato presso il mall come partner e unico referente porta tramite i suoi partner B e C 2 negozi (rispettivamente B
porta il negozio 1 e C il negozio 2). Il partner deve poter scegliere quale parte della sua commissione può dare ai suoi agenti in
base alle vendite dei singoli negozi.
Viene così realizzata una struttura ad albero, alla cui radice, è posto un riferimento alla
società committente del sito 150, e nei sotto-alberi di primo livello sono disposti i
riferimenti ai partner di primo livello. Man mano che si scende, si hanno i vari subpartner
che hanno come unico referente il partner di livello superiore del proprio circuito.
150
può essere considerato un partner in quanto percepisce commissioni ‘virtuali’ sul venduto e apporta partner
(quelli di primo livello)
213
Progettazione
Figura 114: Use Case Diagram: Partner Program
La lettura dello use case diagram ci permette di dedurre quali siano le informazioni da
dover memorizzare. Bisogna tener conto di una serie di dati del partner (numero CC
bancario, elenco negozi affiliati, indirizzo di posta elettronica), degli ordini e delle
commissioni maturate attraverso di essi e delle liquidazioni effettuate.
Figura 115: Class Diagram Data Modeler: Partner Program
Ovviamente tutti questi dati debbono essere visualizzati dai partner in modo da
controllare crediti maturati, dettagli del proprio profilo e dei vari subpartner. Il
diagramma sottostante spiega come le varie pagine server interagiscono in modo tale
da proporre, nella maniera più chiara e immediata, le informazioni richieste.
214
Progettazione
Figura 116: Class Diagram WAE: Partner Program
Per semplificare il lavoro degli script lato server è stato progettato un componente
(IPartner) la cui interfaccia è descritta nel diagramma sottostante. Tale componente
provvede, come tutti i componenti del middleware a dialogare con il database
sottostante e a porre i risultati allo strato superiore. Si può ben vedere come siano
presenti i metodi per aggiungere e modificare un profilo partner, gestire i negozi ad esso
associati, leggere le commissioni maturate e quelle già liquidate.
215
Progettazione
Figura 117: Class Diagram WAE: Partner Program BusinessLogic
216
Progettazione
Figura 118: Moduli dell’applicazione Virtualmarket
6.8 Il file global.asa
I moduli appena descritti sono stati implementati mediante la realizzazione di script e
componenti che vengono richiamati all’interno delle pagine server che costituiscono il
sito. Buona parte del lavoro viene svolto all’interno di un file esterno, che ho pensato di
inserire tra i componenti server dell’applicazione. Tale file è il global.asa151 che, ricordo,
trattasi di un file, unico per ogni directory virtuale (ogni applicazione web), la cui
esecuzione avviene prima dell’interpretazione della prima pagina server richiesta.
151
vedi 5.3.1.1
217
Progettazione
Figura 119: Global.asa
Il campo shopID del Global.asa memorizza l’indice della tabella shop relativa al negozio
corrente, il campo odbcstring memorizza la stringa odbc di connessione al database
corrente, il campo vroot memorizza il nome della directory virtuale del negozio corrente,
mentre il campo query è un array che contiene le query più utilizzate in tutta
l’applicazione.
Ricordo brevemente che i metodi ApplicationOnStart() (eseguito all’inizio della prima
sessione utente), ApplicationOnEnd() (eseguito al timeout dell’ultima sessione utente),
SessionOnStart() (eseguito all’inizio di ogni sessione utente) e SessionOnEnd()
(eseguito alla fine di ogni sessione utente) sono metodi standard, previsti
dall’architettura Asp. Tutti gli altri metodi sono stati inseriti per gestire i vari moduli.
SettaPartnerB2C() legge la querystring della referred url dell’utente corrente verificando
se proviene da un banner del ‘Partner Program’ impostando in tal modo le variabili di
sessioni PartnerB2CID e PartnerB2CCommissionID.
SettaPartnerB2B() preleva dal database, usando la tabella PP_PartnerShop, il valore
del partner B2B relativa al negozio corrente e la sua commissione impostando così le
relative variabili di applicazione.
GestioneCookie() legge il cookie dell’utente corrente per verificare se si tratta di un
nuovo o vecchio utente, appoggiandosi alla tabella T_SessionTbl. In ogni caso il cookie
verrà scritto con un nuovo valore indice di T_SessionTbl e un guid creato
218
Progettazione
appositamente se trattasi di un nuovo utente altrimenti verrà scritta solo la data
dell’ultima visita.
Figura 120: Cookie
SettaNomeNegozio() imposta le variabili di applicazione relative a vroot, shopid e
odbcstring.
SettaVariabiliApplication() imposta le variabili di applicazione relative alle features più o
meno attivi per il negozio corrente. Per esempio nel global.asa di un negozio tipico di
virtualmarket c’è il seguente codice:
Sub setta_application
Application("pf_programme")="no"
Application("magazzino")="no"
Application("ppartner")="yes"
Application("dm_analisys")="yes"
end sub
che dice che è attiva la feature ‘Punti Fidelity program ‘, la gestione avanzata del
magazzino, il ‘Partner Program ’ e il log per l’analisi avanzata dei dati utente.
ImpostaQuery() setta l’array delle query.
219
Progettazione
Figura 121: Use Case Diagram: Global.asa
Nel diagramma degli Use Case di [fig. 121] si è visto come vengono invocati ed
eseguiti i metodi presenti all’interno del global.asa. Abbiamo anche il relativo
Collaboration Diagram.
220
Progettazione
Figura 122: Collaboration Diagram: Global.asa
Nel dettaglio, nel Collaboration Diagram successivo, possiamo vedere cosa avviene
nel global.asa, durante il metodo SessionOnStart().
221
Progettazione
Figura 123: Collaboration Diagram: Riconoscimento Utente tramite cookie
Nel diagramma [fig. 124] vengono mostrati gli stati in cui si trova un’ istanza della classe
Cookie durante una sessione utente.
222
Progettazione
Figura 124: StateChart Diagram: istanza classe Cookie
Per capire meglio quali possano essere gli stati del sistema durante l’esecuzione del
global.asa viene mostrato il diagramma [fig. 125].
223
Progettazione
Figura 125: Activity Diagram: Esecuzione completa global.asa
6.9 Ottimizzazioni
6.9.1 MTS
Per migliorare la scalabilità è stato necessario intervenire su MTS. 152 Ho notato infatti
che i componenti COM scritti per MTS risultano essere migliori se si utilizza il pool di
connessioni di Transaction Server per le connessioni ODBC. Se un componente COM
gestito da MTS richiede una connessione al database, ne verrà fornita una del pool
gestito da MTS. Al termine della connessione, essa verrà restituita al pool. Il pool di
connessioni riduce i costi derivanti dalla creazione di connessione al database e la
necessità di gestire una connessione aperta per tutta la durata dell’applicazione. In
sostanza, se un’applicazione richiede che il sistema crei un’istanza relativa ad un
152
Vedi [8] della bibliografia
224
Progettazione
componente gestito da MTS, MTS intercetterà la chiamata e se è già in esecuzione
un’istanza del componente e se tale istanza è inattiva, verrà assegnato al processo in
corso altrimenti se ne creerà una nuova.
In sostanza, la chiamata viene intercettata quando un client chiama CreateObject. Al
posto del riferimento dell’oggetto del componente previsto, MTS trasmette al client un
riferimento a un oggetto del contesto creato. L’oggetto del contesto agisce come proxy
per l’oggetto effettivo, consentendo al client di accedere alle proprietà e ai metodi
dell’oggetto, permettendo comunque a MTS di mantenere il controllo dell’oggetto
effettivo. In questo modo MTS può verificare il momento in cui un client utilizza l’oggetto
e condividere lo stesso oggetto con altri client quando esso non è in uso. Ciò si traduce
nell’usare un numero inferiore di istanze del componente. Context è un oggetto COM
che implementa l’interfaccia IObjectCOntext che consente ai componenti di comunicare
a MTS quando l’operazione che stanno eseguendo è terminata con esito positivo o
negativo. I metodi con i quali MTS consente ai componenti di usare le risorse del server
sono 2: attivazione ‘just in time’ e disattivazione ‘as soon as p ossibile’.
6.9.2 Inclusione Server-side
Un modo ulteriore di diminuire il carico dei server è quello di limitare il numero di
inclusioni di file lato server. I file di inclusione consentono di riutilizzare il codice in ASP
caricando il codice dell’in-lining del file di inclusione con la pagina ASP prima che venga
eseguita. Se è necessario che tutte le pagine del sito abbiano la stessa intestazione è
sufficiente includere in esse lo stesso file header.asp. Un vantaggio importante di
questo metodo è che per aggiornare l’intestazione è sufficiente modificare il codice in
un solo punto anziché in ogni pagina. Un altro vantaggio è quello della facilità di
suddividere i compiti senza creare problemi di condivisione file. Se vengono inseriti in
file da includere caratteristiche omogenee e se solo queste danno problema, lo
sviluppatore può concentrarsi su queste lasciando che gli altri membri del team lavorino
su altre parti della pagina.
Es:
<%
<!--#include(“header.asp”)-->
<!--#include(“gestione_partner.asp”)-->
<!--#include(“gestione_banner.asp”)-->
<!--#include(“visualizza_vetrina.asp”)-->
<!--#include(“footer.asp”)-->
%>
225
Progettazione
Un altro vantaggio, se non altro in prospettiva di uso di una struttura a componenti è nel
fatto che, identificate le funzionalità da offrire e disposte in file distinti, questi stessi file
possono tradursi in componenti COM e quindi lasciare che eseguono loro il compito
dapprima dato allo script.
Es:
<%
banner=server.createobject(“banner.dll”)
banner.visualizza
partner=server.createobject(“partner.dll”)
partner.settaCommissione
vetrina=server.createobject(“vetrina.dll”)
vetrina.caricaprodotti(partner)
vetrina.visualizza
%>
purtroppo bisogna limitare il numero di file da includere per 2 motivi:
•
prima di eseguire il codice di una pagina ASP creata dinamicamente, il server
deve effettuare l’inclusione dei vari file. Questo comporta un notevole overhead e
comunque un ritardo della visualizzazione delle pagine. Inoltre ASP non supporta
l’inclusione condizionale in quanto le istruzioni condizionali scritte in VBScript
verranno comunque eseguite dopo l’inclusione e quindi non serviranno a nulla
(PHP non soffre di questo problema);
•
se i file da includere contengono codice comunque non utilizzato essi diventano
di dimensioni considerevoli senza apportare reali benefici, anzi aumentano il
tempo di interpretazione (il file è più lungo) e quindi quello di visualizzazione sul
browser.
Ho scelto comunque di usare i file di inclusione cercando di inserire in essi solo le
istruzioni necessarie. La possibilità di creare pagine in modo dinamico mi ha permesso
di realizzare negozi in tempi brevissimi in quanto bastava cambiare solo il file da
includere e il nuovo negozio che rispetto al vecchio aveva di diverso solo il tema grafico
era pronto.
226
Progettazione
6.9.3 Uso dei componenti piuttosto che degli script
(*)153
Un ulteriore modo di velocizzare il processing dell’applicazione se questa è di grandi
dimensioni è quello di trasferire il codice ASP ai componenti COM. ASP permette di
scrivere pagine dinamiche molto facilmente e velocemente imme rgendo in una pagina
con codice VBSCRIPT del codice HTML puro, ma il fatto stesso che il codice ASP
debba essere caricato e interpretato in fase di esecuzione può incidere negativamente
sulla scalabilità dell’applicazione. Poiché i componenti sono precompi lati risultano più
veloci, anche se viene aggiunto un certo overhead dovuto alla comunicazione fra i vari
componenti che con lo script non c’è. Un altro vantaggio dei componenti COM è che
essi offrono una maggiore protezione generale, la protezione della logica aziendale
proprietaria e la capacità di astrarre l’accesso ai dati e la logica aziendale
dell’interfaccia utente. Questa astrazione può offrire ulteriori benefici, inclusa la capacità
di
aggiornare
in
modo
selettivo
e/o
sostituire
singoli
componenti
o
livelli
dell’applicazione, senza influire sul resto dell’applicazione, nonché viene facilitato il
riutilizzo di tale componente.
6.9.4 Le architetture che supportano la scalabilità
(*)154
La gestione di componenti e database in un ambiente distribuito implica l’uso delle
transazioni. Il database utilizzato, MS SQL Server offre il supporto a tale tipo di
transazione e un’abile uso delle istruzioni SQL all’interno delle Stored Procedure ci
permette di ottenere script transazionali. Ma cosa succede se, una variabile di sessione,
all’interno di uno script ASP, assumesse il valore di un campo in una tabella modificato
all’interno di un update, ma che tale query, subendo un errore, venisse annullata tramite
un abort? La soluzione è rendere transazionali anche le pagin e ASP.
Per rendere transazionali le pagine ASP basta scrivere nella prima riga della pagina:
<%@TRANSACTION = transParam% >
dove transParam può essere Requires_New, Required, Supported, Not_Supported.
Sebbene lo script non possa determinare il risultato di una transazione del database, è
possibile creare gli eventi che verranno chiamati quando la transazione verrà
153
Vedi [6], [7], [8] della bibliografia
154
Vedi [6], [7], [8], [9] della bibliografia
227
Progettazione
completata o se si interromperà analizzando così il codice di errore che SQL Server
mette a disposizione. Tali eventi sono gestiti dalle procedure: OnTransactionCommit() e
OnTransactionAbort()
Ricordo i 4 attributi principali per cui, se supportati,
un’elaborazione si definisce
transazionale (ACID Test).
Atomicità:garantisce che l’insieme delle operazioni venga confermata o annullato
come fosse un’unità singola.
Coerenza: garantisce che l’operazione eseguita sia legale, conforme alle regole
aziendali o di coerenza del database che si sta utilizzando.
Isolamento: garantisce che le transazioni eseguite contemporaneamente restino
indipendenti l’una dall’altra.
Resistenza: garantisce che le transazioni non confermate non vengano danneggiate
dagli errori di sistema.
6.9.5 Come migliorare il tempo di risposta dell’applicazione
(*)155
Un tempo di risposta lento può dipendere da:
•
query non ottimizzate,
•
conflitto di risorse,
•
implementazione dei componenti insufficiente,
•
elementi hardware.
Per quanto riguarda le query non ottimizzate bisogna individuare dove, nel database,
vengono eseguite le query più onerose. Si dovranno inserire degli indici, ridurre i join,
spostare gli operatori più lenti in basso cercando di eseguire prima operatori di
sfoltimento come select e usare condizioni WHERE.
Un’altra fonte di lentezza che rientra nelle query non ottimizzate è quello relativo all’uso
di stringhe SQL generate in modo dinamico. Sebbene sia più facile scrivere query
all’interno delle pagine ASP in base ai parametri dettati dall’utente attraverso FORM per
poi passare tutta la stringa al db per l’esecuzione è più efficiente usare delle Stored
Procedure.
228
Progettazione
Per quanto riguarda il conflitto di risorse questi possono suddividersi in:
•
problemi di blocco (blocchi di condivisione, di aggiornamento, esclusivi): 2 utenti
accedono a una stessa riga bloccata da una query,
•
connessioni al database: è stato raggiunto il numero massimo di connessioni al
database,
•
utilizzo della memoria: è stata raggiunta la quantità massima di memoria
allocabile,
•
tempo di attività del processore.
I blocchi di condivisione sono relativi a operazioni che non aggiornano dati. Questi
blocchi permettono di leggere le righe interessate ma non di modificarle. In SQL Server
7 il blocco minimo è a livello di riga mentre nella versione 6.5 era a livello di pagina.
I blocchi di aggiornamento sono usati sulle righe che si desidera modificare durante una
query. Prima che avvenga effettivamente la modifica il blocco diventa esclusivo. In
pratica si impedisce di impostare ulteriori blocchi di aggiornamento nonché quelli
esclusivi mentre possono essere impostati blocchi di condivisione. Un blocco di
aggiornamento non può diventare esclusivo se non stati rilasciati prima i blocchi di
condivisione.
I blocchi esclusivi impediscono di richiedere un qualsiasi tipo di blocco.
Per quanto riguarda le connessioni al database bisogna sapere che ciascuna
connessione occupa memoria (40 kbytes per SQL Server e 2 mega per Oracle) e quindi
impostare un numero massimo di connessioni disponibili. Inoltre è utile usare un pool di
connessioni ODBC che riduce il numero di connessioni necessarie creando solo quelle
connessioni che hanno caratteristiche diverse (ID utente, password, server) da quelle
già in memoria.
155
Vedi [8] della bibliografia
229
Conclusioni
7 Conclusioni
Lo scopo della tesi era quello di pianificare e sviluppare un’infrastruttura di e-commerce
fortemente orientata all’utente in grado di espandere le proprie funzionalità in modo
semplice e rapido.
Date le dimensioni dell’applicazione e dati i tempi ristretti a disposizione per lo sviluppo,
si richiedeva di usare, sia per la fase di analisi, che per la fase della progettazione e
possibilmente anche nella fase di sviluppo una metodologia capace di spiegare con
chiarezza e immediatezza tutte le caratteristiche dell’applicazione e le problematiche
affrontate. La scelta è ricaduta su una metodologia Object Oriented che si è rivelata
vincente in quanto, in poco tempo, si sono specificati requisiti, analizzate le
caratteristiche principali e disegnato un prototipo funzionante del sistema.
Con tale approccio si costruisce un modello per un sistema che risponde in modo
chiaro, semplice e veloce, alle esigenze degli utenti.
La metodologia a oggetti si è adattata molto bene alle nostre esigenze anche nella
suddivisione e descrizione dei molti sottosistemi di cui Virtualmarket è composta, e nella
specifica delle molteplici entità in relazione fra loro, entità assimilabili a oggetti come
tabelle di database, pagine server e componenti.
L’uso di Rational Rose, associato a tale metodologia, ci ha permesso di lavorare in
modo iterativo su tutte le parti del progetto, partendo dalla specifica dei requisiti fino alla
codifica vera e propria, fornendo un supporto anche per la documentazione finale grazie
alle estensioni UML per la modellazione dei database (Rose Data Modeler) e per la
modellazione delle pagine web (Web Application Extension). Nei passi intermedi, i
modelli si sono via via affinati arrivando a mostrare con estrema semplicità sia
diagrammi UML molto simili a diagrammi entità relazioni, sia diagrammi UML molto più
espressivi di qualsiasi notazione per la descrizione di pagine web complesse sia server
che client.
Attraverso Rational Rose, si poteva ‘realizzare’, con un solo click, l’intero database, se
quest’ultimo fosse stato di tipo Oracle. Dato che la scelta è ricaduta su un altro DBMS
questo non è potuto accadere.
Quello che è mancato è stato un supporto per la creazione, seppur p arziale, delle
pagine web. La presenza infatti, di una notazione che potesse esprimere con
completezza: variabili, procedure, relazioni con db, presenza di link, form,
230
Conclusioni
immagini,ecc… da una parte ci ha permesso di spiegare con naturalezza sia pagine
server che pagine client ma dall’altra non ci ha permesso di costruirle in modo
automatico.
I vantaggi di un approccio come quello che prevede la progettazione di un sistema
attraverso un linguaggio di modellazione a oggetti sono i seguenti:
•
offre una documentazione chiara e completa del sistema,
•
offre una facilità di riuso di tutta la documentazione emersa nella fase di
progettazione (specifiche, diagrammi, prototipi) adeguandola a progetti simili in
poco tempo,
•
semplifica e velocizza la soluzioni a problemi complessi e di vaste dimensioni
attraverso la suddivisione in sottomoduli,
•
la presenza di strumenti adeguati permette di tradurre il lavoro svolto di analisi e
progettazione in sistemi più che prototipali dai quali partire per sviluppare l’intero
sistema.
Riepilogando le diverse fasi dell’intero progetto, queste sono state:
•
specifica dei requisiti attraverso la notazione degli use case in grado di mostrare
le funzionalità da sviluppare anche a personale non informatico,
•
compilazione di alcuni sequence e collaboration diagram per sottolineare le
situazioni più importanti o delicate dell’intero sistemo con particolare attenzione
all’interazione utente – mall,
•
disegno dei class diagram che ci desse una panoramica delle classi a cui
appartengono gli oggetti del sistema. Tali diagrammi riguardano sia il database
che le pagine vere e proprie,
•
affinamento dei sequence e collaboration diagram tenendo conto delle classi
costruite,
•
disegno degli statechart diagram e degli activity diagram per la modellazione dei
vari stati in cui i vari oggetti del sistema possono trovarsi e delle attività svolte,
•
suddivisione del sistema in sottosistemi,
•
scelta dell’architettura,
•
ulteriore affinamento dei diagrammi fino all’inizio dello sviluppo vero e proprio,
•
codifica e testing,
•
stesura della documentazione finale (questo documento)
231
Conclusioni
Nella metodologia usata, il modello a oggetti della fase di analisi è stato usato per la
fase di progetto e di implementazione, affinandolo a livelli sempre più dettagliati. In
questo documento vengono mostrati solo i modelli della fase di analisi, sia quelli della
fase di sviluppo, tralasciando tutti gli altri. Il processo è stato iterativo piuttosto che
lineare, aggiungendo o chiarificando caratteristiche anziché modificare il lavoro fatto.
Il progetto descritto in questa tesi e' stato realizzato in un contesto commerciale sotto il
nome Virtualmarket (www.virtualmarket.it) comprendente, ad oggi:
•
35 negozi,
•
350 articoli suddivisi in circa 20 categorie,
•
2000 pagine tra manager, negozi e portale,
•
5 temi grafici,
•
supporto SSL,
•
pop telepay per pagamento con CC,
•
possibilità di gestire il negozio, i suoi reparti e i suoi articoli e gli sconti ad esso
connessi direttamente on-line da parte dei negozianti.
Virtualmarket adesso è un mall con spiccate doti da sito di nicchia in quanto i prodotti
che offre provengono dall’artigianato italiano o comunque da realtà produttive regionali
che rendono il marchio ‘Made in Italy’ conosciuto e apprezzato in tutto il mondo.
232
Conclusioni
Figura 126: Home page attuale di Virtualmarket
233
Bibliografia
8 Bibliografia
[1] Micheal J. A. Berry, Gordon Linoff – Data Mining Techniques. For Marketing,
Sales and Customer Support – Wiley Computer Publishing, 1997
[2] Federico Rajola – L’organizzazione dei sistemi di business intelligence nel settore
Finanziario. Il Datawarehouse e il Data Mining – Franco Angeli, 2000
[3] Harry Singh – Data Warehousing, Concepts, Technologies, Implementations, and
Management – Prentice Hall PTR, 1997
[4] Ralph Kimball – The Data Warehouse Toolkit – John Wiley & sons, inc., 1996
[5] R. Connelly, R. Mosimann – The Multidimensional Organization – Cognos, 1999
[6] Web Technology Soluzioni per il commercio elettronico – Mondadori Informatica,
1999
[7] Sviluppo di soluzioni eCommerce Business to Consumer – Mondatori Informatica,
1999
[8] G. Andrew Duthie – Microsoft Visual InterDev 6.0, Enterprise Developer’s
Workshop – Mondadori Informatica, 1999
[9] Scot Hillier, Daniel Mezick – Programming Active Server Pages – Mondadori
Informatica, 1997
[10] Terry Quatrani – Visual Modeling with Rational Rose and UML – Addison Wesley,
1998
[11] Giuseppe Naccarato – Visual Basic la programmazione dei database – Apogeo,
1999
234
Bibliografia
[12] J. Rambaugh, M. Blama – Modelli e Progetti Object Oriented – Jackson Libri,
1995
[13] Sergio Beneduce – Prodotti per una strategia di e-commerce – E-Business News
(febbraio 2000 – n° 1)
[14] A. Saltarin – Portali & e-Commerce: a che stadio siamo? – Computer
Programming (marzo 2001 – n° 100)
[15] R. Palumbo – Commercio Elettronico: la nuova frontiera del business – Computer
Programming (gennaio 1999 – n° 76)
[16] Database & Web – DEV (ottobre 98 – n° 54)
[17] Applicazioni Distribuite – Computer Programming (ottobre 97 – n° 62)
[18] M. Sciabarrà – Java: Server-side Programming – Computer Programming
(febbraio 1998 – n° 66)
[19] N. Fino – Architettura di OLEDB: verso l’accesso unificato ai dati – Computer
Programming (febbraio 1998 – n° 66)
[20] M. Carli – Java Server Pages – Computer Programming (ottobre 2000 - n° 95-100)
[21] L. Morettoni – PHP – Computer Programming (dicembre 2000 - n° 97-101)
235
Principali siti di riferimento
9 Principali siti di riferimento
[1] www.ibm.com
in particolare
[1a] Jesus Mena - Mining E-Customer Behavior
[1b] Gary Saarenvirta - Data Mining for Direct Mail: A Lesson in Predictive Modeling
[1c] Barry Devlin - Toward the Information Supply Chain
[1d] Gary Saarenvirta - Mining Customer Data
[1e] Herb Edelstein - Data Mining – Let’s Get Pratical
[1f] Herb Edelstein – Data Mining: Exploiting the Hidden Trends in Your Data
[1g] Barry Devlin – Metadata: The Warehouse Atlas
[1h] Michael L. Gonzales – Getting Set for OLAP
[1i] Elizabeth A. Geiger - ERP and Data Warehousing
[1l] Colin White – Warehouses Webicum
[2] www.rational.com
in particolare
[2a] Rational Rose Guide To Team Development
[2b] Rational Rose 2000e. Using Rose
[2c] Mapping Object to Data Models with UML
[2d] The UML and Data Modeling
[2e] Database Modeling and Design Using Rational Rose 2000e
[2f] M. Blaha, W. Premerlani – Implementing UML Models with Relational Databases
[2g] M. Blaha, W. Premerlani - Object-Oriented Design of Database Applications
[2h] M. Blaha, W. Premerlani – Using UML to Design Database Applications
[2i] Jim Conallen - Modeling Web Clients with UML and Rose
[2l] Jim Conallen - UML Extension for Web Applications 0.91
[2m] Jim Conallen – Modeling Web Application Architectures with UML
[2n] Jim Conallen - Modeling Web Application Design with UML
[2o] Building Web solutions with the Rational Unified Process
[2p] John Hsia - Using COM in Your Rose Extensibility Solution
[2q] OMG Unified Modeling Language Specification
236
Principali siti di riferimento
[3] www.sas.com
in particolare:
[3a] Implementing the Customer Relationship Management Foundatio n – Analytical
CRM
[3b] Data Mining and the case for Sampling
[3c] A Formula for OLAP success
[3d] Using Data Mining Techniques for Fraud Detection
[3e] Implementing a CRM – based Campaign Management Strategy
[3f] The Quality Data Warehouse
[4] www.msdn.microsoft.com
[5] www.cognos.com
[6] www.hyperion.com
in particolare
[6a] The Role of the OLAP Server in a Data Warehousing Solu tion
[7] www.techguide.com
in particolare
[7a] Leveraging Visual and Analitycal Data Mining
[8] www.dbmsmag.com
in particolare
[8a] Ralph Kimball - A dimensional Modeling Manifesto
[9] www.dmreview.com
in particolare
[9a] J. Davis, R. Winter – The IBM Teraplex Integration Center
[10] www.1to1.com
[11] www.php.net
237