Università degli Studi di Bologna FACOLTÀ DI INGEGNERIA Corso di Laurea in Ingegneria Gestionale Sistemi Informativi Progettazione e Sviluppo di un Sistema Informativo per la Gestione della Distinta Base Tesi di Laurea di: Relatore: Michele Borghi Chiar.ma Prof. Wilma Penzo Correlatori: Ing. Marco Patella Ing. Andrea Regazzi Anno Accademico 2002-2003 Introduzione _______________________________________________10 1. LA DISTINTA BASE____________________________________15 1.1. La definizione di distinta base ______________________15 1.1.1. Una ricetta tecnica di prodotto _________________15 1.1.2. Un risultato della progettazione di prodotto _______16 2. 1.2. Le conseguenze di errori nella distinta base ___________16 1.3. La struttura della distinta base _____________________17 1.4. La distinta base nei sistemi MRP ____________________18 1.5. Le problematiche relative alla distinta base ___________19 1.6. L’importanza della distinta base ____________________20 IL SISTEMA PREESISTENTE ___________________________21 2.1. Caratteristiche tecniche ___________________________21 2.2. La struttura del database __________________________22 2.2.1. Le due anime del vecchio database ______________26 2.2.2. Analisi statistica sulle tabelle __________________29 2.2.3. I risultati dell’analisi della struttura______________38 2.3. Analisi della qualità dei dati ________________________39 2.3.1. La codifica degli elementi _____________________40 La gerarchia degli elementi________________________41 I dati reali e il codice ____________________________44 2.3.2. La descrizione dei componenti _________________45 2 2.3.3. I documenti allegati__________________________46 2.3.4. Altri piccoli problemi ________________________46 2.3.5. I risultati dell’analisi della qualità dei dati ________47 2.4. Analisi delle procedure di gestione __________________48 2.4.1. La creazione di un elemento ___________________48 2.4.2. L’inserimento di una distinta___________________50 2.4.3. La revisione di un elemento ___________________53 Cos’è una revisione ______________________________53 La procedura di revisione _________________________54 2.5. Analisi dei sistemi di sicurezza ______________________55 2.5.1. La gestione dei permessi ______________________56 2.5.2. I backup e il ripristino dei dati__________________57 2.6. Analisi dell’interfaccia ____________________________57 2.6.1. L’home page _______________________________58 2.6.2. La visualizzazione delle tabelle_________________59 2.6.3. La scheda elemento __________________________60 2.6.4. La visualizzazione della distinta ________________61 2.6.5. La ricerca delle informazioni __________________61 2.6.6. L’esportazione dei dati _______________________62 2.6.7. Considerazioni conclusive sull’interfaccia utente ___63 3. IL SISTEMA DI CODIFICA______________________________64 3.1. Gli obiettivi da raggiungere ________________________64 3.2. La soluzione proposta _____________________________64 3.2.1. La funzione di analisi del codice ________________65 3.2.2. La razionalizzazione del sistema di codifica _______66 3 3.2.3. Il controllo sui dati inseriti ____________________67 3.3. La soluzione operativa: il modello di riferimento_______67 3.3.1. L’albero dei formati _________________________68 3.3.2. La rappresentazione testuale dell’albero __________69 4. LA GESTIONE DELLE DISTINTE ________________________73 4.1. I limiti del sistema preesistente _____________________73 4.2. La distinta base per Sadel__________________________74 4.2.1. Gli elementi e la distinta base __________________75 I prodotti Sadel _________________________________75 Le schede elettroniche ____________________________76 Le parti meccaniche _____________________________77 Il caso limite ___________________________________78 Gli assemblati senza distinta _______________________78 L’esplosione della distinta_________________________79 4.3. I requisiti della distinta base________________________80 4.4. La proposta operativa_____________________________81 4.4.1. La distinta base come auto-associazione __________82 4.4.2. Procedura di inserimento di una distinta __________83 5. LA GESTIONE DELLE REVISIONI _______________________87 5.1. Cosa si intende per revisione _______________________87 5.2. Gli obiettivi da raggiungere ________________________88 5.3. Gli elementi obsoleti ______________________________89 5.4. La politica aziendale delle revisioni __________________89 4 L’essenza del problema ___________________________91 5.5. L’effetto domino sulle revisioni _____________________92 5.6. Il confronto tra le due alternative ___________________94 La scelta aziendale ______________________________95 Alcuni dubbi conclusivi ___________________________96 6. 7. 8. LA PROCEDURA DI APPROVAZIONE ____________________97 6.1. La situazione preesistente__________________________97 6.2. Come affrontare il problema _______________________98 6.3. Il protocollo di approvazione _______________________99 6.4. I miglioramenti apportati _________________________104 LA GESTIONE DEI DOCUMENTI _______________________105 7.1. I documenti nel sistema preesistente ________________105 7.2. Una soluzione semplice e potente ___________________106 7.3. Obiettivi raggiunti_______________________________108 RICERCA E VISUALIZZAZIONE DELLE INFORMAZIONI _109 8.1. Il limite del sistema preesistente____________________110 8.1.1. La soluzione al problema dei componenti speciali _110 8.1.2. L’importazione del campo descrizione __________112 8.2. Le viste principali e la struttura delle informazioni ____114 8.3. La struttura di visualizzazione_____________________116 8.4. La ricerca ______________________________________117 5 8.4.1. La ricerca semplice _________________________117 8.4.2. La ricerca avanzata _________________________118 9. 8.5. La progettazione operativa________________________119 8.6. Esportazione e stampa delle informazioni____________121 LA SICUREZZA ______________________________________123 9.1. Gestione dei permessi di accesso ___________________123 9.1.1. Gli strumenti offerti da MySQL _______________124 9.1.2. La progettazione della logica di gestione ________125 9.1.3. La gestione dei permessi _____________________127 9.2. Sistemi di prevenzione e recupero dei dati ___________127 9.2.1. Gli strumenti offerti da MySQL _______________128 9.2.2. Il file di log _______________________________128 9.2.3. La gestione dei backup ______________________130 10. IL PROGETTO DELLA BASE DI DATI ___________________131 10.1. La progettazione concettuale ______________________131 10.1.1. Lo schema E-R ____________________________131 Individuazione delle entità e delle associazioni _______132 Lo schema scheletro ____________________________133 Gli attributi e le chiavi __________________________135 Il modello completo _____________________________141 10.2. La progettazione logica___________________________142 10.2.1. Lo schema normalizzato _____________________142 10.2.2. Gli schemi di relazioni ______________________144 10.3. 6 La progettazione fisica ___________________________145 10.3.1. Definizione degli attributi ____________________146 11. L’IMPLEMENTAZIONE DEL SISTEMA__________________154 11.1. Gli strumenti ___________________________________154 11.1.1. Il linguaggio PHP __________________________154 11.1.2. Il database MySQL _________________________155 Perché MySQL è meglio di Access _________________156 11.1.3. L’architettura del sistema ____________________159 11.2. La realizzazione del database______________________159 11.2.1. La creazione delle tabelle ____________________159 PhpMyAdmin__________________________________164 11.2.2. La creazione dei permessi iniziali ______________165 11.2.3. L’importazione dei dati ______________________166 Riempimento delle tabelle compatibili ______________167 L’importazione dei documenti allegati ______________168 La pulizia dei dati ______________________________170 Importazione dei componenti speciali _______________171 11.3. L’interfaccia utente ______________________________172 11.3.1. L’usabilità ________________________________172 11.3.2. La struttura di visualizzazione_________________175 Il menù di navigazione __________________________175 11.3.3. L’home page ______________________________176 11.3.4. Le viste principali __________________________177 Gli elementi ___________________________________178 I prodotti _____________________________________179 Il magazzino __________________________________180 11.3.5. La “scheda elemento” _______________________180 7 11.3.6. L’esplosione della distinta____________________181 11.3.7. La ricerca_________________________________182 La ricerca semplice _____________________________183 La ricerca avanzata_____________________________183 11.3.8. La gestione dei dati _________________________185 L’inserimento di un elemento e la codifica assistita ____186 Il controllo sui dati _____________________________188 La modifica e l’eliminazione dei dati _______________189 La gestione della distinta_________________________190 L’amministrazione dei permessi e la gestione dei backup192 11.3.9. L’esportazione e la stampa ___________________193 La stampa diretta e i CSS ________________________194 La stampa della distinta _________________________196 12. VARO DEL SISTEMA E SUA VALUTAZIONE _____________199 12.1. Come misurare i miglioramenti ottenuti _____________199 Velocità ______________________________________200 Usabilità dell’interfaccia_________________________201 Ricerca delle informazioni _______________________201 Qualità dei dati ________________________________201 Quantità dei dati contenibili ______________________202 Sicurezza _____________________________________202 Esportazione e stampa dei dati ____________________202 Stabilità del sistema_____________________________203 Costi ________________________________________203 12.2. Valutazione degli indicatori di processo _____________203 12.2.1. Numero di codici errati ______________________203 8 12.2.2. Numero di link interrotti _____________________205 12.2.3. Percentuale di errori evitati nell’inserimento _____205 12.2.4. Istanze eliminate nel passaggio al nuovo sistema __206 12.3. Il questionario __________________________________207 12.4. Valutazioni conclusive sul nuovo sistema ____________210 12.4.1. Miglioramenti ottenuti_______________________210 12.4.2. I lati negativi ______________________________211 Conclusioni_______________________________________________212 Sviluppi futuri_____________________________________________213 Bibliografia_______________________________________________214 Ringraziamenti ____________________________________________216 9 Introduzione La progettazione e lo sviluppo di un sistema informativo per la gestione della distinta base è il tema del presente elaborato. Il discorso nasce dal contesto aziendale e si sviluppa su problematiche economico/gestionali ed informatiche. L’azienda SADEL s.r.l. di Castelmaggiore (BO), presso la quale è stata svolta questa tesi, si occupa di progettazione, sviluppo e realizzazione di schede elettroniche e di macchine che fanno uso di schede elettroniche. Al fine di ottenere la Certificazione di Qualità secondo le norme ISO 9000, l’azienda ha pensato alla realizzazione di un sistema organizzativo per la gestione della distinta base estremamente snello e gestibile con applicazioni informatiche. La distinta base è la “ricetta tecnica” del prodotto ed è un documento chiave per l’azienda di progettazione e di produzione; essa rappresenta difatti il legame tra la fase di progettazione e la fase di realizzazione di un prodotto, inoltre ha numerose implicazioni gestionali su diverse altre problematiche aziendali: il magazzino, l’approvvigionamento, l’assistenza ai clienti, la gestione delle revisioni, il sistema di codifica, la gestione dei documenti di progetto, ecc. All’interno del contesto aziendale presso la quale è stata svolta questa tesi, la distinta base svolge un ruolo fondamentale: essa è il “cuore informativo” dell’azienda e da sola consente la realizzazione di qualsiasi prodotto sviluppato in quanto comprende oltre che i componenti per la realizzazione anche i documenti di progetto necessari per la produzione e la realizzazione. La situazione aziendale, e quindi le caratteristiche del sistema di gestione della distinta base esistente, è il punto dal quale bisogna partire per 10 individuare i requisiti necessari minimi da rispettare, le problematiche maggiori da risolvere e per studiare la struttura delle informazioni conformi alle nuove esigenze. L’individuazione dei requisiti minimi che il sistema dovrà soddisfare precede un’analisi dei requisiti più approfondita relativa alle numerose esigenze aziendali. In particolare si possono distinguere due diverse tipologie di requisiti: requisiti gestionali e requisiti del sistema informativo. Il primo punto debole riscontrato nel sistema preesistente riguarda la mancanza di una verifica sui dati inseriti che ha generato numerosi errori sui dati esistenti ed in particolare provoca gravi effetti relativi al sistema di codifica semiparlante adottato dall’azienda: il rischio è quello di perdere la corrispondenza tra l’elemento fisico codificato e il codice che lo rappresenta all’interno del sistema informativo aziendale. Si rende pertanto necessaria l’introduzione di un sistema di controllo sui dati inseriti ed in particolare sui codici che si basi su una codifica definita in maniera rigorosa affidata al sistema di gestione. Un’altra delle problematiche fondamentali legate alla distinta base riguarda la gestione delle revisioni, cioè le metodologie gestionali con cui i prodotti cambiano di versione e di come tali cambiamenti si ripercuotono sulla distinta base dei prodotti. In particolare, il sistema esistente ha una gestione discutibile per quanto riguarda la reperibilità delle informazioni riguardo le precedenti versioni dei prodotti. L’analisi dei requisiti in questo campo impone la definizione di una metodologia di gestione delle revisioni precisa e gestita in maniera semiautomatica dal sistema. All’interno dell’azienda la gestione della distinta base è affidata ad unico amministratore del sistema che ne ha la responsabilità per quanto riguarda qualunque modifica che venga effettuata su di essa. Data 11 l’importanza della distinta base e degli elementi che la compongono, risulta però rischioso affidare tutta la responsabilità ad un’unica persona. D’altro canto risulta pericoloso anche concedere troppe autorizzazioni per l’intervento sul database. La soluzione a questo problema è l’istituzione di una procedura di approvazione che delega l’approvazione di un componente, di una distinta o di una revisione a chi ne ha effettivamente richiesto l’approvazione mediante uno scambio di e-mail che si instaura tra il sistema, l’amministratore e l’utente “approvatore”. Tra le problematiche più importanti relative alla distinta base spicca anche la gestione dei documenti allegati. L’idea è quella di legare indissolubilmente il documento fisico al link testuale contenuto nel database, per assicurare una perfetta reperibilità dei documenti stessi mediante semplici ricerche sul database ed evitare perdite estremamente gravi. Per quanto riguarda i requisiti a cui deve rispondere il sistema informativo, essi si concretizzano in due grandi categorie: ricerca delle informazioni e sicurezza. È chiaro come la visualizzazione e la ricerca delle informazioni debbano rispettare le esigenze di interrogazione del database da parte degli utenti. Per questo motivo oltre a due meccanismi di ricerca (semplice ed avanzata) si rende necessario un sistema per una ricerca dettagliata all’interno di quelle categorie di elementi più numerose e ritenute più importanti dagli utenti, oltre a meccanismi per l’esportazione e la stampa delle informazioni in altri formati. I requisiti relativi alla sicurezza del sistema si possono invece dividere in due aspetti diversi: gestione dei permessi d’accesso e sistemi di recupero dei dati. In entrambi i casi le procedure rispecchiano le metodologie di sicurezza standard per il database utilizzato. 12 Il naturale sbocco dell’analisi dei requisiti è la progettazione e l’implementazione del sistema. La progettazione, come noto dalla teoria, si suddivide in progettazione della base di dati e progettazione dell’applicazione. La progettazione della base di dati, sviluppata secondo le metodologie standard, ci consente di ottenere lo schema ER normalizzato e quindi la definizione precisa delle tabelle del database. La progettazione dell’applicazione consiste invece nella realizzazione di un programma informatico per la gestione del database appena creato. Questo presuppone la scelta degli strumenti di programmazione che nel nostro caso è ricaduta su PHP (PHP: Hypertext Preprocessor) con database MySQL, entrambi disponibili gratuitamente sul mercato e largamente utilizzate nelle applicazioni web. Il vantaggio principale del PHP è la generazione di pagine HTML interpretabili da un qualsiasi browser e quindi totalmente indipendenti dalla piattaforma di utilizzo. Oltre alla programmazione dell’applicazione bisogna prevedere metodologie di importazione, pulizia e analisi dei dati del sistema preesistente, ed inoltre sviluppare un interfaccia utente potente e facile da usare. L’implementazione del sistema riguarda principalmente quest’ultimo aspetto, cioè su come far interagire l’utente col database attraverso l’applicazione PHP, e, oltre ad implementare le procedure definite, si scontra con numerosi ed ostici problemi relativi alla compatibilità dei formati delle informazioni. Il varo del sistema è l’ultimo passo nella realizzazione di un sistema informativo ed è l’elemento che ci consente di dargli una valutazione. Questo può essere effettuato mediante la raccolta di dati relativi ad alcuni indicatori di processo e mediante la misurazione della soddisfazione dell’utente finale, attraverso un questionario. I risultati ottenuti mostrano un 13 netto miglioramento delle prestazioni del sistema riguardo l’affidabilità dei dati, l’usabilità dell’interfaccia, la ricerca delle informazioni e i costi. Fra i possibili sviluppi futuri del sistema implementato vi è l’apertura verso la rete Internet, naturale sbocco per un sistema web-based, ed il miglioramento delle procedure di esportazione e stampa delle informazioni su un formato più portabile. 14 1. LA DISTINTA BASE La distinta base, la sua funzione, la sua importanza per l’azienda e le problematiche relative ad essa, sono elementi conoscitivi fondamentali per la comprensione del significato della tesi sviluppata nel presente elaborato. In questo capitolo cercheremo di fornire al lettore una base teorica sulla “distinta base” per una comprensione più chiara dei capitoli successivi. 1.1. La definizione di distinta base La distinta base si può definire come “prospetto di dettaglio” qualiquantitativo che riporta i componenti (materie prime, accessori, ecc.) e le quantità-qualità degli stessi, necessari per la produzione di dati prodotti. Essa disegna la configurazione di un prodotto la cui architettura viene abbozzata dal mix delle parti e materiali che lo compongono e che sono necessari per la sua realizzazione. 1.1.1. Una ricetta tecnica di prodotto La distinta base è spesso paragonata alla lista di ingredienti di una torta. Entrambi sono composti da una serie di componenti che insieme costituiscono un prodotto finito, ma gli ingredienti della distinta base, anziché uova, zucchero e farina, sono materie prime, sottoassemblati ed elementi intangibili che contribuiscono al costo del prodotto finito. Non per niente, in inglese, la distinta base è identificata dall’acronimo B.O.M. (Bill Of Materials) e comunque il paragone funziona in quanto la distinta base è sufficiente alla realizzazione del prodotto se associata a delle specifiche di montaggio, così come la lista degli ingredienti è sufficiente 15 alla realizzazione della torta se associata alla ricetta che spiega come utilizzare tali ingredienti. Se associata a delle specifiche di montaggio, quindi sufficiente per la realizzazione di un prodotto, la distinta base può essere considerata una vera e propria “ricetta tecnica di prodotto”. 1.1.2. Un risultato della progettazione di prodotto La distinta base è uno tra i risultati della progettazione del prodotto [9]. I disegni esecutivi generati da questa importante fase dello studio di fattibilità contengono oltre che i disegni di complessivo e di dettaglio, tutte le indicazioni da fornire ai reparti interessati alla produzione ed in particolare la distinta base, rivolta all’ufficio acquisti, che contiene la lista dei materiali da approvvigionare con le relative quantità. 1.2. Le conseguenze di errori nella distinta base Se un ingrediente sbagliato nella torta può avere pesanti effetti nel contesto familiare (un forte mal di pancia o una figuraccia con gli ospiti), nel contesto aziendale ciò assume proporzioni ben più gravi ed incide negativamente sulle prestazioni dell’azienda. Gli effetti indesiderati che può causare sono [6]: errato costo di prodotto; errati livelli di inventario; errori nella contabilità; ritorni di prodotti dal cliente; realizzazione di prodotti “non conformi” alle specifiche; reclami e lamentele dei clienti. 16 Una gestione accurata della distinta base è un prerequisito fondamentale per lo sviluppo di altri sistemi di gestione operativi, come la gestione degli ordini d’acquisto, la gestione delle revisioni di prodotto, la gestione del magazzino. 1.3. La struttura della distinta base La distinta base può essere riportata su una struttura ad albero oppure più semplicemente in un documento in cui ogni sottolivello è rientrato rispetto il livello superiore (vedi esempio). La distinta base può essere strutturata per vari gradi di complessità a seconda dei requisiti aziendali. Un documento relativo a una distinta base dovrebbe rappresentare perlomeno le seguenti informazioni: livello nella struttura; un codice identificativo del componente; il numero di revisione; la quantità richiesta; l’unità di misura (se le quantità non sono omogenee); una descrizione; un indicatore di “Make or Buy” (naturalmente solo gli elementi realizzati dall’azienda, e pertanto “Make”, avranno a loro volta livelli inferiori di dettaglio, mentre le “foglie dell’albero” saranno necessariamente acquistati “Buy”). 17 La distinta può essere completata con informazioni relativi ai costi di acquisto o di lavorazione dei singoli componenti ai diversi livelli, grazie ai quali si può risalire un costo complessivo del prodotto. In ogni caso bisogna porre molta attenzione nel convertire una distinta di produzione in una distinta di costo in quanto i costi della distinta base di produzione sono stime e non rappresentano costi reali. 1.4. La distinta base nei sistemi MRP La distinta base di produzione contiene tutte le informazioni relative al prodotto e tiene traccia di tutti i passaggi che il prodotto percorre fino alla sua realizzazione. La distinta base di produzione è utilizzata nei sistemi MRP. Esistono due tipi di sistemi MRP: MRP I (Materials Requirements Planning); MRP II (Manufacturing Resources Planning). Il sistema MRP I è lo strumento che permette di tenere sotto controllo produzione, fornitori, terzisti, allo scopo di consentire una lineare gestione 18 dei materiali; inoltre sviluppa un piano di produzione allo scopo di assicurare la disponibilità dei materiali, dei componenti e dei semilavorati per rispettare assetto, processo e risultato del piano di produzione fino alle consegne. Negli anni ottanta si è sviluppato l’MRP II che non riguarda solo i materiali ma tutte le risorse che si trovano lungo il processo produttivo. Per questo l’MRP II è diventato uno strumento di “decision-making” per qualsiasi azienda di produzione. In tali sistemi la distinta base non è più una semplice ricetta tecnica ma rappresenta un prodotto che si evolve e si trasforma, nello spazio e nel tempo, dalla progettazione al cliente finale. 1.5. Le problematiche relative alla distinta base La corretta gestione della distinta base racchiude in sé una serie di problematiche dalla quale non si può prescindere. Riportiamo le principali di seguito. La rappresentazione dei livelli. Come rappresentare i livelli e i legami di parentela tra i componenti e gli assemblati. Il sistema di codifica. I componenti sono identificati nella distinta base mediante un codice, è necessario pertanto istituire un sistema di codifica adeguato per la rappresentazione delle distinte e dei componenti. La gestione delle revisioni. Come gestire le nuove versioni dei componenti in distinta. 19 La gestione dei documenti. Come gestire i documenti allegati alla distinta base e che insieme ad essa consentono la realizzazione effettiva del prodotto. La gestione del magazzino. Come gestire il magazzino e l’approvvigionamento in relazione alla distinta base di produzione. Il supporto informativo. Come conservare e reperire le informazioni relative alla distinta base. 1.6. L’importanza della distinta base La distinta base è il cuore dell’azienda di progettazione e/o produzione e rappresenta il legame tra la fase di progettazione e la fase di produzione di un prodotto, con forti implicazioni anche riguardo il problema dell’approvvigionamento e della gestione del magazzino. Abbiamo inoltre visto come la distinta base assuma un ruolo principale all’interno dell’azienda e come essa rappresenti la base informativa su cui sviluppare qualsiasi tipo di sistema informativo per la gestione aziendale. 20 2. IL SISTEMA PREESISTENTE Nelle pagine che seguono riportiamo l’analisi svolta riguardo la struttura del sistema preesistente. L’analisi si può suddividere nelle seguenti fasi: analisi generica delle caratteristiche tecniche; analisi della struttura del database; analisi qualitativa dei dati; analisi delle procedure di gestione; analisi dei sistemi di sicurezza; analisi dell’interfaccia utente. L’obiettivo è individuare le cose da mantenere, quelle da eliminare, quelle da modificare e quelle da aggiungere. 2.1. Caratteristiche tecniche Si tratta di un database realizzato con Microsoft Access 2000, delle dimensioni di circa 10Mbyte (dopo la compressione). Dal punto di vista tecnico, a giudicare dall’opinione degli utenti, non presenta particolari problemi. Svolge senza problemi le operazioni principali per cui è stato creato, mentre la gestione degli inserimenti e di eventuali problemi tecnici è affidata ad un operatore che lo conosce molto bene e che è in grado di risolvere qualsiasi problema si presenti. Il database funziona bene se è usato bene: richiede una conoscenza tecnica elevata e poco trasmissibile. 21 2.2. La struttura del database Aprendo il database Access è possibile visualizzare la struttura tabellare su cui esso si basa dalla quale è necessario individuare: le tabelle che rappresentano delle “entità” (qualcosa che esiste “fisicamente”). le tabelle che rappresentano “associazioni” tra più entità; le tabelle che rappresentano “proprietà” (attributi) di entità. La cosa risulta abbastanza semplice in quanto le entità rappresentano qualcosa di tangibile ed hanno senso in sé e per sé (non necessitano di altre tabelle per avere significato), le associazioni collegano due entità e quindi contengono le “chiavi” di entrambe, le proprietà (oltre ad essere per forza le rimanenti) si individuano in quanto perdono di significato se non collegati all’entità di riferimento. Riportiamo di seguito le tabelle così come sono state trovate nel database Access (le chiavi dove presenti sono in neretto). 22 Facendo le considerazioni sopra descritte per tutte le tabelle si giunge al seguente risultato: la tabelle TBLELEMENTI, TBLFORNITORI, TBLORDINI rappresentano entità; 23 la tabella TBLCOSTI rappresenta una associazione tra l’entità TBLELEMENTI e l’entità TBLFORNITORI; le tabelle TBLCODICICOSTRUTTORI, TBLALTRICOSTRUTTORI, TBLLINK, TBLREVISIONI, TABELLAMASA e TABELLAOPERAZIONIMAS rappresentano proprietà relative all’entità TBLELEMENTI; le tabelle TBLLOTTOPROD, TBLPROGETTI, TBLTIPOACQ rappresentano proprietà relative all’entità ORDINI; la tabella TBLDISTINTE rappresenta un’associazione, in particolare un’auto-associazione tra l’entità TBLELEMENTI e sé stessa, serve per evidenziare il legame di parentela tra due elementi (vedi figura). TBLELEMENTI (0,N) PADRE TBLDISTINTE (0,N) FIGLIO A questo punto è possibile ricavare lo “schema scheletro” della struttura del database preesistente. 24 (1,1) (0,N) tblaltricostruttori tblcodicicostruttori Tabellamasa (0,N) (1,N) (0,1) (0,N) (1,1) (0,1) (1,1) (0,1) (0,1) tblelementi (0,N) PADRE (0,N) FIGLIO tbllink tblrevisioni tbldistinte (0,N) tblcosti (0,N) (1,1) Tabellaoperazionimas tblfornitori (0,N) (0,N) tblLottoProd (0,1) (1,1) tblordini (0,1) (0,1) (0,N) tblTipoAcq (0,N) tblprogetti 25 2.2.1. Le due anime del vecchio database Guardando lo schema rappresentante la struttura del database preesistente si nota immediatamente una suddivisione logica e funzionale tra due aree: la gestione della produzione; la gestione degli ordini. L’area di “produzione” si occupa di immagazzinare le informazioni relative agli elementi e alla distinta base, l’area di gestione degli ordini raccoglie invece i dati relativi agli ordini emessi con le relative caratteristiche. GESTIONE DELLA PRODUZIONE (1,1) (0,N) tblaltricostruttori tblcodicicostruttori Tabellamasa (0,N) (1,N) (0,1) (0,N) (1,1) (0,1) (1,1) (0,1) (0,1) tblelementi (0,N) PADRE (0,N) FIGLIO tbllink tblrevisioni tbldistinte (0,N) tblcosti (0,N) (1,1) Tabellaoperazionimas tblfornitori (0,N) (0,N) tblLottoProd (0,1) (1,1) tblordini (0,1) (0,1) (0,N) tblTipoAcq (0,N) tblprogetti GESTIONE DEGLI ORDINI 26 Queste due aree appaiono a prima vista scollegate tra loro e il loro collegamento sembra quantomeno forzato. In particolare la divisione logica che si evidenzia nell’analisi della struttura è causata dal fatto che tale database non è il risultato di un unico processo di studio del sistema informativo aziendale, bensì l’insieme di successivi miglioramenti fatti per rispondere alle esigenze che si presentavano con l’aumentare delle dimensioni dell’azienda. Esaminando la struttura del database riportata in precedenza si evidenziano le due aree di gestione della produzione e di gestione degli ordini che si intersecano nell’entità TBLFORNITORI. Tale intersezione è estremamente debole, basti considerare la numerosità dei fornitori (circa 170) rispetto quella degli elementi (quasi 9000). La causa di questo si può individuare proprio nella forzata unione di due parti che sia concettualmente che operativamente svolgono funzioni diverse all’interno dell’azienda. Si evidenziano pertanto i seguenti problemi: sono pochi gli elementi a cui è associato un costo e quindi un fornitore; dal singolo ordine non è possibile risalire direttamente al codice elemento in quanto ogni elemento viene codificato nel momento in cui viene utilizzato; le due parti hanno diversi obiettivi e diverse funzioni. Queste considerazioni portano alla conclusione che non vi è alcun motivo che giustifichi l’unione di queste due aree così diverse tra loro, a meno che non si operi una revisione globale di tutto il sistema degli ordini. In particolar modo vi dovrebbe essere una correlazione diretta tra “ordine” ed “elemento”. Ciò implica una lunga serie considerazioni: 27 prima dell’emissione di un ordine sarebbe necessario effettuare la codifica degli elementi che si stanno ordinando; fino ad ora su ogni ordine non è mai stato specificato il relativo codice elemento, l’introduzione del nuovo sistema implicherebbe un lungo lavoro di reperimento delle informazioni altrimenti la perdita di una notevole mole si dati; nell’entità TBLELEMENTI sono codificati nel medesimo modo sia componenti acquistati (per i quali vi è un relativo ordine) sia prodotti realizzati all’interno dell’azienda; il legame tra TBLELEMENTI e TBLFORNITORI non sarebbe diretto bensì realizzabile solo attraverso l’entità TBLORDINI, stesso discorso vale per la relazione tra TBLELEMENTI e TBLCODICI COSTRUTTORI; la ricostruzione di tali relazioni a partire dalla struttura attuale è pressoché impossibile, significherebbe procedere nell’analisi manuale di ogni singolo ordine emesso, con una elevatissima probabilità di errore. Le soluzioni che possono essere prese sono infine le seguenti due: Creazione di una nuova struttura informativa corretta concettualmente e che comprenda tutte le aree dell’azienda. Questo significherebbe la perdita pressoché totale di tutti le informazioni che attualmente afferiscono all’entità elementi e che passerebbero all’entità TBLORDINI (codice costruttore, costi), fatto non accettabile per l’azienda. Riporto di seguito una rappresentazione semplificata sulla possibile nuova struttura del database (sono omesse le parti meno rilevanti). 28 DATA COSTO TBLORDINE TBLELEMENTO TBLDISTINTE CODICE COSTRUTTORE CODICE_ELEMENTO TBLFORNITORE ID_FORNITORE Suddivisione delle due parti in due sistemi di gestioni differenti. Questo consente di mantenere tutti i dati storici relativi alla gestione della produzione e alla gestione degli ordini. L’unico limite è l’impossibilità di future interrogazioni incrociate sulle due aree, cosa che comunque attualmente è impedita dalla scorretta impostazione. Date le considerazioni fatte, si è optato per la seconda soluzione decidendo di affidare la gestione degli ordini ad un sistema commerciale e di procedere invece allo studio della gestione della produzione. Pertanto d’ora in avanti ci occuperemo solo di tale parte. 2.2.2. Analisi statistica sulle tabelle Per comprendere a fondo la struttura del database preesistente e necessario cercare eventuali errori nella definizione delle tabelle. Per questo, è necessaria un’analisi statistica sulle tabelle del database che ci fornisca il significato reale dei campi da confrontare con il significato che i medesimi campi “dovrebbero” avere. 29 Per eseguire tale analisi abbiamo realizzato un programma, denominato “statistiche_tabelle.php”, in linguaggio PHP, che svolge le seguenti funzioni: determina il totale delle istanze per ciascuna tabella; determina, per ogni campo di ogni singola tabella, la lunghezza massima (in caratteri) della stringa; determina, per ogni campo di ogni tabella, il totale delle istanze che hanno un valore “non nullo” relativamente a quel campo. Questo serve per individuare eventuali errori nella scelta delle chiavi, quali campi dovrebbero essere dichiarati obbligatori (a parte le chiavi nessun campo era stato impostato come obbligatorio in precedenza) e ci aiuterà, in fase di riprogettazione del database, nel determinare le lunghezze massime da assegnare ai vari campi. Per funzionare, tale programma, necessita delle tabelle in formato CSV (Comma Separated Values) ottenibile mediante i seguenti semplici passi: aprire il file Access contenente tutto il database; selezionare la tabella che si vuole esportare; nel menu a tendina selezionare FILE, poi EXPORT; posizionarsi in una directory qualsiasi e salvare il file in un formato Excel, per esempio “Microsoft Excel 97-2002”; aprire il file appena salvato con Excel; nel menu a tendina selezionare FILE, poi SALVA CON NOME; posizionarsi nella directory del server in cui verrà eseguito lo script PHP e salvare nel formato “CSV (OS/2 or MS-DOS)”; 30 ripetere tale procedura per tutte le tabelle da esportare. Aprendo uno dei file CSV appena creati con un qualsiasi editor di testo si può notare che tale formato è una semplice rappresentazione di una tabella, in particolare ogni riga del file corrisponde a un’istanza della tabella, ed ogni campo è separato dall’altro mediante un “punto e virgola” e nel nostro caso la prima riga corrisponde al nome dei campi rappresentati. Il programma procederà quindi alla parserizzazione dei file in questione e gli esaminerà generando un output contenente le statistiche relative. Il risultato consiste in una serie di tabelle, che riportiamo di seguito insieme a un breve elenco di problematiche riscontrate. TBLELEMENTI L’attributo “descrizione” deve essere un attributo obbligatorio, ma vi sono un certo numero di istanze (12) con tale campo nullo: da eliminare. L’attributo “data_inserimento” è un attributo obbligatorio, ma vi sono molte istanze con tale campo nullo: nel nuovo sistema verrà inserita la “data nulla” 0000-00-00. 31 L’attributo “gestione” identifica quegli elementi il cui acquisto è gestito dall’azienda stessa, questo in realtà varia a seconda della distinta in cui il componente è utilizzato, quindi tale attributo è una proprietà della entità TBLDISTINTE. TBLDISTINTE Non è definita la chiave della tabella! Essendo tale tabella un’associazione, la chiave è individuata dall’insieme delle due chiavi delle entità a cui essa afferisce: “codice_distinta” e “codice_elemento”. Inoltre siccome all’interno della stessa distinta può essere presente più volte lo stesso elemento ma in posizione diversa, la chiave definitiva deve essere il trio “codice_distinta”, “codice_elemento”, “pos”. L’attributo “descrizione” è una banale ripetizione della descrizione dell’elemento padre, è pertanto una ridondanza inutile da eliminare. L’attributo “quantità” è un attributo obbligatorio ma può essere anche zero, nelle istanze dove non è presente sarà inserito “0”. 32 TBLREVISIONI Questa tabella ha un bassissimo numero totale di istanze, è per questo che nonostante sia un attributo con cardinalità unaria (ad ogni elemento può essere associata una sola revisione) non può essere incorporato nell’entità TBLELEMENTI. Ad ogni elemento può essere associata al più una revisione pertanto è identificativo della revisione stessa il “codice_elemento”: è del tutto inutile e superfluo l’identificatore “ID_rev”; “descrizione_revisione” è un attributo obbligatorio; “data_revisione” è un attributo obbligatorio; Gli attributi “originato” e “approvato” sono facoltativi, ma necessari; I campi “conseguenze” e “azioni_attuate”, nonostante la bassissima numerosità di valori non nulli vanno mantenuti in quanto potrebbero essere utilizzati maggiormente in futuro; L’attributo “link”, anche se praticamente inutilizzato, può essere molto utile quindi va mantenuto. 33 TBLLINK La tabella TBLLINK rappresenta un attributo composto a cardinalità multipla (0,N), cioè ad ogni “codice_elemento” possono essere associati più link, per questo non è possibile incorporarlo con l’entità ELEMENTI. “codice_elemento” e “link” caratterizzano univocamente un’istanza, il loro insieme è pertanto la chiave primaria della tabelle rendendo superfluo l’identificatore progressivo “ID” e prive di significato le istanze contenenti link nulli. TBLCODICICOSTRUTTORI Tale tabella rappresenta un attributo unario (0,1) e composto, non viene integrato con ELEMENTI per evitare troppi campi con valori nulli; La chiave primaria è “codice_elemento”, ad essa deve riferire sempre un “codicecostruttore” che pertanto è attributo obbligatorio; 34 “costruttore” e “note” sono attributi facoltativi; TBLALTRICOSTRUTTORI Tale tabella rappresenta un attributo multiplo (0,N) composto dell’entità ELEMENTI. Ad ogni “codice_elemento” (campo obbligatorio) deve essere associato un “costruttore” e un “codice_costruttore” (campi obbligatori). La chiave primaria è l’insieme degli attributi “codice_elemento” e “codice_costruttore” (ID è superfluo). TBLFORNITORI 35 L’identificatore primario è “ID_fornitore”, un numero progressivo auto-incrementante; non viene preso “fornitore” come identificatore perché potrebbe esistere il caso limite in cui due fornitori diversi hanno la stessa denominazione. gli altri attributi sono tutti caratterizzanti del fornitore stesso, sono tutti facoltativi tranne fornitore. TBLCOSTI Deve essere possibile associare un elemento a un costo anche in assenza di un fornitore, quindi è corretto utilizzare come identificatore “ID”. Da notare però che in tale modo l’associazione tra elementi e costi è più debole. “codice_elemento”, “costo” e “data” sono attributi obbligatori; gli altri attributi sono facoltativi. TABELLAMASA 36 Tale tabella rappresenta un attributo unario e composto dell’entità ELEMENTI, non può essere incorporato in ELEMENTI a causa della bassa numerosità. è identificativo lo stesso “codice_sadel” (che in realtà corrisponde esattamente al solito “codice_elemento”), “ID-codice” è superfluo; “posizione” è un attributo facoltativo in quanto anche se non è specificata la posizione del componente in magazzino va comunque mantenuta l’informazione della sua presenza. TABELLAOPERAZIONIMASA Tale tabella rappresenta un attributo composto multiplo (0,N) dell’entità ELEMENTI, non può pertanto essere incorporata e “codice_sadel” (“codice_elemento”) non può svolgere il ruolo di chiave primaria che è affidato a “ID-op”, numero progressivo autoincrementante; “codice_sadel”, “npezzi_operazione” e “data” sono attributi caratterizzanti e quindi obbligatori; Riassumiamo quindi i risultati ottenuti relativamente ai valori nulli nella tabella TBLELEMENTI allargata agli attributi composti unari che in linea di principio potrebbero essere accorpati ad essa: 37 E’ evidente come l’incidenza dei valori nulli sarebbe troppo elevata se le tabelle TBLREVISIONI, TBLCODICICOSTRUTTORI e TABELLAMASA fossero incorporati nell’entità TBLELEMENTI. 2.2.3. I risultati dell’analisi della struttura Completata l’analisi della struttura del database preesistente abbiamo le idee un po’ più chiare su quali saranno le modifiche strutturali da effettuare, quali tabelle dovremo mantenere, quali i campi che dovremo definire come “chiavi” e quali come “obbligatori”, come dovremo comportarci in alcuni casi nella fase di importazione (per esempio cosa fare dei valori nulli nei campi obbligatori). Tutto questo però non è sufficiente se non accompagnato da un’analisi qualitativa sui dati e sulle procedure. 38 2.3. Analisi della qualità dei dati Un’analisi di questo tipo si presenta inizialmente quantomeno ardua, in quanto la mole di dati da esaminare è notevole. In realtà l’obbiettivo di questa analisi non è quello di confrontare i dati contenuti nel database con altri dati noti contenuti su altri tipi di supporto, ma “semplicemente” comprendere quali informazioni debbano essere associate ad elevati livelli di precisione e per tali informazioni verificare la presenza o meno di meccanismi di controllo ed eventualmente procedere alla verifica dei dati storici preesistenti. L’analisi in particolare si deve concentrare su: la documentazione esistente riguardo il sistema di codifica; eventuali sistemi di controllo nell’inserimento dei dati; le informazioni considerate più importanti dall’azienda; Per quanto riguarda gli ultimi due punti la risposta è semplice: non è presente alcun sistema di controllo nell’inserimento dei dati, quindi non c’è nulla che è sicuramente corretto. Ciò non significa, però, che non vi siano dati importanti; anzi, i dati relativi alle tabelle TBLELEMENTI e TBLDISTINTE, contenenti rispettivamente le informazioni su tutti gli elementi gestiti dal database e su tutte le distinte, sono considerate vitali per l’azienda. Inoltre sono ritenuti importantissimi tutti i documenti allegati nei quali sono riportati, tra l’altro, i progetti relativi alle schede elettroniche e ai prodotti realizzati. L’attenzione a questo punto passa sulla documentazione esistente che determina il formalismo a cui si deve attenere il “codice_elemento” (identificatore dell’entità TBLELEMENTI). 39 2.3.1. La codifica degli elementi Dall’analisi della struttura del database preesistente si è potuto notare quanto sia centrale il ruolo dell’entità “Elementi”, rappresentata nella sua forma tabellare da TBLELEMENTI, per l’intero sistema. Tale importanza deriva dal fatto che essa definisce il soggetto che le altre tabelle descrivono. Diventa cruciale a questo punto l’identificatore primario di tale entità che di conseguenza diventa una “chiave esterna” per quasi tutte le altre tabelle. La scelta di tale identificatore è caduta su un codice semi-parlante, in parte ereditato dalla azienda precedente, in parte rivisto dall’azienda attuale. Esiste una serie di documenti che riporta la struttura che il codice dovrebbe avere, che si può riassumere nei seguenti formati (le lettere minuscole individuano numeri, quelle maiuscole lettere, le “xxxx” numeri progressivi, le “yy” i numeri di revisione): tAAxxxx: componenti per circuito stampato AAxxxx-yy: assemblati AAxxxx-BByy: documenti relativi all’assemblato AAxxxx: componenti commerciali AAxxxx-BByy: Software, Firmware Naturalmente i valori letterali presenti, assumono diverso significato a seconda del tipo di elemento che viene identificato dal formato ed inoltre vi è un certo numero di eccezioni che complica notevolmente le cose: Per i componenti per circuito stampato codificati da Sadel viene introdotta una S tra la prima e la seconda cifra 40 Le schede elettroniche già codificate in passato da FEP viene mantenuta la codifica originaria aggiungendo due parametri: 0CSADxxxx-DI-yy Per effettuare una valutazione del sistema di codifica esistente è necessario esaminare i seguenti punti: confrontare il sistema di codifica con le tipologie di elementi; verificare l’attinenza dei dati reali al formato di codifica. La gerarchia degli elementi Il codice semi-parlante, se esistente, deve poter dare informazioni sull’elemento che rappresenta. Utilizzato in un database ciò significa poter effettuare selezioni di istanze sulla base del tipo di codice. Questo ha senso solo se tali selezioni raggruppano un insieme di dati simili, quindi una tipologia di codice deve essere associata ad una ben precisata tipologia di elementi. Parlando più dipendenti dell’azienda è stato possibile determinare una certa gerarchia di elementi (vedi figura). 41 Liv.0 Liv.1 Liv.2 42 In particolare, si possono individuare due livelli principali di categorie: Livello 1. Vi sono 4 grandi tipi di elemento: assemblati, componenti commerciali, componenti per circuito stampato, documenti e software. Il primo dubbio riguarda la denominazione della categoria “componenti commerciali”, in quanto anche i componenti per circuito stampato sono in larga parte commerciali: quindi sarebbe necessario cambiare tale denominazione, ma comunque la divisione tra le due categorie è corretta in quanto si tratta di elementi che svolgono ruoli molto diversi nel processo di produzione. L’altro dubbio da chiarire è il perché dell’unione di documenti e software. Il motivo è perché nonostante l’evidente diversità tra le due tipologie essi svolgono ruoli simili in quanto si tratta di elementi associati a distinte con quantità nulla, necessari per la costruzione e l’utilizzo del prodotto ma difficilmente quantificabili. In ogni caso l’unione tra documenti e software rimane discutibile, ma è tollerabile in quanto nel successivo livello di definizione i ruoli si possono distinguere facilmente. Livello 2. A questo livello si differenziano le singole tipologie di elementi (in figura sono riportate solo le principali), più in basso vi sono solamente caratteristiche tecniche che possono differenziare un elemento da un altro (per esempio due condensatori con capacità diverse). La gerarchia sopra descritta, se confrontata con la struttura del codice, è rappresentata abbastanza bene, in particolare si nota come le categorie al primo livello corrispondano a diversi formati di codice, mentre quelle al secondo hanno per ogni ramo il medesimo formato e si distinguono tra loro grazie alla parte “parlante” del codice. Per livelli di dettaglio superiore il 43 sistema di codifica prevede, saggiamente, una parte di codice seriale evitando così codici troppo complicati e lunghi e, di conseguenza, difficilmente interpretabili. I dati reali e il codice Considerato il fatto che non esiste alcun meccanismo di controllo sull’inserimento dei dati è facile immaginare come un buon numero di codici inseriti non corrispondano al sistema di codifica previsto. Per effettuare quest’analisi ci siamo serviti di un piccolo programma (“analisi_vecchi_codici.php”), realizzato in linguaggio PHP, che prende tutti i codici contenuti nella tabella TBLELEMENTI e li confronta con i diversi formati possibile, restituendo quanti codici rispettano tale codifica. Tale programma si basa su un file di testo “strutturato” mediante un certo formalismo che permette di esprimere l’intero sistema di codifica (un file simile lo utilizzeremo anche per effettuare la verifica dei dati inseriti nel sistema in progettazione; allora lo descriveremo nel dettaglio). Otteniamo il seguente risultato. 44 Come si può notare il numero di codici errati si aggira attorno all’1% e corrisponde a un valore assoluto di circa 100 codici, quindi solo un numero limitato di elementi non rispetta la codifica. E’ necessaria pertanto una revisione di tali codici per ricondurli eventualmente a una codifica nota, ma non la creazione di nuove tipologie di codice. Per contenere in futuro tale numero di codici errati è inoltre auspicabile l’introduzione di meccanismi di controllo sull’inserimento dei dati. 2.3.2. La descrizione dei componenti Un’altra caratteristica molto importante dell’elemento è naturalmente la descrizione che, associata a al codice, esprime le caratteristiche (prevalentemente tecniche) dell’elemento. Tale descrizione assume un’importanza ancora maggiore per una serie di “componenti per circuito stampato” presenti in elevata numerosità e con caratteristiche tecniche ben definite. In particolare per i seguenti componenti, che in seguito denomineremo “speciali” a causa dell’importanza del loro ruolo, dovrebbe essere previsto un “campo descrizione” formalizzato in modo tale da poter distinguere chiaramente componenti con diverse caratteristiche tecniche: condensatori; resistenze; circuiti integrati; connettori; diodi; transistor. In effetti, la definizione di un formato per il campo descrizione dei suddetti elementi è già in studio all’interno dell’azienda, in quanto la 45 mancanza di un formalismo preciso si rivela un fortissimo limite alle potenzialità di ricerca e di interrogazione del database. 2.3.3. I documenti allegati Altro punto importantissimo e che non può essere tralasciato nell’analisi della qualità dei dati è quello dei documenti allegati. Nella tabella TBLLINK del database preesistente sono contenuti i collegamenti ai documenti reali presenti all’interno di un apposito server. Questo rischia di essere un fortissimo limite per l’affidabilità e l’integrità dei dati contenuti, in quanto non vi è un legame biunivoco tra il collegamento scritto all’interno del database e i dati reali contenuti in una directory del server. Un operatore distratto o un malintenzionato potrebbe, per ipotesi, modificare o eliminare un documento senza che questo venga rilevato nel database. Non è possibile pertanto dare un giudizio, come nei casi precedenti, sulla qualità e sull’integrità dei dati contenuti attualmente nel database (anche se una decina di link che indirizzano a documenti inesistenti fanno riflettere), ma si può senz’altro dire che tale sistema di gestione dei documenti presenta gravi falle e, se possibile, deve essere cambiato. 2.3.4. Altri piccoli problemi Vi è una serie di altri piccoli problemi legati alla qualità dei dati, ma che in genere possono essere risolti con un’adeguata pulizia dei dati: “codici costruttori” senza codice, ma con solo il nome del costruttore; “costi” senza costo, ma con solo l’associazione del fornitore; “elementi” senza descrizione; 46 “revisioni” senza descrizione della revisione; “link” senza collegamento; “altri costruttori” senza il nome del costruttore; La maggior parte di questi casi, che per fortuna non sono molti, in fase di importazione dei dati saranno eliminati, in quanto sono privi delle informazioni necessarie affinché la loro esistenza abbia senso. Per fortuna non sono stati rilevati problemi di questo tipo in relazione alle “distinte”, evidentemente è stata posta maggiore attenzione su questa associazione che in fondo è il cuore del sistema e che rappresenta i dati più importanti per l’azienda. 2.3.5. I risultati dell’analisi della qualità dei dati In base a tutte le considerazioni fatte riguardo l’attuale livello di qualità dei dati si rilevano le seguenti problematiche: manca un sistema di verifica dei dati in inserimento, in particolare per quanto riguarda il codice di un elemento; risulta mal definito il “campo descrizione” di alcuni componenti per il quale si rendono necessarie frequenti interrogazioni complesse del database; manca un sistema che garantisca la corretta associazione dei link ai documenti che essi rappresentano, creando un problema di sicurezza e di integrità dei dati. 47 2.4. Analisi delle procedure di gestione Per comprendere bene il funzionamento del sistema preesistente è necessario focalizzare la propria attenzione sulle procedure più importanti che risultano essere elementi chiave per il funzionamento del sistema. Abbiamo individuato nei seguenti tre punti le procedure principali: la creazione di un elemento; l’inserimento di una distinta; la revisione di un elemento. Tutte le suddette funzioni sono affidate ad un operatore che ha la responsabilità dell’intero sistema e delle operazioni che su di esso svolge. Questo fatto favorisce possibili errori determinati dall’inserimento di dati richiesti da altri e sui quali l’operatore non può valutare la correttezza (per esempio schede tecniche o progetti). Nei seguenti paragrafi si descrivono le tre procedure in uso. 2.4.1. La creazione di un elemento Nel momento in cui si rende necessaria la creazione di un elemento si procede secondo i seguenti passi: Codifica di un elemento. Avviene determinando il formato e la parte parlante del codice a seconda della tipologia dell’elemento e successivamente cercando tra i codici già esistenti un numero seriale non ancora utilizzato, in modo tale da avere la certezza che l’identificatore non esista (fortunatamente Access impedisce l’inserimento di istanze se la chiave è già esistente). 48 Inserimento dell’istanza nella tabella. Il codice elemento, insieme alla descrizione, alla data e a gli altri attributi viene inserito molto semplicemente aggiungendo una riga in fondo alla tabella degli elementi (vedi figura). Si individuano pertanto i seguenti problemi: non vi è alcun controllo sull’inserimento; una distrazione potrebbe modificare altri elementi già inseriti; non vi è una chiara attribuzione delle responsabilità. Il campo “approvato da” indica chi ha approvato l’inserimento dell’elemento, quindi chi ha la responsabilità dei dati immessi nel database. Potrebbe per assurdo capitare che risulti che una persona ha approvato un elemento che però a causa di un banale errore di battitura dell’operatore contiene dati sbagliati. In questo caso, la responsabilità è dell’operatore, ma l’errore risulta attribuito a chi è nominato all’interno del campo “approvato da”. 49 2.4.2. Per L’inserimento di una distinta comprendere l’inserimento della distinta è necessario comprendere come viene creata una distinta. La distinta, che come abbiamo già detto, è la ricetta tecnica di un prodotto, viene estratta dal progetto sotto forma di B.O.M. (Bill Of Materials). In genere, si tratta di una tabella Excel, con determinati campi, che prima di essere inserita nel database deve essere rivista, ordinata ed eventualmente modificata. Riportiamo di seguito un esempio di B.O.M. Per capire a quali modifiche essa debba essere sottoposta affinché possa collocarsi all’interno del database riportiamo la struttura della tabella TBLDISTINTE utilizzata. 50 Confrontando le due strutture si evidenzia come tra tutti i campi gli unici rilevanti siano “code” (corrispondente al codice_elemento della tabella), “description” (descrizione), “item” (pos), “qty” (quantità) e “reference”. Inoltre oltre all’eliminazione dei campi inutili, prima dell’inserimento nel database è necessario: riordinare i campi; aggiungere come primo campo il codice della distinta (è l’elemento padre ed è lo stesso per tutti i componenti); sommare le quantità e unire le stringhe di “reference” per i componenti con lo stesso codice elemento (a meno che non vi sia la dicitura “non saldare”); se presente il campo “non saldare” inserire l’elemento con quantità pari a zero; modificare la quantità dei documenti che deve essere sempre pari a zero; aggiungere eventuali note. Il risultato dell’elaborazione “manuale” del file dovrebbe essere il seguente: 51 A questo punto, con una delicata operazione di “copia e incolla” si trasferiscono i dati (tranne la prima riga contenente l’intestazione delle colonne) nel database Access. Considerazioni sulla procedura Essendo la distinta un elemento critico dell’intero sistema, riteniamo sia troppo poco affidabile la procedura di gestione della distinta. In particolare, il susseguirsi di operazioni estremamente delicate realizzate manualmente e senza alcun meccanismo di verifica dei dati inseriti, può generare gravi errori ed è suscettibile di distrazioni e dimenticanze. Si ritiene pertanto che il sistema di gestione della distinta base debba essere modificato. 52 2.4.3. La revisione di un elemento L’ultima procedura di gestione considerata critica per il sistema è la “revisione di un elemento”. Per comprendere la procedura è necessario conoscere cosa si intende all’interno dell’azienda per “revisione”. Cos’è una revisione Il significato di revisione cambia a seconda dell’elemento che viene revisionato. Non tutti gli elementi presenti nel database possono essere oggetto di revisione per esempio ne sono esclusi tutti i componenti commerciali e quindi non prodotti all’interno dell’azienda. Elenchiamo di seguito i diversi elementi che possono essere soggetti a revisione e ne esplichiamo il significato per ognuno di essi. Assemblati (prodotti, schede, parti meccaniche, cablaggi). Per tali tipi di elementi la revisione è il cambiamento di un componente nella distinta corrispondente che lascia invariate le caratteristiche funzionali dell’elemento, modificando (innalzando) la caratteristiche prestazionali dello stesso (per es. affidabilità). Da notare che è possibile l’esistenza di una “versione” (relativa a una revisione) di un elemento senza che nel database sia presente la distinta corrispondente. Documenti. Per revisione di un documento si intende l’aggiornamento del documento (per esempio se si tratta di un progetto CAD, qualche piccola modifica dello stesso, che non influisce sulla distinta a cui il documento si riferisce). I documenti non hanno mai una distinta (cioè non sono mai l’elemento padre di una distinta). 53 Software. Cambiamenti nel programma che non cambia la funzionalità dello stesso ma ne migliora le prestazioni. Come i documenti non hanno distinta. Componenti. E’ un caso limite: può capitare che un componente commerciale debba essere sottoposto a lavorazioni (per esempio di tipo chimico) per migliorarne le prestazioni, in tal caso si crea una piccola distinta contenente il componente e la lavorazione a cui è stato sottoposto. Tale componente modificato può successivamente essere sottoposto a revisione come un qualsiasi altro assemblato. La procedura di revisione Nel momento in cui si decide di effettuare una revisione, vi è una procedura di tipo operativo a cui fare riferimento: individuare il numero di revisione (per esempio, se si tratta di una scheda il cui codice è HS0001-01, quindi di versione 01, la sua revisione sarà del tipo HS0001-02, con numero di revisione 02); creare un nuovo elemento con il codice determinato in precedenza; inserire nella tabella TBLREVISIONI i dati relativi alla revisione (descrizione revisione, motivazione, ecc.); se prevista, inserire la distinta relativa alla nuova revisione dell’elemento; si dichiarano obsoleti tutti gli elementi con versioni precedenti (cambiando il campo “obsoleto” nella tabella TBLELEMENTI); se qualche versione dell’elemento revisionato era già presente in qualche distinta, si modifica l’elemento (aggiornandolo a l’ultima revisione) in tutte le distinte non ancora marchiate come obsolete. 54 Da notare come tutte le operazioni sopra descritte avvengano intervenendo manualmente sulle istanze presenti all’interno delle tabelle, senza alcun meccanismo di controllo o verifica dei dati inseriti. E’ da segnalare inoltre il fatto che le revisioni debbano essere approvate da qualcuno che si prende la responsabilità delle modifiche effettuate sull’elemento. Questo avviene mediante una procedura di approvazione assai simile a quella per la creazione di un elemento, con tutti i limiti sull’attribuzione delle responsabilità che ciò comporta. Considerazioni sulla procedura Dal punto di vista operativo la procedura presenta tutti i limiti che abbiamo già visto nel caso della creazione di un elemento e di inserimento di una distinta. In particolare l’assenza di controllo sui dati inseriti e la difficile attribuzione delle responsabilità minano fortemente l’affidabilità e l’integrità di dati relativi. Inoltre, sorgono alcuni dubbi, riguardo la procedura logica utilizzata per le revisioni, soprattutto riguardo la reperibilità delle informazioni (modificando elementi in distinte già in uso non si rischia di perdere informazioni su prodotti già realizzati o venduti?). 2.5. Analisi dei sistemi di sicurezza In questo paragrafo analizzeremo la sicurezza del sistema sotto due aspetti fondamentali: la gestione dei permessi; i backup e il ripristino dei dati. 55 2.5.1. La gestione dei permessi La gestione degli utenti e dei permessi a loro assegnati, nel sistema preesistente, è di una semplicità disarmante. Una sola persona, l’amministratore del sistema, ha accesso sia in lettura che in scrittura al database, mentre tutti gli altri utenti possono accedervi solo in lettura. Tale sistema nella sua semplicità funziona abbastanza bene. Si evitano rischi di inquinamento dei dati da parte di malintenzionati o inesperti e si da la responsabilità dell’intero sistema ad una persona affidabile all’interno dell’azienda stessa. In sostanza qualsiasi operazione effettuata sul database ed eventuali errori di inserimento di “basso livello” (errori di battitura o di distrazione) sono attribuibili solo ed esclusivamente all’amministratore del sistema, con un chiara attribuzione delle responsabilità. Il problema sorge per gli errori più gravi, che minano effettivamente la qualità globale dei dati: in questo caso tale meccanismo non è sufficiente, come abbiamo visto nell’analisi della qualità dei dati. Vi è anche un problema di riservatezza delle informazioni. Ci sono un certo tipo di dati che sono considerati riservati e che pertanto non devono uscire dall’azienda. Tali dati sono in particolare quelli relativi ai costi degli elementi e alla situazione del magazzino. Non è previsto alcun permesso che conceda ad un utente di vedere tutti i dati tranne quelli riservati, impedendo pertanto di aprire le porte del database verso l’esterno (in particolare verso i terzisti e i fornitori che necessitano solo dei dati relativi alla distinta base). 56 2.5.2. I backup e il ripristino dei dati L’altro aspetto importante della sicurezza è quello relativo alle operazioni di backup e all’eventuale ripristino dei dati. L’intero database preesistente consiste in un unico file che può essere letto con l’applicazione Microsoft Access. Esso è contenuto in un apposito server sul quale sia l’amministratore che gli utenti accedono, l’hard disk nel quale si trova è replicato per tutelarsi da eventuali crash del sistema. Si adottano inoltre i seguenti accorgimenti: tutte le operazioni di inserimento o modifica del database vengono effettuate su una copia del file contenente il database; a fine giornata, se tutto è andato bene (cioè se non ci sono stati crash del sistema), si memorizza il file con un nome contenente la data del giorno. In sostanza si effettua un backup del sistema ogni giorno, questo consente di perdere, nella peggiore delle ipotesi, al massimo una giornata lavorativa di dati inseriti. Questo è tollerabile se il numero di modifiche e inserimenti che giornalmente si effettuano è basso, mentre diventa un forte limite se tale numero è destinato ad aumentare. 2.6. Analisi dell’interfaccia In questo paragrafo descriveremo la struttura generale dell’interfaccia utente, senza dilungarsi nei particolari tecnici, per limiti di tempo e di pertinenza. L’obiettivo e valutare l’usabilità dell’attuale sistema e individuare quegli elementi che entrati ormai nell’uso comune all’interno dell’azienda 57 non devono, se possibile, essere modificati, per evitare rivoluzioni d’utilizzo troppo grosse. Si procede di seguito analizzando: l’home page; la visualizzazione delle tabelle; la scheda degli elementi; la visualizzazione della distinta; la ricerca delle informazioni; l’esportazione dei dati. 2.6.1. L’home page Riportiamo di seguito l’home page del sistema preesistente. Si denotano immediatamente i tasti che consentono la visualizzazione delle varie viste più importanti. Tutti gli elementi. La visualizzazione della tabella elementi. Elementi. Tutti gli elementi non obsoleti. 58 Schede. Tutte le schede elettroniche Sadel non obsolete. Prodotti Sadel. Tutti i prodotti non obsoleti. Circuiti stampati. Tutti i circuiti stampati. Fornitori, clienti, ordini. Si accede ad un altro menu contenente i tasti relativi alla “gestione degli ordini”. Produzione. Si accede a un menu da cui è possibile interrogare il database secondo query standard. Magazzino. Il magazzino dell’azienda (corrispondente al “join” tra le tabelle TBLELEMENTI, TABELLAMASA, TBLCODICICOSTRUTTORI). Ricerca dati. Si accede ad una pagina dalla quale si può impostare una ricerca. 2.6.2. La visualizzazione delle tabelle Di seguito la visualizzazione che si ottiene premendo dall’home page il tasto ELEMENTI. 59 Tale visualizzazione è abbastanza chiara anche se si riscontrano i seguenti difetti: manca la possibilità di effettuare selezioni se non mediante il tasto “Ricerca dati” o mediante l’apposito tasto di Access dopo aver selezionato la parte del campo che interessa; non si possono eseguire interrogazioni complesse (per es. tutti gli elementi con data maggiore di …., ecc.) manca un modo semplice di ordinamento dei dati se non utilizzando le caratteristiche di Access; 2.6.3. La scheda elemento Ciccando su un codice elemento dalla tabella “Elementi” è possibile visualizzare la “scheda dell’elemento”. 60 Tale scheda raccoglie tutte le informazioni relative a un elemento, dall’eventuale distinta, ai dati della revisione, al magazzino, costi, costruttore ed allegati. Inoltre è possibile calcolare il numero totale di pezzi a magazzino e trovare in quali distinte l’elemento in questione è utilizzato. 2.6.4. La visualizzazione della distinta Mediante il tasto “Visualizza” vicino alla distinta riportata in basso a destra nella scheda elemento si accede alla visualizzazione completa della distinta. 2.6.5. La ricerca delle informazioni Dall’home page la ricerca delle informazioni può essere effettuata mediante il tasto “Ricerca Dati” che invia alla seguente pagina. 61 Tale operazione individua nella particolare tabella in basso (contenente solo Codice Sadel, Descrizione, Codice Costruttore, Costruttore) l’elemento ricercato, dal quale è possibile successivamente accedere alla scheda elemento. Per effettuare una selezione è comunque necessario utilizzare il tasto Access “filtro in base a selezione”, impedendo a chi non conosce l’applicazione di effettuare ricerche più complesse. 2.6.6. L’esportazione dei dati L’esportazione dei dati in altri formati e la stampa degli stessi e senz’altro la funzionalità migliore che si ritrova nel database preesistente. In particolare la perfetta compatibilità di Access con gli altri prodotti Microsoft consente di esportare i dati in tutti i formati più comunemente utilizzati (tipica è l’esportazione di una tabella in Excel) con ottimi risultati. Inoltre è ottimo anche il sistema di stampa che consente di riportare le tabelle su più pagine mantenendo belle intestazioni e impaginazioni. Riportiamo di seguito, per esempio, l’anteprima di stampa di una distinta Sadel. 62 2.6.7. Considerazioni conclusive sull’interfaccia utente Abbiamo rilevato che l’interfaccia utente su cui si basa il sistema preesistente presenta i seguenti limiti: è “Access dipendente”, l’utente che ne fa uso deve conoscere bene l’applicazione Microsoft; mancano funzioni che ne facilitino l’usabilità (per esempio un menu fisso che consenta di navigare fra le varie aree del database); è difficile effettuare interrogazioni complesse e selezioni successive. 63 3. IL SISTEMA DI CODIFICA Il sistema di codifica come abbiamo dimostrato nel capitolo precedente è uno dei punti critici del sistema preesistente, in quanto identificatore unico degli elementi e di conseguenza punto di raccordo per tutti gli attributi che afferiscono ad un qualche elemento del database. 3.1. Gli obiettivi da raggiungere Dall’analisi della qualità dei dati del sistema preesistente abbiamo individuato nella mancanza di una verifica sui dati inseriti il difetto maggiore del sistema di codifica. Non è pertanto sbagliata la codifica semiparlante utilizzata bensì il fatto che non c’è alcun meccanismo che controlli l’attinenza dei dati inseriti con il codice. Sono tre gli obiettivi da raggiungere: in fase di “importazione dei dati” bisogna ricondurre i codici “errati” alla codifica scelta (razionalizzazione); in fase “operativa” bisogna impedire l’inserimento di codici non attinenti alla codifica (validità dei dati); in ogni caso è necessario consentire l’inserimento di nuove tipologie di codici e di poter modificare le esistenti (flessibilità). 3.2. La soluzione proposta Per raggiungere tutti gli obiettivi proposti è necessario fornire al sistema che è in fase di sviluppo la capacità di “riconoscere un codice” e di 64 valutarne la correttezza sulla base di un “modello di riferimento” che rappresenti tutti i possibili formati. Una volta “istruito il sistema” in tal senso sarà possibile individuare i codici errati preesistenti, impedirne l’inserimento di nuovi e, semplicemente modificando il “modello di riferimento”, garantire la flessibilità necessaria. 3.2.1. La funzione di analisi del codice La rappresentazione logica della “funzione” necessaria è la seguente. CODICE 1 codice corretto SIGNIFICATO codice errato ERRORE Come si può notare dato in input il codice da esaminare essa restituisce l’interpretazione del codice se corretto, mentre restituisce un errore (e magari anche il motivo dell’errore) se sbagliato. Tutto questo il programma lo realizza confrontando il codice con le specifiche contenute nel “modello di riferimento”. 65 3.2.2. La razionalizzazione del sistema di codifica Dopo aver illustrato il meccanismo con cui agisce la funzione di analisi del codice, riportiamo lo schema logico di utilizzo di tale funzione per la razionalizzazione dei dati contenuti nel database. PRELIEVO DI UN CODICE CODICE ERRATO MODIFICA DB ELIMINAZIONE CODICE CORRETTO Il programma deve prendere ad uno ad uno tutti i codici presenti nel database e controllarli. Se il codice risulta corretto viene lasciato nel database, mentre se è errato viene richiesto all’amministratore di modificare o eventualmente eliminare il codice. Naturalmente il codice inserito dall’amministratore deve risultare corretto altrimenti viene restituito nuovamente un errore. 66 3.2.3. Il controllo sui dati inseriti L’altro processo chiave nel quale la “funzione di analisi del codice” risulta fondamentale, è il controllo sui dati inseriti , in particolare sui nuovi codici inseriti nel database. Tale processo può essere realizzato mediante il seguente schema logico. NUOVO CODICE CODICE CORRETTO CODICE ERRATO DB Molto semplicemente, il sistema non accetta il codice inserito dall’utente finché non si rivela un codice attinente alle specifiche contenute sul “modello di riferimento”. 3.3. La soluzione operativa: il modello di riferimento Nei paragrafi precedenti abbiamo citato più volte il “modello di riferimento” senza però mai addentrarci nella sua definizione. Esso è in effetti il cuore del sistema di analisi dei codici e consiste in quella serie di informazioni da cui il programma attinge per valutare la correttezza dei codici. Mentre sarebbe noioso e poco produttivo dilungarsi nella descrizione del programma e di come esso confronti i codici, risulta invece assai interessante studiare la struttura del “modello di riferimento” che abbiamo elaborato. Le due caratteristiche principali che deve rispettare sono: 67 realizzazione di un formalismo preciso che definisca in maniera rigida e univoca il formato dei codici; possibilità di modifica, sempre rispettando il formalismo predefinito, per introdurre nuove tipologie di codice. 3.3.1. L’albero dei formati L’idea su cui si basa la soluzione operativa che proponiamo è quella che la codifica può essere espressa mediante uno schema ad albero in accordo con la gerarchia degli elementi presenti nel database, che riportiamo nuovamente. Liv.0 Liv.1 Liv.2 68 Dopo aver ricordato che un codice ha un “formato” costituito da più “parti” ognuna delle quali può avere diversi significati a seconda del “tipo” di parte e da un numero di serie che cambia se tutte le parti coincidono, possiamo costruire lo schema ad albero che dovrà essere rappresentato nel nostro modello di riferimento. CODICE ELEMENTO FORMATO_1 PARTE_1 TIPO_1 3.3.2. FORMATO_2 PARTE_2 TIPO_2 TIPO_3 FORMATO_3 PARTE_3 TIPO_4 NUMERO TIPO_5 La rappresentazione testuale dell’albero Lo schema ad albero riportato nel paragrafo precedente può essere rappresentato mediante un file di testo formattato secondo il seguente schema. [formato] formato1:descrizione_formato1 formato2:descrizione_formato2 formato3:descrizione_formato3 69 [parte2_formato2] tipo1_parte2_formato2:descrizione_tipo1_parte2_formato2 tipo2_parte2_formato2:descrizione_tipo1_parte2_formato2 tipo3_parte2_formato2:descrizione_tipo1_parte2_formato2 tipo4_parte2_formato2:descrizione_tipo1_parte2_formato2 tipo5_parte2_formato2:descrizione_tipo1_parte2_formato2 Grazie a tale rappresentazione è inoltre possibile associare ad ogni formato e parte di codice il significato che esso rappresenta e quindi riuscire ad estrarre informazioni sulla parte parlante del codice. Mediante l’esempio sul caso reale riportato nella pagina seguente risulterà tutto più chiaro. In particolare si nota come nella definizione dei formati le lettere minuscole rappresentino “numeri” mentre quelle maiuscole lettere, le “xxxx” rappresentano numeri di serie, le “rr” numeri di revisione e le “R” lettere che individuano revisioni. La stringa “(OBS)”, dopo la descrizione, indica che il formato è corretto ma non più in uso, quindi i codici corrispondenti non verranno proposti nella “procedura di codifica assistita” (di cui parleremo più avanti). Infine il carattere speciale “#” prima di una riga indica che si tratta di un commento quindi per il programma è come se tale riga non ci fosse. Da notare inoltre, oltre ai primi cinque formati relativi alla codifica preesistente, tre formati obsoleti relativi alla codifica utilizzata dall’azienda precedente all’attuale (da cui Sadel ha ereditato parte dei codici) e quattro nuove tipologie di formato che saranno introdotte nel nuovo sistema secondo la politica attuale per cui qualsiasi elemento può essere revisionato e di conseguenza avere una distinta ed eventuali documenti allegati in distinta. 70 L’introduzione di queste nuove tipologie di codice è il risultato dello sforzo di razionalizzazione che l’azienda ha dovuto compiere affinché il sistema si attenga alle regole (più restrittive) del nuovo sistema di codifica. 71 Conclusioni Dopo aver definito operativamente il modello di riferimento e implementato il sistema di analisi dei codici, è realistico pensare di ottenere l’azzeramento del numero di codici non corrispondenti al sistema di codifica predefinito, con notevoli miglioramenti dal punto di vista della “qualità dei dati”. Inoltre risulta estremamente agevole creare nuovi formati di codice, basterà scaricare il file di testo dal server, modificarlo secondo il semplice schema predefinito e ricaricarlo sul server mediante modalità che riporteremo nel dettaglio nella descrizione dell’interfaccia utente. 72 4. LA GESTIONE DELLE DISTINTE In questo capitolo cercheremo di individuare i requisiti necessari relativi alla gestione delle distinte per l’implementazione del nuovo sistema. Naturalmente non è facile scorporare la questione della “distinta base” dal resto del sistema in quanto essa è strettamente collegata a tutte le altre problematiche esistenti, comunque ci proveremo riservandoci eventualmente di rimandare ad altri capitoli le questioni più rilevanti. 4.1. I limiti del sistema preesistente Naturalmente, come i requisiti, anche i problemi relativi alla distinta base sono trasversali all’intero sistema di gestione. Val la pena quindi ricordare quali sono i limiti del sistema preesistente più evidenti relativi alla distinta base: dal punto della struttura del database non sono state definite le chiavi della tabella; come per tutti gli altri dati presenti non esiste un sistema di controllo sulle informazioni inserite, inoltre l’inserimento di una distinta avviene in modo estremamente insicuro; la distinta può essere sottoposta a revisione e quindi risente di tutte le problematiche relative a tale procedura; manca la possibilità di “esplodere” la distinta, cioè di visualizzare tutte le distinte da l’elemento radice fino all’ultimo “figlio”. 73 4.2. La distinta base per Sadel Oltre alla soluzione dei problemi esistenti la progettazione di un nuovo sistema di gestione deve individuare quei requisiti necessari che nel precedente sistema erano assenti. Per fare questo è fondamentale capire qual è il significato di “distinta base” per l’azienda. La distinta base per Sadel consiste in una “ricetta tecnica” dei prodotti che essa progetta o realizza. Vi sono in particolare tre tipologie di assemblati che tipicamente possiedono una distinta base: i prodotti finiti Sadel, codice del tipo PS0123-01; le schede elettroniche, codice del tipo HS0123-01; le parti meccaniche, codice del tipo PM0123-01; A questi tre si aggiungono inoltre i cablaggi (CB0123-01) che dovrebbero possedere una distinta base, ma che in realtà non viene mai inserita (al posto della distinta viene inserito un documento contenente il progetto dettagliato) e il caso limite dell’inserimento di distinte per componenti commerciali che però hanno subito lavorazioni all’interno dell’azienda. La caratteristica più rilevante sul tipo di “distinta base” utilizzata da Sadel è la scelta di poter introdurre in distinta come elementi anche i documenti relativi alla distinta stessa (per esempio, specifiche di progetto, specifiche di lavorazione o di montaggio, manuali d’uso, ecc.). Essi vengono in genere inseriti in fondo alla distinta con quantità “zero”. Tale soluzione consente a chi ha accesso ai dati relativi alla distinta di avere tutte le informazioni necessarie alla realizzazione del prodotto. 74 4.2.1. Gli elementi e la distinta base Il nostro obiettivo è quello di modellare la struttura e le funzionalità della distinta base sugli elementi che più degli altri ne sono soggetti. Esaminiamo di seguito, con esempi, le varie tipologie di elementi del database Sadel che in genere hanno una distinta. I prodotti Sadel Riportiamo di seguito un esempio realistico (preso da un caso reale ma semplificato) di distinta di un prodotto Sadel. Sono presenti solo gli attributi minimi indispensabili affinché la distinta abbia senso più la descrizione del componente per renderla più chiara al lettore. DISTINTA PRODOTTO SADEL PS0035-03 Codice elemento HS0030-03 AC0060 MC0013 PM0025-02 PM0513-01 UN1004 UN1221 PS0035-SM03 Quantità 1 1 1 1 1 4 14 0 Descrizione SCHEDA OBOE OUT VER6 CAVO MODULO GSM/GPRS CUSTODIA IN ALLUMNINIO OBOE OUT GHIERA DI FISSAGGIO VITE RONDELLA SPECIFICHE DI MONTAGGIO OBOE OUT VER6 Si nota come il prodotto sia composto da una scheda, che a sua volta avrà una distinta, da alcuni componenti commerciali (il cavo e il modulo GSM/GPRS), da alcune parti meccaniche (ghiera e custodia) che dovrebbero avere a loro volta una distinta, da alcuni componenti meccanici unificati (vite e rondella) e da un documento contenente le specifiche di montaggio del prodotto. Da notare il particolare formato del codice del documento “PS0035-SM03” che nella prima parte riporta l’inizio del codice di prodotto (PS0035), mentre nella seconda parte vi è specificato il 75 tipo di documento (SM) e il numero di revisione del documento (non del prodotto!). Le schede elettroniche Proseguiamo riportando un esempio di distinta di scheda elettronica progettata da Sadel. In questo caso tra gli attributi indispensabili per la definizione della distinta ci sono anche il “reference” che permette di individuare la posizione dell’elemento sul circuito stampato e la posizione, che indica semplicemente la posizione dell’elemento in distinta (il motivo della necessità di questo attributo verrà spiegato in seguito). DISTINTA SCHEDA SADEL HS0030-03 Pos Codice Qtà Reference 1 TS0036 1 2 1CC6214 2 CAP7 CAP11 3 1SCI0273 1 U6 4 1SCO0001 1 CONN15 5 1SDI0004 2 D1 D4 6 1SIN0001 1 L2 7 1LE0001 1 LED1 8 1RE3004 4 R6-9 9 1RE2501 6 RES3 RES8 RES2 RES12-14 10 1RE2501 0 RES15 11 1STF0002 2 T1-2 12 1TR0020 1 TR1 13 2SCE0020 3 C4 C5 C8 14 2CE0052 2 C1-2 15 2SCO1035-01 1 J1 16 2IN0200 1 F1 17 2SOP0522 1 OP1 18 HS0030-SC02 0 19 HS0030-PC03 0 20 HS0030-GE03 0 21 HS0030-SM03 0 Descrizione CIRCUITO STAMPATO CONDENSATORE CERAMICO DIGITAL INVERTER (CIRCUITO INTEGRATO) CONNETTORE DIODO INDUTTORE LED VERDE RESISTENZA RESISTENZA RESISTENZA TRASFORMATORE AUDIO TRANSISTOR CONDENSATORE ELETTROLITICO VERTICALE CONDENSATORE ELETTROLITICO RADIALE CONNETTORE FISSO 19 POLI MASCHIO INDUTTORE OPTOISOLATORE SCHEMATICO PCB GERBER SPECIFICHE DI MONTAGGIO La prima cosa che si nota guardando l’esempio è che vi è un ordine ben preciso: il primo elemento è il circuito stampato (la base della scheda), 76 poi si susseguono componenti SMD (il cui codice inizia con “1”), componenti THD (il cui codice inizia con “2”), infine vi sono i documenti. I quattro tipi di documenti presenti sono i documenti standard che vengono associati ad una distinta di scheda: lo schematico, il PCB, il Gerber e le specifiche di montaggio. L’unica distinta presente sembrerebbe essere quella relativa al “connettore fisso” in quanto è l’unico tra gli elementi ad avere associato un numero di revisione. Questo caso rientra in quei casi limite nei quali risulta necessaria la revisione di componenti commerciali. L’ultimo particolare da evidenziare è la presenza in distinta dello stesso componente due volte: la resistenza “1RE2501”. Il motivo di questa “stranezza” è che tale componente potrebbe servire (nella posizione specificata dal “reference”) ma non viene installato sulla scheda (per questo è presente in quantità nulla). Tale caso particolare crea la necessità di introdurre l’attributo “posizione” per identificare univocamente i componenti presenti in distinta. Le parti meccaniche Nel seguente esempio riportiamo la distinta della parte meccanica relativa al prodotto descritto in precedenza. DISTINTA PARTE MECCANICA PM0025-02 Codice elemento AC0036 PM0025-CM01 Quantità Descrizione CUSTODIA IN ALLUMINIO 140X180X70 1 0 DISEGNO "CAD MECCANICO" CUSTODIA L’esempio è estremamente chiaro: la parte meccanica è costituita da un componente commerciale (la custodia) più il progetto che ne descrive dettagliatamente le caratteristiche. 77 Il caso limite Il caso limite si realizza nel momento in cui un componente commerciale affinché possa essere utilizzato deve essere sottoposto a lavorazioni particolari realizzate all’interno dell’azienda. In questo caso l’elemento può avere una distinta. Segue l’esempio relativo. DISTINTA COMPONENTE 2SCO1035-01 Codice elemento 2SCO0152 AC0040 Quantità Descrizione CONNETTORE FISSO 19 POLI MASCHIO 1 19 CONTATTO Gli assemblati senza distinta Capita abbastanza frequentemente esaminando il database preesistente di imbattersi in assemblati già utilizzati in distinta (quindi importanti) privi di una propria distinta base. Questo, raro per quanto riguarda le schede elettroniche, è assai frequente per “parti meccaniche” e la regola per i “cablaggi”. Tale grave incoerenza dal punto di vista logico si spiega assai bene da un punto di vista operativo. Vi sono due motivi che chiariscono questo punto: molti assemblati vengono già acquistati come tali e pertanto non si dispongono dei dati relativi alla distinta base; a volte anziché inserire la distinta base si preferisce inserire un documento allegato contenente le specifiche di progetto. Nell’esempio riportato nelle pagine precedenti per esempio la parte meccanica “PM0513-01” non possiede la distinta, ma ad essa è associato un documento contenente le seguenti specifiche di progetto. 78 L’esplosione della distinta In ultimo rappresentiamo graficamente l’esplosione della distinta del prodotto “PS0035-03” evidenziando le relazioni di “parentela” che legano i vari elementi. L’esplosione della distinta ha un significato molto importante in quanto è la rappresentazione globale di un prodotto in tutte le sue parti e fino a un elevato livello di dettaglio, con tutte le indicazioni di lavorazione e i progetti necessari per realizzarlo. Nell’esempio che segue non sono riportate le descrizioni degli elementi per motivi di spazio. 79 DISTINTA PS0035-03 Codice elemento HS0030-03 AC0060 MC0013 PM0025-02 PM0513-01 UN1004 UN1221 PS0035-SM03 Quantità 1 1 1 1 1 4 14 0 DISTINTA HS0030-03 DISTINTA PM0025-02 Pos Codice Qtà Reference 1 TS0036 1 2 1CC6214 2 CAP7 CAP11 3 1SCI0273 1 U6 4 1SCO0001 1 CONN15 5 1SDI0004 2 D1 D4 6 1SIN0001 1 L2 7 1LE0001 1 LED1 8 1RE3004 4 R6-9 9 1RE2501 6 RES3 RES8 RES2 RES12-14 10 1RE2501 0 RES15 11 1STF0002 2 T1-2 12 1TR0020 1 TR1 13 2SCE0020 3 C4 C5 C8 14 2CE0052 2 C1-2 15 2SCO1035-01 1 J1 16 2IN0200 1 F1 17 2SOP0522 1 OP1 18 HS0030-SC02 0 19 HS0030-PC03 0 20 HS0030-GE03 0 21 HS0030-SM03 0 Codice elemento AC0036 PM0025-CM01 Quantità 1 0 DISTINTA 2SCO1035-01 Codice elemento 2SCO0152 AC0040 4.3. Quantità 1 19 I requisiti della distinta base Dopo aver capito bene cosa è la distinta base per Sadel ed individuato i punti deboli del sistema preesistente è possibile stilare una serie di requisiti a cui l’implementazione e la gestione della distinta base si devono attenere: 80 ogni elemento presente nel database può avere una distinta base; ogni elemento può essere contenuto in una o più distinte; se un elemento ha una distinta il suo codice deve avere un numero di revisione; se il codice di un elemento ha un numero di revisione, l’elemento corrispondente non necessariamente deve avere una distinta; per identificare un elemento di una distinta univocamente è necessario un attributo che ne individui la posizione; il “reference” è un attributo necessario per la definizione dei componenti delle schede elettroniche, ma non ha significato per altri tipi di elemento; è necessario poter visualizzare l’esplosione di una distinta; è necessario un controllo sull’inserimento della distinta base; è auspicabile l’introduzione di una procedura automatica o semiautomatica di inserimento di una distinta direttamente dal file B.O.M. generato assieme al progetto. 4.4. La proposta operativa La nostra proposta di implementazione del sistema di gestione relativa alla distinta base riguarda due aspetti: la struttura relazionale della distinta base; la procedura semiautomatica di inserimento di un file B.O.M. in distinta. 81 4.4.1. La distinta base come auto-associazione Data la caratteristica per cui ogni elemento può avere una distinta base e/o esservi contenuto, è naturale esprimere la distinta come autoassociazione relativa all’entità ELEMENTI, come in effetti era nel database preesistente: “un elemento può essere padre o figlio di un altro elemento”. ELEMENTI (0,n) (0,n) padre DISTINTE figlio Quello che però mancava nella struttura del database preesistente era la definizione della chiave dell’associazione DISTINTE, inoltre è necessaria la definizione di tutti gli attributi che la identificano. Gli attributi che risultano indiscutibilmente legati alla distinta sono: la quantità; il reference (anche se necessario solo per i componenti in distinte di schede). Inoltre vi sono altri due attributi necessari, ma meno evidenti: la gestione dell’elemento (questo attributo individua se l’acquisto dell’elemento presente in distinta è gestito da Sadel o meno, prima era erroneamente presente come attributo dell’elemento); l’attributo note (per annotazioni sull’elemento relative alla distinta in cui è contenuto). La chiave dell’associazione DISTINTE è naturalmente formata dall’insieme delle chiavi delle entità che collega, più l’attributo “posizione” 82 per identificare univocamente un elemento in una distinta (ricordiamo che lo stesso elemento può essere presente più volte nella stessa distinta). A questo punto possiamo riportare lo schema E/R completo che rappresenta la relazione tra l’entità ELEMENTI e l’auto-associazione DISTINTE. codice_elemento pos codice_elemento quantità codice_distinta reference descrizione ELEMENTI data (0,n) padre DISTINTE approvato (0,n) figlio obsoleto gestione note note Quello appena riportato è il cuore del sistema informativo in progettazione ed su questo che costruiremo l’intero e complesso sistema di relazioni del futuro database. 4.4.2. Procedura di inserimento di una distinta Per facilitare l’inserimento di una distinta nel database e ridurre il numero di operazioni manuali da effettuare per preparare i dati all’inserimento in distinta, evitando rischi di errori banali ma dalle gravi conseguenze (rimando al paragrafo relativo all’inserimento di una distinta nel database preesistente) abbiamo pensato di realizzare una procedura semiautomatica che aiuti l’amministratore del sistema, incaricato dell’inserimento di una distinta, nel suo compito. 83 L’idea è quella di inserire direttamente il file B.O.M. generato dall’applicazione con cui si sviluppa il progetto nel programma che dopo averla “sistemata” e controllata la inserisce direttamente nel database. La fattibilità di questo dipende dal tipo di “operazioni di sistemazione” che devono essere svolte: riordinare i campi del file B.O.M.; aggiungere come primo campo il codice della distinta (è l’elemento padre ed è lo stesso per tutti i componenti); sommare le quantità e unire le stringhe di “reference” per i componenti con lo stesso codice elemento (a meno che non vi sia la dicitura “non saldare”); se presente il campo “non saldare” inserire l’elemento con quantità pari a zero; controllare che la quantità dei documenti sia pari a zero ed eventualmente modificarla; segnalare se l’acquisto dell’elemento per la distinta è gestito dall’azienda; aggiungere eventuali note. Come si può notare molte di queste operazioni sono meccaniche e dipendono esclusivamente dal file B.O.M, quindi possono essere eseguite in maniera automatica da un programma. Le uniche informazioni che spesso non sono presenti nel file di B.O.M. (ma che a volte comunque sono presenti) sono quelle relative alle note ed alla gestione dell’acquisto, per cui la procedura deve essere comunque realizzata in interazione con l’amministratore. 84 Riportiamo di seguito la rappresentazione schematica della procedura così come avveniva nel sistema preesistente. B.O.M. APPLICAZIONE SOFTWARE DB E’ evidente come l’amministratore, in precedenza, aveva l’intera responsabilità della distinta inserita nel database, perché era egli che dalla B.O.M. estraeva e modificava i dati da inserire. La procedura semiautomatica che proponiamo, prevede invece un’interazione dell’amministratore con il programma. In particolare il programma compie le seguenti operazioni: propone una sistemazione del file di B.O.M.; evidenzia eventuali errori strutturali (per esempio se i codici non sono presenti nella tabella ELEMENTI, o se manca la quantità di un elemento); obbliga l’amministratore a risolvere i problemi strutturali; 85 chiede all’amministratore di controllare la significatività dei dati inseriti (operazione che un computer non potrebbe mai eseguire); permette all’amministratore di inserire informazioni aggiuntive (attributi “note” e “gestione”); se i dati sono strutturalmente corretti e l’amministratore dà l’autorizzazione, inserisce i dati nel database. B.O.M. APPLICAZIONE SOFTWARE DB La procedura sopra illustrata garantisce che i dati inseriti nel database siano strutturalmente corretti e che siano stati valutati dall’amministratore (che pertanto ne ha la responsabilità) per quanto riguarda la “correttezza di significato”. 86 5. LA GESTIONE DELLE REVISIONI La gestione delle revisioni e le procedure ad essa connesse sono senz’altro tra gli aspetti più rilevanti relativi alla distinta base. In conclusione all’analisi della gestione delle revisioni nel sistema preesistente avevamo espresso alcuni dubbi riguardo la procedura in uso in azienda: per comprendere la fondatezza o meno dei nostri dubbi ripercorriamo il percorso logico che ci deve portare alla procedura corretta, che naturalmente dipende da che cosa significa “revisione di un elemento” e dal livello di prestazioni che vogliamo raggiungere. 5.1. Cosa si intende per revisione Per revisione si intende la modifica di un elemento tale per cui la funzione dell’elemento stesso non cambia, ma cambiano le sue caratteristiche prestazionali. Questa definizione vale per tutti i tipi di elementi che possono essere soggetti a revisione (quindi tutti). Il seguente schema è relativo alla revisione di una scheda. MTBF = 1 ANNO INPUT SCHEDA-01 OUTPUT MTBF = 2 ANNI INPUT SCHEDA-02 OUTPUT 87 Anche le revisioni di documenti, software e componenti assumono il medesimo significato: cambia la “qualità” del componente ma non la funzione. Per gli elementi aventi distinta è inoltre possibile dare una definizione di revisione più specifica: la revisione di una distinta avviene quando un elemento presente in distinta viene sostituito con un altro, naturalmente senza alterane la funzione complessiva della distinta. A SCHEDA-01 A SCHEDA-02 B 5.2. C Gli obiettivi da raggiungere Le caratteristiche fondamentali a cui una procedura di revisione degli elementi si deve attenere sono le seguenti: deve consentire l’aggiornamento di un elemento; deve mantenere le informazioni storiche relative a tutte le revisioni precedenti; l’ultima versione di una distinta (per esempio, la versione più recente di un prodotto o di una scheda) deve contenere tutte le versioni più recenti dei componenti che la compongono; deve mantenere le informazioni relative alla composizione di tutte le distinte precedenti (per esempio di prodotti già prodotti o venduti con all’interno versioni obsolete di componenti). 88 Si nota da subito come il problema cruciale relativo alla gestione delle revisioni sia la reperibilità delle informazioni, in particolare le informazioni riguardo la composizione delle distinte contenenti prodotti revisionati. 5.3. Gli elementi obsoleti Il concetto di “obsolescenza” di un elemento è strettamente associato al concetto di “revisione”. E’ naturale che nel momento in cui un elemento viene revisionato e di conseguenza generata una nuova versione, con le stesse funzioni ma migliori prestazioni, esso diventi a tutti gli effetti obsoleto. Tale informazione è fondamentale ai fini di una corretta gestione della distinta base ed è per questo che deve essere presente come attributo dell’elemento anche nella struttura relazionale del database. “Tutte le versioni di un elemento precedenti all’ultima devono essere dichiarate obsolete” Una volta che un elemento è dichiarato “obsoleto” sono due le principali conseguenze: esso non dovrà più essere inserito in alcuna nuova distinta (al suo posto ci deve essere la versione più recente del componente stesso); se avente distinta, essa non dovrà più essere modificata: è assurdo che un elemento non più utilizzato sia composto da componenti con versioni più recenti della versione dell’elemento padre. 5.4. La politica aziendale delle revisioni La politica delle revisioni già in uso in azienda è la seguente: 89 la revisione può avvenire per tutti gli elementi aventi nel codice un “numero di versione”; in particolare, la revisione di un elemento avente distinta avviene se cambia un suo componente (ma non se cambia solo la versione!); nel momento in cui esce una nuova versione di un elemento, il codice sarà uguale a quello della versione precedente, ma con il numero di revisione aumentato di uno; tutti gli elementi relativi a versioni precedenti vengono dichiarati obsoleti; viene aggiornata la distinta di tutti gli elementi, non obsoleti, che sono padre dell’elemento revisionato. L’esempio riportato nello schema seguente chiarisce quali sono le conseguenze operative a cui la politica di revisione già in uso in azienda conduce. 90 HS0001-02 HS0001-01 REVISIONE HS0001-01 (OBS) HS0001-01 (OBS) HS0001-01 PS0003-01 (OBS) X REVISIONE PS0003-01 (OBS) Y Y HS0001-01 PS0123-01 J K X HS0001-02 REVISIONE PS0123-01 J K Come si può facilmente notare la medesima revisione di un componente ha due effetti diversi a seconda se la distinta in cui è contenuto è dichiarata obsoleta o meno. L’essenza del problema Il punto più delicato della suddetta politica è evidentemente la possibile modifica di una distinta già presente nel database, che fa perdere la corrispondenza univoca tra la distinta e i componenti della distinta, tra l’elemento padre e i propri figli. Ciò è diretta conseguenza del fatto che il cambiamento di revisione di un elemento contenuto in distinta non innesca a sua volta la revisione 91 dell’elemento padre a cui la distinta fa riferimento. Tale eventualità genererebbe una sorta di “effetto domino”, ma eviterebbe di perdere la corrispondenza univoca tra distinta e componenti. E’ la soluzione alternativa che proponiamo nel paragrafo seguente. 5.5. L’effetto domino sulle revisioni L’unica differenza procedurale rispetto la politica esposta in precedenza è la seguente regola: la revisione di un elemento avente distinta avviene se cambia un suo componente o se viene revisionato un componente della sua distinta. Continua a valere inoltra la regola implicita: le distinte obsolete non vengono modificate, quindi i loro componenti non cambiano di versione e di conseguenza sono escluse dall’effetto domino. Di conseguenza non è più necessario intervenire sulle distinte di tutti gli elementi padre non obsoleti; infatti, per ogni distinta in cui è presente il componente revisionato verrà generata, per “effetto domino”, una nuova versione dell’elemento padre e quindi una nuova distinta contenente la versione aggiornata del componente revisionato. L’esempio dovrebbe chiarire tutto. 92 HS0001-02 HS0001-01 REVISIONE HS0001-01 (OBS) HS0001-01 (OBS) HS0001-01 PS0003-01 (OBS) X REVISIONE PS0003-01 (OBS) Y X Y HS0001-01 (OBS) PS0123-01 (OBS) HS0001-01 PS0123-01 J J K REVISIONE HS0001-02 K PS0123-02 J K Come si nota l’effetto domino si propaga verso l’alto, infatti la revisione di una scheda ha innescato a sua volta la revisione del prodotto contenente la scheda, in generale il susseguirsi di revisioni si propaga fino alla radice dell’albero delle distinte. 93 In tal modo l’univocità della relazione distinta/componenti è garantita: il prodotto “PS0123-01” dell’esempio sarà sempre associato esclusivamente alla scheda “HS0001-01” senza possibilità di equivoci. 5.6. Il confronto tra le due alternative Per comprendere quale sia l’alternativa migliore tra le due politiche di revisione riportiamo in una tabella il confronto sui vari punti. Senza effetto domino Effetto domino Il cambiamento di un elemento alla base dell’albero della distinta implica una sola revisione. Il cambiamento di un elemento alla base dell’albero della distinta implica la propagazione di nuove revisione fino all’elemento radice. Il totale delle revisioni per scheda o componente è in media basso (esempio: se un prodotto contiene 5 schede e per ogni scheda escono 3 revisioni, viene aggiornata la distinta del prodotto 15 volte, ma il numero di revisione non cambia). Il totale delle revisioni per scheda o componente sarebbe in media notevolmente più alto (esempio: se un prodotto contiene 5 schede e per ogni scheda escono 3 revisioni, per il prodotto verranno generate ben 15 revisioni e relative distinte). Si perdono informazioni storiche sulla composizione esatta delle vecchie distinte (esempio: se un cliente riscontra un problema su un prodotto non si è in grado di sapere con certezza quali versioni di schede sono presenti su di esso). Possibili problemi in fase di ASSISTENZA. Vi è la reperibilità totale delle informazioni relative a vecchie distinte successivamente sottoposte a revisioni (a un determinato codice di scheda corrisponde esattamente una e una sola distinta perché non è mai stata modificata). In fase di PRODUZIONE non vi sono problemi perché vi è la certezza che ogni distinta non obsoleta è composta con le ultime versioni esistenti dei suoi componenti. In fase di PRODUZIONE non vi sono problemi: l' ultima revisione di un prodotto ha, in distinta, tutte le ultime revisioni dei sui componenti. Se un componente è presente in più distinte (ha più padri), la sua eventuale revisione, non propagandosi, non influisce sul numero di revisione degli elementi padre. Un componente con più padri propaga l’aggiornamento di revisioni in più direzioni con l’effetto collaterale di ritrovarsi nuove revisioni di prodotti che potrebbero non essere più in catalogo perché, per esempio, l’azienda non è più interessata nella loro produzione. 94 La soluzione più affidabile e con meno punti deboli sembrerebbe l’effetto domino. L’unico problema associato ad esso è difatti il maggior numero di revisioni (e quindi di codice e relative distinte) da gestire. Risulta meno grave di quello che appare, invece, il problema della reperibilità per la politica “senza effetto domino” già in uso in azienda, in quanto nel momento in cui si genera una nuova versione relativa ad un elemento si tiene traccia delle caratteristiche della revisione. In particolare si memorizza la “descrizione della revisione”, la “motivazione”, la “data di revisione”, ed eventualmente si associa, mediante un link, un documento che rappresenta nel dettaglio le modifiche effettuate. Data una qualsiasi versione di un elemento è nota la “data” a cui essa si riferisce. Mediante il meccanismo inverso è pertanto possibile risalire alla versione in uso in una certa data passata. Quindi è possibile, conoscendo per esempio la data in cui il prodotto fu venduto, risalire alla composizione esatta della distinta con le versioni dei componenti allora in uso. La coppia distinta/data individua pertanto univocamente i componenti della distinta a quella data. La scelta aziendale L’azienda posta di fronte alla scelta tra le due alternative di gestione delle revisioni, dopo aver considerato i pro e i contro ha optato per mantenere la politica in uso, ritenendola più coerente con le metodologie fino ad ora adottate e sufficientemente solida. Sulla scelta ha pesato decisamente la propagazione verso l’alto generata dall’effetto domino, che spinge per la generazione di nuove revisioni anche per prodotti che, per esempio, potrebbero essere ormai fuori listino, senza essere ancora considerati obsoleti. 95 La nostra opinione è in disaccordo con tale scelta in quanto una definizione migliore dell’obsolescenza consentirebbe di limitare la propagazione verso l’alto dell’effetto domino solo agli elementi padre effettivamente ancora in uso. Basterebbe che invece di considerare obsoleti solo gli elementi soggetti a revisione, siano dichiarati obsoleti anche i prodotti non più utilizzati per risolvere tale problema. Alcuni dubbi conclusivi Rimangono inoltre alcuni dubbi sulla correttezza concettuale di alcune procedure in uso relative alla gestione delle revisioni. L’uscita di una nuova revisione, come abbiamo detto, non cambia la funzione dell’elemento ma può cambiare altre proprietà, come per esempio l’affidabilità. Il cambiamento dell’affidabilità di un componente, può di conseguenza cambiare l’affidabilità dell’elemento che lo contiene. Il cambiamento dell’affidabilità di un elemento non è sufficiente per affermare che tale elemento è diverso da quello precedente e quindi che è necessaria l’uscita di una nuova revisione dell’elemento stesso? E’ corretto, da un punto di vista concettuale, prevedere una procedura standard per la modifica di dati già archiviati in un database? A mio avviso questo è lecito solo se i dati suscettibili di tale modifica non hanno un valore storico. E’ questo il caso delle distinte? 96 6. LA PROCEDURA DI APPROVAZIONE Vi sono alcuni tipi di informazioni che prima dell’inserimento all’interno del database necessitano di approvazione da parte dell’utente che ne detiene la responsabilità. Tale elemento è fondamentale per una chiara e precisa distribuzione delle responsabilità tra i dipendenti dell’azienda e si scontra con la decisione aziendale di centralizzare l’inserimento dei dati attribuendo ad un solo utente “amministratore” tale compito. Vi sono due tipi di operazioni sul database, in particolare, che necessitano di “approvazione” da parte dell’utente in quanto informazioni ritenute critiche per l’azienda. codifica dell’elemento; revisione di un elemento. 6.1. La situazione preesistente Come abbiamo già avuto modo di vedere, nel sistema preesistente, la codifica e la revisione di un elemento avviene secondo la procedura implicita seguente: il progettista richiede la codifica o la creazione di una revisione all’amministratore e gli fornisce i dati da inserire; l’amministratore attribuisce l’approvazione degli stessi a colui che l’ha richiesta o a colui che ne detiene la responsabilità; l’amministratore inserisce i dati nel database. 97 Tale procedura è priva di strumenti di verifica da parte di colui che effettivamente detiene la responsabilità sui dati. Paradossalmente sarebbe possibile che un errore di inserimento da parte dell’amministratore risulti attribuito alla persona il cui nome è inserito nel campo “approvato” del database, o, ancor peggio, che per errore l’amministratore attribuisca l’approvazione alla persona sbagliata. Questa mancanza di controllo esaspera ancora maggiormente la responsabilità delle informazioni verso l’amministratore, privando di conseguenza di valore i dati relativi all’approvazione inseriti nel database. 6.2. Come affrontare il problema Il problema relativo all’approvazione nasce da una confusione di fondo sull’attribuzione delle responsabilità. E’ necessario scegliere chiaramente su chi si vuole far ricadere la responsabilità dei dati inseriti. Se la responsabilità la si vuol far ricadere su una sola persona per poter meglio identificare la possibile fonte di errori, l’esistenza di un attributo “approvato” crea solo confusione e può spingere l’amministratore a disinteressarsi della validità dei dati in quanto “sembra” che la responsabilità non sia sua. A questo punto sarebbe meglio rimuovere tale attributo e responsabilizzare maggiormente l’unico responsabile del sistema in modo che si assicuri che i dati inseriti siano corretti. Il livello di responsabilità da affidare ad egli, in questo caso, sarebbe veramente molto alto e in alcuni casi potrebbe generare problemi: per esempio se gli si richiedesse di inserire dati di un elevato livello tecnico, difficilmente valutabili. L’altra soluzione è quella di mantenere una distinzione delle responsabilità, quanto meno per quanto riguarda i dati più importanti. Si 98 renderebbe necessaria, in tal caso, una procedura che garantisca la diretta responsabilità di chi effettivamente deve dare l’approvazione di una informazione. La procedura che presentiamo di seguito si fonda su tale scelta. 6.3. Il protocollo di approvazione La soluzione che proponiamo relativa alla procedura di approvazione si basa su due presupposti fondamentali che devono essere implementati nel sistema: la possibilità da parte del programma di inviare e-mail agli utenti; la possibilità da parte del sistema di riconoscere gli utenti. Il protocollo si articola in cinque fasi: richiesta di codifica o di revisione; “login” dell’amministratore; inserimento dei dati; “login” dell’utente; approvazione finale. Nelle seguenti pagine riportiamo schematizzate graficamente le cinque fasi relative al protocollo di approvazione. 99 FASE 1: RICHIESTA DI CODIFICA (O DI REVISIONE) UTENTE AMMINISTRATORE DEL SISTEMA L' utente richiede all' amministratore la nuova codifica di un elemento o la generazione di una nuova revisione. La richiesta viene effettuata mediante un' e-mail contenente i dati necessari all' inserimento. FASE 2: LOGIN DELL'AMMINISTRATORE AMMINISTRATORE DEL SISTEMA UTENTE 1) L' amministratore richiede l' identificazione 3) Se l' amministartore ha i dovuti permessi viene restituita l' autorizzazione all' uso (sia "in scrittura" che "in lettura") del programma di gestione PROGRAMMA DI GESTIONE 2) Il programma confronta i dati di LOGIN inseriti dall' amministratore con quelli presenti nel database DB 100 DATABASE SADEL FASE 3: INSERIMENTO DEI DATI UTENTE 3) Il programma invia un' email all' utente informandolo che gli è stata richiesta una approvazione 1) L' amministratore inserisce i dati relativi alla codifica o alla revisione di un elemento e sceglie se farlo approvare e da chi AMMINISTRATORE DEL SISTEMA 2) Il programma controlla e reinvia iterativamente i dati all' amministartore finché non risultano formalmente corretti PROGRAMMA DI GESTIONE 4) Vengono inseriti nel database tutti i dati tranne la conferma di approvazione dell' utente DB DATABASE SADEL 101 FASE 4: LOGIN DELL'UTENTE AMMINISTRATORE DEL SISTEMA UTENTE 1) L' utente richiede l' identificazione 3) Se l' utente ha i dovuti permessi viene restituita l' autorizzazione all' approvazione e all' uso "in lettura" del programma di gestione PROGRAMMA DI GESTIONE 2) Il programma confronta i dati di LOGIN inseriti dall' utente con quelli presenti nel database DB 102 DATABASE SADEL FASE 5: APPROVAZIONE FINALE UTENTE 1) Dopo aver controllato i dati inseriti l' utente decide se approvarli o meno, inviando la sua scelta al programma di gestione AMMINISTRATORE DEL SISTEMA 2) Viene inviata una e-mail all' amministratore informandolo della scelta fatta PROGRAMMA DI GESTIONE 3) Se l' utente ha approvato i dati inseriti viene aggiunta, a tali dati, la "firma" dell' utente stesso N.B. Se l' approvazione non è concessa, i dati inseriti rimangono nel database, ma senza la "firma" dell' utente. DB DATABASE SADEL E’ da chiarire, probabilmente, il perché è consentita la mancata approvazione di un elemento o di una revisione. Questa scelta dipende dalla mole di dati che altrimenti sarebbero soggetti ad approvazione (si pensi solamente a gli oltre 9000 elementi codificati) e al fatto che si vuole lasciare all’amministratore la decisione su quali siano le informazioni importanti. Un elemento approvato è “garantito” dal nome della persona che lo approva e sarà pertanto preferibile nell’uso rispetto ad un equivalente non approvato. 103 6.4. I miglioramenti apportati Nelle cinque fasi descritte in precedenza si può notare come tale protocollo realizza un’interazione tra amministratore, utente e database armonizzate dal programma di gestione. Questa tipo di soluzione consente di distribuire correttamente le responsabilità nonché di effettuare ripetuti controlli sui dati più importanti. Difatti le informazioni suscettibili di approvazione sono esaminate molteplici volte: l’utente, che ne richiede l’inserimento nel database, controlla il “significato”; l’amministratore, che le inserisce nel database, controlla sia il significato che la correttezza formale; il programma di gestione verifica la correttezza strutturale; l’utente, che le deve approvare, controlla la correttezza di “significato” dopo che sono passate sotto le modifiche dell’amministratore e del programma di gestione. Si può affermare pertanto che il protocollo di approvazione, una volta implementato, garantisca due aspetti fondamentali del sistema di gestione: una corretta distribuzione di responsabilità; la sicurezza della correttezza delle informazioni ritenute più importanti. 104 7. LA GESTIONE DEI DOCUMENTI La gestione dei documenti è un altro degli aspetti fondamentali, fortemente collegato alla distinta base. Tra i documenti infatti ritroviamo i progetti e le specifiche dei prodotti e delle schede realizzati nell’azienda, senza i quali la distinta base sarebbe un semplice elenco di componenti senza che sia in alcun modo possibile collegarli fra loro. Sarebbe come avere una lista di ingredienti senza la ricetta che spiega come impiegarli per fare la torta. Inoltre i documenti rappresentano, per l’azienda, le “informazioni riservate”, quelle per cui la protezione deve raggiungere i livelli più elevati possibili. Per questo si ritiene fondamentale un sistema che garantisca contemporaneamente la sicurezza e la corretta gestione dei documenti. 7.1. I documenti nel sistema preesistente La metodologia di gestione dei documenti nel sistema preesistente separa l’inserimento fisico del documento nel server, dall’inserimento del link relativo nel database. LINK DB 105 Come per innumerevoli altre funzioni implementate nel sistema preesistente anche questa è affidata all’amministratore, che ne assume l’intera responsabilità. Il problema comunque va al di là della responsabilità su eventuali errori, infatti risulta assai più pericolosa la relazione unilaterale che vi è tra link e documento associato. Per la natura stessa del concetto di “link” (collegamento), cioè di puntatore a una posizione ben precisa, esso non risente di eventuali modifiche o cancellazioni del file a cui esso punta. Se per esempio un file viene cancellato dal server, tale cambiamento non viene rilevato dal database che continuerà ad avere un link che però, quando servirà, si rivelerà interrotto. Nel database preesistente sono presenti circa 25 documenti con link interrotto. La soluzione di questo grave problema è il requisito fondamentale su cui costruire un valido sistema di gestione dei documenti. 7.2. Una soluzione semplice e potente La soluzione al problema va ricercata nell’unione di quelle due operazione di base che nel sistema preesistente erano separate: l’inserimento del documento nel server; l’inserimento del link nel database. Sia il link, che il documento vero e proprio devono essere sotto la protezione del “programma di gestione” che ne deve garantire una “gestione coordinata”, in particolare deve implementare le seguenti funzioni: consentire l’inserimento del link solo dopo che il file è stato inserito nella directory del server; 106 all’atto dell’inserimento accertarsi che il link punti al relativo file; impedire la modifica del file; consentire l’eliminazione o la sostituzione di un file eliminando o cambiando anche il link presente nel database. Lo schema seguente rappresenta l’inserimento di un documento, secondo la metodologia proposta. LINK DB In particolare si nota come l’amministratore “dia in affidamento” il documento al programma di gestione, il quale oltre ad inserire il 107 documento in una predefinita directory del server, crea il link corretto e lo inserisce all’interno del database. Con la medesima logica di gestione si possono implementare anche le operazioni di sostituzione e di eliminazione dei documenti conservati nel server. 7.3. Obiettivi raggiunti Mediante la gestione congiunta dei documenti e dei link, descritta nel paragrafo precedente, è possibile raggiungere elevati livelli di qualità nella gestione dei documenti. In particolare si ottengono i seguenti risultati: azzeramento del numero di link interrotti; rintracciabilità dei documenti mediante ricerca sul database; possibilità di eliminazione e sostituzione dei documenti senza rischiare di alterare la validità e l’integrità dei dati; semplificazione della procedura di inserimento dei documenti per l’amministratore. 108 8. RICERCA E VISUALIZZAZIONE DELLE INFORMAZIONI L’importanza della ricerca e visualizzazione dei contenuti è almeno pari all’importanza dei contenuti stessi; informazioni prive di una adeguata interfaccia per la consultazione risultano essere inutili e incapaci di svolgere il ruolo per cui esistono: informare. In questo capitolo cercheremo di individuare i requisiti necessari per una corretta ricerca e presentazione dei contenuti all’utente finale e svilupperemo la logica di gestione relativa. Tale lavoro prende forma da alcune considerazioni di base: è necessario evitare di stravolgere la struttura di visualizzazione presente in precedenza, per attenuare le difficoltà del passaggio dal sistema preesistente a quello in studio; vi sono alcune “viste” (query standard) indispensabili; è necessaria una tipologia di ricerca per livelli successivi: da una ricerca molto generale ad una ricerca estremamente specifica; serve un menù fisso per la navigazione che consenta all’utente di muoversi nelle varie aree dell’interfaccia in modo semplice ed intuitivo; è necessario prevedere metodologie per l’esportazione in formato Excel delle tabelle; servono strumenti adeguati per la stampa delle tabelle, delle distinte e delle schede degli elementi. 109 8.1. Il limite del sistema preesistente L’unico problema grave del sistema preesistente riguarda l’impossibilità di eseguire interrogazioni altamente specifiche per una determinata categoria di elementi che, d’ora in avanti, chiameremo “componenti speciali”. Si tratta di componenti per circuito stampato, presenti in elevata numerosità, per i quali frequentemente è necessario effettuare ricerche sulle specifiche caratteristiche funzionali. I componenti di cui stiamo parlando sono: condensatori; resistenze; circuiti integrati; connettori; diodi; transistor. Nel sistema preesistente le ricerche sulle caratteristiche funzionali di questi componenti venivano effettuate mediante semplici ricerche testuali all’interno del campo descrizione della tabella degli elementi. Questo dovrebbe presupporre due condizioni: che il campo descrizione sia definito mediante un formalismo preciso; che sia necessario effettuare solo ricerche esatte. In realtà nessuna delle condizioni sopra citate è rispettata. 8.1.1. La soluzione al problema dei componenti speciali La necessità di un formalismo preciso per il campo descrizione dei componenti speciali era già stata recepita dall’azienda che ha sviluppato 110 documenti che stabiliscono le regole per la definizione di tale campo. Basterebbe pertanto ricondurre i dati esistenti al formato scelto e controllare l’inserimento dei nuovi dati per garantire la possibilità di ricerche esatte sui componenti speciali. In realtà ciò non è sufficiente in quanto abbiamo rilevato la necessità di effettuare anche ricerche “non esatte”, per esempio trovare tutti i condensatori con tensione maggiore di un certo valore prefissato. ..... codice_elemento ELEMENTI (p,e) CONDENSATORI ..... RESISTENZE ..... CIRCUITI INTEGRATI ..... CONNETTORI ..... DIODI ..... TRANSISTOR ..... Dalla gerarchia degli elementi si nota come le sottocategorie relative ai componenti speciali non possano essere incorporate nell’entità padre ELEMENTI, pena la perdita di tutti gli attributi importanti contenenti le caratteristiche dei componenti. Per consentire la realizzazione di ricerche “non esatte” è necessario rappresentare tali caratteristiche funzionali, diverse per ogni tipologia di componente, mediante entità collegate mediante una relazione di appartenenza all’entità degli elementi. Di seguito riportiamo, per chiarezza, lo schema E/R, dopo l’eliminazione delle gerarchie, relativo a due categorie di componenti speciali: i condensatori e le resistenze. 111 codice_elemento ELEMENTI (0,n) (0,n) (1,1) CONDENSATORI ..... (1,1) RESISTENZE ..... Tale schema si concretizza in una serie di tabelle, ognuna relativa ad un componente speciale, aventi come chiave il codice dell’elemento a cui si riferiscono e come attributi tutte le varie caratteristiche funzionali dell’elemento. L’insieme degli attributi del componente speciale sostituiscono, per tali componenti, il campo “descrizione” presente nell’entità degli elementi. Per consentire comunque una veloce identificazione del componente, il campo “descrizione” viene generato mediante un semplice funzione direttamente dagli attributi del componente relativo in maniera univoca, permettendo così anche una eventuale ricerca esatta col “vecchio sistema”. 8.1.2. L’importazione del campo descrizione La creazione di sei nuove entità derivate dall’entità degli elementi genera un problema di “trasporto” dei dati, contenuti nel campo descrizione 112 dei componenti speciali preesistenti, all’interno delle nuove tabelle. Per realizzare tale trasposizione dei dati è necessario: interpretare il campo descrizione; inserire i dati negli appropriati campi delle nuove tabelle; segnalare i componenti per i quali non è stato possibile interpretare il campo descrizione correttamente. L’interpretazione del campo descrizione viene realizzata grazie ad un meccanismo simile a quello usato per l’interpretazione dei codici. Mediante un file di testo, viene istruito il sistema sul formato che il campo descrizione deve avere. Il sistema confronta il campo descrizione del componente col formato restituendo il significato delle varie parti del campo. Se il sistema comprende tutte le parti del formato lo inserisce nei rispettivi campi della tabella del componente. Se lo riconosce solo in parte e il componente non è utilizzato in altre tabelle, lo elimina. Se lo riconosce solo in parte e il componente è utilizzato, inserisce nella tabella del componente i dati che ha riconosciuto e segnala il riconoscimento parziale inserendo in un apposito campo “altro”, presente in tutte le tabelle dei componenti, l’intera descrizione che non ha riconosciuto completamente. Riportiamo di seguito parte del file di testo necessario per realizzare tale procedura. Da notare come i valori numerici siano rappresentati da un asterisco. 113 8.2. Le viste principali e la struttura delle informazioni Per poter stabilire una adeguato sistema di visualizzazione e ricerca delle informazioni è necessario comprendere quali siano le interrogazioni che più di frequente vengono poste al database. Se tali interrogazioni 114 raggruppano una categoria di istanze ben definita e con caratteristiche ed esigenze di visualizzazione simili, si denominano “viste”. Le viste fondamentali sono le seguenti: “elementi”: tutti gli elementi presenti nel database; “prodotti”: tutti i prodotti non obsoleti con evidenziazione di quelli aventi distinta; “schede”: tutte le schede elettroniche non obsolete con evidenziazione di quelle aventi distinta; “circuiti stampati”: tutti i circuiti stampati; “documenti interni”: tutti i documenti ad uso interno (moduli, ecc.) con riportato il link associato; “magazzino”: tutti gli elementi presenti in magazzino con evidenziato anche il costruttore e il relativo codice e il numero di pezzi attualmente presenti; “codici costruttori”: tutti gli elementi aventi associato un codice costruttore ed eventualmente gli alternativi. “fornitori”: tutti i fornitori con i relativi dati. Come si può notare, tutte le viste descritte tranne quella relativa ai fornitori, rappresentano sottocategorie di elementi e sono pertanto identificate univocamente dal “codice elemento”. Questo significa che è sempre possibile ricondursi ad una “scheda elemento” che raggruppi in sé tutte le informazioni relative all’elemento stesso. L’informazione relativa alle caratteristiche dell’elemento è pertanto un sottoinsieme della informazione più vasta relativa alla categoria a cui l’elemento appartiene. Da notare, infine, che il medesimo elemento può essere presente in diverse 115 “viste” che pertanto non si escludono a vicenda (per esempio un prodotto che è in magazzino). Le viste corrispondono alle opzioni che devono essere presenti nel menu di navigazione. 8.3. La struttura di visualizzazione Le problematiche relative alla visualizzazione e alla ricerca delle informazioni nonostante siano fortemente interconnesse, debbono essere studiate separatamente in quanto corrispondono a due sistemi di consultazione dei dati alternativi: è possibile trovare un’informazione sia mediante una ricerca che mediante un susseguirsi di visualizzazioni più specifiche o (come accade il più delle volte) mediante l’utilizzo di entrambi gli strumenti. Per quanto riguarda la visualizzazione si è scelto di mantenere una struttura simile a quella preesistente, che consente di muoversi dalla prima pagina verso l’informazione cercata mediante la scelta di viste successive. Nell’esempio di seguito riportiamo una possibile rappresentazione gerarchica per la visualizzazione delle informazioni, su quattro livelli: livello zero: l’home page; livello “viste”: tutte le viste più importanti del database; livello “elementi”: tutti gli elementi relativi alla vista selezionata; livello “caratteristiche”: tutte le caratteristiche relative all’elemento scelto. 116 LIVELLO ZERO HOME PAGE LIVELLO "VISTE" LIVELLO "ELEMENTI" LIVELLO "CARATTERISTICHE" 8.4. DISTINTA PRODOTTI MAGAZZINO PS0001 PS0002 PS0003 REVISIONE COSTO COSTRUTTORI La ricerca La ricerca costituisce lo strumento più semplice ed immediato per trovare facilmente ciò che si cerca o quantomeno per individuare la categoria in cui cercare “visivamente” l’informazione desiderata. Come per la visualizzazione anche la ricerca deve essere possibile su più livelli di dettaglio e deve essere correttamente gestita dall’utente affinché raggiunga le migliori prestazioni. Le tipologie di ricerca che abbiamo deciso di implementare sono: ricerca semplice; ricerca avanzata. 8.4.1. La ricerca semplice Questa tipologia di ricerca consente di effettuare una ricerca “esatta” all’interno di una specificata “vista” ed eventualmente all’interno di un determinato “campo” della “vista”. Per ricerca esatta si intende la ricerca di una corrispondenza diretta tra la parola che si inserisce e il risultato ottenuto e non di un determinato 117 intervallo di soluzioni che si avvicinano alla ricerca. Questo tipo di ricerca consente in ogni caso di effettuare ricerche abbastanza complesse anche grazie alla possibilità di uso dei caratteri “jolly” (o “wild card”). In particolare se nella parola inserita per la ricerca non è presente alcun “wild card” il sistema ricerca tutte le istanze i cui campi contengono tale parola: per esempio la ricerca della parola “DSP” produrrà tra i risultati anche la descrizione “SCHEDA DSP FS”. Se invece viene fatto uso dei “wild card” il risultato ne terrà conto: per esempio la ricerca della parola “HS*” produrrà come risultato tutti i codici che iniziano per HS. 8.4.2. La ricerca avanzata La ricerca avanzata, come quella semplice, svolge il suo ruolo all’interno di una specificata “vista”, ma con alcuni importanti vantaggi: è possibile specificare i criteri della ricerca sulla base del tipo di campo; è possibile impostare più criteri contemporaneamente; è possibile effettuare più ricerche successive; è possibile stabilire un ordinamento del risultato. La cosa più interessante è senz’altro la possibilità di specificare i criteri di ricerca sulla base del tipo di campo. In particolare ciò si concretizza nelle seguenti implicazioni logiche. 118 TIPO DI CAMPO TESTUALE NUMERICO OPZIONI DATA FORM parola ricercata = valore K (E +03) ± valore intervallo su cui ricercare menu a tendina con l' elenco delle opzioni possibili opzione_1 > ordine di grandezza giorno mese anno menu a tendina per la scelta dell' intervallo temporale Per i campi testuali vale l’uso dei “wild card” con le stesse metodologie della ricerca semplice. La ricerca avanzata consente, per esempio, di effettuare la ricerca di un componente “condensatore” con capacità maggiore di 2pF, tensione pari a 50V codificato dopo il primo gennaio 2003 con precisione compresa tra lo 0,25 e l’1,75 % (1±0.75), ordinato per “codice elemento”. 8.5. La progettazione operativa La progettazione della logica di gestione relativa alle funzionalità di visualizzazione e di ricerca consiste nel realizzare strumenti operativi che consentano all’utente di interagire col sistema. In questo paragrafo presenteremo a grandi linee le funzioni che riguardano la visualizzazione delle informazioni sia come risultato di una “vista” sia come risultato di una ricerca. L’idea di fondo è quella che in ogni caso le informazioni da riportare sono frutto di una query SQL eseguita su una tabella del database o, come accade più frequentemente, su una “vista” che non è altro che una tabella temporanea frutto di selezioni e “join” sulle tabelle già esistenti. 119 E’ necessaria pertanto una funzione che dato in input una query SQL restituisca la visualizzazione del risultato corrispondente, che nella realtà sarà una tabella in HTML. QUERY SQL FUNZIONE DI VISUALIZZAZIONE HTML La “funzione di visualizzazione” consente, da sola, di visualizzare tutte le tabelle e “viste” del database. Dopo aver creato la “vista” basta difatti inserire in input la query SQL “select * from nome_tabella” per ottenere sotto forma tabellare tutte le istanze relative alla tabella o alla vista desiderata. Per quanto riguarda la ricerca le cose si complicano leggermente, in quanto, non è pensabile di chiedere all’utente direttamente l’espressione SQL della ricerca, pena l’impossibilità di effettuare ricerche da parte dell’utente medio che non conosce il linguaggio SQL. E’ necessario pertanto una funzione che data la struttura della vista proponga all’utente un modulo con determinati campi (“form”) da compilare e che generi delle specifiche precise dalle quali sarà possibile creare una query SQL che rappresenti in modo “strutturato” le scelte dell’utente. Nello schema di seguito riportiamo la sequenza logica delle funzioni che consentono di visualizzare il risultato di una ricerca a partire dalla compilazione della “form” da parte dell’utente. 120 VISTA FORM QUERY SQL FUNZIONE DI SELEZIONE FUNZIONE DI VISUALIZZAZIONE 8.6. SPECIFICHE HTML Esportazione e stampa delle informazioni Oltre alla ricerca delle informazioni è estremamente importante definire delle metodologie per la stampa e l’esportazione dei dati. Per quanto riguarda l’esportazione essa è realizzabile mediante una “funzione di visualizzazione” con le medesime caratteristiche di quella illustrata in precedenza, ma che in output restituisce un file in formato C.S.V. (Comma Separated Values), che può essere interpretato agevolmente dall’applicazione Microsoft Excel. La stampa si può realizzare direttamente mediante il comando “print” del browser utilizzato dal programma di gestione, semplicemente impostando in maniera adeguata i fogli di stile C.S.S. (Cascading Style 121 Sheet) che istruiscono il browser su come visualizzare i contenuti a seconda del supporto (schermo o stampa). L’unica eccezione riguarda la stampa di distinte che data l’importanza richiede l’implementazione di una pagina “printer friendly” che viene interpretata meglio dalla stampante. 122 9. LA SICUREZZA La sicurezza è uno degli aspetti fondamentali di un qualsiasi sistema informativo in quanto proteggendo i dati da possibili inquinamenti ne garantisce l’integrità e la validità degli stessi. In questo capitolo affronteremo il tema “sicurezza” sotto due aspetti differenti: gestione dei permessi di accesso; sistemi di prevenzione e recupero dei dati in caso di crash del sistema. Tralasciamo di proposito il tema relativo alla “sicurezza del server”, in quanto oltre ad essere estremamente complesso, non è pertinente con questo elaborato. 9.1. Gestione dei permessi di accesso Nel sistema preesistente, la gestione dei permessi era estremamente semplice, tutti gli utenti avevano accesso al database solo in letture mentre solo l’amministratore aveva accesso al database anche in scrittura. Nel sistema che si sta implementando tale soluzione risulta insufficiente in quanto si vuole impedire l’accesso al database (anche in lettura) ad un utente non identificato. La riservatezza delle informazioni deve essere garantita da un accesso mediante password e da alcuni livelli di permesso, diversi a seconda delle caratteristiche dell’utente. In particolare si vorrebbero realizzare tre livelli di permesso: amministratore (accesso in lettura e in scrittura su tutto il database); 123 utente interno Sadel (accesso in lettura su tutto il database); utente esterno (accesso in lettura su tutto tranne che sulle informazioni relative ai costi, al magazzino e ai fornitori). 9.1.1. Gli strumenti offerti da MySQL Il database MySQL prevede alcuni strumenti per la gestione degli utenti mediante i quali è possibile assegnare o revocare permessi per le diverse operazioni sulle tabelle. Di seguito riportiamo la sintassi dei suddetti strumenti tratto dal manuale ufficiale di MySQL. Mediante questa sintassi il permesso per l’amministratore sarà pertanto: GRANT ALL ON *.* TO tizio@localhost IDENTIFIED BY 'sadel' WITH GRANT OPTION; Con tale istruzione si autorizza l’amministratore “tizio” dall’host “localhost” con password “sadel” ad accedere sia in lettura che in scrittura (GRANT ALL) su tutti i database e su tutte le tabelle (ON *.*) e a concedere altri permessi (WITH GRANT OPTION). 124 Mentre per l’utente generico sarà: GRANT CREATE,SELECT ON sadel.* TO caio@localhost IDENTIFIED BY 'sadel'; Con tale istruzione si concedono i permessi di “creazione di tabelle” (necessario per creare le viste che sono tabelle temporanee) e di “selezione” (proiezione) su tutte le tabelle del database “sadel” all’utente “caio” dall’host “localhost” con password “sadel” 9.1.2. La progettazione della logica di gestione Affinché la gestione degli accessi in fase di sviluppo si riveli corretta è necessario che i permessi concessi a livello “applicativo” coincidano con quelli necessari all’applicazione per accedere al database. In tal modo anche l’utente più “smaliziato” che eventualmente riuscisse, attraverso un “baco” dell’applicazione, ad interfacciarsi direttamente al database non potrà eseguire operazioni a cui non è autorizzato. PERMESSO UTENTE DATI APPLICAZIONE PERMESSO UTENTE DATI DB 125 L’unico problema sorge dal fatto che mediante la sintassi prevista da MySQL non è possibile specificare il permesso per un utente “esterno” (così come l’abbiamo definito in precedenza) a causa di una imprecisa gestione dei permessi relativi alle tabelle temporanee (le viste). Tale problema si può risolvere mediante un controllo a livello applicativo del tipo di permesso. In questo caso l’utente smaliziato che riesce a trovare un baco potrà al più riuscire ad accedere come utente Sadel, anziché come utente esterno, ma in ogni caso non potrà modificare in alcun modo i dati presenti nel database. La gestione dei permessi a livello applicativo necessita di una tabella che associ gli utenti ad una tipologia di permesso. Riportiamo l’entità e-mail nome_completo permesso relativa ad essa. nome UTENTI_DB Naturalmente in questa tabella non vi è alcuna password, la correttezza di “dati di login” inseriti dall’utente che prova ad accedere al sistema viene verificata direttamente dal programma di gestione provando a porre un’interrogazione relativa ad un’area riservata al database. A seconda della risposta di MySQL si comprende se l’utente ha diritto all’accesso o 126 meno. L’attributo “permesso” serve invece soprattutto per distinguere le aree riservate a l’utente interno da quelle accessibili anche da un utente esterno. 9.1.3. La gestione dei permessi Naturalmente deve essere prevista anche un’interfaccia riservata all’amministratore per la gestione dei permessi, dalla quale si potranno: creare nuovi permessi; revocare i permessi esistenti; promuovere o declassare gli utenti; modificare i dati relativi agli utenti, compresi i “dati di login” (nome utente e password). L’ultima particolarità da segnalare è la possibilità di coesistenza di più amministratori. In particolare un amministratore può essere nominato solo da un amministratore già esistente e un amministratore non può attraverso l’interfaccia modificare il proprio permesso o i propri dati di login. E’ necessario pertanto in fase di implementazione del sistema la creazione di un primo amministratore che possa generare a sua volta tutti i permessi necessari. 9.2. Sistemi di prevenzione e recupero dei dati L’aspetto della sicurezza relativo ai sistemi di prevenzione e recupero dei dati deve essere implementato a livello del “server”, ma, come abbiamo già avuto modo di rilevare, noi non ci addentreremo fino a tal punto. In ogni caso abbiamo pensato di implementare un sistema di recupero dei dati ad un livello più elevato, che tuteli il database da possibili errori a 127 livello applicativo (errori umani o malfunzionamenti del programma di gestione). 9.2.1. Gli strumenti offerti da MySQL Anche in questo caso MySQL ci viene in aiuto prevedendo un semplice ma efficace meccanismo di “backup” e “restore” (ripristino) dei dati. In realtà, essendo le tabelle utilizzate da MySQL contenute sottoforma di file in una determinata directory, tali comandi non fanno altro che copiare da una directory all’altra i file relativi alle tabelle di cui si vuole effettuare il backup o il ripristino. È necessario che sia l’amministratore a dare questi comandi al sistema, in quanto MySQL non prevede un backup automatico dei dati ad intervalli regolari, per questo serve un’interfaccia che permetta all’amministartore di gestire le operazioni di rispristino e di backup. 9.2.2. Il file di log Per aumentare le capacità di ripristino dei dati è possibile affiancare al meccanismo di backup un “file di log” che tiene traccia di tutte le istruzioni eseguite sul database che hanno modificato i dati a partire dall’ultimo backup. 128 Il file di log, consiste in un file di testo nel quale ogni riga ha la medesima sequenza di campi: data e ora; utente; query SQL; righe affette (cioè il numero di istanze che sono state modificate); errore (il numero dell’eventuale errore). Riportiamo di seguito un esempio. Il tipo di operazioni memorizzate sono tutte quelle che modificano in qualche modo i dati presenti: inserimento di istanze (insert); eliminazione di istanze (delete); modifica di istanze (update); modifica dei permessi (grant); revoca dei permessi (revoke). In caso di necessità è possibile, grazie al “file di log”, tentare un ripristino di tutti i dati presenti fino al momento di crash del sistema. Si può 129 implementare una procedura che, dopo aver riportato il sistema a un punto di ripristino “consistente”, tenti di rieseguire tutte le istruzioni presenti nel “file di log” fino ad un’eventuale errore o diversa risposta del sistema (confrontando il numero di righe affette con il relativo numero nel “file di log”). 9.2.3. La gestione dei backup La gestione dei backup e delle operazioni di ripristino del sistema che abbiamo deciso di implementare, viene affidata ad un’interfaccia dalla quale l’amministratore: visualizza tutti i punti di ripristino del sistema esistenti; può riportare il sistema a punti di ripristino precedenti; può eliminare vecchi punti di ripristino; può effettuare backup del database; può tentare il ripristino del sistema ad un qualsiasi istante successivo all’ultimo backup (grazie al “file di log”). Inoltre il programma di gestione svolge alcune funzioni automatiche: ogni volta che viene eseguita un’operazione di backup o di ripristino “svuota” il “file di log”; prima di ogni operazione di backup verifica la consistenza delle tabelle; prima di ogni tentativo di recupero mediante il file di log effettua un backup della situazione attuale; segnala sempre in home page quante ore sono trascorse dall’ultima operazione di backup; 130 10. IL PROGETTO DELLA BASE DI DATI Dopo aver effettuato una completa analisi dei requisiti si può procedere con la progettazione del database che ci porterà ad individuare l’organizzazione e la struttura della base di dati. La progettazione del database si può distinguere in tre fasi [1]: la progettazione concettuale; la progettazione logica; la progettazione fisica; 10.1. La progettazione concettuale Lo scopo della progettazione concettuale è quello di tradurre il risultato dell’analisi dei requisiti in una descrizione formale, indipendente dal tipo di database che si andrà ad utilizzare (nel nostro caso MySQL). Si deve giungere pertanto ad uno “schema concettuale” che, anche se in forma semplificata, dovrà contenere tutti e soli gli aspetti interessanti per la gestione del sistema. Il modello utilizzato per esprimere il risultato della progettazione concettuale, ormai da tempo affermato nelle metodologie di progetto delle basi di dati, è il modello E-R (Entity – Relationship, P.P. Chen 1976). 10.1.1. Lo schema E-R Il primo passo nella progettazione della base di dati è la definizione di uno schema E-R, che rappresenti in maniera completa il database. 131 Parte delle considerazioni che andremo a fare sono ripetizioni di osservazioni già esposte frammentariamente nei capitoli precedenti, ma per chiarezza le riproponiamo in modo completo. Individuazione delle entità e delle associazioni Per prima cosa individuiamo le istanze di entità, cioè (dalla definizione) quegli oggetti esistenti di per sé in azienda e della quale si vogliono registrare fatti specifici. Le entità rilevate sono le seguenti: elemento; fornitore; utente; Le specifiche che esprimono le associazioni sono invece: un utente può approvare uno o più elementi, un elemento può essere approvato da un solo utente; un elemento può essere stato comprato o realizzato da uno o più fornitori sotto il corrispettivo di un costo, un fornitore può aver venduto o realizzato uno o più elementi; un elemento (padre) può essere costituito da uno o più altri elementi (figli), un elemento (figlio) può essere parte di uno o più altri elementi (padri); un utente può originare una o più revisioni di un elemento; un utente può approvare una o più revisioni di un elemento. Si nota come vi siano due associazioni che legano l’utente alla revisione di un elemento che da un punto di vista concettuale non sarebbe 132 altro che una proprietà unaria dell’entità elemento (un elemento può avere al più una revisione). Per esprimere schematicamente queste specifiche è necessario introdurre tra le istanze di entità, l’entità “revisione”. Essa è in realtà un’entità “debole” in quanto ha significato solo in funzione dell’esistenza di una relativa entità “forte” elemento. L’ultima considerazione relativa alla struttura di massima del sistema riguarda le gerarchie presenti. Abbiamo già avuto modo di rilevare che possono esistere diverse tipologie di elemento tra le quali alcune, che abbiamo denominato “componenti speciali” di rilevante importanza. Esse possono essere considerate, a ragion veduta, sottocategorie dell’entità elemento. La gerarchia è di tipo parziale (esistono elementi che non appartengono ad alcuna delle sottocategorie) ed esclusiva (se un elemento è nella sottocategoria “condensatore” non è di sicuro presente nella sottocategoria “resistenza”). Lo schema scheletro Grazie alle considerazioni fatte è possibile realizzare lo “schema scheletro” del sistema (p,e) Nella pagina seguente riportiamo lo schema scheletro completo delle cardinalità delle associazioni. 133 134 Gli attributi e le chiavi L’ultimo passo della progettazione concettuale necessario per giungere alla definizione dello schema E-R è l’assegnazione degli attributi e delle chiavi delle entità e delle associazioni. Gli attributi sono “fatti che descrivono le caratteristiche delle istanze di entità e le caratteristiche delle istanze di associazione”. Possono essere: obbligatori, scalari (1,1); obbligatori, multipli (1,N); opzionali, scalari (0,1); opzionali, multipli (0,N). Le chiavi sono invece insieme di attributi identificatori di istanze di entità o associazioni. Una chiave deve essere totale, obbligatoria, unica, esplicita e non può contenere valori nulli. 135 L’entità “elemento” codice codice costruttore (0,1) costruttore note codice ELEMENTO altri costruttori (0,N) costruttore note posizione magazzino (0,1) numero pezzi operazioni magazzino (0,N) data causale documenti/files allegati (0,N) link note descrizione (1,1) data (1,1) obsoleto (1,1) note (0,1) codice elemento (1,1) L’entità “utente” nome completo (1,1) UTENTE nome utente (1,1) permesso (1,1) email (1,1) 136 L’entità “fornitore” id (1,1) nome fornitore (1,1) FORNITORE via (0,1) c.a.p. (0,1) città (0,1) tel. (0,1) fax (0,1) nome riferimento (0,1) tel. riferimento (0,1) tipo prodotto (0,1) L’entità debole “revisione” e la sua associazione con l’entità “elemento” codice elemento ELEMENTO (0,1) codice elemento (1,1) HA (1,1) descrizione (1,1) REVISIONE motivazione (0,1) data (1,1) conseguenze (0,1) azioni attuate (0,1) link (0,1) 137 L’associazione “costi” codice elemento ELEMENTO (0,N) id (1,1) costo (1,1) COSTO valuta (1,1) data (1,1) numero pezzi (1,1) (0,N) note (0,1) FORNITORE id 138 L’autoassociazione “distinta” PADRE FIGLIO (0,N) (0,N) codice distinta (1,1) codice elemento codice elemento (1,1) ELEMENTI DISTINTE posizione (1,1) quantità (1,1) reference (0,1) gestione (0,1) note (0,1) 139 I componenti speciali codice elemento (1,1) categoria (1,1) CONDENSATORE case (0,1) tipo (0,1) posizione (0,1) capacità (1,1) tensione (1,1) tolleranza (0,1) passo (0,1) altro (0,1) codice elemento (1,1) RESISTENZA ohm (1,1) tolleranza (0,1) case (0,1) potenza (0,1) ppm (0,1) altro (0,1) codice elemento (1,1) CONNETTORE descrizione (1,1) tipo (1,1) numero di poli (1,1) posizione (1,1) codice costruttore (1,1) altro (0,1) 140 codice elemento (1,1) CIRCUITO INTEGRATO categoria (1,1) descrizione (1,1) package (1,1) tipo (1,1) codice costruttore (1,1) altro (0,1) codice elemento (1,1) DIODO codice costruttore (1,1) caratteristica (0,1) reverse voltage (0,1) forward current (0,1) package (0,1) altro (0,1) codice elemento (1,1) TRANSISTOR codice costruttore (1,1) tipo (1,1) tensione (0,1) corrente (0,1) package (0,1) altro (0,1) Il modello completo A questo punto il modello concettuale, rappresentato dallo schema ER, è completo. Abbiamo individuato tutte le entità e le associazioni e i rispettivi attributi (da notare che per alcune associazioni non vi è alcun attributo). Non riportiamo l’intero schema completo per motivi di spazio. 141 10.2. La progettazione logica Il passaggio dallo schema ER al progetto logico può essere fatto in modo semiautomatico secondo alcune regole di base. Tuttavia è necessario effettuare delle scelte tra alternative diverse ma comunque valide. Per la realizzazione dello schema logico dallo schema ER è necessario eseguire i seguenti passi: eliminazione delle gerarchie; selezione delle chiavi primarie ed eliminazione delle identificazioni esterne; normalizzazione degli attributi composti o multipli; traduzione di entità e associazioni in schemi di relazioni; 10.2.1. Lo schema normalizzato Per giungere allo schema normalizzato è necessario eseguire le prime tre fasi della procedura illustrata in precedenza. Questo risulta abbastanza semplice in quanto lo schema ER è stato ottenuto da un’analisi dei requisiti che teneva conto dei problemi strutturali di maggior rilievo: nella gerarchia dell’entità elementi, per esempio, sono stati inseriti solo quei componenti ritenuti importanti dall’azienda, non si prenderà pertanto neanche in considerazione l’ipotesi di un “collasso verso l’alto” della gerarchia. In modo analogo gli attributi composti dell’entità elementi sono tali a causa dell’elevata incidenza di valori nulli rispetto il numero totale di elementi, non è possibile pertanto una loro integrazione con l’entità elemento. Possiamo quindi presentare direttamente lo schema scheletro normalizzato (per motivi di spazio sono riportati solo gli attributi “chiave”). 142 143 10.2.2. Gli schemi di relazioni L’ultimo passo consiste nella definizione finale degli schemi di relazioni per le entità e le associazioni. Per quanto riguarda l’entità “elemento”, l’associazione “approvato” viene inglobata come attributo tra le proprietà, mentre per gli attributi composti vengono create relazioni separate. Abbiamo abbreviato i termini per semplificare la comprensione, le chiavi sono sottolineate e i campi obbligatori riportati in grassetto. ELEMENTI (codice_elemento, descrizione, data, approvato, obsoleto, note); COD_COSTR (codice_elemento, codice_costruttore, costruttore, note); ALTRI_COSTR (codice_elemento, costruttore, codice_costruttore, note); MASA (codice_elemento, posizione); OP_MASA (id, codice_elemento, npezzi, data, causale); LINK (codice_elemento, link, note); Le sottocategorie dell’entità “elemento” vengono mantenute separate mediante la creazione di altrettante relazioni separate. CONDENSATORI (codice_elemento, categoria, case_cer, tipo_cer, posiz_elet, capacita, tensione, tolleranza, passo_thd, altro); RESISTENZE (codice_elemento, ohm, tolleranza, case, potenza, ppm, altro) CONNETTORI (codice_elemento, descrizione, tipo_connettore, n_poli, posizione, codice_costruttore, altro); CIRCUITI_INTEGRATI (codice_elemento, categoria, descrizione, package, tipo_componente, codice_costruttore, altro); DIODI (codice_elemento, codice_costruttore, caratteristica, reverse_voltage, forward_current, package, altro); 144 TRANSISTOR (codice_elemento, codice_costruttore, tipo, tensione, corrente, package, altro); L’autoassociazione “distinta” è definita come segue. DISTINTE (codice_distinta, codice_elemento, pos, quantita, reference, gestione, note); L’entità “revisione” contiene il riferimento all’elemento e agli utenti che l’hanno originata ed approvata. REVISIONI (codice_elemento, descrizione, motivazione, data, originato, approvato, conseguenze, azioni_attuate, link); UTENTI_DB (nome_completo, nome, permesso, email); L’entità “fornitore” rimane legata all’entità “elemento” attraverso un associazione di costo. Come si può notare può comunque esistere un costo relativo a un elemento senza aver assegnato un fornitore. FORNITORI (id, nome fornitore, via, C.A.P., città, tel., fax, nome riferimento, tel. riferimento, tipo prodotto); COSTI (id, codice_elemento, costo, valuta, data, npezzi, note, id_fornitore); 10.3. La progettazione fisica La progettazione fisica consiste nella definizione ultima degli attributi ed infine nella traduzione delle specifiche relazionali individuate in conclusione della progettazione logica in un linguaggio interpretabile dal database che si sceglie di utilizzare e dalle applicazioni che su di esso si intendono realizzare. 145 10.3.1. Definizione degli attributi Dallo schema ER normalizzato e dall’analisi statistiche sulle tabelle preesistenti è possibile, finalmente, definire in maniera precisa tutte le “nuove” tabelle con i rispettivi attributi. Da questa rappresentazione “grezza” del database è poi possibile effettuare la traduzione vera e propria mediante il formalismo del MySQL. Riporto di seguito le tabelle del database: nella colonna sinistra viene specificato il nome del campo, in quella centrale la tipologia dei dati relativi ad esso e nella colonna destra se sono consentiti campi nulli. Sono evidenziate in grassetto le chiavi primarie. ELEMENTI TIPO NULL CODICE_ELEMENTO STRINGA 30 NO DESCRIZIONE TESTO NO DATA DATA AAAA-MM-GG NO APPROVATO STRINGA 30 SI OBSOLETO BOOLEAN (0/1) NO NOTE TESTO SI 146 DISTINTE TIPO NULL CODICE_DISTINTA STRINGA 30 NO CODICE_ELEMENTO STRINGA 30 NO POS INTERO 6 CIFRE NO QUANTITA INTERO 6 CIFRE NO REFERENCE TESTO SI GESTIONE CARATTERE (“S”) SI NOTE TESTO SI COD_COSTR TIPO NULL CODICE_ELEMENTO STRINGA 30 NO CODICE_COSTRUTTOR E STRINGA 60 NO COSTRUTTORE STRINGA 60 SI NOTE TESTO SI ALTRI_COSTR TIPO NULL CODICE_ELEMENTO STRINGA 30 NO COSTRUTTORE STRINGA 60 NO CODICE_COSTRUTTO RE STRINGA 60 NO NOTE TESTO SI 147 LINK TIPO NULL CODICE_ELEMENTO STRINGA 30 NO LINK STRINGA 150 NO NOTE TESTO SI REVISIONI TIPO NULL CODICE_ELEMENTO STRINGA 30 NO DESCRIZIONE TESTO NO MOTIVAZIONE TESTO SI DATA DATA AAAA-MM-GG NO ORIGINATO STRINGA 30 SI APPROVATO STRINGA 30 SI CONSEGUENZE TESTO SI AZIONI_ATTUATE TESTO SI LINK STRINGA 150 SI MASA TIPO NULL CODICE_ELEMENTO STRINGA 30 NO POSIZIONE STRINGA 10 SI 148 OP_MASA TIPO NULL ID INTERO 6 PROGRESSIVO NO CODICE_ELEMENTO STRINGA 30 NO NPEZZI INTERO 8 CIFRE NO DATA DATA AAAA-MM-GG NO CAUSALE TESTO SI COSTI TIPO NULL ID INTERO 6 PROGRESSIVO NO CODICE_ELEMENTO STRINGA 30 NO COSTO DECIMALE 0.00000 NO DATA DATA AAAA-MM-GG NO NPEZZI INTERO 6 CIFRE SI NOTE TESTO SI ID_FORNITORE INT 6 CIFRE SI 149 FORNITORI TIPO NULL ID INTERO 6 PROGRESSIVO NO FORNITORE STRINGA 60 NO VIA STRINGA 100 SI CAP STRINGA 20 SI CITTÀ STRINGA 60 SI TEL STRINGA 80 SI FAX STRINGA 80 SI RIFNOME STRINGA 100 SI RIFTEL STRINGA 80 SI TIPO_PRODOTTO STRINGA 80 SI CONDENSATORI TIPO NULL CODICE_ELEMENTO STRINGA 30 NO CATEGORIA SET DI VALORI NO CASE_CER INTERO 6 SI TIPO_CER SET DI VALORI SI POSIZ_ELET SET DI VALORI SI CAPACITÀ REALE SI TENSIONE REALE SI TOLLERANZA DECIMALE SI PASSO_THD DECIMALE SI ALTRO BLOB SI 150 RESISTENZE TIPO NULL CODICE_ELEMENTO STRINGA 30 NO OHM REALE NO TOLLERANZA DECIMALE SI CASE INTERO 6 SI POTENZA REALE SI PPM INTERO 6 SI ALTRO BLOB SI CONNETTORI TIPO NULL CODICE_ELEMENTO STRINGA 30 NO DESCRIZIONE STRINGA 100 NO TIPO_CONNETTORE SET DI VALORI SI N_POLI STRINGA 10 SI POSIZIONE SET DI VALORI SI CODICE_COSTRUTTOR E STRINGA 60 SI ALTRO BLOB SI 151 CIRCUITI_INTEGRATI TIPO NULL CODICE_ELEMENTO STRINGA 30 NO CATEGORIA SET DI VALORI NO DESCRIZIONE STRINGA 100 SI PACKAGE STRINGA 100 SI TIPO_COMPONENTE SET DI VALORI SI CODICE_COSTRUTTOR E STRINGA 60 SI ALTRO BLOB SI DIODI TIPO NULL CODICE_ELEMENTO STRINGA 30 NO CODICE_COSTRUTTOR E STRINGA 60 NO CARATTERISTICA SET DI VALORI SI REVERSE_VOLTAGE REALE SI FORWARD_CURRENT REALE SI PACKAGE STRINGA 100 SI ALTRO BLOB SI 152 TRANSISTOR TIPO NULL CODICE_ELEMENTO STRINGA 30 NO CODICE_COSTRUTTOR E STRINGA 60 NO TIPO SET DI VALORI SI TENSIONE REALE SI CORRENTE REALE SI PACKAGE STRINGA 100 SI ALTRO BLOB SI Notare come l’attributo data, dove presente, sia sempre stato dichiarato “non nullo” quindi obbligatorio, nonostante nel database preesistente abbastanza spesso presentasse valori nulli. Ciò significa che nella ridefinizione della struttura a tali valori nulli verrà associato comunque un valore predefinito, più precisamente il valore 0000-00-00. Come impostazione per la lunghezza massima possibile delle stringhe e dei numeri ho scelto circa il doppio del valore massimo rilevato dalle statistiche effettuate in precedenza. La traduzione di tali specifiche in istruzioni per il database MySQL verrà riportata in fase di implementazione del sistema, in particolare nella parte riguardante la “creazione del database”. 153 11. L’IMPLEMENTAZIONE DEL SISTEMA Dopo aver individuato i requisiti necessari per lo sviluppo del sistema e dopo aver elaborato soluzioni mediante la progettazione della logica di gestione, viene naturalmente l’implementazione operativa del sistema. Tale aspetto, pur non essendo il cuore del problema, risulta essere fondamentale per poter comprendere e far comprendere la qualità del lavoro svolto, rappresenta il concretizzarsi di idee e ragionamenti fino ad ora astratti. In questo capitolo presenteremo le metodologie di implementazione della logica di gestione progettata nei capitoli precedenti e descriveremo il funzionamento dell’applicazione sviluppata. 11.1. Gli strumenti La scelta degli strumenti per l’implementazione operativa del sistema è stata fatta dall’azienda ed è pertanto un prerequisito fondamentale dal quale non si può prescindere: il sistema dovrà essere sviluppato su piattaforma Linux, con database MySQL e gestito dall’applicazione realizzata in linguaggio PHP. 11.1.1. Il linguaggio PHP Il PHP (PHP: Hypertext Preprocessor) [3] è un linguaggio di scripting creato nel 1994 da Rasmus Lerdorf [10], disegnato per la generazione dinamica di pagine web. Fino a dieci anni fa, difatti, un sito web era costituito essenzialmente da semplici pagine HTML, i documenti erano raggiungibili mediante un indice generale e non vi era alcuna possibilità di effettuare ricerche. Oggi, invece, la maggior parte dei siti sono 154 caratterizzati dalla presenza di una grande quantità di informazioni organizzate all’interno di uno o più database in modo tale da essere consultate facilmente da particolari programmi chiamati CGI (Common Gateway Interface) il cui compito è quello di fornire all’utente finale una pagina HTML generata dinamicamente con i contenuti richiesti. Il PHP rientra tra questi particolari e ne rappresenta uno tra i migliori dal punto di vista prestazionale e per numerosi altri vantaggi. Curva di apprendimento. Il PHP è uno tra i linguaggi più semplici da imparare, ha una sintassi molto simile ad altri linguaggi da cui prende spunto come il “C”, Java ed il Perl. Integrazione col database. Mediante il PHP è possibile interfacciarsi con i più diffusi database (Oracle, Informix, SyBase, Microsoft SQL Server, MySQL, mSQL, PostGreSQL) tra i quali la combinazione più usata e più flessibile è con il MySQL. Modularità. Il PHP è modulare, l’interprete principale può essere esteso realizzando, in linguaggio C, ulteriori moduli da affiancare a quelli preesistenti. Estensibilità. Il PHP è distribuito con licenza Open Source per cui è possibile, per un programmatore, estenderne le funzionalità. 11.1.2. Il database MySQL MySQL è un sistema Open Source di gestione di database relazionali [2]. Con l’aumentare delle potenzialità dei computer nel contenere enormi quantità di dati si è reso necessario lo sviluppo di elaborati sistemi di gestione di basi di dati; MySQL si basa su “SQL” (Structured Query Language), che è il linguaggio standard, definito dallo standard ANSI/ISO 155 SQL Standard, per l’accesso ai database relazionali in cui i dati sono conservati su più tabelle collegate tra loro. Il software MySQL è Open Source, ciò significa che come per il PHP chiunque può scaricarlo da Internet ed utilizzarlo senza dover pagare nulla e pertanto un programmatore esperto potrebbe anche modificarlo secondo le proprie esigenze. L’utilizzo di MySQL è definito da una licenza GPL (GNU General Public License). Il server MySQL è uno tra i più utilizzati e conosciuti database, grazie alle sue numerose qualità tra cui spiccano la velocità, l’affidabilità e la semplicità d’uso. Riportiamo di seguito le principali caratteristiche. Può funzionare su diversi tipi di piattaforma ed è utilizzabile da numerose API (interfacce di programmazione). Dal punto di vista della sicurezza è estremamente affidabile e flessibile, le password sono crittate ad ogni connessione. Può gestire database di grandi dimensioni (fino a 60.000 tabelle e 5.000.000.000 di righe). I “client” si possono collegare al server MySQL utilizzando il protocollo TCP/IP. Supporta numerose lingue e insiemi di caratteri. Perché MySQL è meglio di Access Nel presente elaborato si descrive la progettazione e lo sviluppo di un sistema informativo di un sistema che precedentemente era basato su Microsoft Access. In questo paragrafo cercheremo di individuare i motivi per cui, nel contesto aziendale, sia preferibile utilizzare un sistema basato su MySQL. 156 Riportiamo di seguito le ragioni che spingono verso l’utilizzo di MySQL a scapito di Microsoft Access [7]. Sviluppo delle informazioni. Se i dati sono contenuti in un database MySQL è possibile accedere ad essi mediante numerosi tipi di interfaccia, attraverso lo stesso Access o attraverso numerosi linguaggi per il Web, dando la possibilità di accedere alle informazioni in maniere indipendente dalla piattaforma utilizzata. Accesso multi-utente. Sebbene Access preveda alcune funzionalità per la condivisione dei dati, esse non sono affatto il suo punto di forza. Vi è sempre la sensazione di un sistema di gestione dei dati orientato al singolo utente. MySQL, invece, può gestire simultaneamente molti utenti in quanto è stato disegnato per l’utilizzo all’interno di network. Gestione di grandi database. MySQL al contrario di Access può gestire centinaia di megabytes di informazioni. Sicurezza. Quando le informazioni sono conservate su database Access chiunque possa accedere al computer di un utente ha di conseguenza accesso alla base di dati. E’ possibile in Access assegnare una password al database, ma la maggior parte degli utenti regolarmente non lo fa. Con MySQL per connettersi al database è sempre necessario conoscere l’appropriata password, da qualunque computer si tenti di accedere. Costi. MySQL può essere utilizzato gratuitamente, Access no. Inoltre MySQL può essere utilizzato su piattaforme e con diversi tipi di interfaccia Open Source riducendo, di conseguenza, la dipendenza da software proprietari. 157 Scelta dell’hardware. MySQL può funzionare su più piattaforme mentre Access è una applicazione “single-platform”, per cui la scelta dell’hardware è già predeterminata. Prestazioni. Le prestazioni di MySQL superano notevolmente quelle di Access. Riportiamo di seguito il confronto sui tempi delle più frequenti operazioni. 158 11.1.3. L’architettura del sistema Possiamo rappresentare l’architettura del sistema che andiamo ad implementare come segue. Server Client richiesta dati HTML DB PHP Protocollo TCP/IP LINUX Notiamo come MySQL e PHP siano entrambe applicazioni allo stesso livello sulla piattaforma Linux, ma il ruolo di PHP è di più alto livello dal punto di vista logico in quanto realizza l’interfaccia con il quale l’utente può accedere al database, generando un codice HTML interpretabile da un qualsiasi browser. 11.2. La realizzazione del database In questo paragrafo tratteremo la realizzazione del database, intesa come costruzione della struttura tabellare del database MySQL secondo le specifiche di progetto e riporteremo le metodologie di importazione dei dati preesistenti. 11.2.1. La creazione delle tabelle Una volta effettuata la progettazione fisica del database abbiamo a disposizione l’elenco delle istruzioni SQL che realizzano la struttura completa del database. Le riportiamo di seguito. 159 # Struttura della tabella `altri_costr` CREATE TABLE `altri_costr` ( `codice_elemento` varchar(30) NOT NULL default '', `costruttore` varchar(60) NOT NULL default '', `codice_costruttore` varchar(60) NOT NULL default '', `note` blob, PRIMARY KEY (`codice_elemento`,`codice_costruttore`) ) TYPE=MyISAM; # Struttura della tabella `circuiti_integrati` CREATE TABLE `circuiti_integrati` ( `codice_elemento` varchar(30) NOT NULL default '', `categoria` enum('ANALOG','DIGITAL','MICRO','DSP','PLD','INTERFACE','LINEAR','MEM' ,'REG') NOT NULL default 'ANALOG', `descrizione` varchar(100) NOT NULL default '', `package` varchar(100) NOT NULL default '', `tipo_componente` enum('IND','COM','AUT','MIL') NOT NULL default 'IND', `codice_costruttore` varchar(60) NOT NULL default '', `altro` blob, PRIMARY KEY (`codice_elemento`) ) TYPE=MyISAM; # Struttura della tabella `cod_costr` CREATE TABLE `cod_costr` ( `codice_elemento` varchar(30) NOT NULL default '', `codice_costruttore` varchar(60) NOT NULL default '', `costruttore` varchar(60) default NULL, `note` blob, PRIMARY KEY (`codice_elemento`) ) TYPE=MyISAM; # Struttura della tabella `condensatori` CREATE TABLE `condensatori` ( `codice_elemento` varchar(60) NOT NULL default '', `categoria` enum('CER.','ELET.','POL.','TANTALIO','VAR.') NOT NULL default 'CER.', `case_cer` int(6) default NULL, `tipo_cer` enum('NPO','COG','X7R','Z5U','Y5V') default NULL, `posiz_elet` enum('RAD.','ASS.') default NULL, `capacita` double NOT NULL default '0', `tensione` double NOT NULL default '0', `tolleranza` decimal(4,2) default NULL, `passo_thd` decimal(4,2) default NULL, `altro` blob, PRIMARY KEY (`codice_elemento`) ) TYPE=MyISAM; 160 # Struttura della tabella `connettori` CREATE TABLE `connettori` ( `codice_elemento` varchar(30) NOT NULL default '', `descrizione` varchar(100) NOT NULL default '', `tipo_connettore` enum('MASC','FEMM') NOT NULL default 'MASC', `n_poli` varchar(10) NOT NULL default '', `posizione` enum('ORIZ','VERT') NOT NULL default 'ORIZ', `codice_costruttore` varchar(60) NOT NULL default '', `altro` blob, PRIMARY KEY (`codice_elemento`) ) TYPE=MyISAM; # Struttura della tabella `costi` CREATE TABLE `costi` ( `id` int(6) NOT NULL auto_increment, `codice_elemento` varchar(60) NOT NULL default '', `costo` decimal(7,5) NOT NULL default '0.00000', `valuta` enum(' ','$') NOT NULL default ' ', `data` date NOT NULL default '0000-00-00', `npezzi` int(6) NOT NULL default '0', `note` blob, `id_fornitore` int(6) default NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM; # Struttura della tabella `diodi` CREATE TABLE `diodi` ( `codice_elemento` varchar(30) NOT NULL default '', `codice_costruttore` varchar(60) NOT NULL default '', `caratteristica` enum('SHOTTKY','RECT','FAST','ULTRA-FAST','HIGH SPEED') default NULL, `reverse_voltage` double default NULL, `forward_current` double default NULL, `package` varchar(100) default NULL, `altro` blob, PRIMARY KEY (`codice_elemento`) ) TYPE=MyISAM; # Struttura della tabella `distinte` CREATE TABLE `distinte` ( `codice_distinta` varchar(30) NOT NULL default '', `codice_elemento` varchar(30) NOT NULL default '', `pos` int(6) NOT NULL default '0', `quantita` int(6) NOT NULL default '0', `reference` blob, `gestione` enum('S') default NULL, `note` blob, PRIMARY KEY (`codice_distinta`,`codice_elemento`,`pos`) ) TYPE=MyISAM; 161 # Struttura della tabella `elementi` CREATE TABLE `elementi` ( `codice_elemento` varchar(30) NOT NULL default '', `descrizione` blob NOT NULL, `data` date NOT NULL default '0000-00-00', `approvato` varchar(30) default NULL, `obsoleto` enum('NO','SI') NOT NULL default 'NO', `note` blob, PRIMARY KEY (`codice_elemento`) ) TYPE=MyISAM; # Struttura della tabella `fornitori` CREATE TABLE `fornitori` ( `id` int(6) NOT NULL auto_increment, `fornitore` varchar(60) NOT NULL default '', `via` varchar(100) default NULL, `cap` varchar(20) default NULL, `citta` varchar(60) default NULL, `tel` varchar(80) default NULL, `fax` varchar(80) default NULL, `rifnome` varchar(100) default NULL, `riftel` varchar(80) default NULL, `tipo_prodotto` varchar(80) default NULL, PRIMARY KEY (`id`) ) TYPE=MyISAM; # Struttura della tabella `link` CREATE TABLE `link` ( `codice_elemento` varchar(30) NOT NULL default '', `link` varchar(150) NOT NULL default '', `note` blob, PRIMARY KEY (`codice_elemento`,`link`) ) TYPE=MyISAM; # Struttura della tabella `masa` CREATE TABLE `masa` ( `codice_elemento` varchar(30) NOT NULL default '', `posizione` varchar(10) default NULL, PRIMARY KEY (`codice_elemento`) ) TYPE=MyISAM; # Struttura della tabella `op_masa` CREATE TABLE `op_masa` ( `id` int(6) NOT NULL auto_increment, `codice_elemento` varchar(30) NOT NULL default '', `npezzi` decimal(8,0) NOT NULL default '0', `data` date NOT NULL default '0000-00-00', `causale` blob, PRIMARY KEY (`id`) ) TYPE=MyISAM; 162 # Struttura della tabella `resistenze` CREATE TABLE `resistenze` ( `codice_elemento` varchar(30) NOT NULL default '', `ohm` double NOT NULL default '0', `tolleranza` decimal(4,2) default NULL, `case` int(6) default NULL, `potenza` double default NULL, `ppm` int(6) default NULL, `altro` blob, PRIMARY KEY (`codice_elemento`) ) TYPE=MyISAM; # Struttura della tabella `revisioni` CREATE TABLE `revisioni` ( `codice_elemento` varchar(30) NOT NULL default '', `descrizione` blob NOT NULL, `motivazione` blob, `data` date NOT NULL default '0000-00-00', `originato` varchar(30) default NULL, `approvato` varchar(30) default NULL, `conseguenze` blob, `azioni_attuate` blob, `link` varchar(150) default NULL, PRIMARY KEY (`codice_elemento`) ) TYPE=MyISAM; # Struttura della tabella `transistor` CREATE TABLE `transistor` ( `codice_elemento` varchar(30) NOT NULL default '', `codice_costruttore` varchar(60) NOT NULL default '', `tipo` enum('NPN','PNP','N-MOS','P-MOS','N-MOSFET','N-ENHANCEMENT FET') NOT NULL default 'NPN', `tensione` double default NULL, `corrente` double default NULL, `package` varchar(100) default NULL, `altro` blob ) TYPE=MyISAM; # Struttura della tabella `utenti_db` CREATE TABLE `utenti_db` ( `nome_completo` varchar(100) NOT NULL default '', `nome` varchar(30) NOT NULL default '', `permesso` enum('AMMINISTRATORE','SADEL','ESTERNO') NOT NULL default 'ESTERNO', `email` varchar(100) NOT NULL default '', PRIMARY KEY (`nome`), UNIQUE KEY `nome_completo` (`nome_completo`) ) TYPE=MyISAM; 163 L’applicazione di tali istruzioni al database MySQL è estremamente semplice se utilizzata una semplice interfaccia standard di gestione del database denominata PhpMyAdmin. PhpMyAdmin PhpMyAdmin consiste in una raccolta di script PHP che consente di gestire in modo completo uno o più database MySQL mediante un’interfaccia grafica piuttosto semplice e senza dover conoscere necessariamente l’SQL. Tra le funzionalità più utili vi è quella che noi abbiamo utilizzato che consente di dare una serie di istruzioni al database mediante l’invio di un semplice file di testo, contenente tali istruzioni. 164 11.2.2. La creazione dei permessi iniziali Oltre alle tabelle è necessario creare almeno un permesso iniziale da amministratore, per potere in seguito agire sul database e importare i dati preesistenti. Questo è realizzato mediante le seguenti istruzione per MySQL. 165 INSERT INTO `utenti_db` VALUES ('MICHELE BORGHI','mick', 'AMMINISTRATORE', '[email protected]'); GRANT ALL ON *.* TO mick@localhost identified by 'mick' WITH GRANT OPTION; INSERT INTO `utenti_db` VALUES ('ANDREA REGAZZI','andrear', 'AMMINISTRATORE', '[email protected]'); GRANT ALL ON *.* TO andrear@localhost identified by 'sadel' WITH GRANT OPTION; INSERT INTO `utenti_db` VALUES ('PINCO PALLINO','sadel', 'SADEL', '[email protected]'); grant create,select on sadel.* to sadel@localhost identified by 'sadel'; grant delete on sadel.approvazione to sadel@localhost identified by 'sadel'; grant update (`approvato`) on sadel.elementi to sadel@localhost identified by 'sadel'; grant update (`approvato`) on sadel.revisioni to sadel@localhost identified by 'sadel'; INSERT INTO `utenti_db` VALUES ('TIZIO CAIO','esterno', 'ESTERNO', '[email protected]'); grant create,select on sadel.* to esterno@localhost identified by 'esterno'; FLUSH PRIVILEGES; In questo modo si creano due amministratori, un utente interno e un utente esterno, così come gli abbiamo definiti nell’affrontare l’argomento dei “permessi utente”. Notare che per un’identificazione completa risulta anche necessario inserire alcune istanze all’interno della tabella “utenti_db”. 11.2.3. L’importazione dei dati Una volta concretizzata la struttura relazionale del database in tabelle grazie a MySQL, è necessario procedere all’importazione dei dati preesistenti. Tale processo è un’operazione molto delicata in quanto deve assolutamente evitare qualsiasi perdita di informazioni e nello stesso tempo 166 deve essere automatizzata in quanto non è realizzabile il trasferimento manuale di una mole di dati così elevata. Tutto il processo di importazione dei dati verrà pertanto affidato ad una serie di script che provvederanno a svolgere le seguenti funzioni: trasferire i dati del database preesistente compatibili con il nuovo sistema, tenendo traccia di eventuali istanze che non è stato possibile inserire; importare i documenti allegati e aggiornare i relativi link; ripulire i dati inseriti dalle “virgolette” che vengono male interpretati dal sistema; analizzare i codici degli elementi inseriti rispetto il nuovo sistema di codifica ed consentirne l’eliminazione o la modifica; pulire le tabelle eliminando le istanze relative ad elementi non esistenti; interpretare e copiare i dati relativi ai “componenti speciali” nelle apposite tabelle. Riempimento delle tabelle compatibili Come si può notare confrontando lo schema ER normalizzato preesistente con quello elaborato nella progettazione logica del sistema, vi sono una serie di tabelle con caratteristiche molto simili. Per queste è possibile sviluppare una procedura di importazione automatica che trasferisca i dati dal database Access al nuovo sistema in MySQL. Tale procedura è affidata ad uno script PHP che dato una serie di file in formato CSV (Comma Separated Values) in rappresentazione delle 167 tabelle preesistenti del database Access, inserisce i dati in esse contenuti nelle relative tabelle MySQL. Oltre al trasferimento dei dati tale procedura si occupa di controllare se i dati rispettano le nuove specifiche strutturali della tabella. Per esempio se un’istanza è priva di un campo obbligatorio essa non viene inserita e ne viene tenuto traccia in un apposito file di testo. Non viene invece controllata in questa fase la correttezza del codice identificativo dell’elemento. import_data.php DB file CSV ERRORI istanze_non_inserite.txt Il risultato dell’operazione consiste in 130 istanze non inserite a causa di problemi strutturali, di cui 12 elementi, 3 revisioni, 17 link, 86 codici costruttori, 4 altri costruttori, un fornitore, 2 costi, 2 posizioni di magazzino, 3 operazioni di magazzino. L’importazione dei documenti allegati Nel sistema preesistente sono presenti oltre 200 megabyte di documenti allegati che, naturalmente, devono continuare ad essere rintracciabili ed fruibili nel sistema in fase di sviluppo. 168 Anche in questo caso tale operazione viene affidata ad uno script PHP che sulla base dei link indicati nel database preesistente cerca il documento relativo lo copia in una predefinita directory del server e aggiorna l’appropriata istanza della tabella “link”. Da notare come in fase di importazione dei dati la tabella “link” è stata riportata esattamente con gli stessi campi, per questo la procedura di importazione dei documenti va a ricercare nel nuovo database il vecchio link e poi lo modifica a seconda della reale posizione del documento. PROGRAMMA DI GESTIONE OLD LINK DB NEW LINK COPIA DOCUMENTO ALLEGATI DATABASE MySQL DOCUMENTO ALLEGATI DATABASE ACCESS L’esecuzione dello script sopra schematizzato ha portato alla luce 25 link interrotti nel database preesistente. 169 La pulizia dei dati Le tre operazioni di pulizia dei dati previste in fase di importazione sono: l’eliminazione delle virgolette; l’analisi dei codici; la pulizia delle tabelle. L’eliminazione delle virgolette si rende necessaria in quanto le virgolette all’interno dei campi del database vengono male interpretate in fase di visualizzazione dei dati da PHP. Questa operazione consiste, banalmente, nella sostituzione tabella per tabella, istanza per istanza, campo per campo di tutte le virgolette con l’apice singolo. L’analisi dei codici consiste, invece, nella operazione di razionalizzazione del sistema di codifica esistente che abbiamo descritto nel capitolo relativo al sistema di codifica. Dopo l’importazione risultano esservi 19 codici errati di cui 9 eliminabili, cioè elementi presenti esclusivamente nella tabella “elementi” e quindi di importanza limitata. 170 La pulizia delle tabelle riguarda l’eliminazione di tutte le istanze relative alle tabelle direttamente collegate all’entità “elemento” aventi un codice elemento inesistente. Tale problema, che viene risolto mediante un semplice controllo incrociato affidato ad uno script, non ha in ogni caso alcuna conseguenza sulla qualità dei dati presenti ma viene comunque effettuato per evitare di mantenere istanze prive di alcun significato. Dopo l’importazione risultano esservi 67 istanze relative ad elementi inesistenti e quindi eliminabili. Importazione dei componenti speciali Il trasferimento delle informazioni relative ai componenti speciali dal campo descrizione della tabella “elementi” alle relative tabelle viene affidata a uno script che esegue la procedura che abbiamo descritto nel capitolo riguardante la “ricerca e la visualizzazione delle informazioni”. Il risultato ottenuto da tale programma è il seguente (ricordiamo che vengono eliminati i componenti la cui descrizione non è stata riconosciuta e che non sono utilizzati). Condensatori: totale 660, inseriti 567, eliminati 93; Resistenze: totale 1351, inseriti 1245, eliminati 106; Connettori: totale 374, inseriti 312, eliminati 62; Circuiti integrati: totale 2088, inseriti 620, eliminati 1468; Diodi: totale 188, inseriti 110, eliminati 78; Transistor: totale 180, inseriti 100, eliminati 80. 171 11.3. L’interfaccia utente L’interfaccia utente è lo strumento attraverso il quale l’utente dialoga con il database, attraverso il quale si accede e si interviene sulle informazioni. E’ evidente quanto tale aspetto sia rilevante ai fini di una corretta gestione del sistema ed è per questo che non si può prescindere dalla “usabilità” nella definizione di una adeguata interfaccia utente. 11.3.1. L’usabilità Secondo la definizione data dalla norma ISO 9241 [13], l' usabilità è il "grado in cui un prodotto può essere usato da particolari utenti per raggiungere certi obiettivi con efficacia, efficienza e soddisfazione in uno specifico contesto d' uso." La normativa ISO 9241 è del 1993 e si riferisce ai prodotti informatici in genere. Tuttavia l' usabilità è un concetto molto precedente ed esteso [4]: nasce negli anni 60 nell' ambito dell' ergonomia in relazione a qualunque interazione uomo-artefatto. In seguito trova maggior fortuna proprio per i prodotti a base informatica (soprattutto i software), nel settore dell' ergonomia cognitiva. In questo specifico settore dell' ergonomia si studia il modo in cui un utente si costruisce un modello mentale del prodotto che sta usando, e si crea perciò determinate aspettative sul suo funzionamento. Compito degli studi di usabilità è fare in modo che il modello mentale di chi ha progettato il software (design model), da cui deriva il suo reale funzionamento, corrisponda il più possibile al modello mentale del funzionamento del software così come se lo costruisce l' utente finale (user model) [8]. 172 L' usabilità nasce dunque soprattutto come ausilio alla progettazione, e si applica in particolare alle interfacce. E'con l' interfaccia di un software, infatti, che l' utente si relaziona. Ad ogni sua azione l' interfaccia proporrà un risultato, un cambiamento di stato. Poco importa, ai fini dell' usabilità, come l' interfaccia sia giunta a quello stato, attraverso cioè quali meccanismi di programmazione, che rimangono racchiusi in una vera e propria scatola nera impermeabile all' utente. I principali attributi dell’usabilità sono i seguenti [8]. Utilità: il software serve a qualcosa? Facilità di apprendimento: è facile capire come utilizzarlo? Efficienza: gli utenti possono interrogare il sistema e ricevere risposte sensate in tempi brevi? Facilità di ricordo: nei successivi utilizzi l’utente ricorda come si utilizza il software? Prevenzione degli errori: il software contiene errori? Soddisfazione: il sistema è soddisfacente da usare o crea ansia e frustrazione? 173 E’ necessario analizzare il sistema dal punto di vista dell’utente, in particolare l’esperienza di navigazione deve essere esaminata sotto diversi aspetti. Inoltre è necessario definire l’organizzazione e la metodologia di navigazione del sistema che si deve implementare, in particolare bisogna orientarsi tra diversi tipologie di “alberi informativi” e trovare l’adeguata via di mezzo. L’albero orizzontale, riportato in figura, ha i pregi della semplicità d’uso di un testo lineare e ha i vantaggi di flessibilità dell’ipertesto, ma non 174 scade nella carenza di organizzazione del grafo né nell’eccessivo annodamento dell’informazione in un albero verticale. 11.3.2. La struttura di visualizzazione Prima di addentrarci nella descrizione dettagliata dell’interfaccia utente e delle varie aree del sistema, è necessario comprendere la struttura di visualizzazione adottata in tutte le pagine dell’interfaccia. MENU'DI NAVIGAZIONE TITOLO DELLA PAGINA CONTENUTO INFORMATIVO Il menù di navigazione Il menu di navigazione è presente in tutte le pagine generate dal sistema ed è sempre uguale, consente all’utente di mantenere un punto di riferimento mediante il quale esso si può spostare tra le aree informative del database. E’ costituito dall’elenco delle “viste principali” che abbiamo descritto nel capitolo riguardante la “ricerca e la visualizzazione delle informazioni” più l’indicazione dell’home page e della pagina per effettuare il login. Prendiamo per esempio la prima pagina che viene visualizzata nel momento in cui ci si connette col sistema. 175 11.3.3. L’home page In base alle considerazioni sull’usabilità effettuate in precedenza, la scelta riguardo la struttura informativa più adeguata al sistema è ricaduta su l’albero orizzontale, per cui assume un ruolo molto importante l’home page dalla quale deve essere possibile raggiungere, mediante un numero limitato di passaggi (click), tutte le informazioni conservate nel database. Come si può notare, l’home page è strutturata in modo molto semplice. In particolare e suddivisa in quattro aree differenti. Elenchi. Da qui è possibile accedere alle viste principali del database in maniera diretta. 176 Componenti. Mediante i link presenti in questa sezione si accede ai cosiddetti “componenti speciali” per i quali sono previste metodologie avanzate di ricerca e visualizzazione. Ricerca. Grazie alla “form” presente in questa area dell’home page è possibile effettuare ricerche di tipo generale sulle varie “viste” del database. Dati login. In questo angolo dell’home page si riportano i dati con cui l’utente è stato riconosciuto dal sistema e il tipo di permesso assegnato ad esso. 11.3.4. Le viste principali La definizione delle viste principali sul database è stata fatta nel capitolo riguardo la “ricerca e la visualizzazione delle informazioni”. Ricordiamo che la rappresentazione grafica di tali viste è frutto di un’unica “funzione di visualizzazione” che data una determinata query SQL è in grado di visualizzarla in forma standard. Di seguito riportiamo, a titolo di esempio, alcune tra le viste principali che sfruttano la “funzione di visualizzazione” sviluppata. 177 Gli elementi Come si può notare tale vista è la rappresentazione grafica della tabella “elementi” del database MySQL, da notare vi è il menu sotto il titolo che consente all’utente di effettuare diverse tipologie di ricerca, di accedere ai componenti speciali (che, ricordiamo, sono “figli” dell’entità elementi) e di esportare o stampare la tabella. Inoltre vi sono altre opzioni a margine della tabella vere e propria: mediante il link “vedi solo elementi già utilizzati” è possibile selezionare solo gli elementi della tabella che già sono presenti in qualche distinta; mediante le frecce “prev” e “next” si può navigare tra le varie pagine visualizzate; mediante il link “vedi tutti in una pagina” è possibile visualizzare in un’unica pagina tutti gli elementi presenti; 178 cliccando sul titolo delle colonne è possibile ordinare la tabella secondo il relativo campo. I prodotti Tale vista è il frutto di una semplice selezione sulla tabella elementi, l’unica particolarità da segnalare rispetto quella descritta in precedenza è l’evidenziazione in rosso degli elementi privi di una distinta. 179 Il magazzino Individuare l’origine informativa di tale vista è assai più complesso, essa è, difatti, il frutto di un “join” tra ben quattro tabelle. In ogni caso la struttura di visualizzazione dell’interfaccia rimane sempre la stessa per consentire all’utente di continuare ad utilizzare i medesimi meccanismi di navigazione. 11.3.5. La “scheda elemento” Un’altra visualizzazione importante delle informazioni è la “scheda elemento” che consiste in una pagina dalla quale è possibile visualizzare tutte le informazioni relative ad un specifico elemento del database. Tale scheda è raggiungibile cliccando sul codice dell’elemento di interesse da una qualsiasi delle viste sul database. 180 Nella “scheda elemento” sono riportate tutte le informazioni relative all’elemento di interesse presenti su le tabelle “accessorie” all’entità “elementi”, più una serie di informazioni derivate: dov’è utilizzato, le altre revisioni. Se presente dalla scheda elemento è possibile visualizzare l’esplosione della distinta la cui radice è l’elemento stesso. 11.3.6. L’esplosione della distinta Sul ramo più basso del nostro “albero informativo” non vi poteva essere null’altro che la distinta esplosa dell’elemento. La distinta rappresenta infatti l’informazione di maggior rilievo conservata nel database ed è molto spesso l’obiettivo delle ricerche effettuate su di esso. L’esplosione della distinta consiste in una serie di distinte successive, da quella dell’elemento radice a quella dei figli, a quella dei figli dei figli, 181 ecc. Avendo, per esempio, a disposizione l’esplosione della distinta di un prodotto si può conoscere il prodotto in tutte le sue parti ed è sufficiente (se corredata da i documenti di progetto necessari) per la realizzazione del prodotto stesso. 11.3.7. La ricerca Grazie alla “funzione di visualizzazione” definita in precedenza il problema della ricerca si riduce ad una serie di meccanismi che traducano la ricerca desiderata dall’utente in una query SQL. Tale soluzione dà la possibilità di implementare diversi tipologie di ricerca, noi ne abbiamo definiti due: ricerca semplice e ricerca avanzata. 182 La ricerca semplice La ricerca semplice è possibile dall’home page e da qualsiasi vista del database (tasto “trova”), consiste nella ricerca di una frase esatta all’interno di uno o più campi di una determinata vista. La ricerca avanzata La ricerca avanzata, che è già stata descritta nel dettaglio, consente di effettuare ricerche complesse sugli attributi di una qualsiasi vista del database. Risulta estremamente importante per la ricerca di componenti speciali. Di seguito riportiamo, a titolo di esempio, la “form” di ricerca di un condensatore e la ricerca avanzata per un prodotto. 183 184 11.3.8. La gestione dei dati Fino ad ora abbiamo parlato solo di interfacce di visualizzazione e di presentazione delle informazioni, tralasciando l’interfaccia attraverso il quale l’amministratore può modificare i contenuti del database. Già l’home page si presenta con in aggiunta, rispetto a quella vista in precedenza, un menu laterale su sfondo grigio che propone alcune opzioni riservate all’amministratore: l’inserimento di un elemento; l’inserimento di un fornitore; la possibilità di modificare il formato della codifica; alcune operazioni di pulizia e analisi dei dati; la gestione dei permessi; 185 la gestione dei backup. Per motivi di spazio descriveremo nel dettaglio solo alcune delle procedure di gestione dei dati implementate nel sistema. L’inserimento di un elemento e la codifica assistita Scegliendo l’opzione di “inserimento elemento” dall’home page, l’amministratore ottiene il seguente risultato. Da qui è possibile inserire direttamente un elemento od affidarsi ad alcune procedure guidate per l’inserimento di particolari tipologie di elementi. A titolo di esempio, simuleremo l’inserimento di un “elemento generico” utilizzando la funzione di codifica assistita. 186 Utilizzando la funzione di “codifica assistita” e rispondendo ad alcune domande sul tipo di elemento che si vuole codificare si ottiene un “codice valido”. Dopo aver ottenuto il codice si può procedere nell’inserimento dell’elemento. 187 Come si può notare oltre alla richiesta di conferma viene avvertito l’utente che verrà inviata una email all’approvatore per chiedere la conferma sui dati inseriti. Nell’email inviata al presunto “approvatore” sarà chiesto di recarsi sull’home page del database nella quale verrà visualizzata la richiesta di approvazione. Selezionando il link l’approvatore puà confermare o negare l’approvazione dell’elemento, secondo la procedura di approvazione definita. Il controllo sui dati La procedura di inserimento di un elemento generico o di qualsiasi altra tipologia di informazione viene sempre verificata da un sistema di verifica dei dati inseriti. In particolare viene verificata l’attinenza delle 188 informazioni con la struttura logica della tabella e il formato del codice dell’elemento. Per quanto riguarda il controllo sul formato del codice è comunque prevista un’opzione “evita controllo formato” per il quale si forza l’inserimento di un codice anche se non corrispondente alle specifiche del sistema di codifica. La modifica e l’eliminazione dei dati La modifica e l’eliminazione dei dati può avvenire esclusivamente dalla “scheda elemento” che, come l’home page, si presente notevolmente diversa dalla “scheda elemento” per l’utente generico. 189 Naturalmente l’eliminazione o la modifica di un elemento comporta l’eliminazione o la modifica di tutte le istanze relative ad esso (eventuali link, codici costruttori, ecc.). Ciò non avviene invece per gli attributi o le caratteristiche relative ad esso. La gestione della distinta Dalla scheda degli elementi aventi distinta è possibile inoltre accedere ad una particolare interfaccia per la gestione della distinta e ad una visualizzazione della distinta con costo (tale possibilità è riservata esclusivamente agli amministratori). 190 L’interfaccia di gestione della distinta e la visualizzazione della distinta con costo risultano come nelle due figure seguenti. Come si nota da qui è possibile inserire, modificare ed eliminare gli elementi in distinta, eliminare l’intera distinta ed inoltre vi è anche una procedura guidata per l’inserimento di un documento in distinta. 191 Il costo di una distinta consiste in un calcolo dei costi di tutti gli elementi dei figli e di tutti i discendenti dei figli. Tale operazione è effettuata grazie una funzione ricorsiva che procede fino all’ultimo degli elementi presenti nella gerarchia della distinta. La visualizzazione di tale calcolo è riservata all’amministratore in quanto il costo ottenuto è totalmente indicativo e deve essere utilizzato con estrema prudenza. L’amministrazione dei permessi e la gestione dei backup All’amministratore come abbiamo già visto in precedenza è affidata anche la gestione della sicurezza che si concretizza nella gestione dei permessi e dei backup. Riportiamo di seguito le due interfacce relative. 192 11.3.9. L’esportazione e la stampa L’esportazione dei dati delle tabelle frutto di interrogazioni semplici o complesse del database, avviene semplicemente scaricando un file in formato CSV, generato sulla base della query SQL di riferimento. 193 La stampa avviene invece secondo due modalità: direttamente mediante il tasto “print” del browser; mediante una procedura di stampa implementata solo per l’esplosione della distinta. La stampa diretta e i CSS La stampa diretta di una qualsiasi pagina dell’interfaccia è possibile grazie i fogli di stile, o CSS (Cascading Style Sheet) [11], medianti i quali è possibile nella progettazione di una pagina HTML distinguere il contenuto informativo dalla formattazione grafica. Inoltre grazie ad essi è possibile strutturare una pagina a seconda del supporto con cui tale pagina è visualizzata [12], in particolare è possibile progettare uno “stile” per la pagina visualizzata da schermo e uno “stile” per la pagina stampata, senza dover modificare il contenuto informativo. In tal modo, per esempio, la stampa di una pagina sarà in bianco e nero anziché a colori, senza il menù, senza i link evidenziati, ecc. 194 Di seguito riportiamo un esempio di una pagina come viene visualizzata sullo schermo e come viene poi stampata. 195 La stampa della distinta L’esportazione su carta di una distinta è una caratteristica fondamentale per l’azienda e per questo deve essere curata con maggior attenzione. Tale vincolo si unisce al fatto che i fogli di stile non riescono ad interagire adeguatamente con il browser per quanto riguarda la dimensione e la forma del foglio su cui una distinta deve essere stampata. 196 Per questo nel caso della stampa di una distinta è stata implementata una procedura semiautomatica per la generazione di una pagina correttamente interpretabile dai CSS. Nel momento in cui si richiede la stampa di una distinta il sistema propone la scelta tra diverse opzioni di stampa. In base alle scelte effettuate viene generata una pagina per la stampa che dovrebbe essere meglio interpretata dal browser e che comunque deve essere preventivamente testata con l’opzione “anteprima di stampa” del browser. 197 Riportiamo di seguito la relativa anteprima di stampa (effettuata con Microsoft Internet Explorer 6.0). 198 12. VARO DEL SISTEMA E SUA VALUTAZIONE Il primo ottobre 2003 il sistema descritto in questo elaborato è entrato in funzione in azienda. In questo capitolo cercheremo di dare una valutazione complessiva sul sistema implementato e lo confronteremo con il sistema in uso precedentemente nell’azienda. 12.1. Come misurare i miglioramenti ottenuti Il nostro obiettivo è quello di dare una valutazione il più oggettiva possibile sui miglioramenti ottenuti rispetto il preesistente sistema. E’ necessario pertanto per prima cosa individuare una serie di caratteristiche generali sulle quali poter paragonare i due sistemi. velocità; usabilità dell’interfaccia; ricerca delle informazioni; qualità dei dati; quantità dei dati contenibili; sicurezza; esportazione e stampa dei dati; stabilità del sistema; costi. Su tali caratteristiche dobbiamo rilevare: 199 miglioramenti misurabili quantitativamente, mediante l’individuazione di indicatori di processo; livello di soddisfazione dell’utente, misurabile mediante un questionario. Le caratteristiche sopra riportate sono, in effetti, estremamente diverse tra loro: alcune sono misurabili oggettivamente, altre possono essere valutate solo dalla percezione dell’utente, altre sono note per precedenti studi. Ve ne sono di più o meno conoscibili ed in modo più o meno preciso, inoltre ognuna corrisponde ad un diverso livello di importanza. Procediamo descrivendo per ogni singola caratteristica le prestazioni dei due sistemi, cercando di individuare le caratteristiche critiche su cui porre maggiormente l’attenzione e di estrarre indicatori di processo e quesiti per il questionario. Velocità La velocità del database non è un parametro molto importante ai fini del paragone tra i due sistemi. O meglio risulta estremamente grave la “lentezza” superato un certo limite, ma all’interno di un intervallo di velocità adeguato non risulta una importante proprietà distintiva la maggiore o minore velocità di risposta del sistema. In effetti sia il sistema preesistente che quello attuale presentano velocità adeguate di funzionamento, ma comunque è noto che il database MySQL presenta velocità superiori a Microsoft Access (vedi il confronto dei tempi nel paragrafo del capitolo precedente: “Perché MySQL è meglio di Access”). Date le premesse risulta pertanto inutilmente dispendioso effettuare una rilevazione empirica sulle velocità dei due sistemi, mentre può essere 200 interessante porre una domanda nel questionario risguardo la velocità percepita. Usabilità dell’interfaccia Quanto l’interfaccia è comprensibile e facile da usare e come le informazioni vengono visualizzate all’utente finale. Questa caratteristiche non sono misurabili oggettivamente, ma sono fortemente legate alla percezione dell’utente: l’unica maniera per ottenere una valutazione sull’usabilità è, pertanto, mediante quesito. Ricerca delle informazioni La facilità con cui si trova ciò che si cerca, la precisione nella risposta del sistema. Sono queste le proprietà relative alla ricerca che bisogna riuscire a valutare e che pertanto devono essere inserite nel questionario. Qualità dei dati La valutazione di questa caratteristica è estremamente ardua in quanto è scomponibile in due aspetti: la qualità formale dei dati e la qualità concettuale dei dati. Naturalmente solo la prima di tali caratteristiche può essere misurata mentre la seconda risulta di difficile valutazione anche per la percezione dell’utente. La “qualità formale dei dati” può essere misurata precisamente mediante diversi indicatori di processo: numero di “codici” errati; numero di “link” interrotti; 201 percentuale di volte che il “nuovo” sistema deve intervenire per evitare un inserimento errato rispetto il totale degli inserimenti (nel sistema preesistente non vi era alcun meccanismo di verifica dei dati inseriti); numero di istanze eliminate nel passaggio dal sistema preesistente perché sbagliate. Quantità dei dati contenibili Questa misura è oggettiva ed indipendente dalla percezione dell’utente. Non esistono livelli quantitativi precisi in quanto ciò dipende anche dalla struttura relazionale con cui i dati vengono conservati, ma secondo diversi studi Access è indicato per piccoli o medi database dell’ordine di una decina di megabyte mentre MySQL può gestire anche grandi database dell’ordine di centinaia di megabyte. Sicurezza Questa caratteristica è estremamente importante, ma risulta di difficile valutazione in quanto dipende in buona parte dalla sicurezza del “supporto”, cioè del server su cui sono installati i database. Nel nuovo sistema sono implementati sistemi di identificazione degli utenti e di backup di “alto livello” per il ripristino dei dati che però non possono essere valutati se non con simulazioni estremamente approfondite e complicate. Esportazione e stampa dei dati L’esportazione e la stampa dei dati è probabilmente il lato più forte del sistema preesistente in quanto Access si interfaccia perfettamente con gli altri prodotti Microsoft in commercio e prevede sofisticati meccanismi 202 di esportazione e stampa. In ogni caso è necessario chiamare l’utente a rispondere sul quesito relativo alla stampa e all’importazione per dare una valutazione significativa su tale caratteristica. Stabilità del sistema Questa proprietà è valutabile dopo un certo periodo di utilizzo del sistema e sarà oggetto di un quesito nel questionario. Costi Il sistema sviluppato utilizza software liberamente reperibili ed utilizzabili gratuitamente, mentre l’utilizzo di Access è vincolato da licenze acquistabili sul mercato. Basta questo per dire che il nuovo sistema è senz’altro più economicamente conveniente per l’azienda. 12.2. Valutazione degli indicatori di processo Gli indicatori di processo che possiamo rilevare quantitativamente sono relativi alla caratteristica “qualità formale dei dati”. In particolare introducendo nuovi meccanismi di verifica dei dati è possibile misurare con precisione la quantità di errori presenti nel vecchio e nel nuovo sistema secondo diversi indicatori. 12.2.1. Numero di codici errati Il numero di “codici elemento” errati è realizzabile mediante uno script, che abbiamo già descritto in precedenza, e che dato un codice cerca di interpretarne le caratteristiche della parte parlante e segnala un errore in caso di fallimento. Riportiamo il risultato che avevamo ottenuto con i codici del sistema preesistente. 203 Nel nuovo sistema è implementata una procedura che si può richiamare in qualsiasi momento e che si rifà al medesimo script che invece restituisce il seguente risultato. Come si può notare, oltre ad individuare i codici errati distingue tra codici eliminabili e non eliminabili ed inoltre ne consente l’eliminazione o la modifica. Per codice “eliminabile” si intende, come abbiamo già avuto modo di spiegare, un codice errato che non è utilizzato in alcuna altra tabella al di fuori della tabella “elementi”. 204 Su 8343 codici elemento nel nuovo sistema, vi sono 19 (0,23%) codici errati di cui 5 presentano un formato errato e 14 parte parlante di codice sconosciuta. In ogni caso vi è una netta riduzione di codici errati rispetto il sistema preesistente. 12.2.2. Numero di link interrotti Il numero di link interrotti è un buon indicatore della qualità dei dati. Nel nuovo sistema è stato implementato un meccanismo che lega indissolubilmente la sorte del documento con la sorte del relativo link, in tal modo è impossibile che vi siano link che puntino a un documento inesistente e quindi interrotti. Nel precedente sistema erano presenti invece ben 25 link interrotti. 12.2.3. Percentuale di errori evitati nell’inserimento Questo indicatore di processo ci consente di valutare quale percentuale di dati inseriti sarebbe errata in assenza del sistema di verifica sui dati. L’idea è quella di contare il numero di volte che il nuovo sistema deve intervenire per evitare un inserimento errato e quindi per impedire un inserimento che invece nel preesistente sistema sarebbe stato permesso. Questo è realizzabile mediante un semplice file di log che registra tutte le operazioni di modifica od inserimento di dati e tutte le comunicazioni di errore che il sistema genera in seguito a tali operazioni. Dall’analisi del suddetto file, in data 10 ottobre 2003 (9 giorni dopo l’avvio del nuovo sistema) risulta che vi sono 34 errori rilevati ed impediti dal sistema su 157 operazioni effettuate. Significa che senza il sistema di verifica sui dati vi sarebbe stato una percentuale di errore, pari a circa il 22% dei dati inseriti. 205 In ogni caso tale valore deve essere preso con cautela in quanto bisogna tenere conto di due fattori che ne inquinano in parte il valore: l’operatore addetto all’inserimento è alle prese per la prima volta con il nuovo sistema; essendo presenti meccanismi di verifica automatica è probabile che si proceda con un po’ meno attenzione affidandosi al sistema per la rilevazione degli errori più banali. 12.2.4. Istanze eliminate nel passaggio al nuovo sistema In fase di importazione viene tenuto traccia di tutte le istanze eliminate in un file denominato “istanze_non_inserite.txt”: contando per ogni tabella il numero di righe risaliamo al totale di errori “strutturali” presenti in precedenza nel sistema. Di seguito riportiamo i risultati dell’analisi. 206 TABELLA N° ISTANZE NON INSERITE elementi 15 distinte 0 revisioni 3 link 18 cod_costr 108 altri_costr fornitori costi 4 1 2 masa op_masa 2 3 TOTALE 156 12.3. Il questionario L’altro elemento fondamentale per la valutazione dei risultati ottenuti è la creazione di un questionario da sottoporre a tutti gli utenti del database. Il formato del questionario è estremamente semplice e punta a dare una valutazione oggettiva [5] sui miglioramenti ottenuti nel nuovo sistema rispetto il precedente sulla base di alcune caratteristiche prestazionali primarie. Il questionario indaga sull’utilità del sistema solo dal punto di vista dell’utente comune in quanto essendovi un solo amministratore non avrebbe senso porre quesiti riguardo l’interfaccia di amministrazione. Riportiamo nella pagina seguente il questionario che abbiamo sottoposto agli utenti. 207 Come si può notare viene richiesta una valutazione sull’importanza relativa alle caratteristiche in analisi e successivamente, nel secondo e nel terzo riquadro, viene richiesta una valutazione sul livello di prestazione del preesistente database Access e del nuovo sistema in uso. 208 È possibile pertanto dare una valutazione media per ogni caratteristica dei due database ed inoltre calcolare una media globale, pesata sull’importanza attribuita ad ogni prestazione, dei due sistemi. 209 Riportiamo di seguito i risultati ottenuti. RISULTATO QUESTIONARIO ACCESS 5 MYSQL 4 3 2 1 12.4. PE SA TA M ED IA st am pa es po rt az io ne tà st ab ili ri c er ca vi su al iz za zi on e lit à us ab i ve lo ci tà 0 Valutazioni conclusive sul nuovo sistema In base alle valutazione statistiche effettuate possiamo affermare che il sistema implementato presenta innumerevoli lati positivi ed anche qualche lato negativo 12.4.1. Miglioramenti ottenuti I principali risultati positivi ottenuti sono: pulizia dei dati preesistenti: 156 istanze errate eliminate in fase di importazione dei dati; azzeramento del numero di link interrotti; 210 riduzione dei codici errati dall’1,08% allo 0,27% sul totale degli elementi; blocco dell’inserimento, causa dati errati, del 22% degli inserimenti effettuati (dato comunque destinato a ridursi nel tempo all’aumentare dell’esperienza dell’operatore); netto miglioramento della soddisfazione dell’utente riguardo la visualizzazione; maggiore stabilità del sistema. 12.4.2. I lati negativi Naturalmente vi è anche qualche lato negativo, in particolare sono state individuate carenze nelle seguenti caratteristiche: esportazione delle informazioni; stampa dei dati. 211 Conclusioni Il sistema informativo che abbiamo sviluppato è entrato in funzione nell’azienda il primo ottobre 2003 ed attualmente si stanno ottenendo i primi risultati delle innovazioni gestionali introdotte. La definizione di meccanismi per la verifica ed il controllo dei dati in fase di inserimento garantisce al sistema l’integrità e l’affidabilità dei dati contenuti nel database; la “procedura di approvazione” prevista per i componenti, le distinte e le revisioni introduce una giusta ed equilibrata distribuzione delle responsabilità tra gli utenti del sistema; la gestione integrata dei documenti allegati con il database garantisce la reperibilità e la sicurezza di tutti i documenti importanti per l’azienda; l’introduzione di metodologie di ricerca dettagliata consentono all’utente di effettuare interrogazioni complesse del database e di trovare le informazioni ricercate con maggiore precisione; la gestione dei permessi utente per l’accesso al database secondo diversi livelli permette di proteggere le aree riservate; l’introduzione di un sistema di backup e ripristino dei dati ad “alto livello”, consente di cautelarsi da errori nell’amministrazione dei dati e da crash “non gravi” del sistema. Inoltre grazie al supporto informativo dato dalla coppia formata da PHP e MySQL, si ottiene un risultato estremamente flessibile, economico, indipendente dalla piattaforma software utilizzata ed è stato possibile, sfruttando l’attitudine dell’utente alla navigazione nella rete Internet, implementare un’interfaccia estremamente “user friendly” nonché estremamente potente. 212 Sviluppi futuri Il naturale sviluppo per un sistema sviluppato nel linguaggio PHP e su database MySQL è la rete Internet. Tra i possibili sviluppi futuri del sistema vi è in effetti un integrazione informativa tra l’azienda e i fornitori e tra l’azienda e i terzisti che per essa realizzano alcuni prodotti: questi tre attori della filiera sono legati tra loro proprio dalla distinta base che da un lato rappresenta una ricetta tecnica per produrre e dall’altro una lista di componenti da acquistare. L’altro rilevante sviluppo possibile relativo al sistema sviluppato riguarda le carenze notate in fase di valutazione per quanto riguarda l’esportazione e la stampa delle informazioni. E’ in effetti possibile sviluppare un sistema per l’esportazione delle informazioni in un formato più portabile e più adeguato alla stampa, il P.D.F. (Portable Document Format) che è supportato da PHP. Questo consentirebbe di ottenere stampe migliori ed adatte anche a presentazioni importanti. 213 Bibliografia [1] Atzeni, Ceri, Paraboschi, Torlone. Basi di dati: concetti, linguaggi e architetture. McGraw-Hill Italia, 1999. [2] Axmark David, Widenius Michael. MySQL Reference Manual (http://www.mysql.com/documentation/mysql/bychapter/index.ht ml). [3] Bakken, Aulbach, Schmid, Winstead, Wilsons, Lerdorf, Zmievski, Ahto. Manuale PHP (http://www.php.net/manual/it/). [4] Boscarol Maurizio. Che cos' è l' usabilità dei siti web (http://www.usabile.it/012000.htm). Usabile.it, 2000. [5] Bosco Andrea. Come si costruisce un questionario. Carrocci, Le Bussole, 2003. [6] Clancy Jon. Engineering bill of materials. Ciras News (http://www.ciras.iastate.edu/publications/CIRASNews/fall97/bo m.htm) [7] Dubois Paul. Migrating from Microsoft Access to MySQL. 2003 (http://www.kitebird.com/articles/access-migrate.html). [8] Gugnelli Emanuela. Usabilità dei siti web. HTML.it (http://www.html.it/usabilita/). [9] Insinga Filippo. La gestione della produzione e della supply chain. ISU Università Cattolica, 2002. [10] Lerdorf Rasmus. PHP Pocket Reference. Hops Libri, 2000. [11] Meyer Eric. CSS Pocket Reference. Hops Libri, 2001. 214 [12] Stevahn, Waters. CSS Printing Extensions. Håkon Wium Lie (http://www.w3.org/pub/WWW/TR/WD-print-970626) [13] Travis David. Bluffers’ guide to ISO9241. Userfocus, 2003 (http://www.userfocus.co.uk/articles/ISO9241.pdf ). 215 Ringraziamenti Ringraziamenti vanno a tutti coloro che hanno collaborato alla realizzazione di questa tesi ed in particolare alla Dott. Wilma Penzo, che come relatore ha fornito le linee guida, all’Ing. Andrea Regazzi, che mi ha costantemente affiancato nella realizzazione operativa del sistema, agli ingegneri Katy Proietti e Fabio Galli, che mi hanno dato preziosi consigli e a tutti i dipendenti di SADEL s.r.l. 216