13. Implementazione Significa tradurre la progettazione in codice scritto in un particolare linguaggio di programmazione Due scelte fondamentali: scelta del paradigma di programmazione (imperativo, funzionale, logico, ad oggetti, visuale, ecc.) e dello specifico linguaggio di programmazione (C, ML, Prolog, java, VisualBasic, ) scelta dell ambiente di sviluppo : editor, compilatore, debugger, linker, ecc. (es. CodeWarrior, Visual C++,...) 1 Un buon codice è ben strutturato in diversi moduli e interfacce gerarchia dei moduli all interno del singolo modulo: astrazione procedurale all interno della singola procedura: no sequenze di istruzioni condizionali innestate ma comando switch / array di procedure no valori numerici distribuiti nel codice ma uso di costanti no variabili globali nelle procedure ma passaggio esplicito dei parametri 2
Un buon codice è ben leggibile Stile di programmazione conforme alle convenzioni del linguaggio (indentazione) Raggruppare la dichiarazioni nelle interfacce Usare nomi significativi per gli indentificatori (di tipo, di variabile, di costante, di procedura, ecc.) Usare gli stessi criteri con cui si valuta la leggibilità di documento scritto (es. la pagina di una rivista ) 3 Un buon codice è ben documentato Specificare ogni procedura: pre e post-condizioni e modalità di utilizzo Commentare puntualmente i punti critici (algoritmi e strutture dati) Isolare chiaramente le parti obsolete e i comandi per il debugging Usare strumenti per fare della documentazione un deliverable che accompagna il codice (es. javadoc) 4
La gestione delle configurazioni Come tenere tutte le informazioni e i prodotti relativi a un progetto in uno stato consistente? 5 Problemi tipici nel processo di sviluppo Cambiamento, ad esempio per eliminare un anomalia nel codice modificare tutti i conf. item che sono toccati dalla modifica Accesso concorrente allo stesso componente allo stesso tempo Doppia manutenzione Copie locali (ovvero conflitti di aggiornamento) 6
Doppia manutenzione In molte organizzazioni, il codice riutilizzabile viene ricopiato, modificato e/o arricchito in modo da costituire nuovi programmi. due (o più) prodotti condividono alcuni moduli e lo fanno mantenendo copie separate dei medesimi 7 Doppia manutenzione Mancato aggiornamento di una (o più) delle copie esistenti Se la parte di codice ricopiata conteneva degli errori e non si è tenuta traccia di tutte le copie prodotte, che succede quando si manifesta un malfunzionamento in uno specifico programma? dove si trovano tutte le istanze di codice generate a partire dal medesimo sorgente iniziale? 8
Come evitare i disallineamenti? Creare un magazzino (repository) condiviso Fare copie locali ogni volta che serve un modulo Spesso si tende a scomporre il programma in via di sviluppo in moduli indipendenti. Si impone che ciascun programmatore possa operare solo su una copia di un modulo, ricavata da un repository centralizzato e condiviso. Una volta che la correzione è stata completata e certificata, si ricopia nel repository la versione aggiornata del modulo in oggetto. 9 Repository comuni e spazio di lavoro privato 10
Accesso concorrente Nel caso di accesso in parallelo ad uno stesso modulo da parte di diversi programmatori attraverso il meccanismo delle copie locali, può accadere che vengano perse alcune delle modifiche apportate. 11 Baseline La versione ufficiale di un insieme completo di documenti che fanno riferimento a un progetto E` la base dati che contiene tutti i documenti approvati I componenti sono configuration item 12
Baseline (definizioni possibili) Insiemi consistenti di (versioni di) elementi, fotografati in un determinato istante di tempo una specifica o un prodotto che sono stati sottoposti a review formale e hanno ricevuto l approvazione da parte del manager responsabile, che sono utilizzati come base per lo sviluppo successivo, e che possono essere modificati solo utilizzando procedure formalizzate per il controllo dei cambiamenti [IEEE] 13 Baseline 14
Configuration Item E` considerato come elemento unitario ai fini della gestione delle configurazioni modulo sorgente modulo oggetto specifica dei requisiti specifica di progetto piano di test casi di test manuale utente 15 Esempio di Baseline Contiene specifica dei requisiti documenti di progetto codice tests relativi a un certo progetto 16
Un possibile schema Baseline memorizzata in DB Inserimento e modifica richiedono autorizzazione (per sistemi complessi, CCB--Change Control Board) A livello minimale: Lock in modifica di elementi che si stanno cambiando Accesso concorrente in lettura 17 Versione e Revisione di Componenti Tenere le vecchie versioni (potrebbero essere usate da altri) X.1 X.2 X.3 X.4 X.2.1 X.2.2 TOOLS Memorizzazione dei delta Gestione automatica di lock-unlock Numerazione automatica versioni/revisioni X.2.3 18
Memorizzazione delle versioni 19 Paradigma check-in check-out Check-out preleva una copia di una versione di un modulo da un repository e la deposita nello spazio di lavoro criteri per la selezione della versione (ultima, x.y, data, ) possibilità di porre o meno un lock sulla specifica versione (lock = modifica possibile o meno) Modifica della copia nello spazio di lavoro (isolamento) Check-in deposita una nuova versione di un modulo nel repository (se consentito, se presente lock, ) criteri per stabilire identificatore nuova versione (vecchia +1, manualmente, regole, ) Possibile una stretta serializzazione del lavoro (single writer, multiple readers) 20
Essempio check-out / check-in 21 Paradigma lock-modify-unlock Lock esclusivo: al momento del check-out viene posto un lock sul file non è ammesso il check-out di file su cui è già posto un lock solo un programmatore per volta può modificare il file il lock viene automaticamente rilasciato al momento del check-in del file Reserved/unreserved check-out reserved: chi ha operato il check-out del file sarà il primo a poterne fare il check-in unreserved: non c è garanzia che chi ha operato il check-out del file sia il primo a poterne fare il check-in dello stesso file possono esserci contemporaneamente più unreserved check-out ma un solo reserved check-out un reserved check-out può essere cancellato o rilasciato (diventando unreserved) 22
Paradigma copy-modify-merge non esiste il concetto di lock chiunque può effettuare il check-out di un file al momento del check-in, il tool di CM controlla se nel frattempo qualcuno ha già effettuato un check-in dello stesso file se così è, il programmatore che sta tentando il checkin viene obbligato a effettuare prima un merge (che consiste nell aggiornare la propria copia del file importando le modifiche effettuate da terzi) l operazione di merge è supportata dal tool di CM (es. file di testo); se fallisce, il sistema evidenzia i conflitti e invita il programmatore a risolverli manualmente prima del check-in 23 Gli strumenti di supporto MAKE descrive un insieme di componenti e le mutue dipendenze MAKE usa la data dell ultima modifica per capire chi deve essere ricompilato in modo da mantenere tutto consistente SCCS, RCS gestione delle versioni e delle revisioni 24
Sistemi per il controllo delle versioni: SCSS / RCS sccs admin -i -nfile file ci file Checks in the file for the first time, creating the revision history file. sccs get file co file Check out a file for reading. sccs edit file co -l file Check out a file for modification. sccs delta file ci file Check in a file previously locked. what file ident file Print keyword information. sccs prs file rlog file Print a history of the file. sccs sccsdiff -rx -ry file rcsdiff -rx -ry file Compare two revisions. sccs diffs file rcsdiff file Compare current with last revision. sccs edit -ix-y file rcsmerge -rx-y file Merge changes between two versions into file.??? rcs -l file Lock the latest revision.??? rcs -u file Unlock the latest revision. 25 CVS e Peerversy CVS E` uno strumento per la gestione delle configurazioni di tipo free e open source Tutti i file soggetti al CM stanno in un "repository" Possibili multipli checkout Se si si fa checkin dello stesso file modificato da piu` utenti viene fatto (se possibile) un "merge Peerversy Funziona in modalità peer to peer Non esiste un repository condiviso I repository di tutti gli utenti vengono sincronizzati quando possibile 26
Domande ed esercizi In che cosa consiste l attività di gestione delle configurazioni? Che cos è un configuration item? Che cos è un delta? Che vantaggi e svantaggi esistono nella memorizzazione di un delta rispetto alla memorizzazione completa di una versione? 27