FACOLTA’ DI INGEGNERIA
CORSO DI LAUREA SPECIALISTICA IN
INGEGNERIA INFORMATICA
Docente
Chiar.ma Prof.ssa Marina Mongiello
Gianvito Bavaro
Vito Conversano
Giuseppe Gaeta
Daniele Gallitelli
Maria Francesca Saponieri
Capitolo 2. Analisi
Introduzione ……………………………………………………………………...………. 9
Specifiche dei requisiti
1. Gestione punto vendita ……………………………………………….……….. 11
2. Gestione fornitore ………………………………………..……...…………...... 14
3. Gestione prodotto …………………………………………………………….... 16
4. Gestione listino ……………………………………………………………...… 19
5. Gestione ordine ………………………………………………………………... 21
6. Visualizzazione stato ordine ………………………………………………...… 24
7. Valutazione ordine …………………………………………………………….. 27
8. Aggiornamento stato ordine …………………………………………………... 29
9. Storico degli ordini ……………………………………………………………. 32
10. Gestione accessi …………………………………………………………….... 34
Matrice di tracciabilità ………………………………………………………………….... 36
Casi d’uso
Diagramma degli attori ……………………………………………...…………… 37
Diagramma dei casi d’uso ……………………………………………….………. 38
Descrizione dei casi d’uso
User ………………………..………………………………...…………………… 39
Visualizzare home page ………………………………………..………….. 40
Registrare punto vendita …………………………………………………... 41
I
Login ………………………………………………………………………. 42
Recuperare password ……………………………………………………… 43
Punto vendita ………………………..………………………………...…………. 45
Visualizzare proprio listino …...………………………………..………….. 46
Gestire carrello …………...………………………………………………... 47
Ordinare prodotto ………………………………………………………….. 48
Visualizzare profilo …...........……………………………………………… 49
Modificare profilo …………………………………………………………. 50
Visualizzare storico propri ordini …………………………………………. 51
Visualizzare propri ordini …………………………………………………. 52
Valutare ordine ……………………………………………………………. 54
Amministrazione ………………………..………………………………...…….... 55
Gestire fornitori …...………………………………..……………………... 56
Visualizzare fornitore …...……………………………………………….... 57
Aggiungere fornitore ……………………………………………………… 58
Modificare fornitore …...........……………………………………………... 59
Rimuovere fornitore ……………………………………………………….. 60
Gestire punti vendita ………………………………..……………………... 61
Visualizzare punto vendita …...…………………………………………… 62
Rimuovere punto vendita ………………………………………………….. 63
Visualizzare storico ordini ………………………………………………… 64
Visualizzare ordini ………………………………………………………… 65
Marketing ………………………..………………………………...……............... 66
Gestire listini …...………………………………..……………………........ 67
Visualizzare listino …...………………………………………………........ 68
Aggiungere listino ………………………………………………………… 69
Modificare listino …...........……………………………………………....... 70
Rimuovere listino ………………………………………………………….. 71
Gestire prodotti …...………………………………..…………………….... 72
Visualizzare prodotto …...………………………………………………..... 73
Aggiungere prodotto ………………………………………………………. 74
Modificare prodotto …...........……………………………………………... 75
Rimuovere prodotto ……………………………………………………….. 76
II
Visualizzare fornitore ……………………………………………………... 77
Logistica ………………………..………………………………...……................ 78
Visualizzare ordini ……………………………..…………………….......... 79
Visualizzare stato ordine …...…………………………………………........ 80
Aggiornare stato ordine …………………………………………………… 81
Visualizzare fornitore …...........…………………………………………… 82
Visualizzare prodotto ……………………………………………………… 83
Visualizzare listino ………………………………………………………... 84
Modello E/R …………………………………………………………………................... 85
Diagramma delle classi di analisi ………………………………………………………... 86
Capitolo 3. Progettazione
Scelte progettuali ………………………………………………………………………… 87
XAMPP ……………………………………………...…………………………… 88
Web Server: Apache 2.2.14 ……………………………………………….……... 90
OpenSSL 0.9.8 …………………………………………………………………… 91
MySQL 5.1.41 …………………………………………………………………… 92
GDO come “sistema transazionale”: gestione di transazioni concorrenti ……….. 94
phpMyAdmin 3.2.4 ………………………………………………………………. 98
FileZilla FTP Server 0.9.33 ……………………………………………………… 99
PHP 5.3.1 ………………………………………………………………………… 100
CodeIgniter ………………………………………………………………………. 101
Architettura software …………………………………………………………………….. 103
Architettura client-server…………………………...…………………………….. 103
Diagramma di deployment (dispiegamento) …………………………………………….. 109
Pattern architetturale ……………………………………………………………………... 111
Model-View-Controller …………………………...……………………………............... 111
Design pattern ……………………………………………………………………………. 115
Pattern creazionali ……………………………………………………………….. 116
Singleton ……………………………..……………………......................... 116
Pattern strutturali ………………………………………………………………… 119
Proxy ……………………………..……………………............................... 119
Pattern comportamentali …………………………………………………………. 121
III
Observer ……………………………..…………………….......................... 121
Strategy ……………………………..……………………........................... 123
Diagramma delle componenti …………………………………………………………..... 126
Progettazione logica e business rule ……………………………………………………... 132
Business rule ……………………………………………………………………... 133
Classi di progetto ……………………………………………………................................ 135
Specifica delle classi di progetto ……………………………………………….... 136
Package ……………………………..……………………........................... 136
Classi ……………………………..……………………............................... 138
Diagrammi di macchina a stati …………………………………………………………... 197
Creazione ordine ……………..……………………..................................... 198
Aggiungi prodotto ……………..……………………................................... 199
Gestione ordini ……………..……………………........................................ 200
Diagrammi di sequenza ………………………………………………………….............. 201
User ………………………………………………................................................. 202
Visualizzare home page …………..…………………….............................. 202
Registrare punto vendita ………..……………………................................. 203
Recuperare password …………..…………………….................................. 204
Login ………..……………………............................................................... 205
Punto vendita …………………………………….................................................. 206
Visualizzare proprio listino ……..……………………................................. 206
Filtrare prodotti (pv) ………..……………………....................................... 207
Gestire carrello …………..……………………............................................ 208
Aggiungi al carrello ……………………...................................................... 209
Effettuare ordine ………..……………………............................................. 209
Confermare ordine …………..……………………...................................... 210
Visualizzare profilo ………..……………………........................................ 211
Modificare profilo …………..……………………....................................... 212
Visualizzare storico propri ordini ………………......................................... 213
Filtrare storico (pv) …………..……………………..................................... 214
Valutare ordine evaso ………..……………………..................................... 214
Visualizzare propri ordini …………..……………………........................... 215
Filtrare ordini (pv) ………..…………………….......................................... 216
IV
Valutare ordine pervenuto ……..…………………….................................. 217
Visualizzare ordine (pv) ………..……………………................................. 217
Amministrazione ………………………………..................................................... 218
Gestire fornitori ……..……………………................................................... 218
Filtrare fornitori ………..…………………….............................................. 219
Visualizzare fornitore ………..……………………..................................... 220
Modificare fornitore …………..…………………….................................... 220
Rimuovere fornitore ………..……………………........................................ 221
Aggiungere fornitore ………..……………………...................................... 221
Gestire punti vendita ……..……………………........................................... 222
Filtrare punti vendita ………..……………………....................................... 223
Visualizzare punto vendita ………..……………………............................. 223
Modificare insegna ………..……………………......................................... 224
Rimuovere punto vendita ………..……………………................................ 224
Visualizzare storico ordini ………..…………………….............................. 225
Filtrare storico ………..……………………................................................. 225
Visualizzare ordini (amministrazione) ……………….................................. 226
Filtrare ordini (amministrazione) .……………………................................. 226
Marketing ………………………………................................................................ 227
Gestire listini ……..……………………....................................................... 227
Filtrare listini ………..…………………….................................................. 228
Visualizzare listino ………..……………………......................................... 229
Aggiungere listino ………..…………………….......................................... 230
Modificare listino …………..……………………........................................ 231
Rimuovere listino ………..……………………............................................ 232
Gestire prodotti ……..…………………….................................................... 233
Filtrare prodotti ………..……………………............................................... 234
Visualizzare prodotto ………..……………………...................................... 235
Modificare prodotto …………..…………………….................................... 235
Rimuovere prodotto ………..……………………........................................ 236
Aggiungere prodotto ………..……………………....................................... 236
Visualizzare fornitori (marketing) ..…………………….............................. 237
Filtrare fornitori (marketing) ..……………………...................................... 237
V
Visualizzare fornitore (marketing) ..…………………….............................. 238
Logistica ………………………………................................................................. 239
Visualizzare ordini ……..…………………….............................................. 239
Filtrare ordini ………..…………………….................................................. 240
Visualizzare ordine ………..……………………......................................... 241
Aggiornare stato ordine ………………………............................................ 242
Annullare stato ordine …………..……………………................................. 243
Visualizzare fornitori (logistica) ..……………………................................. 244
Filtrare fornitori (logistica) ..……………………......................................... 244
Visualizzare fornitore (logistica) ..……………………................................ 245
Visualizzare prodotti (logistica) ..……………………................................. 245
Filtrare prodotti (logistica) ..…………………….......................................... 246
Visualizzare prodotto (logistica) ..……………………................................. 246
Visualizzare listini (logistica) ..……………………..................................... 247
Filtrare listini (logistica) ..……………………............................................. 247
Visualizzare listino (logistica) ..…………………….................................... 248
Struttura interfaccia ………………………………………………………….................... 249
Capitolo 4. Implementazione
Indice codice ………………………………………………………………....................... 251
VI
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase preliminare
TEMA D’ANNO
Si vuole realizzare un portale web per la gestione della rete di vendita di un'azienda
distributrice all’ingrosso di prodotti alimentari. Il portale deve assicurare la fruizione dei
seguenti servizi:
creazione del listino dei prodotti: si richiede la possibilità di creare un listino per ogni
classe di punto vendita (ad es.: listino Auchan, listino Ipercoop, ecc…) con la
possibilità di poter applicare sconti differenziati per ogni singola classe;
raccolta ordini dai punti vendita mediante la visualizzazione del listino e l’aggiunta al
“carrello” dei prodotti;
valutazione, da parte del punto vendita, della qualità del servizio ricevuto
dall’azienda distributrice;
fornitura di una modalità d’accesso differenziata per quanto riguarda i punti vendita
(pv), il responsabile dei punti vendita e dei fornitori (amministrazione), l’addetto ai
prodotti e ai listini (marketing), e l’addetto alla gestione degli ordini (logistica).
1
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase preliminare
STUDIO DI FATTIBILITÀ
Il sistema software da realizzare risulta utile sia per l'azienda distributrice che per i vari
punti vendita in quanto consente una semplice comunicazione a grande distanza tra i
diversi soggetti, riuscendo ad ottenere un notevole risparmio di tempo e denaro nell'analisi
competitiva, nella ricerca e nello sviluppo delle funzioni aziendali.
2
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase preliminare
A garanzia del committente il software rispetterà gli standard di qualità attualmente vigenti.
Secondo la norma ISO/EIC 9126, i principi della qualità del software sono:
• funzionalità;
• affidabilità;
• usabilità;
• efficienza;
• qualità in uso;
• manutenibilità;
• portabilità.
In base alle richieste avanzate abbiamo stimato che la durata del progetto sarà di circa
venti mesi/uomo. Osservando il numero di componenti del nostro team di sviluppo, tale
progetto avrà una durata complessiva di quattro mesi e dieci giorni, considerando anche la
fase preliminare.
3
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase preliminare
Qui di seguito riportiamo quello che è il diagramma di Gantt del piano di progetto che
indica la dislocazione temporale delle attività, dove per ognuna di esse viene
rappresentata la durata (espressa in giorni). Il diagramma di Gantt consente di mettere in
evidenza il carattere sequenziale delle attività così come il grado di parallelismo tra di
esse. Tutto ciò ci permette di confrontare le stime con i progressi.
Diagramma di Gantt
Dallo studio di fattibilità e da un’attenta analisi del diagramma sopra riportato si deducono
le seguenti scadenze:
INIZIO FINE
Studio di fattibilità 5 marzo 2010 15 marzo 2010
Analisi e specifica dei requisiti 15 marzo 2010 15 aprile 2010
Progettazione 8 aprile 2010 1 giugno 2010
Implementazione 1 giugno 2010 1 luglio 2010
Test di sistema 21 giugno 2010 15 luglio 2010
4
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase preliminare
Le stime sulla durata delle singole attività, così come descritte sopra, potranno essere
garantite solo nel caso in cui non vi siano variazioni e modifiche alle specifiche stabilite dal
committente. Qualora si presentassero, le attività potrebbero subire dei cambiamenti sia
dal punto di vista dei tempi che dei costi.
2. GESTIONE FORNITORE
Sarà possibile descrivere il fornitore facendo uso di quelli che sono i suoi dati quali, ad
esempio, la ragione sociale, la partita iva, la sede, i prodotti che fornisce e così via.
Tramite la manipolazione di questi dati, si potrà gestire in maniera ottimale ed esaustiva
l’organizzazione del fornitore.
3. GESTIONE PRODOTTO
Sarà possibile descrivere il prodotto facendo uso di quelle che sono le sue caratteristiche
principali quali, ad esempio, la sua descrizione, il prezzo, gli sconti applicati, la
disponibilità, le dimensioni o volumetria, la provenienza, il fornitore e così via. Tramite la
manipolazione di questi dati, si potrà gestire in maniera ottimale ed esaustiva il prodotto.
4. GESTIONE LISTINO
Il nostro sistema sarà in grado di gestire un listino prodotti per ogni classe di punto
vendita. I punti vendita appartenenti ad una certa classe saranno raggruppati sotto la
medesima insegna. Nel listino saranno presenti i prodotti con i relativi prezzi. Per ogni
classe sarà possibile poter applicare una variazione sul prezzo originario.
5
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase preliminare
5. GESTIONE ORDINE
Il punto vendita potrà consultare un listino prodotti in base al quale scegliere cosa
aggiungere al proprio carrello per l'ordine. Tale listino risulterà essere personalizzato a
seconda dell’insegna di appartenenza del punto vendita.
Il sistema permetterà ai punti vendita di poter effettuare un ordine in base alle proprie
esigenze. Tale ordine sarà rappresentato da tutti i prodotti presenti nel carrello al momento
della richiesta.
7. VALUTAZIONE ORDINE
Per i punti vendita sarà messo a disposizione un sistema di feedback in maniera tale da
poter esprimere il grado di soddisfazione per il servizio offerto dall'azienda distributrice, in
relazione ad ogni singolo ordine.
6
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase preliminare
7
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase preliminare
PARTI INTERESSATE
Punti vendita (pv): corrispondono agli utilizzatori del sistema che potranno consultare il
listino, effettuare ordini e visualizzare il proprio stato. Il loro accesso è consentito tramite
un meccanismo di riconoscimento e autenticazione mediante login.
Addetto alla gestione degli ordini (logistica): si occupa dell’aggiornamento dello stato
dell’ordine e della gestione dello storico degli ordini. Il suo accesso è consentito tramite un
meccanismo di riconoscimento e autenticazione mediante login.
Utente generico (user): corrisponde a un generico navigatore del web che si collega al
portale, ma non ha accesso ad alcun tipo di area riservata. L’utente generico ha soltanto la
possibilità di visualizzare i dati dell'azienda distributrice per poterla poi eventualmente
contattare ed avviare così un rapporto di tipo commerciale con essa.
Team di sviluppo PandoraSW: è composto dai soggetti sviluppatori del sistema software
- Bavaro Gianvito
- Conversano Vito
- Gaeta Giuseppe
- Gallitelli Daniele
- Saponieri Maria Francesca
8
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
ANALISI
INTRODUZIONE
Il nostro sistema software è stato pensato per favorire la vendita di prodotti alimentari su
larga scala tramite l’uso di un portale web dotato di tutte le funzionalità necessarie a
soddisfare sia l’azienda distributrice, che ci ha commissionato il progetto, sia l’utente che
si imbatte nel nostro portale. I committenti ci hanno chiesto di rispettare alcuni requisiti, dai
quali abbiamo cercato di trarre tutte le possibili conclusioni per rendere nella realtà quelle
che sono le aspettative esplicitate, senza tralasciare anche aspetti non direttamente
palesati ma indispensabili al corretto funzionamento del sistema: tutto ciò allo scopo di
rendere gradito il nostro prodotto oltre che esaustivo in ogni suo aspetto.
Le parti interessate direttamente dal nostro sistema saranno sia gli addetti ai lavori
(l’azienda distributrice in tutte le sue diverse compagini e l’utente che decide di acquistare
prodotti ed effettuare un ordine tramite il nostro portale), sia gli utenti generici che si
imbattono casualmente nel nostro sito e decidono di navigare al suo interno. Naturalmente
a questi ultimi non dovrà essere consentito di accedere a determinate aree che invece
saranno accessibili a una o più parti specifiche allo scopo di portare a buon fine delle
transazioni di tipo commerciali.
Cominciamo con l’analizzare l’organizzazione aziendale e quindi specificare, anche se in
maniera del tutto sommaria, quelle che saranno le aree di interesse di ciascuna parte in
causa in maniera tale da garantire una distribuzione armonica delle attività e una divisione
dei compiti che risulti la più equa possibile. L’azienda distributrice è articolata in maniera
tale che vi siano le seguenti tre figure che si occupano dei punti nevralgici dell’attività
commerciale alla quale fanno riferimento:
9
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Dopo aver parlato dell’azienda distributrice possiamo passare ad analizzare gli altri attori
principali del nostro sistema: i Punti vendita. Essi corrispondono agli utilizzatori del
sistema che potranno consultare il listino, effettuare ordini e visualizzare il proprio stato. Il
loro accesso è consentito tramite un meccanismo di riconoscimento e autenticazione
mediante login.
Infine ecco che troveremo anche l’Utente generico (user) che corrisponde a un generico
navigatore del web che si collega al portale, ma non ha accesso ad alcun tipo di area
riservata. L’utente generico ha soltanto la possibilità di visualizzare i dati dell’azienda
distributrice per poterla poi eventualmente contattare ed avviare così un rapporto di tipo
commerciale con essa a seguito della registrazione.
10
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
1.4) Il punto vendita potrà essere eliminato soltanto se non esistono ordini
in corso di esecuzione. (requisito non funzionale)
11
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
REQUISITI INFORMATIVI:
1.5) Il sistema dovrà consentire di immagazzinare come dati struttura i seguenti campi:
- nome;
- partita iva;
- insegna di appartenenza;
- indirizzo;
- telefono;
- e-mail;
- orari di apertura.
1.6) Il campo “orari di apertura” sarà strutturato come uno spazio di tipo testuale all’interno
del quale l’utente andrà ad indicare i giorni e gli orari di apertura del punto vendita.
Ad esempio "lun/mar/merc 8.00-18.00; ven/sab/dom 9.30-15.00".
PARTI INTERESSATE:
Le parti direttamente interessate in questo requisito risulteranno essere sia il responsabile
dei punti vendita e dei fornitori (amministrazione) sia il punto vendita stesso con
responsabilità e attività differenti atte alla gestione del relativo profilo. In particolare la
prima (amministrazione), oltre alla semplice e pura visualizzazione, sarà l’unica parte che
potrà procedere alla cancellazione del punto vendita a seguito di proprie valutazioni, che
riguarderanno il tipo di rapporto con il singolo cliente (insolvenza di ordini, poca chiarezza
nei rapporti, e così via), oppure a seguito di esplicita richiesta da parte dello stesso. La
seconda (punto vendita), invece, dovrà avere la possibilità di modificare i propri dati: quindi
dovrà essere in grado di visualizzare il proprio profilo ed eventualmente aggiornare i campi
personali che si desidera modificare.
Sia l’addetto ai prodotti e ai listini (marketing) sia l’addetto alla gestione degli ordini
(logistica) sia l’utente generico (user) non saranno abilitati ad effettuare alcuna delle
suddette operazioni.
12
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Il punto vendita non potrà selezionare alcuna insegna di appartenenza al momento della
registrazione: questa verrà assegnata al punto vendita a discrezione dell’amministrazione
come atto della convalida dell’iscrizione al portale.
Le varie insegne saranno create dal marketing, dove per insegna di appartenenza si
sottintende il listino che verrà mostrato al punto vendita. Il marketing, quale responsabile
dei listini, si occuperà di fornire la lista delle insegne specificando, per ciascuna di esse, lo
sconto applicato sui prezzi.
13
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
2. GESTIONE FORNITORE
14
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
REQUISITI INFORMATIVI:
2.4) Il sistema dovrà consentire di immagazzinare come dati struttura i seguenti campi:
− nome;
− partita iva;
− indirizzo;
− telefono;
− e-mail.
PARTI INTERESSATE:
La parte interessata direttamente in questo requisito sarà il responsabile dei punti vendita
e dei fornitori (amministrazione) in quanto risulta essere l’unico utente del sistema che
avrà la possibilità di modificare questo set di informazioni.
L’unicità risulta essere un requisito fondamentale per il sistema, in quanto evita che vi
possano essere tentativi di bypassare l’azione di mediazione commerciale tra i vari punti
vendita e i diversi fornitori garantita dal nostro sistema.
Sia l’addetto ai prodotti e ai listini (marketing) sia l’addetto alla gestione degli ordini
(logistica) potranno accedere a tali informazioni soltanto in fase di lettura.
Il punto vendita (pv) e l’utente generico (user) non saranno abilitati ad effettuare alcuna
delle suddette operazioni.
15
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
3. GESTIONE PRODOTTO
16
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
REQUISITI INFORMATIVI:
3.6) Il sistema dovrà consentire di immagazzinare come dati struttura i seguenti campi:
− codice prodotto;
− nome;
− descrizione;
− data di scadenza;
− genere/reparto;
− provenienza;
− fornitore;
− prezzo unitario;
− disponibilità residua.
17
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
− pasticceria;
− dispensa;
− gelati.
PARTI INTERESSATE:
L’addetto alla gestione degli ordini (logistica) potrà accedere a tali informazioni soltanto in
fase di lettura: sarà quindi consentita, a quest’ultima tipologia di utente, solo ed
esclusivamente la funzione di visualizzazione del prodotto.
Sia il responsabile dei punti vendita e dei fornitori (amministrazione) sia Il punto vendita
(pv) sia l’utente generico (user) non saranno abilitati ad effettuare alcuna delle suddette
operazioni.
18
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
4. GESTIONE LISTINO
4.4) Per ogni listino l’azienda potrà definire, a sua discrezione, un tasso di
sconto da poter applicare al prezzo base di ogni prodotto. (requisito
funzionale)
19
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
PARTI INTERESSATE:
L’addetto alla gestione degli ordini (logistica) potrà accedere a tali informazioni soltanto in
fase di lettura: quindi sarà consentita, da parte di quest’ultima tipologia di utente, soltanto
la funzione di visualizzazione del listino dei prodotti.
Il punto vendita (pv) potrà accedere a tali informazioni soltanto in fase di lettura, ma con la
possibilità di poter usufruire di determinate funzionalità aggiuntive (come ad esempio
l’aggiunta dei prodotti al carrello).
Sia il responsabile dei punti vendita e dei fornitori (amministrazione) sia l’utente generico
(user) non saranno abilitati ad effettuare alcuna delle suddette operazioni.
20
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
5. GESTIONE ORDINE
5.2) Il punto vendita aggiungerà al carrello i diversi prodotti scelti tra quelli
a disposizione nel listino, indicando, per ognuno di essi, le quantità
richieste. (requisito funzionale)
21
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
REQUISITI INFORMATIVI:
5.8) Riguardo l’ordine, il sistema dovrà mantenere informazioni sui seguenti dati:
− codice ordine (univoco tra tutti gli ordini);
− colui che effettua l’ordine (riconosciuto tramite la partita iva);
− quando è stato effettuato l’ordine;
− cosa viene richiesto con tale ordine (prodotti/quantità);
− data di consegna dei prodotti ordinati;
− metodo di pagamento scelto;
− stato dell’ordine (si veda il requisito 6 [Visualizzazione stato dell’ordine]).
22
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
PARTI INTERESSATE:
La parte interessata direttamente in questo requisito sarà il punto vendita (pv) in quanto
risulterà essere l’unica in grado di modificare queste informazioni. A seguito della
procedura di registrazione al sito, il punto vendita sarà in grado di creare il proprio carrello
della spesa dopo aver visualizzato il listino contenente tutti i prodotti disponibili. Una volta
creato il proprio carrello si potrà procedere al completamento dell’ordine mediante una
procedura di conferma di avvenuto ordine (che richiederà un nuovo inserimento della
propria password e che fungerà da firma digitale del contratto telematico).
Sia il responsabile dei punti vendita e dei fornitori (amministrazione) sia l’addetto alla
gestione degli ordini (logistica) potranno accedere a queste informazioni soltanto in fase di
lettura: quindi sarà consentita, da parte di tali utenti, soltanto la funzione di visualizzazione
dell’ordine.
L’utente generico (user) non sarà abilitato a effettuare alcuna delle suddette operazioni.
23
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
24
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
6.3) Nel momento in cui un ordine viene ad essere confermato dal relativo
punto vendita, il sistema provvederà subito a porlo nello stato “in
preparazione”. (requisito non funzionale)
REQUISITI INFORMATIVI:
25
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
PARTI INTERESSATE:
26
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
7. VALUTAZIONE ORDINE
7.2) Ogni punto vendita potrà valutare, tra i propri ordini, solo ed
esclusivamente quelli che si troveranno nello stato “pervenuto” o nello
stato “evaso”. (requisito non funzionale)
27
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
REQUISITI INFORMATIVI
7.4) Il campo “voto”, assegnato dal punto vendita, potrà assumere uno dei seguenti valori:
1: servizio insoddisfacente;
2: servizio poco soddisfacente;
3: servizio soddisfacente;
4: servizio molto soddisfacente.
PARTI INTERESSATE:
La parte direttamente interessata da questo requisito risulterà essere il punto vendita (pv)
in quanto sarà l’unico attore del nostro sistema abilitato ad esprimere un giudizio riguardo
la qualità del servizio di cui ha usufruito. Sulla base delle indicazioni del cliente, l’azienda
distributrice sarà in grado di poter approntare determinate modifiche atte al miglioramento
della qualità effettivamente percepita dagli utenti.
Per consentire all’azienda distributrice di monitorare il livello di qualità dei servizi forniti,
dovrà essere garantita la visualizzazione del campo relativo alle valutazioni ricevute,
riguardo tutti gli ordini per cui sono state inserite: tale operazione potrà essere svolta dal
responsabile dei punti vendita e dei fornitori (amministrazione).
28
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
8.2) Nel momento in cui il campo dello stato dell’ordine assumerà il valore
“evaso”, il sistema procederà all’eliminazione della tupla corrispondente
dalla tabella degli ordini, tenendone comunque traccia nell’archivio
relativo allo storico. (requisito non funzionale)
8.3) L’ordine passerà nello stato “in preparazione” non appena verrà
ricevuto un messaggio di conferma da parte del punto vendita. (requisito
non funzionale)
8.4) Al termine di ogni singola fase, l’addetto alla gestione degli ordini
(logistica) provvederà ad aggiornarne lo stato. In particolare le fasi si
susseguiranno nel modo seguente:
- “in preparazione”;
- “pervenuto”;
- “evaso”;
- “annullato”.
29
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
REQUISITI INFORMATIVI:
30
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
PARTI INTERESSATE:
Oltre all’addetto alla gestione degli ordini (logistica), anche il punto vendita (pv) e il
responsabile dei punti vendita e dei fornitori (amministrazione) avranno la possibilità di
visualizzare le modifiche che verranno ad essere apportate allo stato dell’ordine.
Sia l’addetto ai prodotti e ai listini (marketing) sia l’utente generico (user) non saranno
abilitati a visualizzare in alcun modo lo stato dell’ordine poiché non risulteranno esserne
direttamente coinvolti.
31
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
9.3) Il sistema dovrà permettere di effettuare la ricerca tra tutti gli ordini
disponibili secondo le chiavi di ricerca elencate nei requisiti informativi 9.4
e 9.5. (requisito funzionale)
32
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
REQUISITI INFORMATIVI:
9.4) La ricerca svolta dall’azienda distributrice potrà essere condotta sulla base delle
seguenti chiavi:
− codice ordine;
− codice punto vendita;
− data ordine (mese, anno, entrambi);
− importo fattura;
− metodo di pagamento dell’ordine.
9.5) La ricerca svolta dal punto vendita potrà essere condotta sulla base delle seguenti
chiavi:
− codice ordine (tale codice dovrà essere compreso tra tutti i codici degli ordini
effettuati da quel punto vendita che sta effettuando la ricerca: il codice del punto
vendita relativo all’ordine, o agli ordini, selezionato/i dovrà corrispondere al codice
del punto vendita che sta eseguendo la ricerca);
− data ordine (mese, anno, entrambi);
− importo fattura;
− metodo di pagamento dell’ordine.
PARTI INTERESSATE:
Sia il responsabile dei punti vendita e dei fornitori (amministrazione) sia il punto vendita
(pv) avranno accesso alla tabella dello storico degli ordini, ossia quella relativa agli ordini
evasi: il primo la vedrà completamente, il secondo vedrà solo i propri ordini.
33
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
10.3) L’utente generico (user) avrà accesso alla home page del sito.
(requisito funzionale)
34
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
PARTI INTERESSATE:
L’utente generico (user) potrà registrarsi al portale web in maniera tale da poter accedere
all’area riservata relativa al punto vendita (pv). Qualora già registrato, l’utente generico
potrà accedere alla propria area riservata attraverso una procedura di login fornendo le
sue credenziali.
35
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
MATRICE DI TRACCIABILITÀ
Req. 1 2 3 4 5 6 7 8 9 10
ID
1 X X X X X
2 X X
3 X X X
4 X X X X
5 X X X X X X X
6 X X
7 X X X
8 X X
9 X X X
10 X X X X X X X X X
36
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
CASI D’USO
Un caso d’uso rappresenta una particolare funzionalità fornita da una specifica entità, e
descritta sia dalla serie di messaggi scambiati tra l’entità stessa e gli attori, sia dalla
sequenze di azioni svolte.
L’attore, invece, può essere interpretato come un ruolo o un insieme di ruoli che qualcuno
o qualcosa, esterno al sistema, svolge nell’interagire con il sistema.
37
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
38
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
USER
39
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Extend point quale poter inserire username e password per poter effettuare
l’accreditamento al sito. Si procede con il relativo caso d’uso.
3. Recupera password: selezionando la voce “Recupera password”
si passa alla compilazione dell’apposito modulo per poter
recuperare la password. Si procede con il relativo caso d’uso.
40
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
41
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Login
Attore principale Utente generico (user).
L’utente generico si autentica tramite username e password per
Descrizione
poter accedere alla propria area riservata.
L’utente generico deve aver precedentemente eseguito il caso d’uso
“Visualizzare home page”.
L’utente deve essere già registrato al sito (caso d’uso “Registrare
Precondizioni punto vendita”) oppure deve far parte dell’azienda distributrice
(amministrazione, marketing, logistica): deve quindi essere in
possesso di username e password necessarie ad accedere alla
propria area riservata.
Trigger Il caso d’uso si attiva cliccando sull’apposito pulsante “Login”.
1. Vengono inseriti username e password negli appositi riquadri.
2. Dopo aver compilato i campi sopra citati, l’utente generico (user)
Scenario di base
preme il pulsante di conferma “Login”.
3. L’utente accede alla propria area riservata.
3.1. Se l’username e/o la password sono errati, viene visualizzato un
messaggio di errore e richiesta una nuova immissione dei dati.
Scenario 3.2. Se i dati inseriti non corrispondono a nessuna delle tipologie di
alternativo di utente previste dal nostro sistema, viene fornito un messaggio di
insuccesso errore con il quale si richiede di inserire i dati corretti per poter
accedere, o procedere alla fase di registrazione (caso d’uso
“Registrare punto vendita”).
42
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Recuperare password
Attore principale Utente generico (user).
Grazie ad una ben precisa procedura prevista dal sistema che
consiste nell’invio di un messaggio di posta elettronica, l’utente
Descrizione
generico ha la possibilità di recuperare la propria password, qualora
smarrita o dimenticata.
L’utente generico deve aver precedentemente eseguito il caso d’uso
“Visualizzare home page”.
L’utente che usufruisce di tale funzionalità deve essersi già
Precondizioni
precedentemente registrato, e deve essere in possesso dei dati
impiegati nella compilazione del modulo di registrazione previsto dal
sistema.
Il caso d’uso si attiva nel momento in cui l’utente generico decide di
Trigger
cliccare sull’apposito link “Recupera password”.
1. Viene visualizzato un messaggio in cui si richiede all’utente di
inserire il proprio indirizzo e-mail e il proprio username.
2. L’utente inserisce il proprio username ed il relativo indirizzo e-
mail.
3. Dopo aver compilato i campi sopra citati, l’utente generico preme
il pulsante di conferma.
Scenario di base 4. Il sistema si occupa di andare a verificare che l’utente che sta
effettuando la richiesta sia effettivamente un utente registrato:
quindi procede alla verifica della correttezza dei dati inseriti.
5. In caso affermativo, il sistema inoltra un messaggio di posta
elettronica all’indirizzo e-mail specificato, contenente la nuova
password, e ne notifica l’invio con la visualizzazione di un
messaggio a video.
2.1. Se l’utente generico compie un errore nella digitazione
dell’indirizzo e-mail e/o dello username, viene visualizzato un
Scenario messaggio di errore e richiesta una nuova immissione.
alternativo di 5.1. Il sistema non riesce a trovare nessun riscontro tra username ed
insuccesso indirizzo e-mail inseriti dall’utente e quelli riferiti agli utenti
registrati al sistema: viene quindi visualizzato un messaggio di
errore e richiesta una nuova immissione dei dati citati.
43
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
5.2. Qualora l’utente non sia già registrato non viene inoltrato alcun
tipo di messaggio per e-mail: viene visualizzato un messaggio in
cui si consiglia all’utente di registrarsi per poter interagire con il
sistema.
44
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
PUNTO VENDITA
45
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
46
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
47
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Ordinare prodotto
Attore principale Punto vendita (pv).
Il punto vendita procede con l’ordinazione dei prodotti e delle relative
Descrizione
quantità attualmente presenti nel carrello.
L’utente deve essersi autenticato come punto vendita (caso d’uso
“Login”), e deve essere disponibile un listino prodotti relativo alla
propria insegna.
Precondizioni Il punto vendita deve aver precedentemente eseguito il caso d’uso
“Gestire carrello”.
Inoltre il carrello non deve essere vuoto, ossia deve contenere
almeno l’indicazione di un prodotto.
Il caso d’uso si attiva cliccando sul pulsante “Ordina” presente
Trigger
all’interno della pagina relativa alla gestione del carrello.
1. Il punto vendita visualizza i prodotti contenuti nel carrello con le
relative quantità e i relativi prezzi di vendita.
2. Il sistema richiede la scelta del metodo di pagamento del quale si
intende usufruire.
3. Viene visualizzato un riepilogo dell’ordine relativo a tutte le
informazioni definite fino a quel momento.
Scenario di base 4. Il sistema richiede la conferma dell’ordine che si effettua
semplicemente andando a cliccare sull’apposito pulsante
“Conferma ordine”.
5. La conferma dell’ordine richiede il reinserimento della password
da parte del punto vendita.
6. Il caso d’uso termina con la visualizzazione di un messaggio nel
quale si afferma l’avvenuta registrazione dell’ordine.
4.1. Se il punto vendita non conferma l’ordine, gli è consentito di
poter tornare alla gestione del carrello.
Scenario
5.1. Se la password inserita è errata, viene visualizzato un
alternativo di
messaggio di errore e richiesto il reinserimento della stessa.
insuccesso
L’ordine resta quindi in sospeso fino a quando non viene inserita
la password corretta.
48
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Visualizzare profilo
Attore principale Punto vendita (pv).
Il punto vendita ha la possibilità di visualizzare una schermata
Descrizione riassuntiva relativa ai propri dati (utilizzati durante la fase di
registrazione al nostro portale web).
L’utente deve essersi autenticato come punto vendita (caso d’uso
Precondizioni
“Login”).
Trigger Il caso d’uso si attiva selezionando la voce “Visualizza profilo”.
1. Il sistema mostra a video una schermata riassuntiva contenente
informazioni relative a tutti i dati del punto vendita che ha
effettuato l’accesso: nome, partita iva, insegna di appartenenza,
Scenario di base indirizzo, telefono, e-mail, orari di apertura.
2. Il punto vendita ha la possibilità di modificare il proprio profilo
selezionando la voce “Modifica” che provvederà ad attivare il
relativo caso d’uso.
Esteso dal caso
Modificare profilo
d’uso
Modifica profilo: cliccando sul pulsante “Modifica” il sistema consente
all’utente di poter accedere alla sezione di modifica dei propri dati in
Extend point
maniera tale da potervi applicare determinati cambiamenti qualora
necessario. Si procede con il relativo caso d’uso.
49
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Modificare profilo
Attore principale Punto vendita (pv).
Descrizione Il punto vendita ha la possibilità di modificare i dati del proprio profilo.
L’utente deve essersi autenticato come punto vendita (caso d’uso
Precondizioni “Login”), e deve aver già visualizzato il proprio profilo.(caso d’uso
“Visualizzare profilo”).
Il caso d’uso si attiva cliccando sull’apposito pulsante “Modifica
Trigger
profilo”.
1. Il sistema mostra a video una schermata riassuntiva contente
informazioni relative a tutti i dati del punto vendita che ha
effettuato l’accesso: nome, partita iva, insegna di appartenenza,
indirizzo, telefono, e-mail, orari di apertura.
2. Il punto vendita ha la possibilità di modificare i dati relativi ai
propri campi come desidera. Naturalmente, i nuovi dati inseriti
dovranno presentare un formato idoneo al campo di riferimento
Scenario di base (ad esempio, nell’inserire il numero di telefono non si dovranno
utilizzare caratteri alfabetici, nel digitare un nuovo indirizzo e-mail
dovrà essere presente il carattere @, ecc.).
3. Il punto vendita ha la possibilità di confermare le modifiche
effettuate semplicemente andando a cliccare sul pulsante
“Conferma modifiche”.
4. Il caso d’uso termina con la visualizzazione di un messaggio con
il quale si afferma l’avvenuto aggiornamento del profilo.
2.1. Se i nuovi dati inseriti risultano essere errati, il sistema provvede
a darne notifica mediante un messaggio di errore indicando il
Scenario tipo di problema e richiedendo una nuova immissione dei dati in
alternativo di maniera corretta.
insuccesso 3.1. Se il punto vendita non conferma le modifiche apportate al
proprio profilo, tali modifiche andranno perse mantenendo i dati
originari.
50
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
51
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
52
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
53
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Valutare ordine
Attore principale Punto vendita (pv).
Il punto vendita ha la possibilità di esprimere un giudizio sull’ordine,
o meglio sul servizio ricevuto dall’azienda distributrice attraverso
Descrizione
l’ordine stesso. La valutazione consta in un numero compreso tra 1 e
4, utilizzato come indice di gradimento del servizio offerto.
La valutazione dell’ordine può essere effettuata se e solo se l’ordine
Precondizioni in questione esiste e si trova nello stato “pervenuto” o nello stato
“evaso”.
Quando un ordine si trova nello stato “pervenuto” o nello stato
“evaso”, il sistema consente al punto vendita di poter effettuare una
Trigger
valutazione su di esso tramite apposita sezione di valutazione
dell’ordine.
1. Se un ordine passa nello stato “pervenuto” o nello stato “evaso”,
può essere valutato in qualsiasi momento.
1.1.Gli ordini “pervenuti” possono essere valutati dalla schermata
che visualizza gli ordini attivi (caso d’uso “Visualizzare propri
ordini”).
Scenario di base
1.2.Gli ordini “evasi” possono essere valutati dalla schermata che
visualizza lo storico dei propri ordini (caso d’uso “Visualizzare
storico propri ordini”).
2. È necessario confermare la valutazione effettuata in quanto non
sarà possibile modificarla in seguito.
Scenario
2.1. Se la valutazione dell’ordine non viene confermata, andrà persa
alternativo di
e sarà possibile effettuarla nuovamente in seguito.
insuccesso
54
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
AMMINISTRAZIONE
55
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Gestire fornitori
Attore principale Responsabile dei punti vendita e dei fornitori (amministrazione).
L’amministrazione gestisce tutti i fornitori dell’azienda distributrice.
Pertanto ha la possibilità di visualizzare, aggiungere, modificare e
Descrizione
rimuovere i dati relativi a tutti i fornitori con i quali intrattiene rapporti
di tipo commerciale. (*)
L’utente deve essersi loggato come amministrazione (caso d’uso
Precondizioni
“Login”).
Il caso d’uso si attiva selezionando l’apposita voce dal menù relativo
Trigger
all’amministrazione.
1. Viene visualizzato l’elenco di tutti i fornitori con i quali l’azienda
distributrice intrattiene rapporti di tipo commerciale.
2. L’amministrazione ha la possibilità di filtrare la visualizzazione dei
fornitori sulla base di determinati campi tra quelli a disposizione.
3. Il sistema visualizza i risultati della ricerca fornendo la porzione di
database che corrisponde ai requisiti di ricerca specificati al
Scenario di base passo precedente.
4. Il sistema permette all’amministrazione di selezionare quattro
differenti opzioni riguardo la visualizzazione, l’aggiunta, la
modifica o la rimozione di un dato fornitore.
5. A seconda della scelta effettuata dall’amministrazione riguardo
l’attività da svolgere, il sistema provvede ad attivare il relativo
caso d’uso.
1.1. Se la tabella dei fornitori non contiene alcuna tupla, viene
visualizzato un messaggio con il quale si indica che nessun
Scenario fornitore è presente in archivio.
alternativo di 2.1. Se il sistema non riscontra alcun matching sul database in
insuccesso riferimento ai dati inseriti come chiavi di ricerca, viene
visualizzato un messaggio di notifica con il quale si indica che
non esiste nessun fornitore che rispetti i dati inseriti.
1. Visualizzare fornitore
Esteso dal caso 2. Aggiungere fornitore
d’uso 3. Modificare fornitore
4. Rimuovere fornitore
56
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
(*) Si noti che il portale web è destinato alla comunicazione tra punto vendita e azienda
distributrice, quindi, la gestione dei fornitori è molto più limitata rispetto a quella dei punti
vendita. Serve esclusivamente a garantire una tracciabilità dei prodotti.
Visualizzare fornitore
Attore principale Responsabile dei punti vendita e dei fornitori (amministrazione).
L’amministrazione ha la possibilità di visualizzare i dati caratteristici
Descrizione relativi ad ogni fornitore con il quale l’azienda distributrice intrattiene
rapporti di tipo commerciale.
L’amministrazione deve aver precedentemente eseguito il caso
Precondizioni d’uso “Gestire fornitori” e selezionato il fornitore che si intende
visualizzare.
Il caso d’uso si attiva selezionando la voce “Visualizza” presente
Trigger nell’apposito menù di gestione dei fornitori (caso d’uso “Gestire
fornitori”).
1. A partire dalla visualizzazione dell’elenco di tutti i fornitori,
l’amministrazione visualizza i dati caratteristici relativi al fornitore
Scenario di base selezionato.
2. Il caso d’uso termina con la visualizzazione dei dati caratteristici
relativi al fornitore in questione.
57
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Aggiungere fornitore
Attore principale Responsabile dei punti vendita e dei fornitori (amministrazione).
L’amministrazione provvede ad aggiungere un nuovo fornitore nel
Descrizione
database, inserendo tutti i dati relativi ad esso.
L’amministrazione deve aver precedentemente eseguito il caso
Precondizioni
d’uso “Gestire fornitori”.
Il caso d’uso si attiva selezionando la voce “Aggiungi” presente
Trigger nell’apposito menù di gestione dei fornitori (caso d’uso “Gestire
fornitori”).
1. L’amministrazione inserisce i dati relativi al nuovo fornitore
compilando gli appositi campi a disposizione. I dati inseriti devono
rispettare il formato relativo al campo in questione.
2. L’amministrazione ha la possibilità di confermare l’inserimento del
Scenario di base nuovo fornitore semplicemente andando a cliccare sull’apposito
pulsante “Conferma inserimento”.
3. Il caso d’uso termina con la visualizzazione di un messaggio
relativo all’avvenuto inserimento del nuovo fornitore all’interno del
database.
1.1. Se i nuovi dati inseriti non rispettano il formato relativo al campo
al quale fanno riferimento, il sistema notifica tale situazione con
un messaggio di errore e invita l’amministrazione ad apportare
le opportune modifiche.
Scenario 1.2. Se i nuovi dati inseriti fanno riferimento ad un fornitore già
alternativo di presente all’interno del database, il sistema notifica tale
insuccesso situazione con un messaggio di errore e invita l’amministrazione
ad apportare le opportune modifiche.
2.1. Se l’amministrazione non conferma l’inserimento del nuovo
fornitore, i relativi dati andranno persi e il fornitore non verrà
aggiunto al database.
58
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Modificare fornitore
Attore principale Responsabile dei punti vendita e dei fornitori (amministrazione).
L’amministrazione ha la possibilità di modificare i dati relativi ad un
Descrizione
determinato fornitore presente all’interno del database.
L’amministrazione deve aver precedentemente eseguito il caso
Precondizioni d’uso “Gestire fornitori” e selezionato il fornitore che si intende
modificare.
Il caso d’uso si attiva selezionando la voce “Modifica” presente
Trigger nell’apposito menù di gestione dei fornitori (caso d’uso “Gestire
fornitori”).
1. L’amministrazione ha la possibilità di modificare i dati caratteristici
relativi al fornitore selezionato.
2. L’amministrazione modifica i dati relativi al fornitore in questione
compilando gli appositi campi a disposizione. I dati inseriti devono
rispettare il formato relativo al campo in questione.
Scenario di base
3. L’amministrazione ha la possibilità di confermare le modifiche
effettuate semplicemente andando a cliccare sul pulsante
“Conferma modifiche”.
4. Il caso d’uso termina con la visualizzazione di un messaggio
riguardo l’avvenuta modifica dei dati relativi al fornitore in esame.
2.1. Se i nuovi dati inseriti non rispettano il formato relativo al campo
al quale fanno riferimento, il sistema notifica tale situazione con
un messaggio di errore e invita l’amministrazione ad apportare
le opportune modifiche.
Scenario 2.2. Se i nuovi dati inseriti fanno riferimento ad un fornitore già
alternativo di presente all’interno del database, il sistema notifica tale
insuccesso situazione con un messaggio di errore e invita l’amministrazione
ad apportare le opportune modifiche.
3.1. Se l’amministrazione non conferma le modifiche apportate al
fornitore, tali modifiche andranno perse mantenendo i dati
originari.
59
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Rimuovere fornitore
Attore principale Responsabile dei punti vendita e dei fornitori (amministrazione).
L’amministrazione rimuove dal database tutti i dati relativi ad un
Descrizione
determinato fornitore.
L’amministrazione deve aver precedentemente eseguito il caso
Precondizioni d’uso “Gestire fornitori” e selezionato il fornitore che si intende
eliminare dal database.
Il caso d’uso si attiva selezionando la voce “Rimuovi” presente
Trigger nell’apposito menù di gestione dei fornitori (caso d’uso “Gestire
fornitori”).
1. L’amministrazione ha la possibilità di eliminare tutti i dati
caratteristici relativi al fornitore selezionato.
2. L’amministrazione ha la possibilità di confermare la rimozione del
fornitore semplicemente andando a cliccare sul pulsante
Scenario di base
“Conferma eliminazione”.
3. Il caso d’uso termina con la visualizzazione di un messaggio
riguardo l’avvenuta eliminazione di tutti i dati relativi al fornitore in
esame.
2.1. Se l’amministrazione non conferma l’eliminazione del fornitore,
verranno mantenuti nel database tutti i dati relativi al fornitore in
questione.
Scenario
3.1. Se è presente anche un solo prodotto associato al fornitore che
alternativo di
si intende eliminare, l’eliminazione fallisce e il sistema notifica
insuccesso
tale situazione con un messaggio di segnalazione indicando il
motivo per il quale il fornitore non può essere rimosso dal
database.
60
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
61
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
62
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
63
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
64
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Visualizzare ordini
Attore principale Responsabile dei punti vendita e dei fornitori (amministrazione).
L’amministrazione ha la possibilità di visualizzare una lista
Descrizione contenente tutti gli ordini attivi, ossia tutti gli ordini che si trovano
nello stato “in preparazione” o nello stato “pervenuto”.
L’utente deve essersi autenticato come amministrazione (caso d’uso
Precondizioni
“Login”).
Trigger Il caso d’uso si attiva cliccando sull’apposito pulsante “Ordini attivi”.
1. Viene visualizzato l’elenco di tutti gli ordini attivi relativi ai diversi
punti vendita dell’azienda distributrice.
2. L’amministrazione ha la possibilità di filtrare la visualizzazione
degli ordini attivi sulla base di determinati campi tra quelli a
disposizione.
Scenario di base
3. Il sistema visualizza i risultati della ricerca fornendo la porzione di
database che corrisponde ai requisiti di ricerca specificati al
passo precedente.
4. Il caso d’uso termina con la visualizzazione dei dati caratteristici
relativi all’ordine in questione.
1.1. Qualora la tabella relativa agli ordini attivi non contenga alcuna
tupla, il sistema visualizza un messaggio di notifica con il quale
si indica che in quel dato istante nessun punto vendita presenta
Scenario
alcun ordine attivo.
alternativo di
3.1. Se il sistema non riscontra alcun matching sul database in
insuccesso
riferimento ai dati inseriti come chiavi di ricerca, viene
visualizzato un messaggio di notifica con il quale si indica che
non esiste nessun ordine attivo che rispetti i dati inseriti.
65
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
MARKETING
66
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Gestire listini
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing gestisce tutti i listini dell’azienda distributrice. Pertanto
Descrizione ha la possibilità di visualizzare, aggiungere, modificare e rimuovere i
dati relativi a tutti i listini dei prodotti in vendita.
L’utente deve essersi autenticato come marketing (caso d’uso
Precondizioni
“Login”).
Il caso d’uso si attiva selezionando l’apposita voce dal menù relativo
Trigger
alla sezione marketing.
1. Viene visualizzato l’elenco di tutti i listini prodotti presenti nel
database in quel dato istante.
2. Il marketing ha la possibilità di filtrare la visualizzazione dei listini
sulla base di determinati campi tra quelli a disposizione.
3. Il sistema visualizza i risultati della ricerca fornendo la porzione di
database che corrisponde ai requisiti di ricerca specificati al
Scenario di base
passo precedente.
4. Il sistema permette al marketing di selezionare quattro differenti
opzioni riguardo la visualizzazione, l’aggiunta, la modifica o la
rimozione di un dato listino prodotti.
5. A seconda della scelta effettuata dal marketing riguardo l’attività
da svolgere, il sistema provvede ad attivare il relativo caso d’uso.
1.1. Se la tabella dei listini non contiene alcuna tupla, viene
visualizzato un messaggio con il quale si indica che nessun
Scenario listino prodotti è presente in archivio.
alternativo di 2.1. Se il sistema non riscontra alcun matching sul database in
insuccesso riferimento ai dati inseriti come chiavi di ricerca, viene
visualizzato un messaggio di notifica con il quale si indica che
non esiste nessun listino prodotti che rispetti i dati inseriti.
1. Visualizzare listino
Esteso dal caso 2. Aggiungere listino
d’uso 3. Modificare listino
4. Rimuovere listino
1. Visualizza listino: il marketing visualizza i dati relativi ad un
Extend point
determinato listino prodotti. Si procede con il relativo caso d’uso.
67
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Visualizzare listino
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing ha la possibilità di visualizzare i dati relativi al listino
Descrizione
(insegna) selezionato.
Il marketing deve aver precedentemente eseguito il caso d’uso
Precondizioni “Gestire listini” e selezionato il listino prodotti che si intende
visualizzare.
Il caso d’uso si attiva selezionando la voce “Visualizza” presente
Trigger nell’apposito menù di gestione delle insegne (caso d’uso “Gestire
listini”).
1. A partire dalla visualizzazione dell’elenco di tutte le insegne, il
marketing visualizza i dati caratteristici relativi al listino prodotti
Scenario di base selezionato.
2. Il caso d’uso termina con la visualizzazione dei dati caratteristici
relativi al listino prodotti in questione.
68
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Aggiungere listino
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing provvede ad aggiungere una nuova insegna
Descrizione
commerciale nel database, inserendo tutti i dati relativi ad essa.
Il marketing deve aver precedentemente eseguito il caso d’uso
Precondizioni
“Gestire listini”.
Il caso d’uso si attiva cliccando sulla voce “Aggiungi” presente
Trigger nell’apposito menù di gestione delle insegne (caso d’uso “Gestire
listini”).
1. Il marketing inserisce i dati relativi al nuovo listino prodotti
compilando gli appositi campi a disposizione. I dati inseriti devono
rispettare il formato relativo al campo in questione.
2. Il marketing ha la possibilità di confermare l’inserimento del nuovo
Scenario di base listino semplicemente andando a cliccare sull’apposito pulsante
“Conferma inserimento”.
3. Il caso d’uso termina con la visualizzazione di un messaggio
relativo all’avvenuto inserimento del nuovo listino prodotti
all’interno del database.
1.1. Se i nuovi dati inseriti non rispettano il formato relativo al campo
al quale fanno riferimento, il sistema notifica tale situazione con
un messaggio di errore e invita il marketing ad apportare le
opportune modifiche.
Scenario 1.2. Se i nuovi dati inseriti fanno riferimento ad un listino prodotti già
alternativo di presente all’interno del database, il sistema notifica tale
insuccesso situazione con un messaggio di errore e invita il marketing ad
apportare le opportune modifiche.
2.1. Se il marketing non conferma l’inserimento del nuovo listino, i
relativi dati andranno persi e il listino prodotti non verrà aggiunto
al database.
69
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Modificare listino
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing ha la possibilità di modificare i dati relativi ad un
Descrizione
determinato listino prodotti presente all’interno del database.
Il marketing deve aver precedentemente eseguito il caso d’uso
Precondizioni “Gestire listini” e selezionato il listino prodotti che si intende
modificare.
Il caso d’uso si attiva cliccando sulla voce “Modifica” presente
Trigger nell’apposito menù di gestione delle insegne (caso d’uso “Gestire
listini”).
1. Il marketing ha la possibilità di modificare i dati caratteristici
relativi al listino selezionato.
2. Il marketing modifica i dati relativi al listino in questione
compilando gli appositi campi a disposizione (come ad esempio
lo sconto del listino), e aggiungendo/rimuovendo prodotti al/dal
listino. I dati inseriti devono rispettare il formato relativo al campo
Scenario di base in questione.
3. Il marketing ha la possibilità di confermare le modifiche effettuate
semplicemente andando a cliccare sull’apposito pulsante
“Conferma modifiche”.
4. Il caso d’uso termina con la visualizzazione di un messaggio
riguardo l’avvenuta modifica dei dati relativi al listino prodotti in
esame.
2.1. Se i nuovi dati inseriti non rispettano il formato relativo al campo
al quale fanno riferimento, il sistema notifica tale situazione con
un messaggio di errore e invita il marketing ad apportare le
opportune modifiche.
Scenario
2.2. Se i nuovi dati inseriti fanno riferimento ad un listino prodotti già
alternativo di
presente all’interno del database, il sistema notifica tale
insuccesso
situazione con un messaggio di errore e invita il marketing ad
apportare le opportune modifiche.
3.1. Se il marketing non conferma le modifiche apportate al listino,
tali modifiche andranno perse mantenendo i dati originari.
70
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Rimuovere listino
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing rimuove dal database tutti i dati relativi ad un
Descrizione
determinato listino prodotti.
Il marketing deve aver precedentemente eseguito il caso d’uso
Precondizioni “Gestire listini” e selezionato il listino che si intende eliminare dal
database.
Il caso d’uso si attiva cliccando sulla voce “Rimuovi” presente
Trigger nell’apposito menù di gestione delle insegne (caso d’uso “Gestire
listini”).
1. Il marketing ha la possibilità di eliminare tutti i dati caratteristici
relativi al listino selezionato.
2. Il marketing ha la possibilità di confermare la rimozione del listino
semplicemente andando a cliccare sul pulsante “Conferma
Scenario di base
eliminazione”.
3. Il caso d’uso termina con la visualizzazione di un messaggio
riguardo l’avvenuta eliminazione di tutti i dati relativi al listino
prodotti in esame.
2.1. Se il marketing non conferma l’eliminazione dell’insegna,
verranno mantenuti nel database tutti i dati relativi al listino
prodotti in questione.
Scenario
3.1. Se è presente anche un solo punto vendita associato al listino
alternativo di
che si intende eliminare, l’eliminazione fallisce e il sistema
insuccesso
notifica tale situazione con un messaggio di segnalazione
indicando il motivo per il quale il listino non può essere rimosso
dal database.
71
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Gestire prodotti
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing gestisce tutti i prodotti dell’azienda distributrice. Pertanto
Descrizione ha la possibilità di visualizzare, aggiungere, modificare e rimuovere i
dati relativi a tutti i prodotti in vendita.
L’utente deve essersi autenticato come marketing (caso d’uso
Precondizioni
“Login”).
Il caso d’uso si attiva selezionando l’apposita voce dal menù relativo
Trigger
alla sezione marketing.
1. Viene visualizzato l’elenco di tutti i prodotti catalogati all’interno
del database in quel dato istante.
2. Il marketing ha la possibilità di filtrare la visualizzazione dei
prodotti sulla base di determinati campi tra quelli a disposizione.
3. Il sistema visualizza i risultati della ricerca fornendo la porzione di
database che corrisponde ai requisiti di ricerca specificati al
Scenario di base
passo precedente.
4. Il sistema permette al marketing di selezionare quattro differenti
opzioni riguardo la visualizzazione, l’aggiunta, la modifica o la
rimozione di un dato prodotto.
5. A seconda della scelta effettuata dal marketing riguardo l’attività
da svolgere, il sistema provvede ad attivare il relativo caso d’uso.
1.1. Se la tabella dei prodotti non contiene alcuna tupla, viene
visualizzato un messaggio con il quale si indica che nessun
Scenario prodotto è presente in archivio.
alternativo di 3.1. Se il sistema non riscontra alcun matching sul database in
insuccesso riferimento ai dati inseriti come chiavi di ricerca, viene
visualizzato un messaggio di notifica con il quale si indica che
non esiste nessun prodotto che rispetti i dati inseriti.
1. Visualizzare prodotto
Esteso dal caso 2. Aggiungere prodotto
d’uso 3. Modificare prodotto
4. Rimuovere prodotto
1. Visualizza prodotto: il marketing visualizza i dati relativi ad un
Extend point
determinato prodotto. Si procede con il relativo caso d’uso.
72
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Visualizzare prodotto
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing ha la possibilità di visualizzare una lista contenente tutti i
Descrizione prodotti che l’azienda distributrice mette sul mercato e, per ognuno
di essi, può visionare i relativi dati caratteristici.
Il marketing deve aver precedentemente eseguito il caso d’uso
Precondizioni “Gestire prodotti” e selezionato il prodotto che si intende
visualizzare.
Il caso d’uso si attiva cliccando sulla voce “Visualizza” presente
Trigger nell’apposito menù di gestione dei prodotti (caso d’uso “Gestire
prodotti”).
1. A partire dalla visualizzazione dell’elenco di tutti i prodotti, il
marketing visualizza i dati caratteristici relativi al prodotto
Scenario di base selezionato.
2. Il caso d’uso termina con la visualizzazione dei dati caratteristici
relativi al prodotto in questione.
73
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Aggiungere prodotto
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing provvede ad aggiungere un nuovo prodotto nel
Descrizione
database, inserendo tutti i dati relativi ad esso.
Il marketing deve aver precedentemente eseguito il caso d’uso
Precondizioni
“Gestire prodotti”.
Il caso d’uso si attiva cliccando sulla voce “Aggiungi” presente
Trigger nell’apposito menù di gestione dei prodotti (caso d’uso “Gestire
prodotti”).
1. Il marketing inserisce i dati relativi al nuovo prodotto compilando
gli appositi campi a disposizione. I dati inseriti devono rispettare il
formato relativo al campo in questione.
2. Il marketing ha la possibilità di confermare l’inserimento del nuovo
Scenario di base prodotto semplicemente andando a cliccare sull’apposito pulsante
“Conferma inserimento”.
3. Il caso d’uso termina con la visualizzazione di un messaggio
relativo all’avvenuto inserimento del nuovo prodotto all’interno del
database.
1.1. Se i nuovi dati inseriti non rispettano il formato relativo al campo
al quale fanno riferimento, il sistema notifica tale situazione con
Scenario un messaggio di errore e invita il marketing ad apportare le
alternativo di opportune modifiche.
insuccesso 2.1. Se il marketing non conferma l’inserimento del nuovo prodotto, i
relativi dati andranno persi e il nuovo prodotto non verrà
aggiunto al database.
74
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Modificare prodotto
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing ha la possibilità di modificare i dati relativi ad un
Descrizione
determinato prodotto presente all’interno del database.
Il marketing deve aver precedentemente eseguito il caso d’uso
Precondizioni
“Gestire prodotti” e selezionato il prodotto che si intende modificare.
Il caso d’uso si attiva cliccando sulla voce “Modifica” presente
Trigger nell’apposito menù di gestione dei prodotti (caso d’uso “Gestire
prodotti”).
1. Il marketing ha la possibilità di modificare i dati caratteristici
relativi al prodotto selezionato.
2. Il marketing modifica i dati relativi al prodotto in questione
compilando gli appositi campi a disposizione. I dati inseriti devono
rispettare il formato relativo al campo in questione.
Scenario di base
3. Il marketing ha la possibilità di confermare le modifiche effettuate
semplicemente andando a cliccare sull’apposito pulsante
“Conferma modifiche”.
4. Il caso d’uso termina con la visualizzazione di un messaggio
riguardo l’avvenuta modifica dei dati relativi al prodotto in esame.
2.1. Se i nuovi dati inseriti non rispettano il formato relativo al campo
al quale fanno riferimento, il sistema notifica tale situazione con
un messaggio di errore e invita il marketing ad apportare le
opportune modifiche.
Scenario
3.1. Se il marketing non conferma le modifiche apportate al prodotto,
alternativo di
tali modifiche andranno perse mantenendo i dati originari.
insuccesso
4.1. Se è presente anche un solo ordine associato al prodotto che si
intende modificare, la modifica fallisce e il sistema notifica tale
situazione con un messaggio di segnalazione indicando il motivo
per il quale il prodotto non può essere modificato.
75
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Rimuovere prodotto
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing rimuove dal database tutti i dati relativi ad un
Descrizione
determinato prodotto.
Il marketing deve aver precedentemente eseguito il caso d’uso
Precondizioni “Gestire prodotti” e selezionato il prodotto che si intende eliminare
dal database.
Il caso d’uso si attiva cliccando sulla voce “Rimuovi” presente
Trigger nell’apposito menù di gestione dei prodotti (caso d’uso “Gestire
prodotti”).
1. Il marketing ha la possibilità di eliminare tutti i dati caratteristici
relativi al prodotto selezionato.
2. Il marketing ha la possibilità di confermare la rimozione del
prodotto semplicemente andando a cliccare sul pulsante
Scenario di base
“Conferma eliminazione”.
3. Il caso d’uso termina con la visualizzazione di un messaggio
riguardo l’avvenuta eliminazione di tutti i dati relativi al prodotto in
esame.
2.1. Se il marketing non conferma l’eliminazione del prodotto,
verranno mantenuti nel database tutti i dati relativi al prodotto in
questione.
Scenario
3.1. Se è presente anche un solo ordine (in preparazione) associato
alternativo di
al prodotto che si intende eliminare, l’eliminazione fallisce e il
insuccesso
sistema notifica tale situazione con un messaggio di
segnalazione indicando il motivo per il quale il prodotto non può
essere rimosso dal database.
76
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Visualizzare fornitore
Attore principale Addetto ai prodotti e ai listini (marketing).
Il marketing ha la possibilità di visualizzare i dati caratteristici relativi
Descrizione ad ogni fornitore con il quale l’azienda distributrice intrattiene rapporti
di tipo commerciale.
L’utente deve essersi autenticato come marketing (caso d’uso
Precondizioni
“Login”).
Trigger Il caso d’uso si attiva selezionando la voce “Visualizza fornitori”.
1. A partire dalla visualizzazione dell’elenco di tutti i fornitori, il
marketing visualizza i dati caratteristici relativi al fornitore
Scenario di base selezionato.
2. Il caso d’uso termina con la visualizzazione dei dati caratteristici
relativi al fornitore in questione.
77
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
LOGISTICA
78
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Visualizzare ordini
Attore principale Addetto alla gestione degli ordini (logistica).
La logistica ha la possibilità di visualizzare una lista contenente tutti
Descrizione gli ordini attivi, ossia tutti gli ordini che si trovano nello stato “in
preparazione” o nello stato “pervenuto”.
L’utente deve essersi autenticato come logistica (caso d’uso
Precondizioni
“Login”).
Il caso d’uso si attiva selezionando la voce “Ordini attivi”
Trigger
nell’apposito menù di gestione degli ordini.
1. Viene visualizzato l’elenco di tutti gli ordini attivi relativi ai diversi
punti vendita dell’azienda distributrice.
2. La logistica ha la possibilità di filtrare la visualizzazione degli
ordini attivi sulla base di determinati campi tra quelli a
disposizione.
3. Il sistema visualizza i risultati della ricerca fornendo la porzione di
Scenario di base
database che corrisponde ai requisiti di ricerca specificati al
passo precedente.
4. La logistica ha la possibilità di aggiornare lo stato di un dato
ordine richiamando il relativo caso d’uso.
5. Il caso d’uso termina con la visualizzazione dei dati caratteristici
relativi all’ordine in questione.
1.1. Qualora la tabella relativa agli ordini attivi non contenga alcuna
tupla, il sistema visualizza un messaggio di notifica con il quale
si indica che in quel dato istante nessun punto vendita presenta
Scenario
alcun ordine attivo.
alternativo di
3.1. Se il sistema non riscontra alcun matching sul database in
insuccesso
riferimento ai dati inseriti come chiavi di ricerca, viene
visualizzato un messaggio di notifica con il quale si indica che
non esiste nessun ordine attivo che rispetti i dati inseriti.
Esteso dal caso
Aggiornare stato ordine
d’uso
Aggiorna stato ordine: selezionando la voce “Aggiorna stato ordine”
Extend point si procede con l’aggiornamento dello stato dell’ordine in base al suo
avanzamento. Si passa al relativo caso d’uso.
79
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
80
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
81
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Visualizzare fornitore
Attore principale Addetto alla gestione degli ordini (logistica).
Tramite una ben precisa procedura prevista dal sistema, la logistica
Descrizione ha la possibilità di visualizzare i fornitori di tutti i prodotti
effettivamente distribuiti dal nostro sito commerciale.
L’utente deve essersi autenticato come logistica (caso d’uso
Precondizioni
“Login”).
Il caso d’uso si attiva entrando nell’apposito menù e scegliendo la
Trigger
relativa voce “Visualizza fornitori”.
1. Si clicca sull’apposita opzione del menù “Visualizza fornitori” e si
apre una pagina contenente la tabella con tutti i fornitori presenti
al momento della richiesta.
2. La logistica può effettuare una ricerca selettiva sul database in
base ai dati a disposizione.
3. Il sistema visualizza i risultati della ricerca fornendo la porzione di
Scenario di base database che corrisponde ai requisiti di ricerca specificati al
passo precedente.
4. Cliccando sul link “Visualizza” la logistica ha la possibilità di
visualizzare tutti i dati caratteristici presenti in archivio relativi al
fornitore desiderato.
5. Il caso d’uso termina con la visualizzazione dei dati caratteristici
relativi al fornitore in questione.
1.1. Se la tabella dei fornitori non contiene alcuna tupla, viene
visualizzato un messaggio di errore con il quale si indica che
Scenario nessun fornitore è presente in archivio.
alternativo di 3.1. Se i dati inseriti come chiave di ricerca non soddisfano alcun
insuccesso matching sul database, il sistema mostra un messaggio di
notifica con il quale si indica che non esiste nessun fornitore che
rispetti i dati inseriti.
82
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Visualizzare prodotto
Attore principale Addetto alla gestione degli ordini (logistica).
Tramite una ben precisa procedura prevista dal sistema, la logistica
Descrizione deve avere la possibilità di visualizzare tutti i prodotti a disposizione
al momento in cui viene effettuata la richiesta.
L’utente deve essersi autenticato come logistica (caso d’uso
Precondizioni
“Login”).
Il caso d’uso si attiva entrando nell’apposito menù e scegliendo la
Trigger
relativa voce “Visualizza prodotti”.
1. Si clicca sull’apposita opzione del menù “Visualizza prodotti” e si
apre una pagina contenente la tabella con tutti i prodotti presenti
al momento della richiesta.
2. La logistica può effettuare una ricerca selettiva sul database in
base ai dati a disposizione.
3. Il sistema visualizza i risultati della ricerca fornendo la porzione di
Scenario di base database che corrisponde ai requisiti di ricerca specificati al
passo precedente.
4. Cliccando sul link “Visualizza” la logistica ha la possibilità di
visualizzare tutti i dati caratteristici presenti in archivio relativi al
prodotto desiderato.
5. Il caso d’uso termina con la visualizzazione dei dati caratteristici
relativi al prodotto in questione.
1.2. Se la tabella dei prodotti non contiene alcuna tupla, viene
visualizzato un messaggio di errore con il quale si indica che
Scenario nessun prodotto è presente in archivio.
alternativo di 3.1. Se i dati inseriti come chiave di ricerca non soddisfano alcun
insuccesso matching sul database, il sistema mostra un messaggio di
notifica con il quale si indica che non esiste nessun prodotto che
rispetti i dati inseriti.
83
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
Visualizzare listino
Attore principale Addetto alla gestione degli ordini (logistica).
Tramite una ben precisa procedura prevista dal sistema, la logistica
Descrizione deve avere la possibilità di visualizzare tutti i listini prodotti a
disposizione al momento in cui viene effettuata la richiesta.
L’utente deve essersi autenticato come logistica (caso d’uso
Precondizioni
“Login”).
Il caso d’uso si attiva entrando nell’apposito menù e scegliendo la
Trigger
relativa voce “Visualizza listini ”.
1. Si clicca sull’apposita opzione del menù “Visualizza listini” e si
apre una pagina contenente la tabella con tutti i listini prodotti
presenti al momento della richiesta.
2. La logistica può effettuare una ricerca selettiva sul database in
base ai dati a disposizione.
3. Il sistema visualizza i risultati della ricerca fornendo la porzione di
Scenario di base database che corrisponde ai requisiti di ricerca specificati al
passo precedente.
4. Cliccando sul link “Visualizza” la logistica ha la possibilità di
visualizzare tutti i dati caratteristici presenti in archivio relativi al
listino prodotti desiderato.
5. Il caso d’uso termina con la visualizzazione dei dati caratteristici
relativi al listino prodotti in questione.
1.2. Se la tabella dei listini non contiene alcuna tupla, viene
visualizzato un messaggio di errore con il quale si indica che
Scenario nessun listino è presente in archivio.
alternativo di 3.1. Se i dati inseriti come chiave di ricerca non soddisfano alcun
insuccesso matching sul database, il sistema mostra un messaggio di
notifica con il quale si indica che non esiste nessun prodotto che
rispetti i dati inseriti.
84
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
MODELLO E/R
FORNITORE
1
N
N PRODOTTO IN N 1
PRODOTTO
LISTINO
N
N
1 N 1
LISTINO ORDINE REPARTO
1 N
1
N PUNTO
STORICO
VENDITA
85
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di analisi
86
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
PROGETTAZIONE
SCELTE PROGETTUALI
I programmi che verranno utilizzati per l’implementazione del nostro sistema software, che
realizzerà un portale web tramite il quale saranno consentire le attività di compravendita
nell’ambito della grande distribuzione, sono elencati qui di seguito. Tutto ciò allo scopo di
consentire, anche all’occhio meno esperto o comunque a tutti coloro che risultino
interessati agli ambienti di sviluppo utilizzati, di avere delle indicazioni sulle potenzialità e
sulle funzionalità principali dei programmi da noi impiegati. In particolare daremo anche
una breve descrizione esplicativa per ognuno di essi:
- XAMPP 1.7.3
- phpMyAdmin
- Mysql
- Apache
- CodeIgniter
In realtà possiamo dire che, in un certo senso, il primo degli ambienti su indicati (XAMPP)
racchiude gli altri sistemi software in maniera armonica ed esaustiva, considerando le
applicazioni cui il nostro portale sarà adibito.
Per poter creare il nostro portale web occorrerà avere a disposizione e quindi predisporre
tutto ciò che risulta essere indispensabile alla navigazione nel web: avremo bisogno,
quindi, di un web server, di un database e di un gestore dello stesso.
Per poter creare un web server sulla nostra macchina, avremmo bisogno innanzitutto di
Apache (il web server vero e proprio); poi bisognerebbe aggiungere altre applicazioni che
ci permettano di creare siti con contenuto dinamico, magari scritti in PHP (per esempio un
CMS open source), quindi occorrerebbe installare PHP e impostare Apache affinché
supporti questo linguaggio. Molto spesso, però, Apache e PHP da soli non bastano,
perché la gestione dei contenuti del sito rischia di diventare laboriosa col passare del
87
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
XAMPP
XAMPP (fino a poco tempo fa LAMPP) è un acronimo con cui si indica una piattaforma di
sviluppo web/database che prende il nome dalle iniziali dei componenti software con cui è
realizzata: è un insieme di programmi utili per la creazione di un web server ed integra, al
suo interno, Apache, MySQL, PHP, e tanti altri programmi che ci permettono di creare,
relativamente facilmente e velocemente, un server web, anche se minimale, che possa
contenere il nostro sito. La comodità sta nel fatto che invece di scaricare e installare
singolarmente tutti i programmi di cui abbiamo bisogno, con XAMPP basta scaricare un
file compresso di circa 40 MB e decomprimerlo sul nostro pc: se per qualche malaugurato
88
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
motivo, in futuro, non ci va più di avere quella cinquantina di MB del nostro hard disk
occupati da XAMPP, basta semplicemente cancellare la sua directory! Oltre a questo, la
comodità di XAMPP sta anche nel fatto che molte sue funzioni possono essere
intuitivamente configurate via web con un browser (alcune volte, però, è necessario
mettere mano al nostro editor di testi preferito e girovagare nei files di configurazione).
Il programma è rilasciato sotto la GNU General Public License ed è un utile web server,
gratuito e caratterizzato da un approccio user friendly: mediante XAMPP è possibile avere
un application server capace di interpretare pagine dinamiche PHP. Ottenendo un dominio
DNS, si può, se il computer è connesso, accedere alle pagine web. Attualmente, XAMPP
è disponibile per Windows, GNU/Linux, Sun Solaris e Mac OS X. Può essere installato
anche su un dispositivo esterno USB.
Esiste una versione “Lite” comprensiva dei componenti sotto indicati e una versione Basic
che comprende altre caratteristiche complementari. I componenti di base sono:
• Il Web server: Apache HTTP Server;
• Il database management system (o database server): MySQL e SQLite;
• Il server FTP: ProFTPD;
• Il Mail server: Mercury Mail Transport System (solo per Windows);
• I linguaggi di scripting: PHP e/o Python.
La versione che adopereremo è XAMPP 1.7.3 che contiene, in particolare, i seguenti
componenti:
• Apache 2.2.14 (IPv6 enabled) + OpenSSL 0.9.8l
• MySQL 5.1.41 + PBXT engine
• PHP 5.3.1
• phpMyAdmin 3.2.4
• FileZilla FTP Server 0.9.33
• Mercury Mail Transport System 4.721
1
Questo componente serve per inviare email inserendo qualsiasi tipo di contatto (msn,yahoo....).
89
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Apache è la piattaforma web server modulare più diffusa al mondo. Risulta in grado di
operare su sistemi operativi Unix-like e Windows. È un software che realizza le funzioni di
trasporto delle informazioni, di internet-working e di collegamento: ha il vantaggio di offrire
anche funzioni di controllo per la sicurezza come quelle che impiega il proxy.
Il Web Server Apache presenta un’architettura modulare, quindi, ad ogni richiesta del
client, vengono svolte funzioni specifiche da ogni modulo di cui è composto, come unità
indipendenti. Ciascun modulo si occupa di una funzionalità, ed il controllo è gestito dal
core.
I moduli che costituiscono la sua architettura (visibili dalla figura) sono i seguenti:
Core: programma principale composto da un ciclo sequenziale di chiamate ai
moduli
Translation: traduce la richiesta del client
Acces Control: controlla eventuali richieste dannose
90
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
OpenSSL 0.9.8
OpenSSL è un’implementazione open source dei protocolli SSL e TLS. Le librerie di base
(scritte in linguaggio C) eseguono le funzioni crittografiche principali. Nei diversi linguaggi
di programmazione, sono disponibili procedure che permettono di accedere alle funzioni
della libreria OpenSSL. È disponibile per la maggior parte dei sistemi operativi unix-like,
91
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
MySQL 5.1.41
MySQL è uno dei più diffusi Relational DataBase Management System (RDBMS),
composto da un client con interfaccia a caratteri e un server, entrambi disponibili sia per
sistemi Unix che per sistemi Windows. Esso supporta la maggior parte della sintassi
dell’SQL e possiede delle interfacce per diversi linguaggi, compreso un driver ODBC, due
driver Java e un driver per Mono e .NET. È importante sottolineare, inoltre, che MySQL
svolge il compito di DBMS principalmente nelle piattaforme LAMP [Linux – Apache –
MySQL – PHP] (le più usate ed installate su Internet per lo sviluppo di siti ed applicazioni
web dinamiche) ma anche in quelle WAMP (Windows – Apache – MySQL - PHP). Il
codice di MySQL è di proprietà dell’omonima società, viene però distribuito con la licenza
GNU GPL oltre che con una licenza commerciale.
92
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
2
Parser: è un analizzatore sintattico, un algoritmo di riconoscimento sintattico di un linguaggio. Il parser,
componente del compilatore, esegue l’analisi sintattica del flusso di token (ad esempio if, then, else, −, +, *,
/, variabili) ottenuti dall’analizzatore lessicale. Il parser prende ciascun token e gli assegna un significato,
verifica la coerenza delle istruzioni del programma con la sintassi del linguaggio sorgente, ovvero trova una
regola della grammatica del linguaggio che giustifichi la presenza e la posizione del token; se riscontra
incongruenze il parser genera messaggi di errore o avvertimenti.
3
XPath: è un linguaggio parte della famiglia XML che permette di individuare i nodi all’interno di un
documento XML. Le espressioni XPath, a differenza delle espressioni XML, non servono a identificare la
struttura di un documento, bensì a localizzarne con precisione i nodi.
93
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
94
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
cercare di evitare che si presenti una situazione di questo tipo, che causerebbe gravi errori
nella quantificazione dell’importo degli ordini nonché insoddisfazione nel cliente (potrebbe
rischiare di non ricevere tutto quello che ha ordinato).
Tenendo presente che una transazione è un’unità elementare di lavoro di un’applicazione
a cui si vogliono associare particolari caratteristiche di correttezza, robustezza ed
isolamento, possiamo dire che un sistema che mette a disposizione meccanismi per la
definizione e l’esecuzione di transazioni viene detto sistema transazionale.
Il nostro sistema software è un sistema transazionale in cui la creazione e cancellazione
degli ordini rappresenta un esempio di transazioni.
Per mantenere le informazioni consistenti è necessario controllare opportunamente le
sequenze di accessi e aggiornamenti ai dati, tenendo presente che gli utenti interagiscono
con la base di dati attraverso programmi applicativi i quali usano le transazioni per
garantire la correttezza del dato inserito o letto. Una transazione si può interpretare, in
pratica, come un insieme parzialmente ordinato di operazioni di lettura e scrittura; essa
costituisce l’effetto dell’esecuzione di programmi che effettuano le funzioni desiderate dagli
utenti.
Ogni transazione può essere eseguita completamente (commit), oppure per nulla (abort)
se si verifica un qualche errore (hardware o software) durante l’esecuzione:
• Dobbiamo garantire che le transazioni eseguite in concorrenza si comportino come
se fossero state eseguite in sequenza (controllo della concorrenza)
• Sono necessarie tecniche per ripristinare uno stato corrente della base di dati a
fronte di malfunzionamenti di sistema (tecniche di ripristino - recovery)
Ora, considerando il fatto che l’insieme delle operazioni che costituiscono una transazione
deve soddisfare alcune proprietà, note come proprietà ACID, dobbiamo assicurarci che
anche il nostro sistema di gestione del DB conservi e garantisca tali proprietà. Queste
garantiscono un funzionamento privo di sorprese, ribadiscono il principio del “tutto o
niente” per le operazioni che costituiscono le transazioni e fanno delle transazioni stesse
uno strumento insostituibile per la riduzione del carico gestionale in presenza di numerose
variabili. Ecco una sintetica descrizione di ciascuna delle 4 proprietà che costituiscono
l’acronimo ACID:
ATOMICITÀ
Una transazione rappresenta un’unità di lavoro in cui una serie di operazioni viene
eseguita tra le istruzioni BEGIN TRANSACTION ed END TRANSACTION di
95
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
COERENZA
Una transazione rappresenta un’unità di integrità perché preserva l’uniformità dei dati,
trasformando uno stato coerente di dati in un altro stato coerente di dati. Per la coerenza è
necessario che i dati collegati da una transazione vengano preservati dal punto di vista
semantico. La responsabilità del mantenimento della coerenza è in parte dello
sviluppatore dell’applicazione, che si assicura che in essa siano rispettati tutti i vincoli di
integrità noti. Nello sviluppo di un’applicazione per il trasferimento di denaro, ad esempio,
è fondamentale evitare che la virgola decimale venga spostata arbitrariamente durante il
trasferimento.
ISOLAMENTO
Una transazione rappresenta un’unità di isolamento, in quanto consente che le transazioni
simultanee abbiano luogo come se ciascuna di esse fosse l’unica transazione in
esecuzione nel sistema. Per l’isolamento è necessario che ciascuna transazione sembri
essere l’unica a manipolare l’archivio dati, anche se è possibile che altre transazioni siano
in esecuzione nello stesso momento. È importante che una transazione non capti mai le
fasi intermedie di un’altra transazione. Le transazioni raggiungono il più alto livello di
isolamento quando sono serializzabili. A questo livello, i risultati ottenuti con una serie di
transazioni contemporanee sono identici a quelli ottenuti eseguendo ciascuna transazione
in serie. Dal momento che un alto grado di isolamento può limitare il numero delle
transazioni contemporanee, alcune applicazioni riducono il livello di isolamento allo scopo
di migliorare le prestazioni.
DUREVOLEZZA (PERSISTENZA)
Una transazione rappresenta inoltre un’unità di recupero. Se una transazione ha esito
positivo, il sistema garantisce che gli aggiornamenti da essa effettuati persistano, anche
se il computer si blocca immediatamente dopo il commit. L’accesso specializzato consente
96
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
alla procedura di riavvio del sistema di completare eventuali operazioni non terminate,
rendendo la transazione durevole.
97
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
phpMyAdmin 3.2.4
PhpMyAdmin è uno dei più popolari MySQL manager, cioè un programma per
amministrare i database MySQL attraverso un’interfaccia grafica. È facilmente utilizzabile
tramite un qualsiasi browser. È scritto in PHP, è distribuito con la licenza GNU GPL ed è
disponibile in diverse lingue.
Consente agli amministratori di effettuare agevolmente diverse operazioni sui database:
• navigare nei database e nelle tabelle;
• effettuare le operazioni di create, copy, rename, alter e drop sui database;
• effettuare le operazioni di create, copy, rename, alter e drop sulle tabelle;
• effettuare la manutenzione sulle tabelle;
• effettuare le operazioni di add, edit e drop dei campi;
• eseguire qualsiasi statement SQL, anche query multiple;
• caricare file di testo nelle tabelle;
• creare e leggere i dump delle tabelle o dei database;
• esportare i dati nei formati SQL, CSV, XML, Word, Excel, PDF e LaTeX;
• amministrare server multipli;
• gestire gli utenti MySQL e i privilegi;
• creare query complesse usando Query – by – example (QBE), connettendo
automaticamente le tabelle richieste;
• creare grafici PDF del layout del database;
• effettuare ricerche in tutto il database o in parte di esso;
• trasformare i dati immagazzinati in qualsiasi altro formato utilizzando un set di
funzioni predefinite.
Perché lo abbiamo scelto:
• si tratta di software libero, che garantisce un’elevata qualità a fronte di costi irrisori
(in questo caso nulli);
98
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
FileZilla Server è un server FTP molto piccolo nelle dimensioni ma veloce e performante
nelle applicazioni a cui è adibito. È un server gratuito, scaricabile liberamente dal web, che
consente di ricevere tutte le funzionalità necessarie al suo corretto funzionamento, in linea
con le applicazioni richieste, in una maniera che risulta essere la più semplice possibile. In
più possiamo affermare che è molto facile da usare, nonché molto intuitivo.
Il suo punto di forza è il demone di gestione del server esterno al server stesso: così è
possibile gestire il server da qualunque postazione. Altro punto a favore è l’immediata e
potente gestione dei profili utente. Consente il resume dei file interrotti, connessioni
multiple a porte multiple e supporta FTP e FTP con crittografia SSL/TLS. Permette infine
di generare statistiche sull’uso del server stesso.
99
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
PHP 5.3.1
CodeIgniter
101
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
- View: ha il compito di visualizzare i dati forniti dal model e permette l’interazione tra
utilizzatori e applicazione;
- Controller: ad esso vengono inviate le istruzioni provenienti dall’utenza
(generalmente mediati dalla view) e le esegue condizionando lo stato dei due
componenti presentati in precedenza.
Questa tipologia di approccio consente di isolare anche a livello pratico la logica
applicativa di un programma ponendola a carico del Controller e del Model, mentre la
parte relativa all’interfaccia utente sarà assegnata alla View.
I principali vantaggi di utilizzare un framework come CodeIgniter risiedono nell’estrema
facilità di utilizzo di questo strumento:
- è di dimensioni relativamente ridotte e non costringe lo sviluppatore a lavorare con
librerie monolitiche ed eccessive quantità di file;
- garantisce prestazioni molto elevate anche in ragione di quanto esposto nel punto
precedente;
- è compatibile con numerose versioni di PHP; a differenza di altri framework può
infatti essere utilizzato anche in ambienti hosting che non supportano ancora la
versione 5 di PHP;
- richiede una procedura di configurazione e installazione non più lunga di alcuni
minuti e, cosa invece necessaria per altre piattaforme dello stesso tipo, per il suo
utilizzo non ha bisogno dell’invio di istruzioni da linea di comando;
- non impone stili codificati per la scrittura del codice, prevede istruzioni semplici
molto simili nella sintassi a quelli comunemente utilizzati per la chiamata a funzioni
PHP;
- evita la necessità di dover utilizzare librerie esterne per l’integrazione di funzioni
addizionali come per esempio PEAR;
- non richiede di imparare un apposito linguaggio per la gestione dei template né
l’utilizzo di un template engine esterno al framework;
- è corredato da una documentazione molto completa e semplice da consultare.
Da sottolineare, infine, l’estrema velocità di questo framework che offre ottime prestazioni
sia in sede di sviluppo che in sede di produzione.
102
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
ARCHITETTURA SOFTWARE
Dopo aver fornito una panoramica sui programmi che utilizzeremo nella realizzazione del
nostro software, risulta di estrema importanza porre l’accento sulle scelte progettuali per
quanto concerne l’architettura del sistema, allo scopo, da un lato, di fornire una visione
d’insieme sulle caratteristiche proprie dell’architettura scelta, e dall’altro di mostrare ed
evidenziare i pregi che ci hanno condotto alla sua scelta.
La scelta da noi ritenuta migliore riguardo l’architettura software da utilizzare nella
realizzazione del nostro portale web, dopo un’attenta analisi e una serie di considerazioni,
è ricaduta sull’architettura client-server: è un tipo di architettura che ben si adatta a
sistemi distribuiti4, anche se può comunque essere utilizzata per progettare sistemi stand-
alone.
ARCHITETTURA CLIENT-SERVER
4
Dove per sistema distribuito si intende un sistema in cui l’elaborazione dell’informazione è distribuita su
diversi computer. Questo tipo di organizzazione presenta evidenti vantaggi quali la condivisione delle
risorse, la scalabilità, l’apertura, la fault tolerance e la simultaneità, anche se di contro abbiamo la maggiore
complessità, la maggiore difficoltà riguardante la messa in sicurezza del sistema, la non prevedibilità e
quindi una gestione molto più difficoltosa.
103
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
104
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
architecture (architettura a 2 livelli): il cliente richiede una risorsa e il server gliela fornisce
direttamente, utilizzando le proprio risorse e questo significa che il server non fa appello
ad un’altra applicazione per fornire il servizio richiesto.
In particolare, per quanto riguarda l’architettura thin client tutte le elaborazioni applicative
e la gestione dei dati sono prerogativa del server, mentre al client viene lasciata solo la
gestione del livello di presentazione dei servizi disponibili: in pratica fornisce
semplicemente una interfaccia utente. Quest’ultima, infatti, viene migrata verso PC,
mentre l’applicazione funge da server e gestisce tutte le elaborazioni e le gestioni dei dati.
Gli svantaggi sono legati al fatto di avere un pesante carico di lavoro sul server e sulla
rete, senza considerare il fatto che la potenza computazionale ed elaborativa dei client
viene completamente sprecata.
Invece, per quanto riguarda l’architettura fat client il client si occupa sia del livello di
presentazione dell’applicazione, sia dell’elaborazione della logica applicativa. Di contro,
questa volta, il server è un server di transazione che gestisce le transazioni col database.
Gli svantaggi sono legati al fatto di avere una maggiore complessità nella gestione del
sistema visto che le funzionalità dell’applicazione sono divise su diversi computer, i costi
sono maggiori ed ancora, elemento non trascurabile, quando il software viene modificato,
è necessario installare nuovamente il client su ogni computer.
A questo punto possiamo anche dire quali sono i problemi di un’architettura a due livelli: gli
strati logici sono mappati su due soli sistemi e questo porta a problemi di scalabilità e
prestazioni (nel thin client) e problemi di gestione del sistema (nel fat client).
Allo scopo di far fronte a tali problemi in maniera più efficiente si è introdotto un ulteriore
tipo di architettura client-server 3-tier-architetture: qui esiste un livello in più, intermedio.
Tutto ciò comporta l’ottenimento di un’architettura condivisa tra:
105
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
106
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
107
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
108
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
109
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
110
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
PATTERN ARCHITETTURALE
MODEL-VIEW-CONTROLLER
111
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
112
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Questo schema, fra l’altro, implica anche la tradizionale separazione fra la logica
applicativa a carico di controller e model, e l’interfaccia utente a carico della view.
Un aspetto molto importante è la consistenza del modello: questa proprietà è garantita da
un meccanismo di propagazione dei cambiamenti, nel senso che quando un modello
cambia il suo stato, notifica tutte le sue viste ed i suoi controller del cambiamento in
maniera tale che questi possano aggiornare il loro stato in modo appropriato.
Nella figura seguente sintetizziamo tutte le funzionalità e i compiti di ogni singolo
componente:
113
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
5
Un framework è una struttura di supporto allo sviluppo di un software. In particolare, nel caso di
applicazioni web si tratta di codice sorgente già scritto che ci offre alcuni strumenti per sviluppare e
supportare l’applicazione vera e propria.
Esistono framework per vari linguaggi tra cui i frameworks MVC (quindi basati sul pattern Model-View-
Controller) sviluppati principalmente in PHP (come lo stesso CodeIgniter).
114
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
globale all’istanza stessa) in cui l’oggetto principale permette di caricare tutte le librerie ed
i modelli richiesti per lo sviluppo di una applicazione.
DESIGN PATTERN
PATTERN CREAZIONALI
I pattern creazionali sono quei pattern che permettono di rendere i componenti del
sistema, che utilizzano determinati oggetti, indipendenti da come tali oggetti sono creati,
composti e rappresentati. In particolare un pattern creazionale:
• nasconde (nel senso di information hiding) la conoscenza di quali sono le classi
concrete effettivamente istanziate, sfruttando tipi astratti per definire le interfacce di
riferimento;
• nasconde dettagli sulla creazione e sulla composizione degli oggetti (es. parametri
usati al momento della creazione) all’utilizzatore dell’istanza;
Le due caratteristiche suddette conferiscono una notevole flessibilità al processo di
creazione, dal momento che ciò che viene creato in generale risulta essere disaccoppiato
dal contesto di utilizzo. Infatti solo l’oggetto creatore conosce il tipo effettivo dell’istanza e
ciò che viene esternamente reso pubblico è unicamente l’interfaccia di riferimento.
SINGLETON
Vediamo da vicino il design pattern utilizzato attivamente dal framework MVC CodeIgniter
che abbiamo scelto di utilizzare nel progetto del nostro portale web: Singleton.
Lo scopo del pattern Singleton è quello di assicurare che per una determinata classe
esista un’unica istanza attiva, fornendo un entry-point globale (un unico punto di accesso)
all’istanza stessa. Questo pattern si può rivelare utile nel caso in cui si abbia la necessità
di centralizzare informazioni e comportamenti in un’unica entità condivisa da tutti i suoi
utilizzatori. Tipicamente questo si verifica quando la classe mantiene informazioni di stato
116
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
che devono essere condivise da più parti del programma, e non è corretto, oppure non è
efficiente (ad es. nel caso di una cache), che queste informazioni siano duplicate.
La soluzione che più si adatta a risolvere la questione associata al pattern (unicità
dell’istanza) consiste nell’associare alla classe stessa la responsabilità di creare le proprie
istanze:
• innanzitutto si rende il costruttore della classe privato, in modo che non sia possibile
creare direttamente istanze (al di fuori del codice della classe);
• si fornisce un metodo “static” per ottenere l’unica istanza, che viene conservata in
un campo static privato della classe;
• a questo punto abbiamo due diverse varianti. Una secondo la quale l’istanza può
essere creata all’inizializzazione del programma, oppure la prima volta che viene
richiesta, mentre nell’altra variante l’istanza, se necessario, può appartenere a una
sottoclasse della classe Singleton.
In questo modo è la classe stessa che può assicurare che nessun’altra istanza possa
essere creata, intercettando e gestendo in modo centralizzato le richieste di creazione di
nuove istanze.
Pertanto l’unico partecipante del pattern è:
• Singleton (One, Two e Three)
Singleton definisce un membro per accedere all’unica istanza esistente, generalmente
creata internamente alla classe stessa.
L’esempio proposto mostra tre casistiche diverse di applicazione del pattern. La classe
One prevede l’inizializzazione statica dell’istanza. La proprietà Instance ritorna l’oggetto
equivalente di tipo One statico e privato. La classe Two prevede l’inizializzazione dinamica
su richiesta tramite il controllo del riferimento all’istanza. La proprietà Instance ritorna
anche in questo caso l’oggetto equivalente di tipo Two statico e privato. La classe Three
effettua un doppio controllo sul riferimento all’istanza, dentro e fuori ad un blocco a mutua
esclusione e in base ad esso attiva l’istanza. Ancora una volta la proprietà Instance ritorna
117
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
l’oggetto equivalente di tipo Three statico e privato. Se i primi due casi non sono thread-
safe, il terzo lo è (nell’ambito di uno stesso appdomain). La presenza del blocco di mutua
esclusione garantisce che la creazione dell’istanza sia effettivamente eseguita una volta
sola, anche in un contesto multi-thread.
118
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
PATTERN STRUTTURALI
I design pattern di tipo strutturale riguardano le modalità con cui classi e oggetti vengono
aggregati allo scopo di formare entità più complesse. In generale possiamo distinguere
due tipologie di pattern strutturali:
• pattern strutturali basati sulle classi, che sfruttano l’ereditarietà multipla (se prevista)
per combinare tra loro le interfacce e le implementazioni;
• pattern strutturali basati sugli oggetti, che descrivono le modalità di composizione di
oggetti al fine di estendere in fase di esecuzione le funzionalità di una classe (cosa
non possibile nel caso della composizione statica e tramite ereditarietà).
In generale la maggior parte dei pattern strutturali sono basati sugli oggetti.
PROXY
Vediamo da vicino un design pattern di tipo strutturale che abbiamo scelto di utilizzare nel
progetto del nostro portale web: Proxy.
Lo scopo del pattern Proxy (detto anche Surrogate) è quello di fornire un surrogato o un
segnaposto di un altro oggetto per controllarne l’accesso. Questo pattern, di tipo
strutturale basato sugli oggetti, è applicabile ogni volta che si voglia disporre di un
riferimento a un oggetto più versatile di un semplice puntatore, tale da permettere, per
esempio, di controllare l’accesso all’oggetto vero e proprio piuttosto che di fornire una
rappresentazione locale di un oggetto remoto.
Il pattern in questione introduce un livello di indirezione nell’accesso a un oggetto. Questa
indirezione ricopre significati diversi a seconda dei casi:
• proxy remoto, quando si vuole nascondere al client che un oggetto risiede in uno
spazio di indirizzamento diverso (esempio classico: Web Service);
• proxy virtuale, quando si vuole eseguire un’ottimizzazione nella creazione di un
oggetto particolarmente “costoso” e pesante piuttosto che memorizzare
informazioni aggiuntive relative all’oggetto rappresentato per posticipare l’accesso
all’oggetto stesso;
• proxy di protezione, quando si vuole gestire l’accesso a un oggetto tramite
l’esecuzione di azioni preliminari di controllo.
119
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
120
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
PATTERN COMPORTAMENTALI
OBSERVER
Il pattern Observer (noto anche col nome Publish-Subscribe) permette di definire una
dipendenza uno a molti fra oggetti, in modo tale che se un oggetto cambia il suo stato
121
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
• Observer: fornisce l’interfaccia di notifica per gli oggetti a cui devono essere
segnalati i cambiamenti di stato di Subject.
• ConcreteSubject (Subject): contiene lo stato monitorato dagli Observer a cui viene
inviata la notifica.
• ConcreteObserver (Observer): mantiene un riferimento ad un oggetto
ConcreteSubject. Contiene le informazioni da mantenere sincronizzate con lo stato
del Subject. Implementa il metodo di gestione della notifica da eseguire allo scopo
di mantenere sincronizzati gli stati degli oggetti.
Il meccanismo per inviare notifiche nell’ambito del .NET Framework è fornito in modo
nativo dai tipi delegate e dagli eventi. Una classe che funge da Publisher (classe Subject)
espone in generale sulla sua interfaccia una serie di eventi corrispondenti ad un tipo
particolare di delegate. Le classi Subscriber (classe Observer) sottoscrivono l’evento e ad
esso associano un metodo interno (comunemente detto event handler) che deve rispettare
la firma definita dal tipo delegate associato all’evento. L’event handler viene chiamato nel
momento in cui il Publisher inoltra ai suoi Subscriber la notifica, rendendo possibile in
questo modo l’esecuzione di codice in ciascun Subscriber al variare dello stato interno del
Publisher.
STRATEGY
123
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
classi partecipanti del pattern e una alta coesione funzionale delle diverse strategie di
implementazione.
Il pattern Strategy fornisce di fatto un meccanismo di configurazione per una determinata
classe, utilizzando un comportamento specifico scelto fra tanti e “iniettato” nel momento
dell’utilizzo. L’operazione di iniezione può avvenire mediante diverse modalità, a seconda
dei casi. La modalità più comune di iniezione prevede l’uso del costruttore della classe per
selezionare l’algoritmo concreto da eseguire successivamente.
da ciascuna delle classi derivate. In questo modo il client (classe Program) utilizza
unicamente Context per eseguire gli ordinamenti e qualsiasi modifica degli algoritmi e
delle classi relative non impatta su di esso.
125
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
126
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Il componente controller contiene tutte le classi di tipo controller. Quindi è una collezione
di metodi, esposti opportunamente tramite le interfacce, che permettono di utilizzare le
informazioni contenute nel data base tramite le classi model. Contiene anche la classe
che, gestendo gli accessi, discrimina il tipo di utente che sta accedendo al sistema.
127
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Component view
properties qualified name view
visibility public
leaf false
abstract false
indirectlyInstantiated true
use for code engineering true
interfaces amministrazione
logistica
marketing
pv
user
source of Usage controller
relation
sub- amministrazione: Fornitore_aggiunto
components Elimina_fornitore_non_riuscita
Elimina_fornitore_riuscita
Elimina_pv_non_riuscita
Elimina_pv_riuscita
Modifica_fornitore
Modifica_fornitore_riuscita
Modifica_insegna_pv
Modifica_insegna_pv_riuscita
Nuovo_fornitore
Visualizza_elenco_fornitori
Visualizza_elenco_ordini
Visualizza_elenco_pv
Visualizza_elenco_storico
Visualizza_fornitore
Visualizza_pv
logistica: Visualizza_elenco_fornitori
Visualizza_elenco_listini
Visualizza_elenco_ordini
Visualizza_elenco_prodotti
Visualizza_fornitore
Visualizza_listino
Visualizza_ordine
Visualizza_prodotto
128
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
marketing: Listino_aggiunto
Elimina_listino_non_riuscita
Elimina_listino_riuscita
Elimina_prodotto_non_riuscita
Elimina_prodotto_riuscita
Elimina_reparto_riuscita_e_non
Modifica_listino
Modifica_listino_riuscita
Modifica_prodotto
Modifica_prodotto_non_consentita
Modifica_prodotto_riuscita
Nuovo_listino
Nuovo_prodotto
Nuovo_reparto
Prodotto_aggiunto
Visualizza_elenco_fornitori
Visualizza_elenco_listini
Visualizza_elenco_prodotti
Visualizza_elenco_reparti
Visualizza_fornitore
Visualizza_listino
Visualizza_prodotto
menu: Login
Menu_amministrazione
Menu_logistica
Menu_marketing
Menu_pv
pv: Carrello
Disponibilita_non_sufficiente
Introduzione
Modifica_pv
Modifica_pv_riuscita
Nuovo_ordine
Ordine_aggiunto
Profilo
Visualizza_elenco_ordini
Visualizza_elenco_storico
Visualizza_ordine
Visualizza_prodotto
129
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Visualizza_proprio_listino
Vota_ordine
Vota_ordine_storico
Voto_ordine_inserito
Voto_storico_inserito
utente: Chi_siamo
Contatti
Dove_siamo
Esito_recupera-password
Introduzione
Note_legali
Recupera_password
Registrati
Registrazione_riuscita
shown on Component Diagram
diagram
Component controller
properties qualified name controller
visibility public
leaf false
abstract false
indirectlyInstantiated true
use for code engineering true
interfaces amministrazione
logistica
marketing
pv
user
source of Usage model
relation
target of Usage view
relation
classes Autenticazione
Home
Home_amministrazione
Home_logistica
Home_marketing
Home_pv
130
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
ProtectionProxyOrdina
RealeOrdina
shown on Component Diagram
diagram
Component model
properties qualified name model
visibility public
leaf false
abstract false
indirectlyInstantiated true
use for code engineering true
interfaces amministrazione
logistica
marketing
pv
user
target of Usage controller
relation
classes Fornitore_model
Listino_model
Ordine_model
Prodotto_model
Reparto_model
Storico_model
Utente_model
shown on Component Diagram
diagram
131
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Di seguito sono riportate le entità e le relazioni del modello E-R normalizzate (modello
relazionale):
REPARTO (nome_reparto)
132
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
BUSINESS RULES
FORNITORE:
◊ Il campo p_iva_fornitore è un codice numerico di 11 cifre;
◊ Il campo indirizzo è un campo di tipo testuale.
REPARTO:
◊ Il campo nome_reparto può assumere uno dei seguenti valori:
- gastronomia(formaggi e salumi);
- frutta e verdura;
- macelleria;
- pescheria;
- colazione;
- bevande;
- freschi e surgelati;
- forno;
- pasticceria;
- dispensa;
- gelati.
PRODOTTO:
◊ Il campo descrizione è un campo di tipo testuale che ci permetterà di esprimere
per ogni prodotto la quantità acquistabile: in particolare in esso troveremo traccia di
quello che è il nome del prodotto con la rispettiva quantità per lotto. Ad esempio:
100Kg mele, e così via.
LISTINO:
◊ Il campo sconto_listino è un FLOAT che non può eccedere il valore 100.
ORDINE:
◊ Il campo metodo_pagamento può assumere uno tra i seguenti valori:
- pagamento in contanti alla consegna;
- bonifico bancario;
133
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
ORDINE_PROD_LIST:
◊ Il campo quantita è un campo numerico. È riferito al numero di lotti acquistati per
ogni singolo prodotto.
◊ Il campo prezzo_vendita si ottiene dall’espressione che considera la somma dei
prezzi per le quantità indicate dei prodotti nell’ordine cui va sommato il 7% del
risultato di questa sommatoria per le spese di spedizione
PV:
◊ Il campo p_iva_pv è un codice numerico di 11 cifre.
◊ Il campo orari_apertura è un campo di tipo testuale.
STORICO:
◊ Il campo pagamento_usato può assumere uno tra i seguenti valori:
- pagamento in contanti alla consegna;
- bonifico bancario;
- pagamento tramite paypal.
◊ Il campo flag_stato_ordine è di tipo booleano.
134
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
CLASSI DI PROGETTO
135
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Package
Package amministrazione
owner view
properties qualified name view::amministrazione
visibility public
ownedMember Elimina_fornitore_non_riuscita Elimina_fornitore_riuscita Elimina_pv_non_riuscita
Elimina_pv_riuscita Fornitore_aggiunto Modifica_fornitore
Modifica_fornitore_riuscita Modifica_insegna_pv Modifica_insegna_pv_riuscita
Nuovo_fornitore Visualizza_elenco_fornitori Visualizza_elenco_ordini
Visualizza_elenco_pv Visualizza_elenco_storico Visualizza_fornitore Visualizza_pv
Package logistica
owner view
properties qualified name view::logistica
visibility public
ownedMember Visualizza_elenco_fornitori Visualizza_elenco_listini Visualizza_elenco_ordini
Visualizza_elenco_prodotti Visualizza_fornitore Visualizza_listino Visualizza_ordine
Visualizza_prodotto
Package marketing
owner view
properties qualified name view::marketing
visibility public
ownedMember Elimina_listino_non_riuscita Elimina_listino_riuscita Elimina_prodotto_non_riuscita
Elimina_prodotto_riuscita Elimina_reparto_riuscita_e_non Listino_aggiunto
Modifica_listino Modifica_listino_riuscita Modifica_prodotto
Modifica_prodotto_non_consentita Modifica_prodotto_riuscita Nuovo_listino
Nuovo_prodotto Nuovo_reparto Prodotto_aggiunto Visualizza_elenco_fornitori
Visualizza_elenco_listini Visualizza_elenco_prodotti Visualizza_elenco_reparti
Visualizza_fornitore Visualizza_listino Visualizza_prodotto
Package menu
owner view
properties qualified name view::menu
visibility public
ownedMember Login Menu_amministrazione Menu_logistica Menu_marketing Menu_pv
136
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Package pv
owner view
properties qualified name view::pv
visibility public
ownedMember Carrello Introduzione Modifica_pv Modifica_riuscita_pv Profilo
Visualizza_proprio_listino
Package utente
owner view
properties qualified name view::utente
visibility public
ownedMember amministrazione logistica marketing menu pv utente
Package model
owner Root
properties qualified name model
visibility public
ownedMember Fornitore_model Listino_model Ordine_model Prodotto_model Reparto_model
Storico_model Utente_model
Package view
owner Root
properties qualified name view
visibility public
ownedMember amministrazione logistica marketing menu pv utente
Package controller
owner Root
properties qualified name controller
visibility public
ownedMember Autenticazione Home Home_amministrazione Home_logistica Home_marketing
Home_pv
137
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Classi
138
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Lo stesso discorso vale per le funzioni di filtraggio dei risultati di una query di tipo mostra
elenco (di qualsiasi tipo: elenco pv, fornitori, prodotti, ordini, listini, storico).
Inoltre in tutte le classi controller che permettono di visualizzare le varie home page, è
presente il metodo index(). Tale metodo è tipico nell’ambito dei portali internet e, nel
nostro caso, contiene le chiamate alle classi view, le quali mostreranno effettivamente
all’utente informazioni relative alla home page. L’implementazione del metodo si
differenzia a seconda della classe che lo chiama in quanto invoca una differente classe
view.
Class Home
diagram Hom e
Property1:Introduzione
Property2:Login
Property3:Dove_siamo
Property4:Contatti
Property5:Chi_siamo
Property6:Note_legali
Property7:Recupera_passw ord
Property8:Esito_recupera_passw ord
index()
dove_siamo()
chi_siamo()
note_legali()
contatti()
owner controller
properties qualified name controller::Home
visibility public
leaf false
abstract false
active false
ownedMember chi_siamo contatti dove_siamo index note_legali Property1 Property2 Property3
Property4 Property5 Property6 Property7 Property8
associations to from to Association name
Property1 Introduzione
Property2 Login
Property3 Dove_siamo
Property4 Contatti
Property5 Chi_siamo
Property6 Note_legali
Property7 Recupera_password
Property8 Esito_recupera_password
shown on Class Diagram
diagram
139
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Chi_siamo
diagram Chi_siam o
owner utente
properties qualified name view::utente::Chi_siamo
visibility public
leaf false
abstract false
active false
associations from Association name
from Home (Property5)
Class Contatti
diagram Contatti
owner utente
properties qualified name view::utente::Contatti
visibility public
leaf false
abstract false
active false
associations from Association name
from Home (Property4)
Class Dove_siamo
diagram Dove_siam o
owner utente
properties qualified name view::utente::Dove_siamo
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property13)
Home (Property4)
140
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Introduzione
diagram Introduzione
owner utente
properties qualified name view::utente::Introduzione
visibility public
leaf false
abstract false
active false
associations from Association name
from Home (Property2)
Class Note_legali
diagram Note_legali
owner utente
properties qualified name view::utente::Note_legali
visibility public
leaf false
abstract false
active false
associations from Association name
from Home (Property6)
Class Login
diagram Login
Property1:Autenticazione
owner menu
141
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Recupera_password
owner utente
properties qualified name view::utente::Recupera_password
visibility public
leaf false
abstract false
active false
associations from Association name
from Home (Property7)
Class Esito_recupera_password
owner utente
properties qualified name view::utente::Esito_recupera_password
visibility public
leaf false
abstract false
active false
associations from Association name
from Home (Property8)
142
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Autenticazione
diagram Autenticazione
Property1:Registrati
Property2:Registrazione_riuscita
Property3:Utente_model
Property4:Home_amministrazione
Property5:Home_logistica
Property6:Home_marketing
Property7:Home_pv
autenticazione()
index()
verifica()
logout()
registrati()
registrazione()
consenso_privacy()
esiste_user_name()
esiste_partita_iva()
recupera_passw ord()
invia_nuova_passw ord()
genera_passw ord()
owner controller
properties qualified name controller::Autenticazione
visibility public
leaf false
abstract false
active false
ownedMember autenticazione consenso_privacy esiste_partita_iva esiste_user_name index
invia_nuova_password logout Property1 Property2 Property3 Property4 Property5
Property6 Property7 recupera_password registrati registrazione verifica
associations to from to Association name
Property1 Registrati
Property2 Registrazione_riuscita
Property3 Utente_model
Property4 Home_amministrazione
Property5 Home_logistica
Property6 Home_marketing
Property7 Home_pv
associations from Association name
from Login (Property1)
143
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Registrati
diagram Registrati
owner utente
properties qualified name view::utente::Registrati
visibility public
leaf false
abstract false
active false
associations from Association name
from Autenticazione (Property1)
144
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Registrazione_riuscita
diagram Registrazione_riuscita
owner utente
properties qualified name view::utente::Registrazione_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Autenticazione (Property2)
145
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Home_amministrazione
Property1:Fornitore_aggiunto
Property2:Modifica_fornitore
Property3:Modifica_fornitore_riuscita
Property4:Nuovo_fornitore
Property5:Visualizza_elenco_fornitori
Property6:Visualizza_elenco_ordini
Property7:Visualizza_elenco_pv
Property8:Visualizza_elenco_storico
Property9:Visualizza_fornitore
Property10:Visualizza_pv
Property11:Fornitore_model
Property12:Ordine_model
Property13:Storico_model
Property14:Utente_model
Property15:Menu_amministrazione
Property16:Elimina_fornitore_riuscita
Property17:Elimina_fornitore_non_riuscita
Property18:Elimina_pv_riuscita
Property19:Elimina_pv_non_riuscita
Property20:Modifica_insegna_pv
Property21:Modifica_insegna_pv_riuscita
home_amministrazione()
index()
dove_siamo()
visualizza_elenco_storico()
filtra_elenco_storico()
visualizza_elenco_ordine()
filtra_elenco_ordine()
gestione_pv()
filtra_pv()
visualizza_pv()
elimina_pv()
gestione_fornitori()
nuovo_fornitore()
aggiungi_fornitore()
visualizza_fornitore()
modifica_fornitore()
conferma_modifiche_fornitore()
elimina_fornitore()
esiste_p_iva_f()
filtra_elenco_pv()
filtra_elenco_fornitore()
chi_siamo()
note_legali()
contatti()
modifica_insegna_pv()
conferma_modifica_insegna_pv()
owner controller
properties qualified name controller::Home_amministrazione
visibility public
146
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
leaf false
abstract false
active false
ownedMember aggiungi_fornitore chi_siamo conferma_modifica_insegna_pv
conferma_modifiche_fornitore contatti dove_siamo elimina_fornitore elimina_pv
esiste_p_iva_f filtra_elenco_fornitore filtra_elenco_ordine filtra_elenco_pv
filtra_elenco_storico filtra_pv gestione_fornitori gestione_pv home_amministrazione
index modifica_fornitore modifica_insegna_pv note_legali nuovo_fornitore
Property1 Property10 Property11 Property12 Property13 Property14 Property15
Property16 Property17 Property18 Property19 Property2 Property20 Property21
Property3 Property4 Property5 Property6 Property7 Property8 Property9
visualizza_elenco_ordine visualizza_elenco_storico visualizza_fornitore
visualizza_pv
associations to from to Association name
Property1 Fornitore_aggiunto
Property2 Modifica_fornitore
Property3 Modifica_fornitore_riuscita
Property4 Nuovo_fornitore
Property5 Visualizza_elenco_fornitori
Property6 Visualizza_elenco_ordini
Property7 Visualizza_elenco_pv
Property8 Visualizza_elenco_storico
Property9 Visualizza_fornitore
Property10 Visualizza_pv
Property11 Fornitore_model
Property12 Ordine_model
Property13 Storico_model
Property14 Utente_model
Property15 Menu_amministrazione
Property16 Elimina_fornitore_riuscita
Property17 Elimina_fornitore_non_riuscita
Property18 Elimina_pv_riuscita
Property19 Elimina_pv_non_riuscita
Property20 Modifica_insegna_pv
Property21 Modifica_insegna_pv_riuscita
associations from Association name
from Autenticazione (Property4)
147
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Menu_amministrazione
diagram Menu_am m inistrazione
owner menu
properties qualified name view::menu::Menu_amministrazione
visibility Public
leaf False
abstract False
active False
associations from Association name
from Home_amministrazione (Property15)
Class Fornitore_aggiunto
diagram Fornitore_aggiunto
owner amministrazione
properties qualified name view::amministrazione::Fornitore_aggiunto
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property1)
Class Modifica_fornitore
diagram Modifica_fornitore
owner amministrazione
properties qualified name view::amministrazione::Modifica_fornitore
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property2)
Class Modifica_fornitore_riuscita
diagram Modifica_fornitore_riuscita
owner amministrazione
properties qualified name view::amministrazione::Modifica_fornitore_riuscita
visibility public
leaf false
abstract false
149
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_amministrazione (Property3)
Class Nuovo_fornitore
diagram Nuovo_fornitore
owner amministrazione
properties qualified name view::amministrazione::Nuovo_fornitore
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property4)
Class Visualizza_elenco_fornitore
diagram Visualizza_elenco_fornitori
owner amministrazione
properties qualified name view::amministrazione::Visualizza_elenco_fornitori
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property5)
150
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Visualizza_elenco_ordini
diagram Visualizza_elenco_ordini
owner amministrazione
properties qualified name view::amministrazione::Visualizza_elenco_ordini
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property6)
Class Visualizza_elenco_pv
diagram Visualizza_elenco_pv
owner amministrazione
properties qualified name view::amministrazione::Visualizza_elenco_pv
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property7)
Class Visualizza_elenco_storico
diagram Visualizza_elenco_storico
owner amministrazione
properties qualified name view::amministrazione::Visualizza_elenco_storico
visibility public
leaf false
abstract false
151
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_amministrazione (Property8)
Class Visualizza_fornitore
diagram Visualizza_fornitore
owner amministrazione
properties qualified name view::amministrazione::Visualizza_fornitore
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property9)
Class Visualizza_pv
diagram Visualizza_pv
owner amministrazione
properties qualified name view::amministrazione::Visualizza_pv
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property10)
152
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Elimina_fornitore_non_riuscita
owner amministrazione
properties qualified name view::amministrazione::Elimina_fornitore_non_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property17)
Class Elimina_fornitore_riuscita
owner amministrazione
properties qualified name view::amministrazione::Elimina_fornitore_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property16)
Class Elimina_pv_non_riuscita
owner amministrazione
properties qualified name view::amministrazione::Elimina_pv_non_riuscita
visibility public
leaf false
abstract false
153
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_amministrazione (Property19)
Class Elimina_pv_riuscita
owner amministrazione
properties qualified name view::amministrazione::Elimina_pv_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property18)
Class Modifica_insegna_pv
diagram Modifica_insegna_pv
owner amministrazione
properties qualified name view::amministrazione::Modifica_insegna_pv
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property20)
154
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Modifica_insegna_pv_riuscita
diagram Modifica_insegna_pv_riuscita
owner amministrazione
properties qualified name view::amministrazione::Modifica_insegna_pv_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_amministrazione (Property21)
155
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Home_logistica
Property1:Visualizza_elenco_fornitori
Property2:Visualizza_elenco_listini
Property3:Visualizza_elenco_ordini
Property4:Visualizza_elenco_prodotti
Property5:Visualizza_fornitore
Property6:Visualizza_ordine
Property7:Visualizza_prodotto
Property8:Fornitore_model
Property9:Listino_model
Property10:Ordine_model
Property11:Prodotto_model
Property12:Reparto_model
Property13:Menu_logistica
Property14:Visualizza_listino
index()
dove_siamo()
gestione_ordine()
filtra_elenco_ordine()
visualizza_ordine()
modifica_stato_ordine()
visualizza_elenco_listino()
filtra_elenco_listino()
visualizza_listino()
visualizza_elenco_prodotto()
filtra_elenco_prodotto()
visualizza_prodotto()
visualizza_elenco_fornitore()
filtra_elenco_fornitore()
visualizza_fornitore()
home_logistica()
chi_siamo()
note_legali()
contatti()
owner controller
properties qualified name controller::Home_logistica
visibility public
leaf false
abstract false
active false
ownedMember chi_siamo contatti dove_siamo filtra_elenco_fornitore filtra_elenco_listino
filtra_elenco_ordine filtra_elenco_prodotto gestione_ordine home_logistica index
modifica_stato_ordine note_legali Property1 Property10 Property11 Property12
Property13 Property14 Property2 Property3 Property4 Property5 Property6 Property7
Property8 Property9 visualizza_elenco_fornitore visualizza_elenco_listino
visualizza_elenco_prodotto visualizza_fornitore visualizza_listino visualizza_ordine
visualizza_prodotto
156
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
157
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Menu_logistica
diagram Menu_logistica
owner menu
properties qualified name view::menu::Menu_logistica
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_logistica (Property13)
Class Visualizza_elenco_fornitori
diagram Visualizza_elenco_fornitori
owner logistica
properties qualified name view::logistica::Visualizza_elenco_fornitori
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_logistica (Property1)
Class Visualizza_elenco_listini
diagram Visualizza_elenco_listini
owner logistica
properties qualified name view::logistica::Visualizza_elenco_listini
visibility public
leaf false
abstract false
158
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_logistica (Property2)
Class Visualizza_elenco_ordini
diagram Visualizza_elenco_ordini
owner logistica
properties qualified name view::logistica::Visualizza_elenco_ordini
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_logistica (Property3)
Class Visualizza_elenco_prodotti
diagram Visualizza_elenco_prodotti
owner logistica
properties qualified name view::logistica::Visualizza_elenco_prodotti
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_logistica (Property4)
159
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Visualizza_fornitore
diagram Visualizza_fornitore
owner logistica
properties qualified name view::logistica::Visualizza_fornitore
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_logistica (Property5)
Class Visualizza_ordine
diagram Visualizza_ordine
owner logistica
properties qualified name view::logistica::Visualizza_ordine
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_logistica (Property6)
Class Visualizza_prodotto
diagram Visualizza_prodotto
owner logistica
properties qualified name view::logistica::Visualizza_prodotto
visibility public
leaf false
abstract false
160
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_logistica (Property7)
Class Visualizza_listino
diagram Visualizza_listino
owner logistica
properties qualified name view::logistica::Visualizza_listino
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_logistica (Property14)
161
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Home_marketing
Property1:Listino_aggiunto
Property2:Modifica_prodotto
Property3:Modifica_prodotto_riuscita
Property4:Nuovo_listino
Property5:Nuovo_prodotto
Property6:Prodotto_aggiunto
Property7:Visualizza_elenco_fornitori
Property8:Visualizza_elenco_listini
Property9:Visualizza_elenco_prodotti
Property10:Visualizza_fornitore
Property11:Visualizza_prodotto
Property12:Reparto_model
Property13:Prodotto_model
Property14:Listino_model
Property15:Fornitore_model
Property16:Menu_marketing
Property17:Elimina_listino_riuscita
Property18:Elimina_listino_non_riuscita
Property19:Elimina_prodotto_riuscita
Property20:Elimina_prodotto_non_riuscita
Property21:Modifica_listino
Property22:Modifica_listino_riuscita
Property23:Visualizza_listino
Property24:Nuovo_reparto
Property25:Visualizza_elenco_reparti
Property26:Modifica_prodotto_non_consentita
Property27:Elimina_reparto_riuscita_e_non
index()
dove_siamo()
gestione_prodotti()
filtra_elenco_prodotto()
nuovo_prodotto()
aggiungi_prodotto()
visualizza_prodotto()
modifica_prodotto()
conferma_modifiche_prodotto()
elimina_prodotto()
esiste_cod_prodotto()
gestione_listini()
filtra_elenco_listino()
nuovo_listino()
aggiungi_listino()
visualizza_listino()
modifica_listino()
conferma_modifiche_listino()
elimina_listino()
visualizza_elenco_fornitore()
filtra_elenco_fornitore()
visualizza_fornitore()
home_marketing()
chi_siamo()
note_legali()
contatti()
gestione_reparti()
nuovo_reparto()
aggiungi_reparto()
esiste_nomeReparto()
elimina_reparto()
esiste_nomeInsegna()
owner controller
properties qualified name controller::Home_marketing
visibility public
162
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
leaf false
abstract false
active false
ownedMember aggiungi_listino aggiungi_prodotto aggiungi_reparto chi_siamo
conferma_modifiche_listino conferma_modifiche_prodotto contatti dove_siamo
elimina_listino elimina_prodotto elimina_reparto esiste_cod_prodotto
esiste_nomeInsegna esiste_nomeReparto filtra_elenco_fornitore filtra_elenco_listino
filtra_elenco_prodotto gestione_listini gestione_prodotti gestione_reparti
home_marketing index modifica_listino modifica_prodotto note_legali nuovo_listino
nuovo_prodotto nuovo_reparto Property1 Property10 Property11 Property12
Property13 Property14 Property15 Property16 Property17 Property18 Property19
Property2 Property20 Property21 Property22 Property23 Property24 Property25
Property26 Property27 Property3 Property4 Property5 Property6 Property7 Property8
Property9 visualizza_elenco_fornitore visualizza_fornitore visualizza_listino
visualizza_prodotto
associations to from to Association name
Property1 Listino_aggiunto
Property2 Modifica_prodotto
Property3 Modifica_prodotto_riuscita
Property4 Nuovo_listino
Property5 Nuovo_prodotto
Property6 Prodotto_aggiunto
Property7 Visualizza_elenco_fornitori
Property8 Visualizza_elenco_listini
Property9 Visualizza_elenco_prodotti
Property10 Visualizza_fornitore
Property11 Visualizza_prodotto
Property12 Reparto_model
Property13 Prodotto_model
Property14 Listino_model
Property15 Fornitore_model
Property16 Menu_marketing
Property17 Elimina_listino_riuscita
Property18 Elimina_listino_non_riuscita
Property19 Elimina_prodotto_riuscita
Property20 Elimina_prodotto_non_riuscita
Property21 Modifica_listino
Property22 Modifica_listino_riuscita
Property23 Visualizza_listino
Property24 Nuovo_reparto
Property25 Visualizza_elenco_reparti
Property26 Modifica_prodotto_non_consentita
Property27 Elimina_reparto_riuscita_e_non
associations from Association name
from Autenticazione (Property6)
163
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
164
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Menu_marketing
owner menu
properties qualified name view::menu::Menu_marketing
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property16)
Class Listino_aggiunto
diagram Listino_aggiunto
owner marketing
properties qualified name view::marketing::Listino_aggiunto
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property1)
Class Modifica_prodotto
diagram Modifica_prodotto
owner marketing
properties qualified name view::marketing::Modifica_prodotto
visibility public
leaf false
abstract false
165
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_marketing (Property2)
Class Modifica_prodotto_riuscita
diagram Modifica_prodotto_riuscita
owner marketing
properties qualified name view::marketing::Modifica_prodotto_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property3)
Class Nuovo_listino
diagram Nuovo_listino
owner marketing
properties qualified name view::marketing::Nuovo_listino
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property4)
166
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Nuovo_prodotto
diagram Nuovo_prodotto
owner marketing
properties qualified name view::marketing::Nuovo_prodotto
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property5)
Class Prodotto_aggiunto
diagram Prodotto_aggiunto
owner marketing
properties qualified name view::marketing::Prodotto_aggiunto
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property6)
Class Visualizza_elenco_fornitori
diagram Visualizza_elenco_fornitori
owner marketing
properties qualified name view::marketing::Visualizza_elenco_fornitori
visibility public
leaf false
abstract false
167
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_marketing (Property7)
Class Visualizza_elenco_listini
diagram Visualizza_elenco_listini
owner marketing
properties qualified name view::marketing::Visualizza_elenco_listini
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property8)
Class Visualizza_elenco_prodotti
diagram Visualizza_elenco_prodotti
owner marketing
properties qualified name view::marketing::Visualizza_elenco_prodotti
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property9)
168
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Visualizza_fornitore
diagram Visualizza_fornitore
owner marketing
properties qualified name view::marketing::Visualizza_fornitore
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property10)
Class Visualizza_prodotto
diagram Visualizza_prodotto
owner marketing
properties qualified name view::marketing::Visualizza_prodotto
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property11)
Class Elimina_listino_non_riuscita
owner marketing
properties qualified name view::marketing::Elimina_listino_non_riuscita
visibility public
leaf false
abstract false
169
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_marketing (Property18)
Class Elimina_listino_riuscita
owner marketing
properties qualified name view::marketing::Elimina_listino_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property17)
Class Elimina_prodotto_non_riuscita
owner marketing
properties qualified name view::marketing::Elimina_prodotto_non_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property20)
170
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Elimina_prodotto_riuscita
owner marketing
properties qualified name view::marketing::Elimina_prodotto_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property19)
Class Modifica_listino
diagram Modifica_listino
owner marketing
properties qualified name view::marketing::Modifica_listino
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property21)
Class Modifica_listino_riuscita
diagram Modifica_listino_riuscita
owner marketing
properties qualified name view::marketing::Modifica_listino_riuscita
visibility public
leaf false
abstract false
171
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_marketing (Property22)
Class Visualizza_listino
diagram Visualizza_listino
owner marketing
properties qualified name view::marketing::Visualizza_listino
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property23)
Class Nuovo_reparto
diagram Nuovo_reparto
owner marketing
properties qualified name view::marketing::Nuovo_reparto
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property24)
172
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Visualizza_elenco-reparti
diagram Visualizza_elenco_reparti
owner marketing
properties qualified name view::marketing::Visualizza_elenco_reparti
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property25)
Class Modifica_prodotto_non_consentita
diagram Modifica_prodotto_non_consentita
owner marketing
properties qualified name view::marketing::Modifica_prodotto_non_consentita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property26)
173
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Elimina_reparto_riuscita_e_non
owner marketing
properties qualified name view::marketing::Elimina_reparto_riuscita_e_non
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_marketing (Property27)
174
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Home_pv
Property1:Carrello
Property2:Introduzione
Property3:Modifica_pv
Property4:Modifica_pv_riuscita
Property5:Profilo
Property6:Visualizza_proprio_listino
Property7:Utente_model
Property8:Reparto_model
Property9:Prodotto_model
Property10:Ordine_model
Property11:Listino_model
Property12:Fornitore_model
Property13:Dove_siamo
Property14:Contatti
Property15:Menu_pv
Property16:Storico_model
Property17:Disponibilita_non_sufficiente
Property18:Nuovo_ordine
Property19:Ordine_aggiunto
Property20:Visualizza_elenco_ordini
Property21:Visualizza_elenco_storico
Property22:Visualizza_ordine
Property23:Visualizza_prodotto
Property24:Vota_ordine
Property25:Voto_ordine_inserito
Property26:Vota_ordine_storico
Property27:Voto_storico_inserito
home_pv()
index()
dove_siamo()
visualizza_listino()
aggiungi_al_carrello()
visualizza_carrello()
modifica_carrello()
effettua_ordine()
profilo()
modifica_pv()
conferma_modifiche_pv()
esiste_username()
passw ord_corretta()
esiste_partita_iva()
aggiungi_ordine()
visualizza_ordini_attivi()
filtra_elenco_ordine()
visualizza_ordine()
vota_ordine()
conferma_voto()
visualizza_storico()
filtra_visualizza_storico()
vota_ordine_in_storico()
conferma_voto_storico()
chi_siamo()
note_legali()
contatti()
filtra_elenco_prodotto()
visualizza_prodotto()
owner controller
properties qualified name controller::Home_pv
visibility public
175
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
leaf false
abstract false
active false
ownedMember aggiungi_al_carrello aggiungi_ordine chi_siamo conferma_modifiche_pv
conferma_voto conferma_voto_storico contatti dove_siamo effettua_ordine
esiste_partita_iva esiste_username filtra_elenco_ordine filtra_elenco_prodotto
filtra_visualizza_storico home_pv index modifica_carrello modifica_pv note_legali
password_corretta profilo Property1 Property10 Property11 Property12 Property13
Property14 Property15 Property16 Property17 Property18 Property19 Property2
Property20 Property21 Property22 Property23 Property24 Property25 Property26
Property27 Property3 Property4 Property5 Property6 Property7 Property8 Property9
visualizza_carrello visualizza_listino visualizza_ordine visualizza_ordini_attivi
visualizza_prodotto visualizza_storico vota_ordine vota_ordine_in_storico
associations to from to Association name
Property1 Carrello
Property2 Introduzione
Property3 Modifica_pv
Property4 Modifica_pv_riuscita
Property5 Profilo
Property6 Visualizza_proprio_listino
Property7 Utente_model
Property8 Reparto_model
Property9 Prodotto_model
Property10 Ordine_model
Property11 Listino_model
Property12 Fornitore_model
Property15 Menu_pv
Property16 Storico_model
Property17 Disponibilita_non_sufficiente
Property18 Nuovo_ordine
Property19 Ordine_aggiunto
Property20 Visualizza_elenco_ordini
Property21 Visualizza_elenco_storico
Property22 Visualizza_ordine
Property23 Visualizza_prodotto
Property24 Vota_ordine
Property25 Voto_ordine_inserito
Property26 Vota_ordine_storico
Property27 Voto_storico_inserito
associations from Association name
from Autenticazione (Property7)
Class Menu_pv
diagram Menu_pv
owner menu
properties qualified name view::menu::Menu_pv
visibility public
leaf false
abstract false
active false
177
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Carrello
diagram Carrello
owner pv
properties qualified name view::pv::Carrello
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property1)
Class Introduzione
diagram Introduzione
owner pv
properties qualified name view::pv::Introduzione
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property2)
178
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Modifica_pv
diagram Modifica_pv
owner pv
properties qualified name view::pv::Modifica_pv
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property3)
Class Modifica_pv_riuscita
diagram Modifica_pv_riuscita
owner pv
properties qualified name view::pv::Modifica_pv_riuscita
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property4)
Class Profilo
diagram Profilo
owner pv
properties qualified name view::pv::Profilo
visibility public
leaf false
abstract false
179
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_pv (Property5)
Class Visualizza_proprio_listino
diagram Visualizza_proprio_listino
owner pv
properties qualified name view::pv::Visualizza_proprio_listino
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property6)
Class Disponibilita_non_sufficiente
diagram Disponibilita_non_sufficiente
owner pv
properties qualified name view::pv::Disponibilita_non_sufficiente
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property17)
180
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Nuovo_ordine
diagram Nuovo_ordine
owner pv
properties qualified name view::pv::Nuovo_ordine
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property18)
Class ProtectionProxyOrdina
diagram ProtectionProxyOrdina
Property1:RealeOrdina
procedi()
owner controller
properties qualified name controller::ProtectionProxyOrdina
visibility Public
leaf False
abstract False
active False
ownedMember procedi Property1
associations to from to Association name
Property1 RealeOrdina
associations from Association name
from Nuovo_ordine (Property1)
181
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class RealeOrdina
diagram RealeOrdina
procedi()
owner controller
properties qualified name controller::RealeOrdina
visibility public
leaf false
abstract false
active false
ownedMember procedi
associations from Association name
from ProtectionProxyOrdina (Property1)
Per la specifica delle classi che implementano il proxy si riveda la definizione di tale
pattern nella parte introduttiva del documento di progettazione.
Class Ordine_aggiunto
diagram Ordine_aggiunto
owner pv
properties qualified name view::pv::Ordine_aggiunto
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property19)
182
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Visualizza_elenco_ordini
diagram Visualizza_elenco_ordini
owner pv
properties qualified name view::pv::Visualizza_elenco_ordini
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property20)
Class Visualizza_elenco_storico
diagram Visualizza_elenco_storico
owner pv
properties qualified name view::pv::Visualizza_elenco_storico
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property21)
Class Visualizza_ordine
diagram Visualizza_ordine
owner pv
properties qualified name view::pv::Visualizza_ordine
visibility public
leaf false
abstract false
183
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_pv (Property22)
Class Visualizza_prodotto
diagram Visualizza_prodotto
owner pv
properties qualified name view::pv::Visualizza_prodotto
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property23)
Class Vota_ordine
diagram Vota_ordine
owner pv
properties qualified name view::pv::Vota_ordine
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property24)
184
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Voto_ordine_inserito
diagram Voto_ordine_inserito
owner pv
properties qualified name view::pv::Voto_ordine_inserito
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property25)
Class Vota_ordine_storico
diagram Vota_ordine_storico
owner pv
properties qualified name view::pv::Vota_ordine_storico
visibility public
leaf false
abstract false
active false
associations from Association name
from Home_pv (Property26)
Class Voto_storico_inserito
diagram Voto_storico_inserito
owner pv
properties qualified name view::pv::Voto_storico_inserito
visibility public
leaf false
abstract false
185
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
active false
associations from Association name
from Home_pv (Property27)
Class Fornitore_model
p_iva_f
nome
indirizzo
tel
email
fonitore_model()
required()
aggiungi_fonitore()
preleva_elenco_fornitore()
preleva_fornitore()
modifica_fornitore()
elimina_fornitore()
trova_p_iva_f()
owner model
properties qualified name model::Fornitore_model
visibility public
leaf false
abstract false
active false
ownedMember aggiungi_fonitore elimina_fornitore email fonitore_model indirizzo
modifica_fornitore nome p_iva_f preleva_elenco_fornitore preleva_fornitore required
tel trova_p_iva_f
associations from Association name
from Home_pv (Property12)
Home_marketing (Property15)
Home_logistica (Property8)
Home_amministrazione (Property11)
typedElements Class Home_amministrazione Property Property11
Class Home_logistica Property Property8
Class Home_marketing Property Property15
Class Home_pv Property Property12
shown on Class Diagram
diagram
186
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Listino_model
nomeInsegna
sconto_listino
cod_prodotto
listino_model()
required()
aggiungi_listino()
aggiungi_prodotto_listino()
elimina_prodotto_listino()
preleva_elenco_listino()
elimina_listino()
preleva_listino()
preleva_prodotto_listino()
modifica_listino()
trova_listino()
modifica_prodotto_listino()
preleva_prodotto_listino_filtrato()
modifica_insegna_ordine_prod_listino()
owner model
properties qualified name model::Listino_model
visibility public
leaf false
abstract false
active false
ownedMember aggiungi_listino aggiungi_prodotto_listino cod_prodotto elimina_listino
elimina_prodotto_listino listino_model modifica_insegna_ordine_prod_listino
modifica_listino modifica_prodotto_listino nomeInsegna preleva_elenco_listino
preleva_listino preleva_prodotto_listino preleva_prodotto_listino_filtrato required
sconto_listino trova_listino
associations from Association name
from Home_pv (Property11)
187
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Home_marketing (Property14)
Home_logistica (Property9)
typedElements Class Home_logistica Property Property9
Class Home_marketing Property Property14
Class Home_pv Property Property11
shown on Class Diagram
diagram
188
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Ordine_model
codice_ordine
data_ordine
data_consegna
metodo_pagamento
stato_ordine
voto
p_iva_pv
codiceProdotto
nomeInsegna
quantita
prezzoVendita
ordine_model()
preleva_elenco_ordine()
preleva_ordine()
preleva_prodotti_ordinati()
modifica_stato_ordine()
elimina_ordine()
prezzo_ordine()
required()
aggiungi_ordine()
aggiungi_ordine_prodotto_listino()
modifica_voto_ordine()
numero_fattura_precedente()
modifica_piva_in_ordine()
numero_ordini_attivi_pv()
numero_ordini_con_prodotto()
owner model
properties qualified name model::Ordine_model
visibility public
leaf false
abstract false
active false
ownedMember aggiungi_ordine aggiungi_ordine_prodotto_listino codice_ordine codiceProdotto
data_consegna data_ordine elimina_ordine metodo_pagamento
modifica_piva_in_ordine modifica_stato_ordine modifica_voto_ordine nomeInsegna
numero_fattura_precedente numero_ordini_attivi_pv numero_ordini_con_prodotto
ordine_model p_iva_pv preleva_elenco_ordine preleva_ordine
preleva_prodotti_ordinati prezzo_ordine prezzoVendita quantita required
stato_ordine voto
associations from Association name
from Home_pv (Property10)
Home_logistica (Property10)
Home_amministrazione (Property12)
typedElements Class Home_amministrazione Property Property12
Class Home_logistica Property Property10
Class Home_pv Property Property10
189
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
190
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Prodotto_model
cod_prodotto
nome
descrizione
provenienza
prezzo_unitario
disponibilita_residua
data_scadenza
p_iva_f
nomeReparto
prodotto_model()
required()
aggiungi_prodotto()
preleva_prodotto()
modifica_prodotto()
elimina_prodotto()
trova_cod_prodotto()
preleva_elenco_prodotto()
modifica_pivaf_in_prodotto()
numero_prodotti_fornitore()
controllo_disponibilita()
numero_prodotti_con_reparto()
owner model
properties qualified name model::Prodotto_model
visibility public
leaf false
abstract false
active false
ownedMember aggiungi_prodotto cod_prodotto controllo_disponibilita data_scadenza descrizione
disponibilita_residua elimina_prodotto modifica_pivaf_in_prodotto
modifica_prodotto nome nomeReparto numero_prodotti_con_reparto
numero_prodotti_fornitore p_iva_f preleva_elenco_prodotto preleva_prodotto
prezzo_unitario prodotto_model provenienza required trova_cod_prodotto
associations from Association name
from Home_pv (Property9)
Home_marketing (Property13)
Home_logistica (Property11)
typedElements Class Home_logistica Property Property11
Class Home_marketing Property Property13
Class Home_pv Property Property9
shown on Class Diagram
diagram
191
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Reparto_model
nome_reparto
reparto_model()
required()
aggiungi_reparto()
preleva_elenco_reparto()
trova_reparto()
elimina_reparto()
owner model
properties qualified name model::Reparto_model
visibility public
leaf false
abstract false
active false
ownedMember aggiungi_reparto elimina_reparto nome_reparto preleva_elenco_reparto
reparto_model required trova_reparto
associations from Association name
from Home_pv (Property8)
Home_marketing (Property12)
Home_logistica (Property12)
typedElements Class Home_logistica Property Property12
Class Home_marketing Property Property12
Class Home_pv Property Property8
shown on Class Diagram
diagram
192
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Storico_model
id_storico
p_iva_pv
data_ordine
data_consegna
importo_fattura
pagamento_usato
flag_stato_ordine
voto
storico_model()
aggiungi_tupla_storico()
preleva_elenco_storico()
preleva_ordine_storico()
modifica_piva_in_storico()
modifica_voto_ordine_storico()
owner model
properties qualified name model::Storico_model
visibility public
leaf false
abstract false
active false
ownedMember aggiungi_tupla_storico data_consegna data_ordine flag_stato_ordine id_storico
importo_fattura modifica_piva_in_storico modifica_voto_ordine_storico p_iva_pv
pagamento_usato preleva_elenco_storico preleva_ordine_storico storico_model
voto
associations from Association name
from Home_pv (Property16)
Home_amministrazione (Property13)
typedElements Class Home_amministrazione Property Property13
Class Home_pv Property Property16
shown on Class Diagram
diagram
193
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
194
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Class Utente_model
username
pass
tipo
p_iva_pv
nome
indirizzo
tel
e_mail
orari_a
nome_i
utente_model()
required()
aggiungi_utente()
preleva_elenco_pv()
preleva_pv()
preleva_indirizzo_pv()
preleva_utente()
modifica_utente()
elimina_pv()
login()
trova_utente()
trova_partita_iva()
preleva_nome_insegna()
preleva_utente_da_user()
preleva_p_iva()
modifica_passw ord()
assegna_insegna_pv()
modifica_insegna_pv()
numero_pv_con_insegna()
owner model
properties qualified name model::Utente_model
visibility public
leaf false
abstract false
active false
ownedMember aggiungi_utente assegna_insegna_pv e_mail elimina_pv indirizzo login
modifica_insegna_pv modifica_password modifica_utente nome nome_i
numero_pv_con_insegna orari_a p_iva_pv pass preleva_elenco_pv
preleva_indirizzo_pv preleva_nome_insegna preleva_p_iva preleva_pv
preleva_utente preleva_utente_da_user required tel tipo trova_partita_iva
trova_utente username utente_model
associations from Association name
from Autenticazione (Property3)
Home_pv (Property7)
Home_amministrazione (Property14)
typedElements Class Autenticazione Property Property3
195
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
196
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
I diagrammi di macchina a stati consentono di enumerare gli stati in cui si può trovare un
sistema, un componente oppure una classe, indicando le transizioni tra uno stato ed un
altro.
Questa tipologia di diagramma non è altro che una riproposizione, attraverso una
notazione grafica unificata e standardizzata, di un qualcosa che si è usato fin dagli albori
dell’informatica: solo che non si usano gli ovali, che potrebbero confondersi con il
diagramma dei casi d’uso, ma rettangoli smussati uniti da frecce, con la punta aperta, che
rappresentano le transizioni, etichettate in maniera appropriata.
Nel diagramma è possibile identificare uno stato iniziale ed uno finale. Il primo costituisce il
punto di inizio della situazione descritta dal diagramma: non si tratta di un vero e proprio
stato ma piuttosto di uno pseudo stato ed eventualmente una condizione che lo innesca. Il
secondo, identifica la fine del ciclo di vita de sistema in oggetto: oltre questo stato ogni
elaborazione, a livello di sistema software osservato, termina e non è più possibile
eseguire una transizione in uno degli stati del diagramma.
Il passaggio da uno stato all’altro è definito da transizioni generate da un evento, detto
trigger, che scatena il cambiamento di stato. In genere la transazione è rappresentata
anche da una guardia che specifica la condizione che deve verificarsi affinchè, a seguito
del trigger, si scelga di andare in uno stato piuttosto che in un altro.
Nel caso specifico abbiamo scelto di rappresentare il diagramma di stato relativo al ciclo di
vita dell’ordine che parte dalla sua creazione (effettuata dal punto vendita che crea il
carrello ed effettua l’ordine), fino al momento in cui può essere visualizzato dalla logistica
con tutte le operazioni che ne possono seguire (modifica, filtraggio, annullamento, accesso
allo storico degli ordini).
197
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
CREAZIONE ORDINE
198
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
AGGIUNGI PRODOTTO
199
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
GESTIONE ORDINI
200
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
DIAGRAMMI DI SEQUENZA
Abbiamo già visto come illustrare le classi che compongono il nostro sistema software, in
particolare con il corrispondente diagramma, nonché come esprimere relazioni e vincoli tra
loro. Un punto di vista statico è però un modo limitato per studiare un sistema software, in
quanto non può mettere in evidenza il suo comportamento in un ambiente dinamico, che è
la normale modalità di funzionamento del software. UML mette a disposizione vari
diagrammi di interazione, il cui scopo è quello di evidenziare le modalità di dialogo tra i veri
componenti del software stesso: noi utilizzeremo i diagrammi di sequenza, che mostrano il
comportamento del sistema in uno specifico scenario operativo.
Gli elementi compositivi di tale diagramma sono principalmente i partecipanti, che
evidenziano gli elementi software (classi oppure oggetti) che intervengono in un dato
processo: vengono rappresentati come riquadri nella parte alta del diagramma da cui
discende una linea verticale tratteggiata che rappresenta la progressione temporale delle
operazioni; da questa linea, una serie di frecce collega i singoli partecipanti in modo
opportuno ed in specifici momenti del ciclo di vita del software, rappresentando messaggi
che i singoli partecipanti si scambiano tra loro. La successione di questi messaggi, che
possono essere messaggi da visualizzare, messaggi di pura comunicazione, oppure
invocazioni di metodi rappresenta una descrizione esaustiva di quelli che sono i passi da
seguire per portare a termine una determinata operazione, o meglio un determinato
scenario di funzionamento (in genere un diagramma di sequenza corrisponde allo
scenario di base del corrispondente caso d’uso e può inglobare anche lo scenario
alternativo).
201
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
USER
202
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
203
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Recuperare password
204
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Login
205
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
PUNTO VENDITA
206
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
207
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Gestire carrello
208
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Aggiungi al carrello
Effettuare ordine
209
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Confermare ordine
210
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Visualizzare profilo
211
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Modificare profilo
212
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
213
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
214
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
215
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
216
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
217
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
AMMINISTRAZIONE
Gestire fornitori
218
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Filtrare fornitori
219
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Visualizzare fornitore
Modificare fornitore
220
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Rimuovere fornitore
Aggiungere fornitore
221
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
222
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
223
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Modificare insegna
224
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Filtrare storico
225
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
226
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
MARKETING
Gestire listini
227
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Filtrare listini
228
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Visualizzare listino
229
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Aggiungere listino
230
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Modificare listino
231
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Rimuovere listino
232
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Gestire prodotti
233
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Filtrare prodotti
234
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Visualizzare prodotto
Modificare prodotto
235
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Rimuovere prodotto
Aggiungere prodotto
236
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
237
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
238
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
LOGISTICA
Visualizzare ordini
239
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Filtrare ordini
240
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Visualizzare ordine
241
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
242
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
243
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
244
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
245
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
246
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
247
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
248
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
STRUTTURA INTERFACCIA
Nella figura qui riportata abbiamo pensato di riprodurre quella che sarà l’interfaccia, per
linee generali, che l’utente si troverà di fronte quando accederà al nostro portale web.
Nell’intestazione del sito scriveremo il nome della nostra azienda di grande distribuzione
sul web, con l’indicazione di uno slogan che la rappresenti.
Sulla sinistra troveranno posto un menù utente ed un’area di autenticazione. La prima
varia a seconda del tipo di utente che si collega, attraverso l’autenticazione, al nostro
portale, offrendo a ciascuno le funzionalità specifiche cui il particolare utente potrà
accedere e di cui potrà usufruire. La seconda, invece, consentirà al generico utente di
effettuare la registrazione, di recuperare la password qualora dimenticata, oppure di
effettuare la procedura di login a seconda delle proprie necessità. In particolare avremo
che, una volta loggato, l’utente visualizzerà, al posto del form di autenticazione, un
messaggio di benvenuto recante il proprio nome e la possibilità di effettuare logout.
249
Bavaro - Conversano - Gaeta - Gallitelli – Saponieri Fase di progettazione
Il footer (letteralmente “piè di pagina”) si usa per indicare la parte finale della pagina web
(ad esempio prodotta con un word processor). Di seguito un breve elenco di alcuni
elementi che generalmente si inseriscono in un footer:
• informazioni sull’autore/sviluppatore del sito;
• informazioni di contatto (email, telefono, …);
• informazioni sull’azienda (nome, p.iva, …);
• copyright/licenze di utilizzo;
• strumento utilizzato per la generazione della pagina (editor, cms, …);
• link alla pagina dei contatti, policy, mappa del sito, disclaimer o termini e condizioni:
• riferimenti alle validazioni della pagina (html, css, …);
Infine ecco che troveremo il contenuto principale che varierà a seconda della funzione
con la quale l’utente decide di interagire con il nostro sistema.
Un’ulteriore aspetto da rappresentare sarà il carrello: quando un punto vendita si
autentica ed accede alla visualizzazione del proprio listino, verrà fornita una ulteriore area,
oltre alle suddette, che conterrà informazioni sintetiche riguardo il carrello.
250
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
TEST DI SISTEMA
Le attività di verifica e di convalida vengono svolte alla fine di ogni stadio del processo di
sviluppo del software per individuare:
• malfunzionamenti;
• difetti;
• errori.
La verifica è una attività di controllo atta ad attestare che il prodotto sia conforme alle sue
specifiche (requisiti funzionali e non funzionali). Serve per capire se il prodotto è stato
“costruito” nel modo giusto (o si sta costruendo, nel caso di verifica alla fine di un
particolare stadio).
La validazione è il processo di valutazione dell’intero sistema o di un suo componente per
determinare se esso soddisfa le esigenze del cliente: serve per capire se si sta
“costruendo” il prodotto nel modo giusto.
Una descrizione degli elementi da verificare, la tempistica della verifica, i requisiti
hardware e software necessari alla verifica stessa vengono raccolti nel piano delle
verifiche (test plan).
Tutta la fase di test può essere considerata come l’insieme delle misure di controllo utili a
verificare e garantire la qualità del software.
In particolare possiamo affermare che la qualità del software altro non è se non l’insieme
delle caratteristiche che incidono sulla capacità del prodotto di soddisfare i requisiti espliciti
od impliciti (ISO/IEC 9126).
A determinare la qualità complessiva di un software concorrono tre diverse tipologie di
qualità (ISO/IEC 9126):
• interna (intrinseca). Esprime la misura in cui il codice software possiede una serie
di attributi, indipendentemente dall’ambiente di utilizzo e dall’utente;
• esterna. Esprime le prestazioni e le funzionalità del software;
• percepita (in uso). Esprime l’efficacia e l’efficienza con cui il software serve le
esigenze dell’utente, ed è correlata all’usabilità del prodotto.
499
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
La verifica può essere sia statica che dinamica, invece la validazione è necessariamente
solo dinamica.
La verifica statica riguarda l’analisi di una rappresentazione statica del sistema per
individuare difetti.
Tecniche di ispezione:
◊ Attori
1) Sono stati omessi degli attori necessari? Vale a dire, il sistema ha bisogno di
interagire con qualche altro utente, sistema, o dispositivo hardware descritto nei
requisiti?
Nel sistema sono presenti tutti e soli gli attori specificati nella commessa. Il sistema è stato
progettato per interagire direttamente solo con attori umani e quindi non ci sono problemi
relativi ad altri sistemi o dispositivi hardware che vi si interfacciano.
501
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
Come prima, non ci sono utenti o classi di utenti, sottosistemi, dispositivi hardware che
non partecipano al sistema.
3) Ci sono dei casi d’uso che non sono compatibili con la descrizione dell’attore?
No, i casi d’uso sono stati progettati appositamente in base alle operazioni che erano
richieste agli attori nella commessa.
4) Ci sono dei casi d’uso per i quali non è specificato nessun attore?
Come conseguenza dalla 3) tutti i casi d’uso sono utilizzati da almeno un attore.
Il documento di analisi contiene specificatamente per ogni caso d’uso le condizioni che ne
determinano l’avvio.
Tutte le possibilità richieste ai vari utenti nella commessa sono state racchiuse in un caso
d’uso.
No.
E’ stata prestata particolare attenzione alla interazione tra attore e casi d’uso. Nel
documento di progetto il tutto è stato specificato attraverso i diagrammi degli stati.
◊ Classi di oggetti
Sono state progettate ed implementate tutte le classi rilevanti, con in aggiunta altre per
garantire il soddisfacimento dei requisiti non funzionali. Inoltre sono state aggiunte delle
classi per garantire un buon livello di sicurezza (design pattern proxy).
Il progetto in generale è stato reso più leggibile andando a raggruppare le classi dal punto
di vista logico in delle componenti. Ciò assicura anche una facile manutenibilità.
Si. Tutto ciò viene assicurato anche dall’uso del design pattern Singleton.
◊ Gerarchie di classificazione
Si veda la 8) della check list dei casi d’uso e la 1) della check list degli oggetti.
503
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
◊ Omissione
1) Le funzioni descritte sono sufficienti per soddisfare gli obiettivi del sistema?
Si. Inoltre sono state aggiunte altre funzionalità per garantire il soddisfacimento dei
requisiti non funzionali.
Sono stati considerati tutti i più comuni eventi non desiderati che possono scaturire da
errori dovuti ad inadempienza dell’utente: ad esempio gli errori nella compilazione di un
form. Sono stati approntati dei messaggi che consentano di guidare l’utente nella
correzione degli errori sia dal lato del fornitore del servizio che da quello del cliente.
◊ Informazione ambigua
504
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
◊ Inconsistenza
Non c’è conflitto tra i requisiti. Grazie all’implementazione delle transazioni, inoltre, non
possono esserci nemmeno conflitti dovuti all’inconsistenza dei dati.
◊ Fatto incorretto
No, i requisiti sono stati considerati appositamente per soddisfare gli obiettivi della
commessa.
È stata prevista una vasta gamma di errori dovuti sia all’utente che al sistema stesso. Per
garantirne l’immunità sono state progettate delle classi e/o delle operazioni che
permettano di evitare problemi di questo tipo oppure di correggerli.
505
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
No, il sistema è stato progettato fin dall’inizio tenendo presente il pattern architetturale da
usare (MVC) il framework (CodeIgniter) e quindi anche il linguaggio di programmazione.
Il sistema è un blocco unico. Vanno in esecuzione solo alcune sue parti a seconda del tipo
di utente che si è autenticato.
L’interazione è gestita da una serie di classi view che mostrano all’utente le operazioni che
può effettuare: è garantita la facilità di utilizzo anche per utenti poco esperti da punto di
vista informatico.
Si, tutte le tabelle sono espresse in terza forma normale per garantire quelli che sono i
requisiti di consistenza dell’informazione contenuta in esse e ottimizzare la ricerca che
avviene in tabelle non ridondanti di informazioni.
Si, il numero dei campi per ogni singola tabella è conforme con quanto stabilito in sede di
analisi e progettazione.
506
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
11) Contiene le classi utili per la restituzione all’esterno dei dati gestiti dal sistema?
Le classi view permettono di mostrare all’utente gli output richiesti. Con una semplice
estensione del sistema è facile portare questi dati su dispositivi esterni al sistema quali, ad
esempio, gli smart phone di ultima generazione attraverso delle e-mail.
Si. Il tutto è gestito dalle classi view nel rispetto del pattern architetturale MVC.
13) Tutti gli oggetti riconosciuti dal dominio applicativo sono adeguatamente
descritti in classi specifiche?
Il modello del dominio utilizzato è molto ampio e garantisce una buona aderenza al
mercato reale. Le classi e gli oggetti utilizzati sono esaustivi al fine di implementare
correttamente questo modello.
14) Contiene le classi che implementano i servizi generali utilizzati dalle altre classi
del sistema?
Abbiamo preferito non raggruppare le funzioni di utilità in un’unica classe. Tali funzioni
sono state ridondate ed incapsulate a seconda dell’utente che le chiami. In questo modo è
facile estendere il sistema aggiungendo o modificando le possibilità date all’utente sia nel
senso dell’implementazione sia dal punto di vista logico.
508
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
Content
Chiarezza visiva Front-end
Management
Content
Controllo Front-end
Management
Content
Correzione e Prevenzione degli errori Front-end
Management
509
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
Il linguaggio di programmazione scelto (php) non necessita la specifica del tipo di dato di
una variabile: il compilatore (che poi è il browser), infatti, riconosce autonomamente il tipo
di dato con cui sta lavorando.
I nomi delle variabili sono ben distinti tra loro in maniera tale da evitare che si possano
verificare errori dovuti alla confusione tra i nomi delle variabili processate.
◊ Errori di calcolo
Anche se il linguaggio scelto non necessita la specifica del tipo di dato di una variabile, è
stata posta particolare attenzione a tutte quelle operazioni che coinvolgano più variabili di
tipo differente: in questo modo sono stati evitati tutti quegli errori tipici dovuti ad operazioni
tra variabili di tipo diverso.
Gli unici calcoli che si effettuano sono delle somme di prezzi di prodotti. Tutti questi prezzi
sono modellati con la stessa precisione.
510
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
6) È possibile una condizione di overflow (ad esempio nei calcoli intermedi, o nelle
conversioni)?
Non è stata rilevata nessuna anomalia di questo genere, anche perché i calcoli veri e
propri sono pochi e limitati a somme aritmetiche tra numeri che, al momento del loro
inserimento, sono rigidamente controllati.
Come dalla 6) tutti i valori sono rigidamente controllati nel momento nell’inserimento nel
data base. Quindi si conosce un ordine di grandezza indicativo dei risultati delle somme.
◊ Errori di confronto
No, tutti i confronti avvengono tra variabili dello stesso tipo. A ciò si è posta particolare
attenzione in fase di implementazione dato che il linguaggio di programmazione scelto non
prevede la specifica del tipo di dato di una variabile.
◊ Errori di controllo
9) I cicli terminano?
Tutti i cicli vengono a termine con un output positivo o negativo. I possibili scenari sono
stati modellati in fase di analisi, quindi è noto il motivo per cui un ciclo si arresta prima del
normale.
511
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
11) È possibile che, a causa delle condizioni di ingresso, un ciclo non venga mai
eseguito?
Ciò è possibile. Tutte le situazioni possibili sono state ampiamente analizzate nelle fasi di
analisi e progettazione. Per assurdo se nessun punto vendita richiede mai una ricerca di
un prodotto, il ciclo che effettua tale ricerca sul data base non verrà mai eseguito.
Si. Eventuali scenari alternativi per un dato ciclo sono stati analizzati nelle precedenti fasi
del progetto.
13) Esistono delle decisioni non esaustive (ad es., in un’istruzione switch)?
No, tutto il progetto è stato condotto per evitare situazioni poco chiare o ambigue.
◊ Errori di interfaccia
14) Il numero e l’ordine dei parametri attuali corrisponde a quello dei parametri
formali?
Si. Inoltre i parametri vengono passati tramite post http quindi un errore su tali parametri
non consentirebbe una corretta esecuzione del codice e visualizzazione della pagina html.
15) Le assunzioni sulla conversione di tipo fra parametri attuali e formali sono
corrette?
Come detto in precedenza con il php non si lavora specificando il tipo di dato
manualmente. Ciò potrebbe essere fonte di errore. E’ stata posta particolare attenzione a
tutte le chiamate per garantire la consistenza tra parametri attuali e formali.
Il passaggio dei dati avviene tramite post http. Il passaggio è stato ampiamente testato già
in fase di implementazione e poi in fase di test.
512
Bavaro - Conversano - Gaeta - Gallitelli - Saponieri Fase di Test
◊ Errori di I/O
Ciò non è possibile dato che i dati vengono rigidamente controllati in fase di inserimento
del data base.
◊ Altro
Come detto più volte in precedenza, in php, le variabili non vengono dichiarate.
Il controllo è molto rigido ed è svolto dai metodi delle classi che effettuano le insert nel
data base.
513