Passa ai contenuti principali

Il montecarlo e la stima dei tempi di sviluppo

Introduzione

La stima del tempo di completamento di un progetto di sviluppo software è una attività non banale. Proviamo ad applicare alcune considerazioni e tecniche proprie della ricerca operativa per cercare di capire cosa si nasconde dietro questa difficoltà.
Per fare questo prendiamo in considerazione un progetto scomposto in 7 macro attività, tutte da svolgersi in sequenza. L'ipotesi di sequenzialità deriva dal fatto che il progetto verrà portato al termine da un'unica squadra composta da 2 persone.

La stima banale

Il project manager poco esperto tenderà a chiedere alla propria squadra una stima del tempo di completamento delle singole macro attività. Applicando un opportuno fattore di contingenza alla somma dei singoli tempi, ecco che viene la stima del tempo di completamento dell'intero progetto.
Questo metodo, per quanto semplice ed intuitivo, presenta dei difetti. Il primo e più importante è quello di non portare in evidenza l'entità del rischio che il progetto, per come è strutturato, si porta dietro. Certo il fattore di contingenza cerca di controllare il rischio, ma comunque si parte da una stima piatta ad un'altra stima piatta.
Un altro problema di questo metodo è che, buona parte della responsabilità sulla stima e rispetto del tempo di completamento dell'intero progetto, è stata spostata sul team di sviluppo. Uno strumento che permette di bilanciare in maniera più distribuita le responsabilità, distinguendo tra singole macro attività e intero progetto, è utile ed auspicabile.

Stima delle singole macro attività

La domanda “quanto tempo ci vuole per completare una data attività” è una domanda mal posta, perché l'unica risposta sensata è “dipende”. Questo perché dietro una attività di sviluppo si nascondono tante insidie e punti di aleatorietà. A partire dalla bravura ed esperienza dei programmatori, gli strumenti utilizzati, la complessità intrinseca del problema e tanti altri fattori rendono una qualunque stima poco significativa.
L'ideale sarebbe poter avere una distribuzione dei tempi di sviluppo, quindi una serie di possibili tempi che relative probabilità. Questa richiesta, per quanto sensata, presenta delle difficoltà oggettive difficilmente risolvibili, perché senza delle statistiche affidabili su attività analoghe è praticamente impossibile ipotizzare una qualche distribuzione.
Un giusto compromesso tra queste due possibilità è la cosiddetta distribuzione triangolare, caratterizzata da tre parametri:
  1. il tempo minimo a di completamento
  2. il tempo massimo b di completamento
  3. il tempo più ragionevole c di completamento.
Secondo la distribuzione triangolare, il tempo medio di completamento di una singola macro attività è pari a (a+4c+b)/6.

Stima sull'intero progetto

A questo punto siamo in grado di dare qualche informazione in più sul tempo di completamento del progetto: il tempo minimo di completamento, il tempo massimo di completamento, il tempo medio di completamento; ognuno come somma rispettivamente dei tempi minimi, massimi e medi delle singole macro attività.
Proviamo ad andare oltre e chiediamoci qual'è la distribuzione del tempo di completamento dell'intero progetto. Per fare questo possiamo usare il metodo montecarlo, generando in modo casuale e secondo le rispettive distribuzioni le durate delle singole macro attività. Quello che otteniamo è la curva seguente che lega la probabilità con il tempo di completamento totale.

Questa curva ci dice alcune cose molto interessanti e che spiegano molte scelte tecnologiche per le attività di sviluppo nelle grandi aziende.
Escludiamo subito la parte terminale della curva, quella con ascisse tra 0.8 e 1, perché rappresenta tempi di completamento troppo alti.
La prima parte della curva, con ascissa tra 0 e 0.1 può essere, per alcune aziende, non accettabile anche se corrispondente a costi di sviluppo bassi. Infatti in quella zona della curva la variazione sui tempi di sviluppo è alta, ovvero che uno sbaglio nella stima dei tempi si traduce in una variazione alta rispetto alla durata preventivata.
La zona centrale della curva rappresenta tutta una zona di “calma relativa”, dove l'errore commesso in fase di stima ha un impatto minimo sui tempi effettivi di sviluppo. Portare le stime in quella zona della curva può essere il vero obiettivo aziendale, invece che avere stime più esatte.

Commenti

Post popolari in questo blog

PuLP – Un valido strumento per la didattica

L'insegnamento dei concetti di base della ricerca operativa, ovvero la programmazione lineare, ha trovato nel corso degli ultimi anni diversi strumenti di supporto. Sono ormai parecchi i software gratuiti e open source che permettono agli studenti e agli insegnanti di toccare con mano le nozioni e i concetti spiegati e studiati sui banchi. Ricordiamo, ad esempio, glpk che con il suoi linguaggio di modellazione MathProg permettete di scrivere e risolvere anche complessi modelli di programmazione lineare intera. Oppure citiamo anche lp_solve che con il suo ambiente impropriamente chiamato lp_solve IDE permette di scrivere e risolvere modelli di programmazione lineare direttamente nella formulazione matematica. A mio avviso però le proposte appena citate sono limitate nella potenza espressiva e nelle capacità di integrarsi con altri software o moduli esterni. Queste limitazioni sono egregiamente risolte da PuLP : un modellatore di problemi di programmazione lineare intera basato

Ci arricchiremo con la ricerca operativa?

A questa domanda forse possiamo rispondere sì :-) , rimandando al lavoro molto fresco ed interessante di Giancarlo Volpe dal titolo " Scommesse sportive: un modello di Ricerca Operativa che descrive la “vincita perfetta” " E' possibile scaricare il documento da scribd.com . Dall'apprezzabile contenuto didattico la parte entrale, dove si illustra passo passo come è possibile usare il risolutore di excel per applicarlo al modello descritto. Buona lettura e giocate con moderazione. Un Modello di Ricerca Operativa per Scommesse Sportive

Dispense di ricerca operativa

Ho trovato sulla home page del prof. Agnetis, delle interessanti dispense di ricerca operativa. I temi trattati sono tutti molto interessanti: Appunti sul duale del problema del massimo flusso Appunti sui problemi di matching Appunti su classi di complessità e problemi NP-completi Appunti sul problema del TSP euclideo Appunti sulla generazione di colonne Appunti sui modelli di lot sizing: Wagner-Whitin, Zangwill, Florian-Klein Appunti sui problemi di scheduling Appunti sui metodi metaeuristici di ricerca Introduzione all'ottimizzazione non vincolata   Introduzione all'ottimizzazione vincolata Esercizi di ottimizzazione non vincolata  Condizioni di KKT e Programmazione Lineare  Esercizi di ottimizzazione vincolata   Raccolta di esercizi di PL svolti  Esercizi di esame di PL svolti Esercizi di PLI svolti Appunti sui metodi basati sul rilassamento Lagrangiano Esercizi d'esame (R.O.) di ottimizzazione non vincolata e vincolata Ottimizzazione nella Gestione