Progetto: Web Crawler File
Transcript
Progetto: Web Crawler File
Indice 1 Introduzione 1.1 Scopo RD . . . . . . . . . . . . . . 1.2 Scopo progetto . . . . . . . . . . . 1.3 Definizioni, acronimi, abbreviazioni 1.4 References . . . . . . . . . . . . . . 1.5 Overview . . . . . . . . . . . . . . 2 Descrizione generale 2.1 Visione del prodotto . . . . 2.2 Dati e funzioni del software 2.3 Caratteristiche degli utenti e 2.4 Assunzioni e dipendenze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . scenari di utilizzo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 . 5 . 7 . 10 . 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Requisiti specifici 3.1 Requisiti interfaccia esterna . . . . . . 3.2 Requisiti funzionali . . . . . . . . . . . 3.2.1 Funzionalità . . . . . . . . . . . 3.2.2 Sottofunzionalità . . . . . . . . 3.3 Requisiti non funzionali . . . . . . . . 3.3.1 Requisiti di aggiornamento . . . 3.3.2 Requisiti di performance . . . . 3.3.3 Attributi di qualità del software 3.3.4 Altri requisiti . . . . . . . . . . 3.4 Diagrammi del sistema . . . . . . . . . 3.4.1 Diagramma di sequenza . . . . 3.4.2 Diagrammi di stato . . . . . . . 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 4 4 5 . . . . . . . . . . . . . . . . . . . . . . . . 11 11 12 13 20 22 22 23 23 24 25 25 26 1 1.1 Introduzione Scopo RD Scopo del documento - Lo scopo del seguente documento è la definizione dei requisiti del progetto scelto. Fonte delle informazioni - Nella fattispecie il nostro intento è realizzare un crawler per il sito www.mymovies.it (in seguito anche “il sito” o “MyMovies”), archivio contenente informazioni relative a tutti i film realizzati dal 1895 ad oggi; questo progetto realizza il primo componente di un ipotetico e futuro motore di ricerca (in seguito anche SE) sviluppato da terzi ed è demandato al reperimento di tutti i dati necessari al SE per eseguire i propri task. L’idea quindi è quella di realizzare un sistema che verrà poi distribuito gratuitamente su internet in modo che possa essere utilizzato da chiunque lo necessiti. Obiettivo del documento - In tale documento verranno illustrate le features che il crawler (in seguito anche Neptune) dovrà avere e tutto quanto è utile al fine d’avere una visione d’insieme del prodotto che si intende realizzare. 1.2 Scopo progetto Scopo del sistema - Lo scopo di Neptune è quello di esplorare MyMovies ricercando, estraendo ed organizzando tutte le informazioni di interesse relative ad ogni film del sito. A fronte di questo, Neptune preleverà dal sito i dati accessibili e reputati informativi per tutte le categorie d’utenza ipotizzabili e ne manterrà un grado accettabile di aggiornamento. I dati raccolti da Neptune dovranno teoricamente poter soddisfare le esigenze informative di ogni categoria possibile di utenti, dagli appassionati cinefili alle persone comuni che ricercano un film da guardare. Nel prosieguo del documento, precisamente nella Sezione 2.2 - Dati e funzioni del software, si specificherà quali dati si intende scaricare e il motivo per cui sono stati reputati rilevanti. Target del sistema - Le operazioni di Neptune sono fatte nell’ottica di creare e tenere aggiornato un datastore per un eventuale e futuro SE, in modo che questo possa reperire con maggiore semplicità le informazioni desiderate. Modalità di lavoro - La ricerca delle pagine contenenti informazioni sui film è progettata per essere effettuata sia in modo automatico sfruttando informazioni sul dominio, sia in funzione delle esigenze dello sviluppatore del SE, che può scegliere manualmente dei criteri di aggiornamento, migliorando l’efficienza del reperimento delle informazioni. 3 1.3 Definizioni, acronimi, abbreviazioni Nel presente documento saranno utilizzate le seguenti espressioni: • Archivio - si riferisce al sito www.mymovies.it, la fonte di informazioni per il crawler. • Buffer - una qualsiasi struttura di memoria temporanea, nel nostro progetto è utilizzata per l’interscambio delle informazioni. • Crawler - componente dei motori di ricerca che si occupa di reperire i contenuti da un database. É il componente che verrà realizzato da questo progetto col nome di Neptune (vedi definizione “Neptune”) • Datastore - una qualsiasi struttura di memoria stabile, nel nostro progetto è utilizzata per il salvataggio delle informazioni. • MyMovies - vedi “Archivio”. • Neptune - il nome del sistema che si intende progettare. Questo sarà suddiviso in due blocchi funzionali: uno si occuperà del crawling vero e proprio, in termini di reperimento delle URL da cui scaricare i dati, l’altro si occuperà dello scaricamento delle informazioni da tale URL e del salvataggio di queste in un’idonea struttura dati. • NeptuneCrawler - il modulo di Neptune che si occuperà del reperimento delle URL. • Parser - il modulo di Neptune che si occuperà dello scaricamento, del salvataggio e dell’organizzazione delle informazioni. • RD - Requirements Document. Si riferisce al presente documento. • SE - Search Engine. L’ipotetico e futuro motore di ricerca a cui il lavoro di recupero delle informazioni di Neptune è finalizzato. • Sito - vedi “Archivio”. 1.4 References Informazioni sulla fonte - La fonte d’informazione a cui accederà il nostro crawler è il sito www.mymovies.it. Quest’ultimo, costantemente aggiornato, è un grosso database online di opere cinematografiche contenente, per ogni film prodotto dal 1895 fino ad oggi, informazioni quali Titolo, Regista, Attori, Genere, Pubblico Target, Durata, Data di Uscita, Valutazione, Trama e 4 Trailer. Dal 2008, anno di apertura, fino ad oggi sono state visualizzate circa 35 milioni di pagine con 4 milioni di visitatori unici al mese il che rende MyMovies il più consultato database italiano di cinema. 1.5 Overview Contenuto del documento - Nel presente documento sarà presentato come si intende organizzare e sviluppare tale progetto, quali saranno gli scenari e il dominio d’applicazione, requisiti funzionali, requisiti non funzionali (in termini di frequenza di aggiornamento, sicurezza del sistema...) input ed output di ogni funzione realizzata, interfaccia e utenti che utilizzeranno l’applicazione. Organizzazione del documento - Lo standard “IEEE 830-1998”, in base al quale è organizzato il presente RD, prevede due sezioni relative alla definizione dei requisiti: la Sezione 2 da una descrizione generale del prodotto, più precisamente nella Sezione 2.1 si ha una visione generale del prodotto, dell’ambito in cui verrà collocato, delle sue evoluzioni future e verrà data un’anticipazione della sua architettura. Successivamente nella Sezione 2.2 verrà presentato il modello di dominio e verranno introdotte le funzioni principali del software, specificando gli obiettivi funzionali di base. Nella Sezione 2.3 verranno introdotte le caratteristiche degli utenti del nostro sistema e nella Sezione 2.4 sarà introdotto il requisito di indipendenza dalla piattaforma. La Sezione 3 invece specifica più in dettaglio i vari requisiti funzionali e non: la Sezione 3.1 introduce i requisiti dell’interfaccia esterna, la Sezione 3.2 elenca i requisiti funzionali e le loro sottofunzionalità, la Sezione 3.3 tratta i requisiti non funzionali, tra i quali i requisiti di aggiornamento, i requisiti di performance, gli attributi di qualità del software (availability e reliability) e altri requisiti come manutenibilità, scalabilità e portabilità, la Sezione 3.4 infine riporta alcuni diagrammi del sistema utili per meglio comprendere il funzionamento di Neptune. 2 2.1 Descrizione generale Visione del prodotto Ambito del progetto - Neptune si colloca nell’ambito del reperimento dal web di informazioni collegate al dominio cinematografico. Inoltre, in quanto primo modulo di un SE si colloca in ambito buisness-to-buisness.Il sistema non ha come obiettivo il miglioramento della ricerca all’interno del database di MyMovies, ma intende essere uno strumento per il reperimento di informazioni da destinare ad un ipotetico SE creato da terzi.Tale SE non si interfaccerà 5 Figura 1: Quadro generale del progetto con il nostro sistema ma soltanto con il datastore. In questo contesto le informazioni nel datastore verranno memorizzate secondo una formattazione che permetta al maggior numero di SE di potersi interfacciare col database. Tale formattazione è specificata nella Sezione 2.2 - Dati e funzioni del software. Evoluzioni future - Attualmente si intende progettare Netptune in modo che si interfacci esclusivamente con MyMovies, ma questa è solo una prima fase dello sviluppo; si intende infatti realizzare uno strumento abbastanza flessibile da poter essere in futuro adattato per poter accedere anche ad altre fonti di informazione (IMDB, pagine personali degli attori su Wikipedia,... ). In questo modo si minimizza la dipendenza da una fonte specifica, si possono estrarre più dati e si possono eseguire analisi comparative ed aggregazioni degli stessi in modo da fornire informazioni della massima qualità possibile al futuro SE. Ruolo di Neptune nel sistema finale - Neptune costituisce quindi un componente di un sistema più grande e massiccio il cui obiettivo è di permettere l’effettuazione di ricerche in ambito cinematografico. Questo sistema di fatto sarà un SE specializzato ma, come tutti i SE esistenti, sarà strutturato in vari moduli : il crawler, che recupera le pagine web, il motore di indicizzazione, che si occupa di indicizzare i documenti raccolti, e un front end, che gestisce le query degli utenti. Si assume che l’utilizzatore delle informazioni reperite dal sistema sia tale SE. A fronte di questo possiamo strutturare le informazioni reperite nel modo più consono per essere utilizzate da un software tralasciando alcuni aspetti come, ad esempio, la leggibilità dell’output, questioni che altrimenti sarebbero di focale importanza nel caso di un utilizzatore umano ed, ipoteticamente, non particolarmente competente in ambito informatico. Interfaccia con gli altri moduli del SE - Il nostro sistema quindi realizza la prima componente del motore di ricerca, il crawler, che raccoglierà le informazioni destinate alle altre componenti del SE. Neptune pertanto si 6 interfaccerà con il motore di indicizzazione fornendogli un datastore da cui attingere i dati da indicizzare. Architettura di Neptune - Il diagramma in Figura 1 mostra, ad alto livello, come si intende interfacciare il nostro progetto con un SE. In tale diagramma si anticipa che Neptune sarà suddiviso in due moduli, un crawler (NeptuneCrawler) ed un parser (NeptuneParser). Per quanto questo aspetto, prettamente architetturale, si dovrebbe affrontare in fase di progettazione e non durante la stesura del RD, è necessario iniziare ad introdurlo perché è utile per comprendere in questa fase il funzionamento del sistema e alcuni requisiti non funzionali, ad esempio quelli legati alle performance. Inoltre tale suddivisione è la soluzione standard adottata da tutti i sistemi di questo tipo e non un aspetto innovativo proprio di Neptune. Pertanto, a fronte di questo, si è deciso già nella presente fase di definizione dei requisiti di mantenere tale architettura. Motivazione scelta architettura modulare - É importante notare che il reperimento delle URL e lo scaricamento/organizzazione delle informazioni avvengano in due momenti diversi in quanto tali operazioni richiedono un diverso quantitativo di tempo e di risorse. Per questo motivo prettamente tecnico è stata mantenuta la suddivisione nelle due componenti canoniche di questi sistemi: il crawler che si occupa del reperimento delle URL e il parser, che si occupa dello scaricamento/organizzazione delle informazioni nelle pagine. Questa suddivisione è necessaria per aumentare la velocità dell’intero processo di reperimento delle informazioni, dando un contributo al soddisfacimento del requisito non funzionale legato al grado di aggiornamento dei dati (si veda Sezione 3.3 - Requisiti non funzionali ) 2.2 Dati e funzioni del software Modello di dominio - Per meglio comprendere le funzioni di Neptune è utile osservare il modello di dominio in Figura 2. Il modello di dominio del nostro sistema include tutti i dati reputati rilevanti per i film e le informazioni sul provider che serviranno al corretto funzionamento di Neptune. Da notare che, per gli scopi di questo progetto si considera un solo provider, MyMovies, ma nel caso di sviluppi futuri le informazioni sui film potranno essere prelevate da più provider. Obiettivi funzionali di base - Le funzionalità basilari del sistema sono il reperimento di specifiche URL, il download delle informazioni rilevanti nelle pagine relative agli URL e la loro conseguente organizzazione in una struttura dati. Questa sarà realizzata al fine di essere facilmente comprensibile ed accessibile dal modulo di indicizzazione, appartenente all’ipotetico SE con cui il nostro sistema dovrà interfacciarsi. Come già anticipato nella Sezione 1.2 7 Figura 2: Modello di dominio - Scopo del progetto, Neptune preleverà dal sito i dati accessibili e reputati informativi per tutte le categorie d’utenza ipotizzate per il SE. Informazioni da prelevare - Sulla base di queste considerazioni sono state reputate come “interessanti” le seguenti informazioni relative ai film: • Titolo - si ipotizza che questo dato, oltre a costituire un attributo fondamentale per ogni film, sia il criterio di ricerca più comunemente utilizzato dagli utenti. • Regista - si ipotizza che un determinato utente possa essere appassionato dei film di uno specifico regista (Ex. Tarantino) pertanto possa voler eseguire ricerche mirate per reperire i suoi film. A fronte di questo è stato reputato necessario estrarre le informazioni sul regista (o sui registi) per ogni film. • Attori - medesimo discorso fatto per il regista ma declinato sugli attori. Sono classificati come attori sia le persone che recitano in un film sia i doppiatori di un film. • Genere - si ipotizza che un utente possa essere amante di uno specifico genere di film e che pertanto possa voler eseguire ricerche specifiche su film appartenenti ad esso. • Pubblico Target - si ipotizza che un utente “padre di famiglia” possa voler ricercare dei film adatti ad un pubblico infantile per una serata in famiglia. 8 • Durata - si ipotizza che un utente possa essere interessato solo ai film con un range particolare di durata. • Anno di Uscita - si ipotizza che un utente possa essere interessato solo a film recenti. Inoltre questo attributo è necessario per alcune funzionalità di Neptune. • Valutazione - si ipotizza che un utente “appassionato cinefilo” possa essere interessato a visionare dei film con una precisa valutazione in modo da poter comparare le sue impressioni a quelle dei critici. • Trama - generalmente uno degli attributi più consultati per decidere quale film guardare quando non si ha una precisa idea di quello che interessa. Qualora non fossero disponibili tutti i dati citati, il sistema semplicemente si limiterà ad estrarre quelli disponibili. Nell’ipotesi che un dato sia mancante (es: la durata di un film non ancora girato ma già presente nell’archivio), il campo relativo ad esso verrà settato ad un valore di default atto ad indicare l’assenza del dato stesso. Data di ultimo aggiornamento film - Si è inoltre pensato di salvare per ogni film anche la data in cui è avvenuto l’ultimo aggiornamento dei suoi dati all’interno del datastore. In questo modo si può far si che negli accessi al sito successivi al primo si possano scaricare solo le informazioni che sono cambiate dall’ultima volta in cui Neptune lo ha analizzato. Tale scelta è stata fatta con l’obiettivo di ridurre sia il traffico di rete causato da Neptune sia le risorse necessarie al processo di crawling. Per il reperimento dei dati sono state previste due modalità di funzionamento: un crawling di default e un crawling selettivo. Crawling di default - Il crawling di default aggiorna ciclicamente i dati scaricati dal sito. Con il crawling di default tutti i dati presenti nell’archivio verranno scaricati secondo le tempistiche di aggiornamento definite nella Sezione 3.3.1 - Requisiti di aggiornamento. Queste policy di aggiornamento verranno definite in modo da permettere un certo grado di libertà nella scelta delle tempistiche, che potranno anche essere diverse da quelle automatiche previste nei criteri di aggiornamento. In fase progettuale si provvederà a strutturare il sistema in modo che nella sua modalità di default riesca a soddisfare questi requisiti anche su infrastrutture non all’avanguardia. Crawling selettivo - è prevista anche una funzione di crawling manuale che, al contrario di quella automatica non è ciclica ma consiste in un unico scaricamento di informazioni dal sito. Tale scaricamento sarà selettivo, cosı̀ 9 da permettere di aggiornare solo determinate informazioni. Per i dettagli sui criteri di scelta dei film da aggiornare si veda il Requisito funzionale 2: Crawling selettivo nella Sezione 3.2 - Requisiti funzionali. Memorizzazione dei dati - Dato che ad interfacciarsi col nostro datastore saranno i motori di indicizzazione dei SE, i dati che verranno salvati dovranno avere un formato da essi riconosciuto. A questo proposito però non sono state trovate indicazioni riguardanti particolari standard di formattazione, quindi si è deciso di salvare i dati nel modo più semplice possibile. Verrà salvato solo il contenuto testuale riguardante i dati, rimuovendo i tag HTML della pagina. Questa scelta fa si che anche i motori di indicizzazione che non gestiscono i tag HTML possano interfacciarsi col nostro datastore. 2.3 Caratteristiche degli utenti e scenari di utilizzo Utenti del sistema - L’utente del nostro sistema sarà uno degli utilizzatori del SE che sfrutterà Neptune. A fronte di questo si suppone che abbia conoscenze pregresse in ambito informatico. Si assume che il suo background sia sufficiente per capire come configurare Neptune a seconda delle proprie necessità ma, qualora non lo fosse, la lettura del presente documento fornirà le conoscenze necessarie per configurare e utilizzare il sistema. Scenari di utilizzo - Per meglio comprendere come l’utente interagisce con le funzionalità offerte dal sistema, di seguito sono specificati due possibili scenari di utilizzo. In ambedue gli scenari si suppone che un programmatore abbia preventivamente realizzato un SE che utilizza il sistema Neptune per il reperimento delle informazioni e che, ovviamente, abbia interfacciato correttamente tale sistema con il nostro. SCENARIO 1: Un tecnico decide di avviare il sistema Neptune nella modalità di default in modo da recuperare tutte le pagine contenenti informazioni relative ai film e salvarle in un datastore. Successivamente Neptune aggiornerà automaticamente il datastore, aggiornando la copia di ogni pagina con una frequenza che dipende dalla data di uscita del film: più il film è recente più frequentemente verranno aggiornate le informazioni ad esso relative (per maggiori dettagli si veda la Sezione 3.3.1 - Requisiti di aggiornamento). SCENARIO 2: Un tecnico sta utilizzando Neptune nella modalità di default. Quando si accorge che l’attore Johnny Depp ha vinto l’Oscar, sospende l’esecuzione di default di Neptune e richiede al sistema di aggiornare subito le informazioni relative alle pagine riguardanti i film dell’attore Johnny Depp. Questo perché, dato che l’attore ha vinto l’Oscar, è molto probabile che la maggior parte delle queries che giungeranno al SE saranno relative ai film dell’attore e il tecnico 10 del SE vuole che i risultati delle queries siano i più aggiornati possibile. Al termine del crawling selettivo, il tecnico può riattivare il crawling di default. 2.4 Assunzioni e dipendenze Indipendenza da piattaforma - L’idea alla base del progetto è quella di creare un sistema, diffuso tramite internet, sfruttabile gratuitamente da chiunque voglia progettare un SE dedicato all’ambito “cinema”. Come già detto, Neptune realizzerà solamente il primo componente di tale ipotetico SE, il crawler. Di conseguenza il sistema sarà ipoteticamente utilizzato da una terza parte non meglio definita, pertanto a fronte di questo deve essere indipendente da piattaforma, cioè deve poter funzionare su qualsiasi macchina a prescindere dalla sua configurazione software/hardware, in modo da lasciare ai progettisti del SE più spazio d’azione possibile. Testing dell’indipendenza - Per testare la cosa si provvederà a lanciarne l’esecuzione su piattaforma Windows, MacOS e Linux. Il funzionamento di Neptune è ovviamente subordinato, per sua natura, alla disponibilità di un collegamento ad internet. Comunicazione fra i moduli - I moduli del sistema saranno fra di loro indipendenti: comunicheranno tramite il buffer secondo un formato prestabilito di presentazione delle informazioni a loro noto. Inoltre, eventuali modifiche di un modulo non impatteranno sull’altro, a patto di mantenere inalterato l’output del NeptuneCrawler sul buffer. 3 3.1 Requisiti specifici Requisiti interfaccia esterna Le interfacce previste per il nostro sistema sono due, una testuale ed una grafica. Ambedue avranno le stesse funzionalità e permetteranno di eseguire le medesime operazioni presentate successivamente. Nonostante questo, saranno implementate entrambe in modo che, nel caso in un malfunzionamento della GUI, sarà sempre possibile interfacciarsi con il sistema tramite riga di comando. Entrambe le interfacce permetteranno di visualizzare le informazioni in output, ma la GUI le organizzerà meglio e permetterà di eseguire più semplicemente delle operazioni di default. In maniera complementare, la riga di comando rimane più semplice da sviluppare e modificare nell’ipotesi di evoluzioni future oltre, ovviamente, a lasciare maggiore libertà d’azione all’utente. Ambedue le interfacce comunque dovranno essere chiare e semplici da utilizzare. 11 Funzionalità interfacce esterne - A seguire le funzionalità, esposte in dettaglio, delle interfacce esterne. Queste dovranno permettere di: • Settare le impostazioni funzionali di Neptune necessarie alla sua corretta esecuzione : ◦ Numero moduli crawling (NeptuneCrawler). ◦ Numero moduli parsing (NeptuneParser). ◦ Tempistiche personalizzate di aggiornamento. Nel caso in cui questi parametri non vengano inseriti, il sistema utilizzerà quelli di default definiti nella Sezione 3.3 - Requisiti non funzionali. • Permettere di lanciare/fermare il processo di crawling a piacimento. • Avviare il processo di crawling selettivo impostando i criteri secondo cui discriminare le pagine da aggiornare (si veda Requisito funzionale 2: Crawling selettivo nella Sezione 3.2 - Requisiti funzionali. • Informare un ipotetico osservatore sullo stato del crawling attuale (si veda Requisito funzionale 7: Monitora stato del crawling nella Sezione 3.2 - Requisiti funzionali). • Informare l’utente riguardo ad eventuali dati statistici (si veda Requisito funzionale 8: Mostra statistiche nella Sezione 3.2 - Requisiti funzionali). • Cancellare il contenuto del datastore: ◦ Cancellazione URL invalidi (si veda Requisito funzionale 9: Rimuovi URL non più validi nella Sezione 3.2 - Requisiti funzionali ). ◦ Cancellazione totale del datastore (si veda Requisito funzionale 6: Svuota datastore nella Sezione 3.2 - Requisiti funzionali ). 3.2 Requisiti funzionali In Figura 3 viene mostrato il diagramma che rappresenta gli stati del sistema a cui si può arrivare a fronte di un’azione del tecnico. É da notare che questo grafico non ha l’obiettivo di specificare i passaggi di stato interni del crawler di default che invece è Neptune a determinare. Nello specifico questi stati sono: lo stato in cui sta estraendo le informazioni e lo stato in cui ha terminato l’estrazione e attende lo scadere del delay prima della prossima esecuzione. 12 Figura 3: Stati del sistema dal punto di vista del tecnico 3.2.1 Funzionalità Priorità dei requisiti - Le funzionalità offerte da Neptune, che sono accessibili sia tramite linea di comando sia attraverso una semplice interfaccia, sono specificate qui di seguito. Ogni funzionalità avrà un diverso grado di priorità, definito secondo il seguente criterio: priorità ALTA - operazioni indispensabili al funzionamento del sistema. 13 priorità BASSA - operazioni utili al funzionamento del sistema ma non indispensabili. REQUISITO FUNZIONALE 1: Crawling di default DESCRIZIONE: Il sistema avvia il crawling di default con un numero di processi di crawling e di parsing e una certa tempistica di aggiornamento. Tali parametri possono essere specificati dal tecnico, in alternativa verranno usati quelli di default. Successivamente il sistema visita tutto il sito, scarica le informazioni riguardanti ogni film e le salva nel datastore. Qualora il datastore fosse vuoto viene riempito. Tale esecuzione verrà ripetuta ciclicamente. Dopo la prima esecuzione, Neptune aggiorna le informazioni presenti nel datastore per ogni film in base alle tempistiche di aggiornamento specificate. INPUT: - Numero di processi di crawling (facoltativo). - Numero di processi di parsing (facoltativo). - Tempistiche di aggiornamento (facoltativo). PROVENIENZA: I parametri sono immessi dal tecnico da GUI o riga di comando. OUTPUT: Informazioni su tutte le pagine web del sito relative ai film. DESTINAZIONE: Datastore. PRE-CONDIZIONE: Il sistema non deve essere in esecuzione. POST-CONDIZIONE: Nel datastore tutti i dati dei film presenti sul sito al momento del crawling sono aggiornati, mentre quelli relativi ai film non più presenti sul sito non sono aggiornati. Il sistema si mette in attesa della prossima esecuzione. PRIORITÁ : Alta. FUNZIONE AUTOMATICA: No. TEST DEL REQUISITO FUNZIONALE 1 INPUT DA INSERIRE: Parametri di crawling. OUTPUT ATTESO: Verificare nel datastore che la data di aggiornamento di tutti i film presenti anche sul sito sia maggiore o uguale alla data di inizio della procedura di crawling. Se il datastore precedentemente era vuoto, verificare che sia stato riempito correttamente. REQUISITO FUNZIONALE 2: Crawling selettivo DESCRIZIONE: Il sistema avvia il crawling selettivo con un numero di processi di crawling e di parsing. Tali parametri possono essere specificati 14 dal tecnico, in alternativa verranno usati quelli di default. Inoltre il tecnico specifica dei criteri di aggiornamento in base ai quali il sistema decide se aggiornare o no i dati di ogni specifico film. Il sistema quindi visita tutto il sito, scarica le informazioni riguardanti ogni film che soddisfa i criteri specificati e le salva nel datastore. Qualora il datastore fosse vuoto viene riempito. Più in dettaglio, questa funzionalità permette di aggiornare: • i film usciti in uno specifico anno o in uno specifico range di anni • i film girati da specifici registi • i film interpretati da specifici attori • i film appartenenti a specifici generi • i film destinati ad un pubblico specifico Qualora fosse specificato più di un criterio alla volta, verranno estratti i film che soddisfano almeno uno dei criteri (OR) e non tutti i criteri contemporaneamente (AND). INPUT: - Numero di processi di crawling(facoltativo). - Numero di processi di parsing(facoltativo). - Criteri di aggiornamento (obbligatorio): • Attori • Registi • Anni d’Uscita • Generi • Pubblico Target PROVENIENZA: Parametri immessi dal tecnico da GUI o riga di comando. VINCOLI SULL’INPUT: Devono essere previste limitazioni relativamente a questo tipo di funzionamento del sistema. É stato quindi reputato opportuno, per ottenere un buon compromesso tra flessibilità della ricerca e potere discriminante, agire nel seguente modo : • sarà possibile selezionare solo un massimo di 3 registi • sarà possibile selezionare fino ad un massimo di 6 attori partecipanti ad un film 15 • sarà possibile selezionare solo due generi di film • sarà possibile selezionare solo uno specifico pubblico target. Per quanto riguarda invece il range di anni è stato deciso di lasciare libertà totale di scelta all’utente che potrà scegliere un qualsiasi range di anni compreso fra il 1895 e l’anno corrente. OUTPUT: Informazioni sulle pagine web del sito relative ai film che soddisfano i criteri specificati. DESTINAZIONE: Datastore. PRE-CONDIZIONE: Non deve esserci in esecuzione nessun crawler, al più può esserci il processo di crawling di default in pausa. POST-CONDIZIONE: Nel datastore tutti i dati dei film che sono presenti sul sito al momento del crawling e che soddisfano i criteri sono aggiornati. PRIORITÁ : Bassa. FUNZIONE AUTOMATICA: No. TEST DEL REQUISITO FUNZIONALE 2 INPUT DA INSERIRE: Johnny Depp. OUTPUT ATTESO: Verificare nel datastore che la data di crawling di tutti i film di Johnny Depp presenti anche su MyMovies corrisponda alla data odierna. Da notare che è ammissibile che nel datastore ci siano film di Johnny Depp che non sono più presenti su MyMovies e che quindi non avranno la data di crawling odierna. REQUISITO FUNZIONALE 3: Pausa crawling DESCRIZIONE: Sia in caso di crawling di default sia in caso di crawling selettivo il sistema sospende i processi di crawling e parsing salvando lo stato del sistema, cosı̀ da poter riprendere successivamente l’esecuzione, eventualmente modificando il numero di processi di crawling e di parsing. Lo stato del sistema per entrambe le modalità di crawling comprende: - Numero di processi di crawling. - Numero di processi di parsing. - Anni già analizzati - Numero di film già analizzati per gli anni completamente analizzati (da utilizzare nel requisito funzionale 7 nel caso di un’interruzione) Nel particolare, per il crawling di default si aggiungono: - Tempistiche di aggiornamento Mentre, per il crawling selettivo si aggiungono: - Criteri di aggiornamento: 16 • Attori • Registi • Anni d’Uscita • Generi • Pubblico Target INPUT: Nessuno. OUTPUT: Nessuno. PRE-CONDIZIONE: NeptuneCrawler e neptuneParser devono essere in funzione. POST-CONDIZIONE: Nessun NeptuneCrawler/NeptuneParser è più in funzione e lo stato del sistema è stato salvato nel datastore. PRIORITÁ : Bassa. FUNZIONE AUTOMATICA: No. EFFETTI COLLATERALI: Dopo la sospensione del crawling è garantito solo un aggiornamento parziale dei dati. Inoltre quando verrà ripresa l’esecuzione non potranno essere mostrate le statistiche relative al tempo di esecuzione, ma solo quelle relative al numero di film estratti. REQUISITO FUNZIONALE 4: Riprendi crawling DESCRIZIONE: Sia in caso di crawling di default che in caso di crawling selettivo il sistema recupera lo stato precedentemente salvato nel datastore riavviando i processi di crawling e parsing dando eventualmente la possibilità di modificarne il numero. INPUT: - Numero di processi di crawling (facoltativo). - Numero di processi di parsing (facoltativo). PROVENIENZA: Parametri immessi dal tecnico da GUI o riga di comando. OUTPUT: Nessuno. PRE-CONDIZIONE: Entrambi i crawling possono essere riavviati se prima erano in pausa e non ci sono crawling attivi. In particolare, il crawling di default può essere riavviato solo se il crawling selettivo non è in pausa. POST-CONDIZIONE: Il crawling selettivo o di default riprende la sua esecuzione da dove era stato messo in pausa PRIORITÁ : Bassa. 17 FUNZIONE AUTOMATICA: No. REQUISITO FUNZIONALE 5: Interrompi crawling DESCRIZIONE: Il sistema interrompe l’esecuzione del processo di default o selettivo. INPUT: Nessuno. OUTPUT: Nessuno. PRE-CONDIZIONE: Entrambi i crawling possono essere interrotti se sono in funzione o in pausa. In particolare, il crawling di default in pausa può essere interrotto solo se quello selettivo non è attivo o in pausa. POST-CONDIZIONE: Nessun NeptuneCrawler/NeptuneParser del crawling interrotto è più in funzione. PRIORITÁ : Alta. FUNZIONE AUTOMATICA: No. REQUISITO FUNZIONALE 6: Svuota datastore DESCRIZIONE: Il sistema svuota il datastore eliminando tutti i dati precedentemente raccolti dal sistema. Prima di procedere con l’operazione, considerato l’effetto della stessa, verrà chiesta conferma all’utente avvertendolo degli effetti di tale azione. INPUT: Nessuno. OUTPUT: Nessuno. PRE-CONDIZIONE: Né il crawler di default né il crawler selettivo devono essere attivi o in pausa. POST-CONDIZIONE: Il datastore viene completamente svuotato. PRIORITÁ : Bassa. FUNZIONE AUTOMATICA: No. TEST DEL REQUISITO FUNZIONALE 6 OUTPUT ATTESO: Datastore completamente vuoto. REQUISITO FUNZIONALE 7: Monitora stato del crawling DESCRIZIONE: Il sistema mostra costantemente le informazioni di interesse relative allo stato corrente del crawling. Le informazioni reputate di interesse sono : • anno/i attualmente in crawling 18 • numero totale di film estratti in ogni momento • numero totale di film estratti nell’esecuzione precedente del sistema • eventuali messaggi di errore • titoli dei film estratti con l’anno di uscita • stato del crawling in esecuzione: – reperimento informazioni attivo – in attesa della prossima esecuzione di reperimento (la durata dell’attesa è data dal delay specificato all’avvio) INPUT: Nessuno. OUTPUT: Stato del crawling. DESTINAZIONE: GUI o riga di comando. PRE-CONDIZIONE: Nessuna. POST-CONDIZIONE: Nessuna. PRIORITÁ : Bassa. FUNZIONE AUTOMATICA: Si. Requisito funzionale 8: Mostra statistiche DESCRIZIONE: Quando il crawler (di default o selettivo) termina un’esecuzione completa di estrazione di film vengono mostrate le statistiche riguardanti tale esecuzione. Le statistiche reputate di interesse (e che quindi verranno mostrate all’utente) sono: • orari di inizio e di fine del processo di crawling/parsing • tempo totale della procedura di estrazione • tempo medio di crawling (tempo totale crawling/numero film reperiti) • tempo medio di parsing (tempo totale parsing/numero film reperiti) • numero totale di film estratti INPUT: Nessuno. OUTPUT: Statistiche reputate di interesse. DESTINAZIONE: GUI o riga di comando. PRE-CONDIZIONE: Un ciclo di esecuzione del crawling di default è terminato oppure l’esecuzione del crawling selettivo è terminata. 19 POST-CONDIZIONE: Se il crawling era di default si mette in attesa della prossima esecuzione. Se il crawling era selettivo termina la sua esecuzione. PRIORITÁ : Bassa. FUNZIONE AUTOMATICA: Si. REQUISITO FUNZIONALE 9: Rimuovi URL non più validi DESCRIZIONE: Il tecnico avvia una procedura di rimozione degli URL invalidi dal datastore. Per fare ciò Neptune analizza il datastore ed elimina da esso le informazioni e le URL relative alle pagine che sono state rimosse dal sito di MyMovies. Un URL viene considerato invalido da Neptune quando l’ultimo accesso con successo alla pagina corrispondente è avvenuto più di 5 mesi fa e sono stati fatti almeno 5 tentativi di accesso infruttuosi. INPUT: Nessuno. OUTPUT: Nessuno. PRE-CONDIZIONE: Né il crawler di default né il crawler selettivo devono essere in esecuzione o in pausa. POST-CONDIZIONE: Il datastore contiene solo informazioni sui film corrispondenti a URL validi. PRIORITÁ : Bassa. FUNZIONE AUTOMATICA: No. 3.2.2 Sottofunzionalità Di seguito verranno specificate delle sottofunzionalità che il sistema deve offrire per poter garantire le funzionalità elencate precedentemente: SOTTOFUNZIONALITÁ 1: Cerca URL DESCRIZIONE: Il NeptuneCrawler visita una pagina web, recupera gli URL presenti nella pagina e li salva nel buffer. INPUT: Pagina web. PROVENIENZA: La pagina è scaricata dal sito www.mymovies.it. OUTPUT: Insieme di URL. DESTINAZIONE Buffer. PRE-CONDIZIONE: Nessuna. POST-CONDIZIONE: Nessuna. PRIORITÁ : Alta. FUNZIONE AUTOMATICA: Si. 20 TEST DELLA SOTTOFUNZIONALITÁ 1 INPUT DA INSERIRE: http://www.mymovies.it/film/2010/ OUTPUT ATTESO: Il buffer deve contenere tutte le URL delle pagine di descrizione dei film che compaiono nella pagina in input. SOTTOFUNZIONALITÁ 2: Estrai informazioni dalla pagina DESCRIZIONE: Il NeptuneParser, dato un URL, recupera la corrispondente pagina web, la analizza, ne estrae informazioni utili sui film e le salva nel datastore. INPUT: URL di una pagina. PROVENIENZA: Buffer. OUTPUT: Dati del film. DESTINAZIONE Datastore. PRE-CONDIZIONE: Nessuna. POST-CONDIZIONE: Il datastore contiene tutti i dati aggiornati riguardanti il film. PRIORITÁ : Alta. FUNZIONE AUTOMATICA: Si. TEST DELLA SOTTOFUNZIONALITÁ 2 INPUT DA INSERIRE: http://www.mymovies.it/film/2000/ilgladiatore/ OUTPUT ATTESO: Titolo: Il gladiatore. Regista: Ridley Scott. Attori: Russell Crowe, Joaquin Phoenix, Connie Nielsen, Richard Harris, Oliver Reed, Djimon Hounsou, Derek Jacobi, Tomas Arana, John Shrapnel, Sven Ole Thorsen, Giorgio Cantarini, Giannina Facio, Tommy Flanagan, David Schofield, Spencer Treat Clark, Ralf Moeller, David Hemmings. Genere: storico. Pubblico target: — Durata: 1550 min. Anno di uscita: 2000. Valutazione: 3, 91 stelle. Trama: Eroiche peripezie di Maximus,... Data ultimo aggiornamento film: data in cui è stato eseguito tale test. 21 3.3 Requisiti non funzionali 3.3.1 Requisiti di aggiornamento Relativamente al requisito sulle tempistiche di aggiornamento dei dati durante il crawling di default, risulta ragionevole mantenerne un diverso grado in base alla data di uscita del film. Quindi sono previsti i seguenti tre tipi di aggiornamento: • i film usciti negli ultimi x1 anni verranno aggiornati una volta ogni y1 giorni • i film usciti negli ultimi x2 anni verranno aggiornati una volta ogni y2 giorni • tutti gli altri film verranno aggiornati una volta ogni y3 giorni Quando tali parametri saranno specificati dal tecnico si provvederà a testare che valgano le seguenti relazioni: y1 < y2 < y3 x1 < x2 < (anno corrente − 1895) Nel caso in cui il tecnico non specifichi i parametri si utilizzeranno i seguenti valori di default: • x1 = 2 e y 1 = 2 • x2 = 5 e y 2 = 7 • y3 = 20 Tali valori sono considerati ottimali ma sono stati definiti a riguardo anche dei requisiti minimi che Neptune dovrà soddisfare a prescindere dall’infrastruttura hardware su cui verrà fatto funzionare. Più precisamente, se il tecnico non specifica i parametri di aggiornamento, il nostro sistema deve garantire che: • i dati dei film usciti negli ultimi 2 anni debbano essere aggiornati almeno 1 volta ogni 7 giorni • i dati dei film usciti negli ultimi 5 anni debbano essere aggiornati almeno 1 volta ogni 30 giorni • i dati di tutti gli altri film debbano essere aggiornati almeno 1 volta ogni 70 giorni 22 É da notare che al primo avvio del crawler il datastore è vuoto e quindi verranno scaricati tutti i film presenti sull’archivio. Nelle successive esecuzioni i film verranno scaricati dall’archivio in base alle tempistiche di aggiornamento specificate sopra. 3.3.2 Requisiti di performance Collo di bottiglia per la velocità - Considerata la natura del progetto le performance sono estremamente variabili: dipendono dalla potenza della macchina host e dalla velocità della rete utilizzata per l’accesso alla fonte di informazioni. A fronte di questo non possono essere formulati requisiti precisi sulle performance, ma si deve assicurare che una volta lanciato, Neptune completi l’esplorazione del sito in un tempo finito. In ogni caso, va garantito un tempo massimo di esecuzione per il processo di estrazione degli URL da una singola pagina (crawling), che non deve durare più di qualche decimo di secondo e va garantito un tempo massimo di esecuzione per il processo di parsing di una singola pagina, che non deve durare più di qualche secondo. Requisiti minimi di performance - Nonostante l’impossibilità di definire requisiti precisi di performance sussistono comunque dei limiti minimi per l’accettabilità nel livello di aggiornamento di un dato; questi sono espressi nella Sezione 3.3.1 - Requisiti di aggiornamento 3.3.3 Attributi di qualità del software Availability e Reliability - Durante lo sviluppo, contrariamente a come generalmente accade nello sviluppo di sistemi software, si dovrà porre principalmente il focus non sulla reliability ma sulla availability del sistema. É più tollerabile infatti che il SE restituisca dati errati/incompleti rispetto al non rispondere a causa di un blocco del sistema. Nonostante ciò abbiamo considerato delle soluzione per entrambe le problematiche. Soluzione adottata per garantire avalability - La strutturazione a blocchi con NeptuneCrawler e NeptuneParser è stata reputata sufficiente per garantire un adeguato livello di availability del sistema. Affinchè Neptune fallisca infatti è necessario che tutti i moduli di crawling o tutti i moduli di parsing riscontrino un’eccezione non gestibile; tale scenario appare però improbabile, soprattutto all’aumentare del numero dei singoli moduli atti allo svolgimento di tali funzioni. Soluzione adottata per garantire reliability - Per garantire un adeguato livello di reliability è stato previsto un semplice meccanismo di recovery che, in caso di interruzione non prevista dell’esecuzione del sistema, permetta di riprendere il procedimento dallo stato in cui il sistema si trovava prima del 23 blocco. Per maggiori dettagli riguardanti lo stato in questione consultare il Requisito funzionale 3: Pausa crawling nella Sezione 3.2 - Requisiti funzionali 3.3.4 Altri requisiti Manutenibilità e scalabilità - Requisiti invece importanti sono la manutenibilità e la scalabilità del sistema nell’ipotesi di sviluppi futuri. Questi si intendono garantire strutturando Neptune in modo modulare. Portabilità - Neptune deve essere portabile, ossia indipendente da ogni piattaforma hardware e software, come già definito nella Sezione 2.4 - Assunzioni e dipendenze. Il soddisfacimento di questo requisito dovrà essere garantito sia dal linguaggio di programmazione che verrà scelto per l’implementazione finale, sia dalla possibilità di settare il numero di moduli di crawling e parsing in modo da adattarlo alla potenza di calcolo della macchina host. A tal proposito, nel caso in cui non vengano specificati il numero di moduli di crawling e di parsing, i valori di default che verranno usati saranno i seguenti: Numero moduli di crawling = 5 Numero moduli di parsing = 10 Tali numeri sono volutamente bassi per poter garantire un corretto funzionamento del sistema anche su macchine dotate di scarsa potenza di calcolo. Inoltre viene mantenuto un numero di crawler più basso del numero di parser in quanto il carico di lavoro dei primi è inferiore a quello dei secondi. In questa fase non si possono definire valori di default più precisi in quanto ci si dovrebbe basare su delle stime di tempo attualmente non fattibili in quanto dipendono dagli ambienti e dalle tecnologie delle macchine su cui Neptune sarà installato. 24 3.4 3.4.1 Diagrammi del sistema Diagramma di sequenza Figura 4: Diagramma di sequenza ad alto livello 25 3.4.2 Diagrammi di stato Figura 5: Stati del crawler Figura 6: Stati del parser 26 Figura 7: Satati del buffer 27