1 Ingegneria del Software, A.A. 2010 – 2011 Università degli Studi dell’Aquila – D.I.S.I.M. Docente : Chia.mo Prof. Serafino Cicerone Alessio D’Alessio, Filippo Mortari, Davide Russo 2 Video rental mngmt system - funzionalità • sistema software di gestione di una azienda di noleggio film • • • • • servizi di noleggio e reso prenotazione e servizi aggiuntivi di assistenza offrire al cliente un sistema di noleggio totalmente automatizzato Gestione back-end (magazzino, statistiche, CRM..) Flessibilità • • • Nell’implementazione di politiche di prezzi, sconti, prenotazioni l’introduzione futura di servizi web di noleggio e prenotazione servizi di “video on demand” per concorrere con il mercato del webstreaming 3 VRMS – funzionalità in dettaglio • • • • • • • • • Gestire il catalogo dei film; gestire la registrazione dei clienti; gestire le tessere servizi; gestire il noleggio ed il reso di film; gestire la prenotazione di film in maniera flessibile; gestire politiche di sconto e promozione in maniera flessibile; gestire i resi di prodotti difettosi; gestire il magazzino della filiale; gestire la comunicazione con i clienti mediante sms ed essere flessibile ad eventuali nuovi canali di comunicazione; • gestire il reporting dell’attività della filiale; 4 FastVid – la struttura aziendale La macrostruttura: 5 FastVid – la struttura aziendale L’organigramma aziendale della singola divisione: 6 FastVid – prospettiva dell’utente Si mostrano i possibili punti di accesso fisici all’applicativo 7 FastVid – Business rules salienti Il costo dei noleggi: • il tipo di supporto/formato desiderato • • Supporto videocassetta: 0.5€ al giorno Supporto disco: • • • • Formato Cd / DVD : 1€ al giorno Formato BluRay: 1.5€ al giorno la durata del noleggio, moltiplicando il prezzo per i giorni di noleggio; film novità: +10% sul prezzo originale. 8 FastVid – Business rules salienti Le politiche di sconto: • 10% ai clienti che hanno già noleggiato almeno un film entro le 24h precedenti; • ogni 20 noleggi effettuati si ha diritto a 1 noleggio gratuito; • 5% di sconto per noleggi Lun-Ven dalle h20.00 alle h8.00 del giorno successivo; • 5% di sconto per clienti con età < 21 anni; 9 Strumenti per lo sviluppo sw • IDE: Eclipse Juno Service Release 1 • RMI Plug-in for Eclipse version 2.0 (applicazione distribuita) • Window Builder Editor (per la gestione grafica delle Swing) • Subversive SVN Team Provider (versionamento) • Case: Visual Paradigm UML EE 8.0 • Librerie: Java JRE 1.7, Hibernate ORM Libraries, • Server di versionamento: • XP-Dev con supporto a SVN (per il progetto .vpp) • Google Code (per il codice Java) • DBMS: MySQL tramite XAMPP 10 Il versionamento: Xp-Dev e GoogleCode 11 Il processo di riferimento: UP 12 Il processo di riferimento: UP Ogni iterazione produce un’executable release 13 UNIFIED PROCESS: IDEAZIONE 14 UP: ideazione • Casi d’uso analizzati: • tutti • Casi d’uso dettagliati: • UCRicercaFilm • UcNoleggia 15 UP: ideazione - UCDiagram 16 UP: Ideazione – UCRicercaFilm - info Stereotypes : <<UseCase>> Documentation : Il Cliente, una volta recatosi presso una delle filiali FastVid Rentals può cercare un film di suo interesse. La ricerca può essere effettuata sia presso lo sportello esterno, sia presso lo sportello interno. Per effettuare una ricerca non è necessario utilizzare la tessera servizi. Il Cliente può inserire o il nome preciso di un film o cercare tramite tag come il genere, l'anno di produzione etc.. Se la ricerca viene effettuata presso lo sportello interno il sistema permette di stampare uno scontrino promemoria da poter presentare all'operatore di cassa per procedere con un noleggio. 17 UP: Id – UCRicercaFilm – flow of events 18 UP: Id – UCNoleggiaFilm - dettagli Rank : High Stereotypes : <<UseCase>> Documentatio Il Cliente, una volta recatosi presso una delle n: filiali di FastVid Rentals, può effettuare un noleggio. La prima operazione che deve fare per poter noleggiare un film è la ricerca. Una volta trovato il film, il Cliente deve scegliere le opzioni di noleggio, il tipo di supporto/formato desiderati, e, se il supporto è disponibile, il sistema propone un quadro riassuntivo del noleggio. Se il cliente vuole procedere, deve scorrere la propria tessera servizi dalla quale verrà scalato l'importo pari al prezzo di noleggio. Il cliente può ritirare il prodotto. 19 UP: Id – UCNoleggiaFilm – flow of events 20 UP: Id – UCNoleggiaFilm – flow of events 21 UNIFIED PROCESS: ELABORAZIONE ITERAZIONE 1 PROBLEMATICHE DI DESIGN – COME E’ EVOLUTO IL SOFTWARE 22 UP: Iterazione1 - introduzione L’incontro con il committente a valle dell’ideazione ha confermato il corretto rilevamento dei casi d’uso, nonché della realtà aziendale cui si fa riferimento (documento di visione e regole di business) Il committente ha tuttavia preferito che l’autenticazione del cliente fosse la prima operazione necessaria ad avviare il caso d’uso di Noleggio. Nota: chiameremo informalmente da qui in poi IT2 la prima iterazione dell’elaborazione 23 UP: It2 - introduzione Cosa è stato realizzato nel corso dell’Iterazione 2: • Modello di dominio • Analysis & Design, Implementazione di UCRicerca, UCNoleggia • Paper-sketches & progettazione interfaccia • Introduzione delle tecnologie • • ORM mediante Hibernate Distribuzione mediante Java RMI 24 UP It2 – Il modello di dominio 25 UP: It2 – SSD UCRicercaFilm 26 UP: It2 – UCRicercaFilm - I contratti 27 UP: It2 – UCRicercaFilm – cercaFilm SD 28 UP: It2 – UCRicercaFilm – VisualizzaDisponibilità SD 29 UP: It2 – UCRicercaFilm – ScegliSupporto SD 30 UP: It2 – SSD UCNoleggiaFilm 31 UP: It2 – UCNoleggiaFilm - I contratti 32 UP: It2 – UCNoleggiaFilm – NotificaIdentita SD 33 UP: It2 – UCNoleggiaFilm – SetDurata SD 34 UP: It2 – UCNoleggiaFilm – ConcludiNoleggio SD 35 UP: It2 – Il diagramma dei package • La scelta architetturale: • • • MVA (model-view-adapter) “The view is completely decoupled from the model such that view and the model can interact only via the mediating controller or adapter in between the view and the model” “only the adapter or mediating controller has knowledge of both the model and the view, because it is the responsibility of solely the adapter or mediating controller to adapt or mediate between the model and the view” [Wikipedia] 36 UP: It2 – Il diagramma dei package • “The model and view are kept intentionally oblivious of each other” 37 UP: It2 – Il diagramma delle classi Design Client 38 UP: It2 – Il diagramma delle classi 39 UP: It2 – Il diagramma delle classi 40 UP: It2 – Il diagramma ER 41 UP: It2 – Interfaccia – paper scketches 42 UP: It2 – Interfaccia – MockUp 43 UP: It2 – Interfaccia – Swing 44 UP: It2 – Interfaccia – scelte su Swing 45 UNIFIED PROCESS: ELABORAZIONE ITERAZIONE 2 (IT3) PROBLEMATICHE DI DESIGN – COME E’ EVOLUTO IL SOFTWARE 46 UP: It3 - introduzione L’incontro con il committente a valle della seconda Iterazione ha sostanzialmente confermato il corretto avanzamento del lavoro. Il committente ha tuttavia segnalato: • la poca intuitività dell’interfaccia relativa alla ricerca di un film (o meglio, si aspettava che l’interfaccia fosse corredata di parametri per la ricerca avanzata). • sempre per quanto riguarda l’interfaccia, ha suggerito di migliorare la schermata di risultati della ricerca, in parte povera di contenuti (oltre al titolo film, dettagli come genere, regia, etc..) 47 UP: It3 - introduzione Cosa è stato realizzato nel corso dell’Iterazione 2: • Ristrutturazione UCRicerca guidata dai suggerimenti del committente • Analysis & Design, Implementazione di UCPrenota, UCRestituisci • Introduzione dei Design Patterns GoF e ristrutturazione del codice 48 UP: It3 – La ristrutturazione di UCRicerca 49 UP: It3 – La ristrutturazione di UCRicerca Paginazione gestita sul client, con limitazioni lato server sul numero max di risultati 50 UP: It3 – SSD UCRicercaFilm • L’SSD è rimasto invariato, vediamo invece come sono modificati i singoli SD in base alla ristrutturazione. 51 UP: It3 – SSD UCRicercaFilm – I contratti 52 UP: It3 – UCRicerca - SD CercaFilm 53 UP: It3 – UCRicerca - SD VisualizzaFIlm 54 UP: It3 – UCRicerca - SD ScegliSupporto 55 UP: It3 – La ristrutturazione del codice di UCNoleggia Stesso SSD di It2… 56 UP: It3 – UCNoleggia SDNotificaIdentita 57 UP: It3 – UCNoleggia – SD SetDurata 58 UP: It3 – UCNoleggia SDConcludiNoleggio 59 UP: It3 – I nuovi casi d’uso: UCPrenota Stereotypes : <<UseCase>> Documentatio Il Cliente può effettuare una prenotazione. Quest'ultima n: può essere dovuta sia al fatto che non è disponibile al momento nessuna copia fisica del supporto/formato richiesto per il film di interesse, sia al fatto che il cliente vuole bloccare un film per una determinata data. L'SMS service è un servizio esterno che permette di avvisare al Cliente la disponibilità di un supporto/formato e consente al cliente di poter avviare una pratica di prenotazione anche mediante SMS. Allo stato attuale le politiche di prenotazione non sono completamente definite: diverse filiali potrebbero adottare politiche locali guidate dall'andamento del mercato locale. Le politiche di prenotazione possono cambiare arbitrariamente secondo scelte avanzate dalla Sede centrale. La gestione delle politiche di prenotazione pertanto deve essere molto flessibile. 60 UP: It3 – UCPrenota – Flow of Events Flow of Events 1. Il Cliente effettua una Ricerca film 2. Il sistema richiede al Cliente l'autenticazione tramite lettura della tessera servizi 3. Il Cliente legge la sua tessera servizi presso il lettore 4. Il Sistema autentica il Cliente attraverso la tessera servizi 5. Il Sistema aggiorna il prezzo relativamente alle politiche sulla tessera servizi corrente 6. Il Cliente indica la data di prenotazione voluta 7. Il sistema notifica la avvenuta disponibilità per tale giorno 8. Il Cliente indica la durata del noleggio prenotato 9. Il sistema mostra il riepilogo e le condizioni di prenotazione, richiedendo conferma 10. Il Cliente conferma la sua scelta 11. Il Sistema addebita l'importo della prenotazione, registra la prenotazione per il prodotto selezionato e aggiorna la disponibilità del prodotto 12. Il Sistema notifica la transazione al Sistema contabilità 13. Il Sistema stampa la ricevuta e la consegna al Cliente 14. Il Cliente ritira ricevuta 61 UP: It3 – UCPrenota – Flow of Events Extension: 3.a. Il Cliente non possiede la tessera servizi 3.a.1. Il Cliente notifica al Sistema di non possedere una tessera servizi 3.a.2. Il Sistema invita il Cliente a rivolgersi all'Operatore di cassa a cui richiedere la tessera 3.a.3. jump to 1. Il Cliente effettua ... 3.b. Il Cliente è titolare di una tessera servizi ma non ne è momentaneamente in possesso 3.b.1. Il Cliente notifica al Sistema di non possedere una tessera servizi 3.b.2. Il Sistema invita il Cliente a rivolgersi all'Operatore di cassa per farsi autenticare 3.b.3. jump to 1. Il Cliente effettua ... 4.c. Il Sistema non riconosce la tessera servizi 4.c.1. Il Sistema notifica al Cliente la mancata autenticazione e lo invita a rivolgersi all'Operatore di cassa per assistenza 4.c.2. jump to 1. Il Cliente effettua ... 7.d. il film non è disponibile in tale giorno 7.d.1. Il sistema notifica la non disponibilità del film e supporto in tale giorno 7.d.2. jump to 6. Il Cliente indica la... 9.e. il film non è disponibile per tale durata 9.e.1. Il sistema notifica la non disponibilità del film e supporto per tale durata 9.e.2. jump to 8. Il Cliente indica la... 11.f. Il credito disponibile non è sufficiente a coprire l'importo del noleggio 11.f.1. Il Sistema notifica al Cliente il credito disponibile, avvisandolo che non è sufficiente per portare a termine l'operazione 11.f.2. Il Sistema propone al Cliente di passare alla modalità Gestisci tessera servizi per caricare credito 11.f.3. if il Cliente rifiuta il caricamento di ulteriore credito 11.f.3.1. Il Sistema propone di diminuire la durata della prenotazione 11.f.3.2. jump to 8. Il Cliente indica la... 11.f.3. end if 62 UP: It3 – SSD UCPrenota e contratti 63 UP: It3 – UCPrenota – SD SetDataInizio 64 UP: It3 – UCPrenota – SD SetDurata 65 UP: It3 – UCPrenota – SD CheckPrenotazione 66 UP: It3 – UCPrenota – SD ConcludiPrenotazione 67 UP: It3 – I nuovi casi d’uso: UCRestituisci Rank : Low Stereotypes : <<UseCase>> Documentatio Il Cliente può recarsi presso una filiale di FastVid n: Rentals e restituire un prodotto sia allo sportello esterno, sia all'interno del punto vendita. All'interno del punto vendita può decidere se restituire il prodotto tramite sportello o fisicamente all'operatore di cassa. 68 UP: It3 – I nuovi casi d’uso: UCRestituisci Flow of Events 1. Il Cliente si reca presso una filiale con un prodotto da restituire 2. Il Cliente informa il Sistema di voler restituire un prodotto precedentemente noleggiato 3. Il Sistema richiede al Cliente di depositare il prodotto nell'apposita feritoia 4. Il Cliente deposita il prodotto secondo le indicazioni ricevute 5. Il Sistema legge l'ID del prodotto depositato 6. Il Sistema recupera le informazioni sul Cliente tramite l'assocazione dello stesso ad un noleggio e quindi all'ID del supporto noleggiato e appena restituito 7. Il Sistema mostra al Cliente la conferma con riserva di controllo supporto per l'avvenuta restituzione 8. Il Sistema stampa la ricevuta cartacea attestante la restituzione 9. Il Sistema propone al Cliente di effettuare una nuova Ricerca film 10. Il Cliente rifiuta la proposta di cercare un nuovo film 11. Il Cliente si allontana con la ricevuta 69 UP: It3 – I nuovi casi d’uso: UCRestituisci Extension: 5.a. Il sistema non è in grado di leggere l'ID del prodotto o l'ID letto non è valido 5.a.1. Il Sistema informa il Cliente della problematica tecnica 5.a.2. Il Sistema rende al Cliente il prodotto appena depositato 5.a.3. Il Sistema invita il Cliente a rivolgersi all' Operatore di cassa per assistenza appena possibile, senza costi aggiuntivi per il prolungamento del termine di riconsegna 5.a.4. Il Sistema stampa una ricevuta attestante il tentativo fallito di restituzione 5.a.5. jump to 11. Il Cliente si allont... 7.b. La restituzione è avvenuta oltre il tempo massimo previsto dalle condizioni del noleggio 7.b.1. Il Sistema informa il Cliente che la restituzione è fuori tempo massimo 7.b.2. Il Sistema informa il Cliente dei giorni di ritardo e dell'importo che verrà addebitato di conseguenza. 7.b.3. Il Sistema addebita l'importo calcolato sul credito del Cliente, con l'eventualità che il credito divenga negativo 7.b.4. Il Sistema notifica la transazione al Sistema contabilità 7.b.5. Il Sistema informa il Cliente dell'importo aggiornato del suo credito, invitandolo a ricaricare se negativo 8.c. Il sistema rileva l'esaurimento o l'inceppamento della carta della stampante 8.c.1. Il Sistema notifica al Cliente il problema e lo informa che otterrà la ricevuta tramite e-mail 70 UP: It3 – I nuovi casi d’uso: UCRestituisci 71 UP: It3 – UCRestituisci SD Restituisci 72 UP: It3 – Il diagramma dei package Da It2 a It3 73 UP: It3 – Il diagramma delle classi (Client) 74 UP: It3 – Il diagramma delle classi (Server.control) 75 UP: It3 – Il diagramma delle classi (Server.model) 76 UP: It3 – Il diagramma di deployment DA aggiungere. 77 UNIFIED PROCESS: ELABORAZIONE ITERAZIONE 2 (IT3) I DESIGN PATTERNS 78 I Design Patterns GoF 79 Design Patterns: Singleton • Il Singleton è un design pattern creazionale che ha lo scopo di garantire che di una determinata classe venga creata una e una sola istanza, e di fornire un punto di accesso globale a tale istanza. DA NON CONFONDERE!!! • Costruttore privato • metodo "getter" statico che restituisce una istanza della classe 80 Design Patterns: Singleton • TODO --• Come faccio vedere i singleton? 81 Design Patterns: Mediator • pattern comportamentale basato su oggetti, ossia operante nel contesto delle interazioni tra oggetti, che ha l'intento di disaccoppiare entità del sistema che devono comunicare fra loro. • Il pattern fa in modo che queste entità non si riferiscano reciprocamente, agendo da "mediatore" fra le parti. 82 Design Patterns: Mediator sul Client 83 Design Patterns: State • pattern comportamentale basato su oggetti che viene utilizzato quando il comportamento di un oggetto deve cambiare in base al suo stato. • Questo pattern trova applicazione quando abbiamo a che fare con una “Macchina a Stati Finiti” ossia siamo in presenza di un sistema dinamico in cui i valori di ingresso, uscita e stato sono un insieme finito. 84 Design Patterns: Adapter • pattern strutturale basato su classi o su oggetti in quanto è possibile ottenere entrambe le rappresentazioni. • Viene utilizzato quando si intende utilizzare un componente software ma occorre adattare la sua interfaccia per motivi di integrazione con l’applicazione esistente. 85 Design Patterns: State+Adapter sul Client 86 Design Patterns: Facade • pattern strutturale basato su oggetti che viene utilizzato per nascondere la complessità del sistema e ridurre la comunicazione e la dipendenza del Client. • L’utilizzo di questo pattern prevede di esporre una interfaccia per l’invocazione di un Sistema tale da semplificare l’invocazione ad opera del Client. 87 Design Patterns: Terminale come ControllerFacade visibile al Client 88 Design Patterns: Strategy • pattern comportamentale basato su oggetti utilizzato per definire una famiglia di algoritmi, incapsularli e renderli intercambiabili. • Il client definisce l’algoritmo da utilizzare, incapsulandolo in un contesto, il quale verrà utilizzato nella fase di elaborazione. • Il contesto detiene i puntamenti alle informazioni necessarie al fine della elaborazione, cioè dati e funzione: solita equazione y=f(x)! 89 Design Patterns: Strategy (sulla ricercaFilm) - Server 90 Design Patterns: Strategy sulle prenotazioni - Server 91 Design Patterns: Composite • pattern strutturale basato su oggetti che viene utilizzato quando si ha la necessità di realizzare una gerarchia di oggetti in cui l’oggetto contenitore può detenere oggetti elementari e/o oggetti contenitori. • L’obiettivo è di permettere al Client che deve navigare la gerarchia, di comportarsi sempre nello stesso modo sia verso gli oggetti elementari e sia verso gli oggetti contenitori. 92 Design Patterns: Strategy+Composite per i prezziServer 93 LE TECNOLOGIE: HIBERNATE & JAVA RMI PANORAMICA SULLE TECNOLOGIE E SU COME ESSE SIANO STATE UTILIZZATE NEL CORSO DELLE ITERAZIONI 94 Hibernate: Object-Relational Mapping • piattaforma middleware open source per lo sviluppo di applicazioni Java che fornisce un servizio di Objectrelational mapping (ORM) • • Come si intuisce dal nome consiste nella tecnica di mappare gli oggetti Java su di un database relazionale In questo modo è possibile, tramite dei semplici metodi invocabili dai nostri oggetti, eseguire le query più diffuse 95 Hibernate: Object-Relational Mapping • Per il funzionamento necessita di: • Un R-DBMS installato con almeno un database creato • Importare nel progetto le librerie di Hibernate • Un file .cfg.xml che contiene le impostazioni e la configurazione del DBMS • Dei file .hbm.xml per ogni entità del diagramma E-R • • Una ORMpersistable Java class per ogni entity dell’E-R • • Permettono di associare le tabelle alle classi Dunque per ogni file hbm.xml Una classe di utility per la gestione delle sessioni 96 Hibernate: Object-Relational Mapping configurazione del DBMS utility per la gestione delle sessioni File hbm.xml ORMpersistable java class 97 Hibernate: Object-Relational Mapping • Nel corso della It2 si è fatto uso del Wizard di Visual Paradigm per generare il codice necessario al funzionamento di Hibernate • • Nello specifico si è ricorso alla Persistent API «Static Method» Tuttavia la generazione automatica comportava diverse limitazioni • • • Sporcava le classi con una serie di metodi statici di classe Legava le classi alla problematica della distribuzione (queste ultime dovevano estendere “Remote”) Ha creato problemi nei Vincoli di Integrità Referenziale in tutti i casi in cui veniva implementato il costrutto o-o della composizione 98 Hibernate: Object-Relational Mapping • Pertanto si è adottata una strategia differente nella It3 • Configurazione manuale dei file xml • Implementazione manuale sulla falsariga della Persistent API «Data Access Object» di Visual Paradigm • Ogni ORMPersistable entity class è affiancata dal suo «DTO»(Data Transfer Object) che incapsula in esso la entity stessa • • Tutto questo anche per motivi legati alla distribuzione, come vedremo A differenza del pattern DAO generato da VP, abbiamo deciso di ospitare i metodi «Save()», «Delete()», etc… in opportune classi controller (grasp High cohesion) 99 Hibernate: Object-Relational Mapping • Nel corso della It3 si è fatto utilizzo dei “Criteria” Hibernate offre una API di interrogazione per criteri intuitiva ed estensibile. 100 Java Remote Method Invocation (RMI) • Si può avere un vero e proprio riferimento all’oggetto remoto, anche se esso si trova su una Java Virtual Machine diversa dalla nostra • Si può utilizzare la sintassi Java e tutte le potenzialità offerte dalla progettazione o-o anche quando si invocano i metodi appartenenti agli oggetti remoti • In questo modo è possibile progettare in maniera distribuita un'applicazione decomponendo la logica della nostra applicazione in diversi componenti 101 Java Remote Method Invocation (RMI) 1. 2. 3. 4. Viene creata sul server un’istanza dell'oggetto remoto e passata in forma di stub al rmi registry. Tale stub viene inserito all'interno del registry stesso. Il client richiede al registry una copia dell'oggetto remoto da utilizzare. Il registry restituisce una copia serializzata dello stub al client Il client invoca uno dei metodi dell'oggetto remoto utilizzando la classe "clone“ fornita dallo stub 102 Java Remote Method Invocation (RMI) 5. 6. 7. 8. 9. Lo stub richiama lo skeleton che si trova sul server chiedendogli di invocare sull'oggetto remoto lo stesso metodo che il client ha invocato sullo stub Lo skeleton invoca il metodo richiesto sull'oggetto remoto L'invocazione del metodo sull'oggetto remoto restituisce il risultato allo skeleton Lo skeleton comunica il risultato allo stub sul client Lo stub fornisce il risultato all'applicazione client iniziale 103 Java RMI: il progetto FastVidRentals Il progetto common è puntato sia dal progetto client che dal progetto server 104 Java RMI: il progetto FastVidRentals 105 Java RMI: il progetto FastVidRentals 106 Java RMI: il progetto FastVidRentals Riprendendo il discorso dei DTO… 107 PROGETTO FASTVID – CONCLUSIONI I PUNTI DI FORZA DEL PROGETTO, GLI SVILUPPI FUTURI 108 I punti di forza: flessibilità