Ricordo chiaramente quel giorno in cui sono arrivato al lavoro - verso la fine dell';anno 2003 - è stato facile prima delle 6 del mattino. Ero alla guida di un piccolo team incaricato della prototipazione di un ambiente di test per una proposta della NASA. Rimasi lì stupito mentre osservavo i miei due programmatori dimostrare un ambiente di simulazione satellitare completamente riprogettato. Aspetta - lasciami essere chiaro - in pochi giorni - hanno riscritto quasi 30.000 righe di FORTRAN e altre 4000 linee di codice assembly. Come hanno fatto? Lo chiamavano :goop:. :Il detergente per le mani?: Chiesi - piuttosto confuso. No, si riferivano ad un nuovo linguaggio di sviluppo di LabVIEW (National Instruments) chiamato :GOOP: - abbreviazione di programmazione orientata agli oggetti grafica.
Software di stima civile
Quello fu il giorno in cui decisi di smettere di fare il programmatore. Ero, alla mia ';età';, non più realmente interessato a stare al passo con gli ultimi paradigmi di programmazione (e vernacolare - come :paradigma:). Ho deciso di abbandonare il passato e abbracciare il mio ruolo di program manager. Ma ora, guardando indietro, vorrei che avrei fatto qualche altra domanda.
Misurazione Fallimento
Nel 1995 la società di consulenza e ricerca di gestione dei progetti IT con sede a Boston, Mass. The Standish Group pubblicò il suo primo rapporto di sintesi CHAOS. Il rapporto divenne rapidamente una scheda di valutazione del settore per misurare il successo o il fallimento dei progetti IT; dovuto in gran parte in parte alla sorprendente percentuale di progetti falliti rivelati nella relazione. Il rapporto è stato un campanello d';allarme che sembra essere stato ascoltato - il rapporto del CAOS del 10 ° anniversario ha annunciato che la percentuale di progetti falliti era stata ridotta di oltre la metà. Ma purtroppo, in soli cinque anni, il numero di progetti falliti è tornato in aumento; il rapporto CHAOS del 2009 del Standish Group indica che quasi 1 progetto su 4 è destinato a fallire. Ma perché?
Secondo il rapporto CHAOS del 1995 originale, per migliorare la probabilità di successo dei progetti dovrebbero essere ridotti in complessità e il software :cresciuto:. La raccomandazione era di ridurre il software in segmenti più piccoli e più gestibili e svilupparlo verso l';esterno. Se si ritiene che questa riduzione riportata dei progetti falliti, sembra che l';industria del software sia stata diligente nel :crescere: dei progetti usando elementi più piccoli (1). Tuttavia, ciò che dovrebbe essere compreso è che quei progetti erano composti da molti pezzi più piccoli che erano più facili da :dimensionare:.
Nel 1995 l';approccio più comune al dimensionamento del software era quello di contare le linee di codice sorgente (SLOC) o contare i punti funzione (anche se meno prevalenti). Il dimensionamento del software era una metodologia consolidata e matura che si estende per oltre venti anni, con una miriade di strumenti disponibili per automatizzare il processo e ulteriori metriche disponibili per misurare la complessità del software e la probabilità di difetti (bug). Se si capiva la dimensione di un progetto, allora la capacità di stimare la pianificazione e lo sforzo poteva essere facilmente modellata applicando le misure di rendimento precedenti (e molti altri parametri). Prevedendo una stima realistica all';inizio del ciclo di sviluppo, vi era una probabilità significativamente maggiore del successo del progetto (in tempo, all';interno del budget, alla funzionalità promessa) - e quindi - meno fallimento.
Ritorno al futuro
È di nuovo il 2003 e mi è appena stato detto di una nuova metodologia che consente a chiunque di creare software utilizzando componenti grafici. Questo non era davvero tutto nuovo; nella metà degli anni ';90 fino agli inizi degli anni 2000 le lingue :visive: e :portatili: hanno guadagnato l';accettazione del settore e hanno cominciato a dominare il panorama dello sviluppo. Nel giro di pochi anni, le lingue che potevano essere :prodotte: da un ambiente divennero la lingua del giorno. Dopo tutto, chi potrebbe discutere con l';enorme scala economica che gli strumenti di produzione del software potrebbero generare usando la programmazione :visiva:? E per me in particolare - dopo tre giorni passati a guardare la mia squadra sfornare :GOOP: - ero un eroe per la mia gestione.
Ma aspettate - notate la cronologia nello studio del Caos menzionato sopra e il risorgere dei fallimenti del software. Anche se non sono un grande sostenitore della causalità, prendiamoci almeno qualche istante ed esploriamo questo potenziale contributore alla tendenza nel fallimento del software. In primo luogo, un';immagine della TIOBE Programming Community (2) - i detentori non ufficiali di ciò che è popolare nei linguaggi di programmazione.
Le lingue con la maggior crescita in popolarità per cinque anni sono state: Java, seguito da C #, JavaScript e poi Ruby. Alcune lingue più vecchie anche in voga sono Perl, C e Visual Basic. Perché? Forse è perché la maggior parte di questi linguaggi sono diventati più sofisticati, sono avvolti in ambienti di sviluppo integrati e sono posizionati con l';unico scopo di aumentare la produttività. In una parola - sono diventati più :visivi:. Anche se potrebbe essere più semplice costruire il codice, non ci sono molte considerazioni su come il codice generato debba essere :dimensionato:. In realtà, i costruttori di ambienti si vantano di averne a malapena bisogno a giocherellare sotto il cappuccio; Disegna, fai clic e Poof: codice istantaneo che viene eseguito.
La misura è importante
Il driver più significativo per quanto tempo, costi e sforzi necessari per creare software è l';ambito (o la dimensione) di ciò che deve essere costruito e quindi uno dei maggiori fattori nella stima accurata. Come il padrino della stima del software ci ha messo in guardia (Barry W. Boehm) - :La più grande difficoltà nell';usare i modelli di costo del software algoritmico oggi è il problema di fornire stime del dimensionamento del suono: (3). In che modo uno stimatore misura :GOOP: e quante linee di codice che un generatore di codice inserisce sono davvero necessarie? Quale percentuale di un modello C ++ possiamo rimuovere (se osiamo) e mantenere la Classe fondamentalmente stabile, ma concisa. Come disse una volta Mark Twain, :la parte più difficile della scrittura è la rimozione di tutte le parole in più:.
È possibile contare più linee di codice software? Anche usando i migliori strumenti di conteggio del codice disponibili, non stanno davvero contando molte righe di codice che potrebbero non essere necessarie? Oppure inverso: quanto tempo ha impiegato il programmatore per rimuovere tutto quel codice che non avrebbe dovuto essere contato - e non lo era? Il mio sospetto è che tutto il codice rimanga dentro (a meno che uno standard con alto rigore come FAA DO-178B abbia verificato il sistema).
Dato che sono sull';argomento del conteggio del codice - cosa è successo ad Ada e FORTRAN; quelle solide lingue degli anni ';80 e ';90 che erano facili da contare? Ahimè, ora sono classificati in numero 24 e 25; di nuovo, nessuna assunzione di causalità. (Ma sì, la mia lingua è piantata saldamente sulla guancia). Le stime sembravano molto più semplici allora. Cue la musica.
Hmm, c';è qualcosa che diventa chiaro nel rapporto Standish - assumendo che non sto facendo quello che gli statistici chiamerebbero un :errore di conferma:; Proporrei che, forse, l';industria abbia reso troppo complicata la cattura delle dimensioni del software e, di conseguenza, la nostra capacità di creare con precisione una buona stima dei costi. In definitiva, se l';industria si sta spostando da linguaggi :numerabili: e si sta migrando verso rappresentazioni :visive:, è necessario stabilire un meccanismo che possa correlare accuratamente lo sforzo con le dimensioni o viceversa.
Ecco un pensiero: ricorda quelle migliaia di dollari usati per acquistare requisiti grafici e strumenti di progettazione, come IBM Rational Rose, RSA Integration e Rhapsody? Perché non utilizzare l';output di questi modelli di casi d';uso per calcolare gli Use Case Points (non aggiustati) che possono quindi essere inseriti nei modelli parametrici. Stai costruendo :Modelli di progettazione?: Perché non dedicare più tempo e calcolare i punti funzione COSMIC e pubblicarli insieme al modello: in questo modo è possibile calcolare il costo di implementazione del modello. Come minimo, prima di caricare in avanti i requisiti per il codice, tentare di calcolare alcune dimensioni :funzionali: accettate dal modello parametrico e procedere, quindi tornare indietro per verificare se il tuo sforzo per le assunzioni di funzione fosse corretto.
La comunità del software ha fatto grandi progressi nella creazione di strumenti per migliorare la produttività, ma le nostre stime sono sbagliate perché ci siamo fermati a metà strada! Abbiamo bisogno di raggruppare e identificare le dimensioni del software in relazione al costo del software e coinvolgere strumenti parametrici per calcolare stime accurate. Fino ad allora - è solo un lavoro da indovinare stimare lo sviluppo di nuovi prodotti e la fiducia cieca nella conoscenza tribale quando si modificano le applicazioni esistenti. Dopo tutto, solo quanto tempo ci vuole per fare GOOP?
1 - Jim Johnson, presidente di The Standish Group, afferma di essere rimasto così sorpreso nell';osservare un calo dei tassi di successo dei progetti IT che ha aspettato altri quattro mesi prima di pubblicare il rapporto CHAOS per assicurarsi che i risultati fossero accurati. Egli attribuisce l';aumento dei fallimenti dei progetti IT alla recessione, che secondo gli economisti è iniziata nel dicembre 2007 e ai successivi tagli di bilancio.
2- http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
3- Ingegneria del software - Contributi a vita di Barry W. Boehm per lo sviluppo, la gestione e la ricerca di software., A cura di Richard W. Selby, Wiley-IEEE Computer Society Pr; Edizione di ristampa (4 giugno 2007) Come valutare il software Alcuni proprietari di case non hanno problemi con una visione e un piano quando si tratta di ristrutturazione e ristrutturazione. Sembra solo che alcuni individui possano mettere insieme un piano, dopo aver escogitato un';idea generale di ristrutturazione, quindi vedere quel piano senza molta assistenza. Ma questo non è il caso per la maggior parte dei proprietari di case. È qui che il software di miglioramento della casa può aiutare.
Mentre nessun programma per computer è perfetto per ogni situazione, la maggior parte dei proprietari di case sarà in grado di trovare alcuni programmi di pianificazione e software di stima dei costi che saranno di grande aiuto nel rendere il progetto di ristrutturazione / ristrutturazione più fluido. Questo può essere vero per coloro che sono tipi fai-da-te e per coloro che vogliono avere un';idea del costo prima di trasformare il progetto in un professionista.
Alcuni proprietari di immobili che desiderano svolgere un';attività di rimodellamento di base o semplicemente aggiornare qualcosa in casa possono scegliere il programma di pianificazione e di stima dei costi più semplice. Questi possono funzionare abbastanza bene in molte situazioni. Tuttavia, ci sono versioni professionali della maggior parte dei software di rimodellamento domestico, sia per la pianificazione che per la stima dei costi. Questi potrebbero essere un po ';più costosi all';inizio, ma daranno al proprietario della casa qualche altra scelta (e forse una stima più dettagliata del costo).
Naturalmente, se il proprietario della casa non ha in programma di fare nessuno dei lavori e non è preoccupato per i dettagli dei costi, la pianificazione e il software finanziario potrebbero non essere necessari. La maggior parte dei professionisti che lavorano su attività di ristrutturazione hanno un software per pianificare e stimare. Coloro che di solito non hanno abbastanza esperienza per prendersi cura dei piani originali, stima dei costi di manodopera e materiali e così via.
Alcune idee di base su cosa cercare nei software di rimodellamento domestico contribuiranno a rendere fluide le prime fasi del progetto. Ricorda che questo software di pianificazione / stima di solito è progettato per essere utilizzato molto prima che il legname venga tagliato o che i chiodi siano martellati. Ciò sarà importante quando il proprietario della casa o l';altra persona che collabora al progetto inizia ad acquistare materiali. La maggior parte dei software di pianificazione e stima dei costi consente di stampare un elenco di materiali e fornisce anche una relazione sul progetto totale. È anche importante assicurarsi che sia disponibile un piano preliminare e una stima dei costi prima che il proprietario della casa torni al software per disegni, planimetrie e dettagli del budget. In generale, la pianificazione e il processo di stima dovrebbero essere eseguiti lentamente e in più fasi.
Ci sono alcuni programmi di software libero abbastanza buoni disponibili. Molti di questi possono essere scaricati dai siti Web. Occorre prestare attenzione per ottenere il tipo di software che si adatta meglio all';idea / visione originale del progetto di rimodellamento. Anche con la pianificazione più attenta e il miglior software, ci saranno sfide e cambiamenti (alcuni possono essere anticipati, altri no). Nella maggior parte dei casi, l';utilizzo di alcuni software ti aiuterà. Utilizzando il software corretto per il compito, che rimodellasse il bagno o semplicemente la costruzione di un banco da lavoro può essere la differenza tra un progetto scorrevole e uno afflitto da problemi.