Progetto software 2007/2008 Lezione I Dott.ssa Marianna Nicolosi Asmundo Obiettivi del corso Coinvolgervi nello sviluppo di un progetto software in cui – mettere a frutto le conoscenze che avete acquisito durante i corsi già frequentati (programmazione, algoritmi, ingegneria del software, database ecc…) – applicare un processo per la gestione e lo sviluppo del progetto analogo a quelli usati nel mondo reale Come? Lavorerete in team di 4/6 persone • un leader • uno o più analisti • due o più programmatori Sarete voi a scegliere il ruolo più adatto alle vostre capacità e alla vostra indole. Mi comunicherete la formazione del vostro gruppo ed eventuali modifiche. I Leader • Problem solving: – – – – determinare i fattori tecnici e organizzativi più importanti strutturare sistematicamente una soluzione motivare gli sviluppatori flessibili • Identità manageriale: – assumersi la responsabilità del progetto – coordinazione del resto del team • Incentivazione: – ricompensare lo spirito di iniziativa – saper rischiare • Influenza e spirito di gruppo: – Mantenere il controllo nelle situazioni critiche – relazionarsi bene coi colleghi Il team • Staff tecnico auto-organizzato • Parola d’ordine: cooperazione “Se vuoi migliorare in modo incrementale, sii competitivo; se vuoi migliorare in modo esponenziale sii cooperativo.” Autore ignoto Criteri di valutazione • Qualità del software sviluppato • Coesione del gruppo Non sono previsti progetti individuali Modalità di esame • L’esame consiste nello sviluppo e consegna del progetto • Il vostro lavoro verrà monitorato e valutato per fasi • Al momento della consegna del progetto finale verrà fatta una valutazione complessiva del progetto e verrà verificata la competenza di ciascun membro del team rispetto all’intero progetto e rispetto al ruolo specifico ricoperto Contenuti del corso • Breve ripasso sui processi di sviluppo del software • Principi di gestione dei progetti – Metriche di processo – Stime per il progetto software e pianificazione – Gestione dei rischi • I metodi formali come strumento di specifica – Formalismi algebrici: ASMs – Formalismi visuali: Reti di Petri – OCL Cos’è un progetto? Un progetto è un’impresa temporanea • effettuata da persone • vincolata da risorse limitate • pianificata, eseguita e controllata intrapresa per creare un prodotto o servizio unico Dimensioni di un progetto: • Coinvolge una persona sola o molte migliaia • Richiede meno di 100 più di 10 milioni di ore per essere completato Esempi • Lo sviluppo di un nuovo prodotto o servizio • La progettazione di un nuovo veicolo di trasporto • … Temporaneo & Unico • Temporaneo: Ogni progetto ha un inizio e una fine ben precisa (obiettivo raggiunto o irraggiungibile) – non significa che dura poco infatti molti progetti durano diversi anni • Unico: Ogni progetto riguarda qualcosa che non è mai stata fatta prima ed è pertanto unica – un progetto differisce da un altro per il tipo di oggetto sviluppato, per gli strumenti usati, per le persone coinvolte o soltanto per le date Progetti software Sviluppo di: • Un compilatore, un editor, una componente di sistema o un sistema operativo • Un applicativo web • L’implementazione di un algoritmo di ordinamento • Il controllo dei comandi di una lavatrice • … Progetti software/ingegneria software In generale non possiamo produrre software nella maniera più immediata 1. 2. 3. I progetti sono in genere di dimensioni consistenti Possono richiedere l’applicazione di più strumenti (linguaggi di programmazione, algoritmi) Possono coinvolgere più persone (sviluppatori, committenti e utenti) Ognuno di questi punti basta a giustificare l’utilizzo di un processo per lo sviluppo del software Sviluppo del software Avviene tramite comunicazione: “Poiché il software, come ogni capitale, incorpora della conoscenza e poiché la conoscenza è inizialmente in larga misura dispersa, tacita, latente e incompleta, lo sviluppo del software è un processo di apprendimento sociale. Questo processo è un dialogo in cui la conoscenza viene raccolta e incorporata nel software. Il processo crea interazione fra gli utenti e i progettisti, fra gli utenti e gli strumenti in evoluzione e fra i progettisti e gli strumenti in evoluzione (la tecnologia). Si tratta di un processo iterativo in cui lo strumento evolutivo stesso fungerà da mezzo di comunicazione e in cui ogni nuova fase del dialogo trae conoscenze sempre più utili dalle persone interessate.” H. Baetjer Processo di sviluppo del software? Quando si realizza un prodotto o un sistema è importante svolgere un percorso che aiuti ad ottenere risultati di alta qualità nel tempo prefissato Processo di sviluppo software Chi se ne occupa? • Gli ingegneri del software adattano il processo alle loro esigenze e poi lo seguono • I committenti giocano un ruolo importante nel processo di definizione, costruzione e collaudo Perché è importante? Introduce stabilità, controllo e organizzazione Quali passi sono necessari? Il processo che si adotta dipende dal software che si sta realizzando Processo di sviluppo software Cosa viene prodotto? I programmi, i documenti e i dati sviluppati come conseguenza delle attività di ingegneria del software definite dal processo Come verificare che il procedimento sia corretto? Qualità, ottimizzazione dei tempi e utilizzabilità a lungo termine del prodotto che si sta realizzando sono i migliori indicatori dell’efficacia del processo utilizzato Quindi Un processo di sviluppo software è una struttura di riferimento entro il quale si svolgono le attività necessarie alla realizzazione di software di alta qualità