SlideShare ist ein Scribd-Unternehmen logo
1 von 12
Downloaden Sie, um offline zu lesen
A.A 2005/2006 C.D.L ITPS
Alunni          Centrone Sergio, Gadaleta Fabio
Gruppo          BaelSoft Production
   Corso di Studio : Programmazione



Analisi, progettazione, codifica e test di un caso di studio.



È stata commissionata la realizzazione del seguente programma :
Realizzare attraverso opportune classi (>1) le seguenti funzionalità di un micro motore di ricerca personale
VIRGINIO Desktop
  1. indicizzazione delle parole presenti nei file contenuti in una cartella indicata dall'utente (txt o testo di
 pagine html).
 per ogni parola dovrà essere associata la lista delle posizioni (path) dei file
 tali info risiederanno in un opportuno file indice del motore.
 a scelta è possibile trascurare le parole troppo comuni (stopword) di cui esistono liste
  2. ricerca OR: su input di una o più stringhe, vanno restituite le posizioni di tutti i file in cui compaia
 almeno una delle stringhe.
  3. ricerca AND: su input di una o più stringhe, vanno restituite le posizioni di tutti i file in cui compaiano
 tutte le stringhe.




1. Analisi
Per una realizzazione efficiente del progetto sono stati chiesti al committente alcuni esempi
dell’utilizzo del micro motore di ricerca :
Data la cartella in cui sono presenti 2 file che contengono le seguenti stringhe
     •   File1 conterrà “ciao come va”
     •   File 2 conterrà “va tutto bene “
Dopo l’indicizzazione il file indice di Virginio Desktop conterrà :
ciao     percorso file 1
come percorso file1
va       percorso file1 percorso file 2
tutto percorso file 2
bene percorso file 2
nel caso in cui nel file siano presenti articoli, preposizioni o simboli vari di punteggiatura, saranno
considerati come stopword e saranno ignorate al momento dell’indicizzazione.
Quando verrà eseguita una nuova indicizzazione il contenuto del file sarà soprascritto.
Per le 2 ricerche richieste si agirà circa allo stesso modo :
si prende in input una o piu parole da trovare separate dalla virgola e le si ricercheranno in tutti i
file della directory specificata. La differenza tra le ricerche e che una restituisce la posizione di tutti
i file che contengano almeno una delle parole inserite (se viene chiesto di ricercare più di una
parola), mentre la seconda, restituisce tutte le posizioni dei file che contengono tutte le parole
inserite.
Esempio fornito dal committente :
Ricerca or
Inserisci la stringa da ricercare : come ,va
La stringa è presente nel file : percorso file 1 percorso file 2
Ricerca and
Inserisci la stringa da ricercare : come, va
La stringa è presente nel file : percorso file 1.
Dopo un’attenta analisi della traccia commissionata sono risultati i seguenti dati di input :
    •       Il precorso della directory che contiene i file
    •       Le stringhe da ricercare
I dati di output saranno
    •       Il file indice del micro motore
    •       I risultati delle ricerche effettuate
Per quel che riguarda i casi limite, ne sono stati identificati i seguenti:
Riguardo all’acquisizione del percorso della directory
    •       Il percorso della directory inserito non è valido perché la cartella specificata non esiste
    •       Il percorso della directory inserito non è valido perché la cartella specificata è in realtà un
            file di testo o un file html
    •       Il percorso della directory inserito non contiene file txt o html o non vi e' nessun file al suo
            interno
    •       I file contenuti all’interno della directory sono entrambi vuoti
Riguardo la parola da cercare
    •   La parola o le parole cercate non sono presenti in nessun file
Riguardo altri aspetti:
•   All’inizio dell’esecuzione del programma il file di indice non esiste; viene creato dopo
       l’indicizzazione
   •   Nel file ci sono 2 parole uguali


Progettazione
Per l’implementazione del programma e stata scelta una tecnica ibrida che usa sia lo sviluppo top-
down che quello bottom-up .
Una prima scomposizione del problema individua le seguenti parti :


                                     Virgilio Desktop (main)




 Indicizzazione                                                              Ricerca boolena



                                                                    AND                        OR



Da questo schema sono state poi individuate le classi base per l’organizzazione del programma:
   • Classe Virgilio Desktop
   • Classe Indicizzazione
   • Classe Ricerca Booleana
Queste sono legate tra loro tramite le seguenti relazioni:



                                                       Parole[ ]
                         Virginio Desktop                           Indicizzazione
                         (main)


                                                    Percorso File


         Stringa da cercare                 File Trovati [ ]
         Parole [ ]




                       Ricerca Booleana
Il main avrà il compito di interfacciarsi con l’utente, quindi presenterà un piccolo menù da cui
scegliere l’operazione da effettuare.
Provvede inoltre ad effettuare il salvataggio dell’indicizzazione sul file indice del motore di ricerca.
Le variabili principali utilizzate da questa classe saranno:
     •   Percorso (Stringa): memorizza il percorso di un file
     •   Scelta (Stringa) : memorizza la scelta del menù
     •   Index (File) : file in cui sono memorizzate tutte le parole dei file nella cartella specificata
Da qui saranno inoltre lanciate tutte le stampe a video (indicizzazione e ricerca ) e gestite tutte le
eccezioni lanciate dai vari metodi e costruttori della altri classi.
La classe indicizzazione si occuperà invece di aprire e leggere uno alla volta tutti i file presenti nella
directory specificata.
Per ogni file controllerà se la parola letta sarà gia contenuta nell’ hashmap di appoggio usato per
contenere le parole lette.
Se non lo è aggiungerà la nuova parola con il percorso del file, altrimenti aggiungerà solo il
percorso.
E previsto anche il caso in cui ci siano più parole uguali nello stesso file e viene gestito prendendo
in considerazione solo la prima parola e ignorando tutte le altre.
In questa classe si è preferito l’uso dell’ Hashmap perché c’e un risparmio notevole di codice e di
tempo. Infatti con essa non è necessario passare in rassegna un eventuale vettore usato per questo
scopo e si risparmia anche la scrittura del codice corrispondente.
Inoltre questa classe prevede il controllo delle stopword.
Le variabili e le strutture dati principali usate in questa classe sono :
    •    Files[] (File) : è un array che contiene i nomi di tutti i file presenti nella directory
         specificata
    •    Parola [] : un vettore formato da una piccola classe secondaria che è composta da un campo
         che contiene la parola (String), e da un altro che contiene i percorsi dei file (ArrayList
         <String>)
    •    Percorso : variabile stringa ricevuta dal main
    •    Index : hashmap che contiene l’indicizzazione dei file e viene restituita al main.
La classe ricerca si occupa di eseguire le 2 ricerche booleane.
Prendendo in input le parole da ricercare separate da una virgola, per la ricerca OR controlla se nel
hashmap presente in memoria sono presenti file che contengono almeno una delle parole digitate.
Se non viene trovata alcuna parola viene restituito il valore null.
Nella ricerca AND vengono trovati tutti i file che contengono tutte le parole digitate anche qui nel
caso non ce ne siano sarà restituito il risultato null.
Le variabili usate saranno:
    •   Indice (Hashmap ) : rappresenta la struttura su cui saranno eseguite le ricerche
    •   Parole [] (String) : Array ottenuto con il metodo split della classe String per separare le
        parole da ricercare
    •   Risultato ricerca [] (String): Contiene tutti i percorsi dei file su cui sono presenti le parole.
I casi limite trovati nell’analisi del progetto sono stati tutti considerati e gestiti attraverso il lancio
delle eccezione dove possibile o attraverso messaggi all’utente.
Raffinamento dell’algoritmo
Indicizzazione
   -   Inizio
                      Indicazione della directory con i file da indicizzare (percorso tipo String)
           o Indicizzazione dei file
                      Controllo se il percorso è una directory
                      Controllo se la directory non è vuota
                      Controllo se la directory contiene file txt o file html
           o In caso negativo (in uno dei tre casi): lancio un eccezione
                      Fine del programma con messaggio di errore
           o In caso affermativo (soddisfo le tre condizioni)
                      Apro i file contenuto nella cartella
                      Memorizzo ogni parola in un dizionario (indice tipo HashMap)
                      Salvo i dati in un file (Indice.txt tipo File documento di testo)
   -   Fine


Ricerca e visualizzazione
   -   Inizio
                      Tipo di scelta da effettuare nel menù principale
           o Scelta della visualizzazione dell’indicizzazione
                      Scorre tutto il dizionario con le parole indicizzato precedentemente
                      Stampa ad uno ad uno tutte le parole fintanto che il dizionario non è arrivato
                      alla fine
                      Ritorna al menù principale
           o Scelta della Ricerca binaria OR
                      Chiede in input la stringa di parole da ricercare (separate da “,”)
                      Divide la stringa di parole in singole parole (frase.split)
                      Controlla per ogni parola data in input se ci sono le corrispondenti parole nel
                      dizionario
                            •   In caso negativo
                                   o Torna al menù principale con una segnalazione di errore
                            •   In caso affermativo
                                   o Per ogni parola trovata memorizza in un vettore dei risultati il
                                       percorso del file in cui si trova la parola fintanto che non
scorre tutto il dizionario (risultatoRicerca tipo
                         ArrayList<String>)
                     o Stampa il vettore dei risultati a video
                     o Ritorna al menù principale
o Scelta della Ricerca binaria AND
          Chiede in input la stringa di parole da ricercare (separate da “,”)
          Divide la stringa di parole in singole parole (frase.split)
          Trova per la prima parola le occorrenza nel dizionario
             •   In caso negativo
                     o Torna al menù principale con segnalazione di errore
             •   In caso affermativo
                     o Mette nel vettore dei risultati i percorsi dei file in cui la parola
                         occorre
          Continua con le altre parole da ricercare nel caso ci fossero
             •   In caso negativo
                     o Stampa a video i risultati della ricerca e torna al menù
                         principale
             •   In caso affermativo
                     o Continua con la ricerca della parola nel dizionario
                                 In caso negativo
                                      •   Torna al menù principale con una segnalazione
                                          di errore
                                 In caso affermativo
                                      •   Controlla se il percorso della parola è uguale ad
                                          uno (o più) percorsi che si trova nel vettore dei
                                          risultati
                                              o In caso negativo
                                                         Torna al menù principale con
                                                         segnalazione di errore
                                              o In caso affermativo
                                                         Aggiorna il vettore dei risultati
          (Si continua come per il punto precedente fino al termine delle parole da
          ricercare date in input)
          Stampa a video del vettore dei risultati
Torna al menù principale
           o Scelta di uscita dal programma
                       Termina il programma chiudendo il file Indice.txt
   -   Fine




Codifica
La codifica avverrà in linguaggio java per permettere una maggiore portabilità del software.
Per il codice leggere l’allegato cartaceo o digitale.




Test
Il programma è stato analizzato con il metodo della scatola nera.
CASI TIPICI:
(i dati immessi sono tutti validi)




I file contengono le seguenti parole:
file1 : tutto a posto nn preoccuparti
file2 : ciao come va la il lo la



Mostra indicizzazione :
Effettuare la ricerca OR




Effettuare la ricerca AND
CASI LIMITE:

Il percorso della directory inserito non è valido perché la cartella specificata non esiste:




                                                                                                     I




Il percorso della directory inserito non è valido perché la cartella specificata è in realtà un file di
testo o un file html
Il percorso della directory inserito non contiene file txt o html o non vi e' nessun file al suo interno




La parola o le parole cercate non sono presenti in nessun file

Weitere ähnliche Inhalte

Ähnlich wie Virginio Desktop Analisi

Esercitazioni Ingegneria 6ed
Esercitazioni Ingegneria 6edEsercitazioni Ingegneria 6ed
Esercitazioni Ingegneria 6edbibliobioing
 
Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazioneMajong DevJfu
 
Google Tips
Google TipsGoogle Tips
Google TipsTellima
 
3 edizione Corso risorse elettroniche per la ricerca
3 edizione Corso risorse elettroniche per la ricerca3 edizione Corso risorse elettroniche per la ricerca
3 edizione Corso risorse elettroniche per la ricercabibliobioing
 
Motori di ricerca per cercare file in Linux
Motori di ricerca per cercare file in LinuxMotori di ricerca per cercare file in Linux
Motori di ricerca per cercare file in LinuxRoberto Marmo
 
Risorse elettroniche per la ricerca 5.ed
Risorse elettroniche per la ricerca 5.edRisorse elettroniche per la ricerca 5.ed
Risorse elettroniche per la ricerca 5.edbibliobioing
 
Risorse elettroniche per la ricerca 5 ed
Risorse elettroniche per la ricerca 5 edRisorse elettroniche per la ricerca 5 ed
Risorse elettroniche per la ricerca 5 edbibliobioing
 
Argo CMS: Get Started! - Guida rapida a come realizzare manuali, help online ...
Argo CMS: Get Started! - Guida rapida a come realizzare manuali, help online ...Argo CMS: Get Started! - Guida rapida a come realizzare manuali, help online ...
Argo CMS: Get Started! - Guida rapida a come realizzare manuali, help online ...KEA s.r.l.
 
Rumore Silenzio
Rumore SilenzioRumore Silenzio
Rumore Silenziosimonardi
 
Presentazione Tesi Marco Ventura
Presentazione Tesi Marco VenturaPresentazione Tesi Marco Ventura
Presentazione Tesi Marco Venturaguest335584
 
Open web programming
Open web programmingOpen web programming
Open web programmingnois3lab
 
2d. lezione ss bd e standard
2d. lezione ss bd e standard2d. lezione ss bd e standard
2d. lezione ss bd e standardMau-Messenger
 
Argo CMS - Correttore ortografico (spell-checker)
Argo CMS - Correttore ortografico (spell-checker)Argo CMS - Correttore ortografico (spell-checker)
Argo CMS - Correttore ortografico (spell-checker)KEA s.r.l.
 

Ähnlich wie Virginio Desktop Analisi (20)

Esercitazioni Ingegneria 6ed
Esercitazioni Ingegneria 6edEsercitazioni Ingegneria 6ed
Esercitazioni Ingegneria 6ed
 
Py a2 python-documentazione
Py a2 python-documentazionePy a2 python-documentazione
Py a2 python-documentazione
 
Google Tips
Google TipsGoogle Tips
Google Tips
 
3 edizione Corso risorse elettroniche per la ricerca
3 edizione Corso risorse elettroniche per la ricerca3 edizione Corso risorse elettroniche per la ricerca
3 edizione Corso risorse elettroniche per la ricerca
 
Motori di ricerca per cercare file in Linux
Motori di ricerca per cercare file in LinuxMotori di ricerca per cercare file in Linux
Motori di ricerca per cercare file in Linux
 
Risorse elettroniche per la ricerca 5.ed
Risorse elettroniche per la ricerca 5.edRisorse elettroniche per la ricerca 5.ed
Risorse elettroniche per la ricerca 5.ed
 
Polisearch
PolisearchPolisearch
Polisearch
 
Risorse elettroniche per la ricerca 5 ed
Risorse elettroniche per la ricerca 5 edRisorse elettroniche per la ricerca 5 ed
Risorse elettroniche per la ricerca 5 ed
 
Argo CMS: Get Started! - Guida rapida a come realizzare manuali, help online ...
Argo CMS: Get Started! - Guida rapida a come realizzare manuali, help online ...Argo CMS: Get Started! - Guida rapida a come realizzare manuali, help online ...
Argo CMS: Get Started! - Guida rapida a come realizzare manuali, help online ...
 
Rumore Silenzio
Rumore SilenzioRumore Silenzio
Rumore Silenzio
 
Rumore Silenzio
Rumore SilenzioRumore Silenzio
Rumore Silenzio
 
Presentazione Tesi Marco Ventura
Presentazione Tesi Marco VenturaPresentazione Tesi Marco Ventura
Presentazione Tesi Marco Ventura
 
Open web programming
Open web programmingOpen web programming
Open web programming
 
2d. lezione ss bd e standard
2d. lezione ss bd e standard2d. lezione ss bd e standard
2d. lezione ss bd e standard
 
Argo CMS - Correttore ortografico (spell-checker)
Argo CMS - Correttore ortografico (spell-checker)Argo CMS - Correttore ortografico (spell-checker)
Argo CMS - Correttore ortografico (spell-checker)
 
Programming iOS lezione 3
Programming iOS lezione 3Programming iOS lezione 3
Programming iOS lezione 3
 
Py a4 python-file
Py a4 python-filePy a4 python-file
Py a4 python-file
 
Presentazione java7
Presentazione java7Presentazione java7
Presentazione java7
 
Strategie Per Un Lor Federato
Strategie Per Un Lor FederatoStrategie Per Un Lor Federato
Strategie Per Un Lor Federato
 
2006 Py04 avanzato
2006 Py04 avanzato2006 Py04 avanzato
2006 Py04 avanzato
 

Mehr von Alartzero

Riprogettazione Dellinterfaccia
Riprogettazione DellinterfacciaRiprogettazione Dellinterfaccia
Riprogettazione DellinterfacciaAlartzero
 
Valutazione Dellinterazione
Valutazione DellinterazioneValutazione Dellinterazione
Valutazione DellinterazioneAlartzero
 
Analisi Dei Requisiti E Progettazione Dellinterazione
Analisi Dei Requisiti E Progettazione DellinterazioneAnalisi Dei Requisiti E Progettazione Dellinterazione
Analisi Dei Requisiti E Progettazione DellinterazioneAlartzero
 
Programmazione per il web - WebWord
Programmazione per il web - WebWordProgrammazione per il web - WebWord
Programmazione per il web - WebWordAlartzero
 
Economia Dellinnovazione Caso Di Studio Nintendo
Economia Dellinnovazione   Caso Di Studio   NintendoEconomia Dellinnovazione   Caso Di Studio   Nintendo
Economia Dellinnovazione Caso Di Studio NintendoAlartzero
 
Linguaggi Di Programmazione Caso Di Studio
Linguaggi Di Programmazione   Caso Di StudioLinguaggi Di Programmazione   Caso Di Studio
Linguaggi Di Programmazione Caso Di StudioAlartzero
 
Programmazione Doc Gest, Codifica
Programmazione   Doc Gest, CodificaProgrammazione   Doc Gest, Codifica
Programmazione Doc Gest, CodificaAlartzero
 
Virginio Desktop Codifica
Virginio Desktop   CodificaVirginio Desktop   Codifica
Virginio Desktop CodificaAlartzero
 
Algoritmi E Strutture Dati Alberi N Ari
Algoritmi E Strutture Dati   Alberi N AriAlgoritmi E Strutture Dati   Alberi N Ari
Algoritmi E Strutture Dati Alberi N AriAlartzero
 
Algoritmi E Strutture Dati Liste
Algoritmi E Strutture Dati   ListeAlgoritmi E Strutture Dati   Liste
Algoritmi E Strutture Dati ListeAlartzero
 
Algoritmi E Strutture Dati Code
Algoritmi E Strutture Dati   CodeAlgoritmi E Strutture Dati   Code
Algoritmi E Strutture Dati CodeAlartzero
 
Algoritmi E Strutture Dati Pile
Algoritmi E Strutture Dati   PileAlgoritmi E Strutture Dati   Pile
Algoritmi E Strutture Dati PileAlartzero
 
Ingegneria Del Software Schedule, Test
Ingegneria Del Software   Schedule, TestIngegneria Del Software   Schedule, Test
Ingegneria Del Software Schedule, TestAlartzero
 
Ingegneria Del Software Schedule, Progetto
Ingegneria Del Software   Schedule, ProgettoIngegneria Del Software   Schedule, Progetto
Ingegneria Del Software Schedule, ProgettoAlartzero
 
Ingegneria Del Software Schedule, Analisi
Ingegneria Del Software   Schedule, AnalisiIngegneria Del Software   Schedule, Analisi
Ingegneria Del Software Schedule, AnalisiAlartzero
 

Mehr von Alartzero (15)

Riprogettazione Dellinterfaccia
Riprogettazione DellinterfacciaRiprogettazione Dellinterfaccia
Riprogettazione Dellinterfaccia
 
Valutazione Dellinterazione
Valutazione DellinterazioneValutazione Dellinterazione
Valutazione Dellinterazione
 
Analisi Dei Requisiti E Progettazione Dellinterazione
Analisi Dei Requisiti E Progettazione DellinterazioneAnalisi Dei Requisiti E Progettazione Dellinterazione
Analisi Dei Requisiti E Progettazione Dellinterazione
 
Programmazione per il web - WebWord
Programmazione per il web - WebWordProgrammazione per il web - WebWord
Programmazione per il web - WebWord
 
Economia Dellinnovazione Caso Di Studio Nintendo
Economia Dellinnovazione   Caso Di Studio   NintendoEconomia Dellinnovazione   Caso Di Studio   Nintendo
Economia Dellinnovazione Caso Di Studio Nintendo
 
Linguaggi Di Programmazione Caso Di Studio
Linguaggi Di Programmazione   Caso Di StudioLinguaggi Di Programmazione   Caso Di Studio
Linguaggi Di Programmazione Caso Di Studio
 
Programmazione Doc Gest, Codifica
Programmazione   Doc Gest, CodificaProgrammazione   Doc Gest, Codifica
Programmazione Doc Gest, Codifica
 
Virginio Desktop Codifica
Virginio Desktop   CodificaVirginio Desktop   Codifica
Virginio Desktop Codifica
 
Algoritmi E Strutture Dati Alberi N Ari
Algoritmi E Strutture Dati   Alberi N AriAlgoritmi E Strutture Dati   Alberi N Ari
Algoritmi E Strutture Dati Alberi N Ari
 
Algoritmi E Strutture Dati Liste
Algoritmi E Strutture Dati   ListeAlgoritmi E Strutture Dati   Liste
Algoritmi E Strutture Dati Liste
 
Algoritmi E Strutture Dati Code
Algoritmi E Strutture Dati   CodeAlgoritmi E Strutture Dati   Code
Algoritmi E Strutture Dati Code
 
Algoritmi E Strutture Dati Pile
Algoritmi E Strutture Dati   PileAlgoritmi E Strutture Dati   Pile
Algoritmi E Strutture Dati Pile
 
Ingegneria Del Software Schedule, Test
Ingegneria Del Software   Schedule, TestIngegneria Del Software   Schedule, Test
Ingegneria Del Software Schedule, Test
 
Ingegneria Del Software Schedule, Progetto
Ingegneria Del Software   Schedule, ProgettoIngegneria Del Software   Schedule, Progetto
Ingegneria Del Software Schedule, Progetto
 
Ingegneria Del Software Schedule, Analisi
Ingegneria Del Software   Schedule, AnalisiIngegneria Del Software   Schedule, Analisi
Ingegneria Del Software Schedule, Analisi
 

Virginio Desktop Analisi

  • 1. A.A 2005/2006 C.D.L ITPS Alunni Centrone Sergio, Gadaleta Fabio Gruppo BaelSoft Production Corso di Studio : Programmazione Analisi, progettazione, codifica e test di un caso di studio. È stata commissionata la realizzazione del seguente programma : Realizzare attraverso opportune classi (>1) le seguenti funzionalità di un micro motore di ricerca personale VIRGINIO Desktop 1. indicizzazione delle parole presenti nei file contenuti in una cartella indicata dall'utente (txt o testo di pagine html). per ogni parola dovrà essere associata la lista delle posizioni (path) dei file tali info risiederanno in un opportuno file indice del motore. a scelta è possibile trascurare le parole troppo comuni (stopword) di cui esistono liste 2. ricerca OR: su input di una o più stringhe, vanno restituite le posizioni di tutti i file in cui compaia almeno una delle stringhe. 3. ricerca AND: su input di una o più stringhe, vanno restituite le posizioni di tutti i file in cui compaiano tutte le stringhe. 1. Analisi Per una realizzazione efficiente del progetto sono stati chiesti al committente alcuni esempi dell’utilizzo del micro motore di ricerca : Data la cartella in cui sono presenti 2 file che contengono le seguenti stringhe • File1 conterrà “ciao come va” • File 2 conterrà “va tutto bene “ Dopo l’indicizzazione il file indice di Virginio Desktop conterrà : ciao percorso file 1 come percorso file1 va percorso file1 percorso file 2 tutto percorso file 2 bene percorso file 2
  • 2. nel caso in cui nel file siano presenti articoli, preposizioni o simboli vari di punteggiatura, saranno considerati come stopword e saranno ignorate al momento dell’indicizzazione. Quando verrà eseguita una nuova indicizzazione il contenuto del file sarà soprascritto. Per le 2 ricerche richieste si agirà circa allo stesso modo : si prende in input una o piu parole da trovare separate dalla virgola e le si ricercheranno in tutti i file della directory specificata. La differenza tra le ricerche e che una restituisce la posizione di tutti i file che contengano almeno una delle parole inserite (se viene chiesto di ricercare più di una parola), mentre la seconda, restituisce tutte le posizioni dei file che contengono tutte le parole inserite. Esempio fornito dal committente : Ricerca or Inserisci la stringa da ricercare : come ,va La stringa è presente nel file : percorso file 1 percorso file 2 Ricerca and Inserisci la stringa da ricercare : come, va La stringa è presente nel file : percorso file 1. Dopo un’attenta analisi della traccia commissionata sono risultati i seguenti dati di input : • Il precorso della directory che contiene i file • Le stringhe da ricercare I dati di output saranno • Il file indice del micro motore • I risultati delle ricerche effettuate Per quel che riguarda i casi limite, ne sono stati identificati i seguenti: Riguardo all’acquisizione del percorso della directory • Il percorso della directory inserito non è valido perché la cartella specificata non esiste • Il percorso della directory inserito non è valido perché la cartella specificata è in realtà un file di testo o un file html • Il percorso della directory inserito non contiene file txt o html o non vi e' nessun file al suo interno • I file contenuti all’interno della directory sono entrambi vuoti Riguardo la parola da cercare • La parola o le parole cercate non sono presenti in nessun file Riguardo altri aspetti:
  • 3. All’inizio dell’esecuzione del programma il file di indice non esiste; viene creato dopo l’indicizzazione • Nel file ci sono 2 parole uguali Progettazione Per l’implementazione del programma e stata scelta una tecnica ibrida che usa sia lo sviluppo top- down che quello bottom-up . Una prima scomposizione del problema individua le seguenti parti : Virgilio Desktop (main) Indicizzazione Ricerca boolena AND OR Da questo schema sono state poi individuate le classi base per l’organizzazione del programma: • Classe Virgilio Desktop • Classe Indicizzazione • Classe Ricerca Booleana Queste sono legate tra loro tramite le seguenti relazioni: Parole[ ] Virginio Desktop Indicizzazione (main) Percorso File Stringa da cercare File Trovati [ ] Parole [ ] Ricerca Booleana
  • 4. Il main avrà il compito di interfacciarsi con l’utente, quindi presenterà un piccolo menù da cui scegliere l’operazione da effettuare. Provvede inoltre ad effettuare il salvataggio dell’indicizzazione sul file indice del motore di ricerca. Le variabili principali utilizzate da questa classe saranno: • Percorso (Stringa): memorizza il percorso di un file • Scelta (Stringa) : memorizza la scelta del menù • Index (File) : file in cui sono memorizzate tutte le parole dei file nella cartella specificata Da qui saranno inoltre lanciate tutte le stampe a video (indicizzazione e ricerca ) e gestite tutte le eccezioni lanciate dai vari metodi e costruttori della altri classi. La classe indicizzazione si occuperà invece di aprire e leggere uno alla volta tutti i file presenti nella directory specificata. Per ogni file controllerà se la parola letta sarà gia contenuta nell’ hashmap di appoggio usato per contenere le parole lette. Se non lo è aggiungerà la nuova parola con il percorso del file, altrimenti aggiungerà solo il percorso. E previsto anche il caso in cui ci siano più parole uguali nello stesso file e viene gestito prendendo in considerazione solo la prima parola e ignorando tutte le altre. In questa classe si è preferito l’uso dell’ Hashmap perché c’e un risparmio notevole di codice e di tempo. Infatti con essa non è necessario passare in rassegna un eventuale vettore usato per questo scopo e si risparmia anche la scrittura del codice corrispondente. Inoltre questa classe prevede il controllo delle stopword. Le variabili e le strutture dati principali usate in questa classe sono : • Files[] (File) : è un array che contiene i nomi di tutti i file presenti nella directory specificata • Parola [] : un vettore formato da una piccola classe secondaria che è composta da un campo che contiene la parola (String), e da un altro che contiene i percorsi dei file (ArrayList <String>) • Percorso : variabile stringa ricevuta dal main • Index : hashmap che contiene l’indicizzazione dei file e viene restituita al main. La classe ricerca si occupa di eseguire le 2 ricerche booleane. Prendendo in input le parole da ricercare separate da una virgola, per la ricerca OR controlla se nel hashmap presente in memoria sono presenti file che contengono almeno una delle parole digitate. Se non viene trovata alcuna parola viene restituito il valore null.
  • 5. Nella ricerca AND vengono trovati tutti i file che contengono tutte le parole digitate anche qui nel caso non ce ne siano sarà restituito il risultato null. Le variabili usate saranno: • Indice (Hashmap ) : rappresenta la struttura su cui saranno eseguite le ricerche • Parole [] (String) : Array ottenuto con il metodo split della classe String per separare le parole da ricercare • Risultato ricerca [] (String): Contiene tutti i percorsi dei file su cui sono presenti le parole. I casi limite trovati nell’analisi del progetto sono stati tutti considerati e gestiti attraverso il lancio delle eccezione dove possibile o attraverso messaggi all’utente.
  • 6. Raffinamento dell’algoritmo Indicizzazione - Inizio Indicazione della directory con i file da indicizzare (percorso tipo String) o Indicizzazione dei file Controllo se il percorso è una directory Controllo se la directory non è vuota Controllo se la directory contiene file txt o file html o In caso negativo (in uno dei tre casi): lancio un eccezione Fine del programma con messaggio di errore o In caso affermativo (soddisfo le tre condizioni) Apro i file contenuto nella cartella Memorizzo ogni parola in un dizionario (indice tipo HashMap) Salvo i dati in un file (Indice.txt tipo File documento di testo) - Fine Ricerca e visualizzazione - Inizio Tipo di scelta da effettuare nel menù principale o Scelta della visualizzazione dell’indicizzazione Scorre tutto il dizionario con le parole indicizzato precedentemente Stampa ad uno ad uno tutte le parole fintanto che il dizionario non è arrivato alla fine Ritorna al menù principale o Scelta della Ricerca binaria OR Chiede in input la stringa di parole da ricercare (separate da “,”) Divide la stringa di parole in singole parole (frase.split) Controlla per ogni parola data in input se ci sono le corrispondenti parole nel dizionario • In caso negativo o Torna al menù principale con una segnalazione di errore • In caso affermativo o Per ogni parola trovata memorizza in un vettore dei risultati il percorso del file in cui si trova la parola fintanto che non
  • 7. scorre tutto il dizionario (risultatoRicerca tipo ArrayList<String>) o Stampa il vettore dei risultati a video o Ritorna al menù principale o Scelta della Ricerca binaria AND Chiede in input la stringa di parole da ricercare (separate da “,”) Divide la stringa di parole in singole parole (frase.split) Trova per la prima parola le occorrenza nel dizionario • In caso negativo o Torna al menù principale con segnalazione di errore • In caso affermativo o Mette nel vettore dei risultati i percorsi dei file in cui la parola occorre Continua con le altre parole da ricercare nel caso ci fossero • In caso negativo o Stampa a video i risultati della ricerca e torna al menù principale • In caso affermativo o Continua con la ricerca della parola nel dizionario In caso negativo • Torna al menù principale con una segnalazione di errore In caso affermativo • Controlla se il percorso della parola è uguale ad uno (o più) percorsi che si trova nel vettore dei risultati o In caso negativo Torna al menù principale con segnalazione di errore o In caso affermativo Aggiorna il vettore dei risultati (Si continua come per il punto precedente fino al termine delle parole da ricercare date in input) Stampa a video del vettore dei risultati
  • 8. Torna al menù principale o Scelta di uscita dal programma Termina il programma chiudendo il file Indice.txt - Fine Codifica La codifica avverrà in linguaggio java per permettere una maggiore portabilità del software. Per il codice leggere l’allegato cartaceo o digitale. Test Il programma è stato analizzato con il metodo della scatola nera.
  • 9. CASI TIPICI: (i dati immessi sono tutti validi) I file contengono le seguenti parole: file1 : tutto a posto nn preoccuparti file2 : ciao come va la il lo la Mostra indicizzazione :
  • 10. Effettuare la ricerca OR Effettuare la ricerca AND
  • 11. CASI LIMITE: Il percorso della directory inserito non è valido perché la cartella specificata non esiste: I Il percorso della directory inserito non è valido perché la cartella specificata è in realtà un file di testo o un file html
  • 12. Il percorso della directory inserito non contiene file txt o html o non vi e' nessun file al suo interno La parola o le parole cercate non sono presenti in nessun file