lunedì 15 dicembre 2014

La misura del software: dal conteggio delle linee di codice ai Function Point

Nell'ambito informatico, la ricerca del miglior metodo per misurare un software è sempre stato uno degli aspetti più discussi e discutibili. 

Esiste una metodologia strutturata per calcolare il peso ed il valore di un'applicazione software ?
Quali sono le metriche più adatte per valutarne le difficoltà, le competenze e l'impegno necessario per l'implementazione ?
Come si fa a stimare un progetto informatico prima della realizzazione per poterlo quotare economicamente ?

Conteggio delle linee di codice e delle istruzioni

Fino alla fine degli anni 80 si usava contare le linee di codice oppure il numero degli statement, tipicamente dei punti e virgola, che identificano il termine di ciascuna istruzione nei programmi procedurali e strutturati.
Questi due metodi però, oltre ad essere utilizzabili solo a sviluppo terminato e quindi non per una stima preventiva, risentono pesantemente dallo stile e dal linguaggio di programmazione.

Conteggio delle classi e delle interfacce

In seguito, con l'introduzione della programmazione object oriented, si è passati a misurare le applicazioni conteggiando classi, metodi ed interfacce.
Anche in questo caso però il limite principale rimane la soggettività rispetto a quanto fa lo sviluppatore, alle tecniche di programmazione ed alle librerie di terze parti utilizzate e non conteggiabili.

Stima in giorni/uomo

Per le stime preventive, la metrica più utilizzata è quella in giorni/uomo: il fornitore basandosi su determinati parametri (requisiti espressi, competenza, esperienza, tecnologie utilizzate, ecc.), valuta e comunica al cliente quante giornate di lavoro cumulative (Effort) servono per realizzare il prodotto.
Al fine di ottenere la valutazione economica viene condivisa una tariffa giornaliera che, moltiplicata per l'effort stimato, determina il valore del progetto.
L'effort è sempre opportuno esprimerlo separatamente per le diverse figure professionali coinvolte nel progetto, in modo da poter poi applicare tariffe differenti in base al costo di ciascuna ed arrivare quindi ad una stima più precisa.
Questo, che probabilmente è il metodo migliore in quanto mette direttamente in relazione il software con il lavoro/tempo che serve per realizzarlo, presuppone però una grande competenza ed esperienza in progetti analoghi, sia da parte del fornitore che fa la stima, sia del cliente che deve valutarne la correttezza.

Abbiamo parlato dell' Effort, per completare il quadro di seguito una descrizione sintetica dei termini che vengono utilizzati nella valutazione e pianificazione temporale di un progetto:
  • Effort (Sforzo, Impegno): è il numero di unità di lavoro temporali (es. giorni/uomo ma potrebbero essere anche ore o settimane) richieste per completare l'attività. Per determinare la durata dell'attività, l'effort deve essere stimato prima;
  • Duration (Durata): è il tempo totale che serve per completare l'attività in base alle risorse umane disponibili. La durata, che non include vacanze e giorni non lavorativi, può essere espressa in giorni, settimane o mesi;
  • Elapsed (Tempo trascorso): è il tempo di calendario o intervallo necessario per completare le attività in base alle risorse disponibili includendo però anche i giorni festivi e non lavorativi. Anche l'elapsed può essere espresso in giorni, settimane o mesi

Esempio:
La stima per un nuovo progetto software prevede un Effort di 10 giorni/uomo.
Con una persona sola che lavora 5 giorni a settimana dal lunedì al venerdì, la Duration è di 10 giorni lavorativi con un Elapsed di 2 settimane
Se invece ci lavorano 2 persone, la Duration è 5 giorni lavorativi con un Elapsed di 1 settimana.


Conteggio dei Function Point

Per definizione, il conteggio in Function Point (FP) esprime la dimensione funzionale di un prodotto software.
Tale metodologia, sviluppata nel corso degli anni dal IFPUG (International Function Point Users Group), può essere utilizzata prima o dopo la realizzazione del software perchè viene applicata alla specifiche funzionali e non alla implementazione della applicazione stessa.
In altre parole l'obiettivo è quello di misurare le funzionalità, indipendentemente dalla tecnologia utilizzata, dalle modalità di realizzazione e dalle problematiche di contesto.

Il conteggio dei FP non è una operazione proprio facilissima ed intuitiva, lo testimonia anche il fatto che l'esame per diventare un IFPUG Certified Member è abbastanza complesso (niente di impossibile beninteso) in quanto le regole e le nozioni sono parecchie e di non immediata digeribilità.

Senza entrare nel dettaglio, la misurazione prevede l'identificazione ed il conteggio dei movimenti dati (dati di input e output dell'applicazione) e degli archivi logici memorizzati e raggiunti dall'applicazione.
Le elaborazioni applicative vengono classificate come Inferenze o Regole, escludendo ogni valutazione riguardo alle performance, alla complessità, ai meccanismi tecnologici e di programmazione.

Per questo motivo la dimensione funzionale espressa in FP rappresenta solo uno degli aspetti di misura di un software, non include infatti la copertura dei requisiti di qualità, sicurezza, velocità, robustezza, gestibilità, scalabilità, tecnici e di contesto per i quali bisogna utilizzare altri metodi di valutazione.

Per poter convertire una misurazione funzionale in una stima economica, è necessario stabilire a priori quanto vale un Function Point oppure qual'è il rapporto di conversione tra FP e giorni/uomo ( quanti FP riesce ad implementare un uomo in un giorno?), parametri entrambi aleatori e molto variabili in base al contesto ed alla contrattazione commerciale tra cliente e fornitore.

Ne consegue che tale metodologia, molto utile ad esempio per una comparazione funzionale tra diversi software o per la valutazione delle attività di manutenzione evolutiva rispetto al progetto iniziale, risulti insufficiente o addirittura fuorviante per effettuare stime economiche corrette.

Se non applicata in modo adeguato ed accompagnata anche da altri razionali di valutazione, a parere di molti questa metodologia introduce solo un ulteriore significativo impegno per il cliente ed il fornitore, protagonisti di lunghissimi confronti sui conteggi effettuati, costretti successivamente a dover riconvertire tutto in giorni/uomo, per poi probabilmente scoprire che la stima ottenuta non è assolutamente commisurata al lavoro da svolgere.


Image courtesy of Stuart Miles at FreeDigitalPhotos.net

Articoli correlati


lunedì 1 dicembre 2014

Siete dipendenti dall' Information Technology?


Ho letto con interesse un articolo su Forbes dal titolo Are You Addicted to Information Technology?. È di un paio di anni fa ma parla di un argomento molto attuale, cioè di quanto le nostre abitudini siano ormai strettamente legate alla tecnologia, con un occhio particolare alla sicurezza.
Mi ha dato spunto per alcuni commenti e considerazioni, che troverete alla fine, e quindi ho deciso di tradurlo in italiano per facilitarne la lettura e la condivisione.




L'articolo: "Siete dipendenti dalla tecnologia dell'informazione ?"

(libera traduzione da Are You Addicted to Information Technology? del 20/08/2012 di John Mariotti)

Siete appassionati della tecnologia ?  Io si.
Pensate anche voi che la tecnologia sia una cosa bellissima ? Io certamente si !
Almeno fino al momento in cui qualcosa si rompe e smette di funzionare.
Quando ciò accade, siamo costretti con le nostre abitudini a ritornare all'epoca delle vecchie tecnologie, dei vecchi telefoni fissi, della posta "lumaca" e a ricominciare a comunicare di persona.

Quando l'information technology non funziona, ci manca terribilmente la facilità e la velocità di comunicazione (anche se impersonale), l'integrazione ("sincronizzazione") ed il veloce accesso alle informazioni che essa garantisce.

Come abbiamo fatto in passato a farne a meno?
In realtà ce la siamo cavata abbastanza bene, fino a quando non ne siamo diventati "dipendenti".
Ora però ne siamo schiavi !

Viviamo in un'epoca senza precedenti, di straordinaria connettività, di convergenza ed integrazione tra tutti i diversi tipi di tecnologia.
I computer, collegati a smartphone e tablet, ci permettono di parlare, messaggiare, gestire email, scrivere e leggere blog, siti web, registrare e guardare podcast audio/video e di comunicare a distanza in modo molto più semplice, completo e veloce.

Quando tutto funziona, (ammesso che ci sia stato l'impegno per capire come si usa), la tecnologia è una cosa meravigliosa, potente, abilitante e che fa risparmiare molto tempo.

Vi ricordate l'ultima volta che siete andati in un negozio o in una stazione di servizio quando i sistemi non funzionano ? Potete acquistare qualcosa?
Durante le interruzioni di corrente elettrica, i negozi possono restare aperti durante le ore diurne e, solo se la loro azienda lo consente, sono costretti a registrare le transazioni con carta e penna. In caso contrario, fino a quando i sistemi non tornano di nuovo on-line, vi diranno di tornare più tardi.

Avete mai iniziato un viaggio quando i sistemi informatici della compagnia aerea sono spenti ?
Risultato: il Caos ! I voli non possono essere gestiti, pianificati e prenotati, si ferma tutto.
L'unica cosa da fare è sedersi ed aspettare.

Che ne dite delle vostre preziose foto e/o video che avete caricato sul computer ? Se c'è un problema tecnico e si perdono c'è un modo per recuperare tutto ?
Probabilmente no !  Peccato, avete appena conosciuto il lato oscuro della tecnologia.

Se si pensa di inviare messaggini per incontrare qualcuno durante un grande evento come una partita di calcio con 100.000 spettatori, c'è una buona probabilità che i sistemi della società telefonica siano sovraccaricati e quindi non sia possibile usarli !
Scegliete in anticipo l'orario e il luogo di incontro.

Siamo assuefatti alla tecnologia ?
Ci potete scommettere che lo siamo. Quando la nostra email o l'accesso ad internet non sono disponibili ci sentiamo persi. E' terribile.

Ora, immaginate che il vostro telefono cellulare non funzioni e che non sia neanche possibile inviare messaggi, come diavolo si può fare per comunicare?
La maggior parte delle persone penserebbe di usare un telefono fisso. Ma se anche questo non funzionasse, come potrebbe fare ?

A molte persone in passato è capitato di avere l'email hackerata o il sito web rediretto.
Tutti noi riceviamo spam e siamo stati vittime di tentativi di phishing (pratiche ingannevoli per ottenere informazioni private).
Il furto di identità è un incubo tecnologico nuovo, ma succede spesso, troppo spesso.

La nostra dipendenza dalla tecnologia non è completamente negativa, ma è pericolosa.
Non sto suggerendo di diventare Luddisti, di tornare a comunicare solo a voce di persona o con testi scritti a mano. Nel mondo di oggi significherebbe disconnettere comunicazioni di vitale importanza.
Tuttavia non bisogna sottovalutare i problemi che la nostra dipendenza dalla tecnologia solleva.

Il più importante riguarda la sicurezza, si registra infatti un grande aumento dei tentativi di hackerare i sistemi per rubare l'accesso o i dati. Questi attacchi per alcuni tipi di sistemi si contano a milioni ogni giorno. Proprio così: milioni al giorno.
Si può anche essere fiduciosi sul fatto il proprio sistema sia in grado di opporsi ad un paio di attacchi al giorno,  ma se si utilizzano le carte di credito, si è iscritti ai social network e si è attivi su Internet, la propria vulnerabilità cresce in modo esponenziale.

Che cosa si può fare?
  1. Limitare l'esposizione sui social network.
  2. Eseguire il backup dei sistemi, non solo in automatico sul Cloud, ma anche personalmente.
  3. Utilizzare i migliori strumenti per la sicurezza (firewall, antivirus, ecc) e tenerli aggiornati.
  4. Prestare attenzione alle password, al loro aggiornamento (cambiamenti periodici) e alla loro robustezza. Non condividere le password con nessun altro, non importa chi.
  5. Essere consapevoli di quanto si è dipendenti dalla tecnologia e quindi crearsi più alternative da utilizzare caso di necessità. Aprire account di posta elettronica di backup, tenere un telefono fisso in aggiunta al vostro cellulare o telefono Internet.
  6. Sapere come contattare il proprio ISP (Internet Service Provider), quando ci sembra ci sia qualcosa di strano o di sbagliato.
  7. Imparare a trovare le pagine "preferenze e impostazioni" per la posta elettronica, la messaggistica e l'accesso al web, e capire come funzionano.
  8. Mantenere anche il backup cartaceo delle informazioni ritenute più critiche. Fatture, pagamenti, documenti legali e finanziari, numeri di telefono importanti e altre informazioni di contatto, ecc.
  9. Diventare più consapevoli che malware, furti informatici e cyber-terrorismo esistono. Stanno accadendo ora e la cosa peggiorerà. L'aumento dei dispositivi in rete aumenterà il rischio.
  10. Fare un elenco di emergenza con numeri di telefono e numeri di conto di tutti i fornitori di servizi: utenze, manutenzione, medici, avvocati, parenti, vicini di casa, e così via. Crearlo, memorizzarlo sul proprio computer ma dare anche copie delle stampate ai familiari diretti "in caso di emergenza".
In questa epoca di dipendenza dalla tecnologia, non esiste un modo unico e semplice per proteggere i nostri dati e i nostri sistemi. Tutto quello che si può fare è fare tutto ciò che si sa che si dovrebbe fare, per poi sperare che tutto continui a funzionare.


(John Mariotti è un dirigente di fama internazionale ed un autore premiato)


Considerazioni

Un breve articolo come questo non ha la presunzione di essere esaustivo, non è uno studio approfondito e probabilmente è stato scritto in poco tempo fornendo solo una visione parziale.
Mi sembra che l'autore, sicuramente una persona competente, si sia soffermato molto su alcuni aspetti a discapito di altri ugualmente importanti.

Fermo restando che tutte le cose che dice sono condivisibili, di seguito ne ho elencate altre che avrei evidenziato:

  • Si fa riferimento al disagio che si ha quando si rimane scollegati da internet, argomento che avrebbe meritato un maggiore approfondimento. Il termine Nomofobia forse 2 anni fa non era ancora molto noto.
  • Si parla molto dei pericoli che possono arrivare dall'esterno quando si è collegati in rete, ma non si accenna ai danni che ci si può procurare da soli se non si utilizza con attenzione la tecnologia. La causa più frequente della perdita di dati è dovuta all'errore umano, magari alla banale cancellazione di un file o di una directory per una disattenzione.
  • Vengono giustamente messi in evidenza i pericoli che si corrono usando le carte di credito su Internet. Non si dice però che percentualmente il rischio di clonazione è maggiore quando si fanno acquisti nei negozi normali o quando si fanno prelievi da sportelli bancomat "tarocchi".  Non si parla della possibilità di usare carte prepagate e paypal per limitare i rischi.
  • Analogamente, il furto dei dati personali e di identità sono all'origine di truffe anche nella vita outline.
  • Fare elenchi con informazioni importanti e distribuirle in giro (vedi punto 10) è il modo migliore per perdere la propria privacy. Non si sa mai in mano a chi possono andare.
  • Ci sono suggerimenti fondamentali per salvaguardare la sicurezza ma mancano alcuni strumenti importantissimi che è opportuno utilizzare:
    • Impostazione delle soglie e degli alert via SMS e via email sui siti che lo consentono (tipicamente carte e banche);
    • Programmi e APP con cui in caso di smarrimento o di furto è possibile localizzare gli smartphone ed eventualmente cancellare i dati contenuti;
    • Controllo della lista IP delle ultime connessioni al proprio account sulle applicazioni che forniscono il servizio.



Articoli correlati