Che cos'è il punto funzione COSMIC e in che cosa differisce dalla stima in ore?
Mesterséges Intelligencia Központ Kft., azienda di sviluppo software con sede a Budapest, misura il software in punti funzione COSMIC: la dimensione è così una proprietà del software, non l'impressione di chi stima, quindi è verificabile, rimisurabile e permette di confrontare due offerte.
In sintesi: COSMIC (ISO/IEC 19761) misura la dimensione funzionale del software: ogni movimento di dati, cioè Entry (ingresso), Exit (uscita), Read (lettura) o Write (scrittura), vale 1 punto funzione COSMIC (CFP). La stima in ore dice quanto lavoro si aspetta chi stima; la dimensione misurata dice quanto è grande il compito. Per questo è verificabile, si può misurare di nuovo e consente di confrontare due offerte; l'impegno si ricava dalla dimensione e dalla produttività misurata nella pratica.
Che cos'è la misurazione della dimensione funzionale?
La dimensione del software si può esprimere in molti modi: in righe di codice, in ore, in punti. La misurazione della dimensione funzionale (in inglese functional size measurement, FSM) misura che cosa deve saper fare il software dal punto di vista dei suoi utenti, non come viene realizzato. I suoi concetti di base sono fissati dalla norma ISO/IEC 14143-1:2007; secondo la descrizione della norma, l'obiettivo è proprio che la misurazione si concentri sulle funzioni richieste dall'utente invece che sul modo in cui vengono realizzate.
La base della misurazione è l'insieme dei requisiti funzionali dell'utente (functional user requirements, FUR): la parte dei requisiti dell'utente che descrive quali compiti e servizi il software deve svolgere. Le prestazioni, la sicurezza o la tecnologia scelta non ne fanno parte (ne parliamo sotto, tra i limiti).
Esistono diversi metodi standardizzati di misurazione della dimensione funzionale. I più noti sono COSMIC (ISO/IEC 19761:2011) e il metodo IFPUG (ISO/IEC 20926:2009); l'ISO ha standardizzato anche altri metodi (NESMA, FiSMA, Mk II). Tutti partono dai requisiti, ma con regole diverse e unità di misura diverse, perciò i numeri misurati con metodi diversi non sono direttamente confrontabili.
Che cos'è COSMIC?
COSMIC è l'acronimo di Common Software Measurement International Consortium: un'organizzazione senza scopo di lucro che cura il metodo e organizza la certificazione dei misuratori. Il metodo è nato alla fine degli anni Novanta come evoluzione dei precedenti metodi a punti funzione, nel 2003 è diventato una norma ISO, e l'edizione attualmente in vigore è la ISO/IEC 19761:2011. La descrizione dettagliata del metodo, la versione 5.0 del COSMIC Measurement Manual, si può scaricare gratuitamente; la prima parte è stata pubblicata nel 2021, la seconda nel 2024.
Secondo la norma, il metodo è adatto a misurare software applicativo (ad esempio sistemi aziendali), software in tempo reale e combinazioni dei due. Con esso si possono cioè misurare sia un sistema ERP, CRM o di negozio online sia un software di controllo.
I concetti del modello COSMIC
COSMIC descrive il software con un modello semplice: il software scambia dati con i suoi utenti funzionali attraverso il proprio confine, e all'interno del confine legge dalla memoria persistente e vi scrive.
| Concetto | Che cosa significa | Esempio |
|---|---|---|
| Utente funzionale | chi o che cosa invia dati al software o ne attende dati: una persona, un altro software o un dispositivo | l'addetto, il sistema di fatturazione |
| Confine | un'interfaccia concettuale tra il software misurato e i suoi utenti funzionali | l'interfaccia web e l'interfaccia aperta verso gli altri sistemi |
| Evento innescante | un evento in seguito al quale l'utente funzionale avvia un processo | si presenta un nuovo cliente |
| Processo funzionale | un'unità elementare dei requisiti, eseguibile in modo autonomo: una sequenza coerente di movimenti di dati | «registrazione di un nuovo cliente» |
| Gruppo di dati | un insieme di attributi di dati che riguardano un'unica cosa su cui il software deve gestire dati | il Cliente: nome, indirizzo, partita IVA, e-mail |
| Movimento di dati | lo spostamento di un singolo gruppo di dati; ne esistono quattro tipi | veda sotto |
I quattro movimenti di dati:
- Entry (ingresso): un gruppo di dati arriva dall'utente funzionale, attraverso il confine, nel processo.
- Exit (uscita): un gruppo di dati va dal processo, attraverso il confine, all'utente funzionale.
- Read (lettura): il processo legge un gruppo di dati dalla memoria persistente.
- Write (scrittura): il processo scrive un gruppo di dati nella memoria persistente; anche la cancellazione conta come scrittura.
Alcune delle regole di misurazione che determinano il conteggio:
- Ogni movimento di dati vale 1 CFP. La dimensione di un processo funzionale è la somma dei suoi movimenti di dati, quella del software è la somma delle dimensioni dei suoi processi.
- Ogni processo funzionale è composto da almeno due movimenti di dati: un ingresso innescante e almeno un'uscita o una scrittura.
- All'interno di un processo, un tipo di movimento dello stesso gruppo di dati conta una sola volta, indipendentemente dal numero di campi che contiene.
- Tutti i messaggi di errore e di conferma di un processo, insieme, costituiscono un'unica uscita.
- La dimensione dipende dai tipi, non dalle occorrenze: che si registrino dieci o diecimila clienti al giorno, la dimensione non cambia.
- Il metodo non misura a parte l'elaborazione dei dati (calcolo, verifica): questa fa parte del movimento di dati in questione.
Il risultato si colloca su una scala di rapporti, cioè le dimensioni si possono sommare e confrontare: due parti da 40 CFP insieme fanno 80 CFP, e il totale parziale si può indicare anche per ciascun gruppo di funzioni.
Un esempio svolto: «registrazione di un nuovo cliente»
Prendiamo un requisito semplice: «L'addetto registra i dati del nuovo cliente (nome, indirizzo, partita IVA, e-mail). Il sistema verifica che il cliente non sia già registrato, lo salva e segnala l'esito positivo o l'errore.» I passi della misurazione:
- L'utente funzionale è l'addetto, l'evento innescante è il fatto che si presenta un nuovo cliente.
- Il gruppo di dati è il Cliente; i quattro attributi riguardano la stessa cosa, perciò formano un solo gruppo.
- I movimenti di dati si individuano dalle frasi del requisito, e ciascuno viene contato.
| Passo | Movimento di dati | Gruppo di dati | Dimensione |
|---|---|---|---|
| L'addetto invia il modulo | Entry (ingresso) | Cliente | 1 CFP |
| Il sistema verifica se il cliente esiste già | Read (lettura) | Cliente | 1 CFP |
| Il sistema salva il nuovo cliente | Write (scrittura) | Cliente | 1 CFP |
| Segnalazione dell'esito positivo o di qualsiasi errore | Exit (uscita) | messaggio di errore e di conferma | 1 CFP |
| Totale | quattro movimenti di dati | un gruppo di dati | 4 CFP |
Allo stesso modo è costruito anche l'esempio «registrazione di un nuovo dipendente» della guida pubblicata sul sito di COSMIC. Le modifiche del requisito si vedono così nella dimensione:
- Se il sistema deve trasmettere il nuovo cliente anche al sistema di fatturazione, si tratta di un'ulteriore uscita verso un altro utente funzionale: 5 CFP.
- Se il codice postale va verificato in una tabella dei comuni, si tratta di un'ulteriore lettura, perché riguarda un altro gruppo di dati: 1 CFP in più.
- Se il modulo chiede dodici campi sul cliente invece di quattro, la dimensione non cambia, perché il gruppo di dati è lo stesso.
- Se va modificato un processo esistente, la dimensione della modifica è la somma dei movimenti di dati aggiunti, modificati e cancellati.
L'esempio mostra anche perché la misurazione è verificabile: dietro ogni CFP ci sono un requisito con un nome, un gruppo di dati e una regola. Se qualcuno la contesta, si può dire esattamente di quale riga si tratta.
Misurare presto, affinare dopo
La misurazione COSMIC inizia fissando lo scopo e l'ambito della misurazione: che cosa misuriamo, che cosa vi rientra e a che cosa serve il risultato. Per una misurazione precisa servono requisiti abbastanza dettagliati da permettere di individuare i processi funzionali e i loro movimenti di dati. All'inizio di un progetto spesso non ci sono ancora; per questo caso COSMIC raccomanda metodi di approssimazione pubblicati per la stima precoce della dimensione, e dopo l'elaborazione dei requisiti può seguire la misurazione precisa.
La guida del metodo avverte anche che molte esigenze che inizialmente sembrano non funzionali (ad esempio il tempo di risposta o la facilità d'uso) nel corso del progetto si trasformano in funzioni del software, e per questo la dimensione sembra crescere. Non è un difetto della misurazione: mostra che il requisito è diventato più preciso. In pratica conviene quindi scrivere la specifica voce per voce, misurare di nuovo le modifiche con lo stesso metodo e indicare a parte la dimensione della modifica. Così la crescita della portata non avviene in silenzio, ma si vede in numeri.
Confronto: ore, story point, IFPUG, COSMIC
| Criterio | Stima in ore | Story point | Punti funzione IFPUG | Punti funzione COSMIC |
|---|---|---|---|---|
| Che cosa esprime | il lavoro che si aspetta chi stima | la stima relativa del team; non sempre è chiaro se di dimensione, impegno o tempo | dimensione funzionale | dimensione funzionale |
| È standardizzato | no | no | sì, ISO/IEC 20926:2009 | sì, ISO/IEC 19761:2011 |
| Da che cosa dipende | dall'esperienza, dalla prudenza e dal team di chi stima | dal team specifico; in ogni team significa qualcosa di diverso | dai requisiti | dai requisiti |
| È verificabile dall'esterno | solo in base alla spiegazione di chi stima | difficilmente, fuori dal team | sì, secondo regole pubbliche | sì, secondo regole pubbliche e disponibili gratuitamente |
| Unità di misura | ora | il punto proprio del team | punto funzione IFPUG | CFP, 1 CFP = 1 movimento di dati |
| A che cosa serve meglio | a pianificare compiti brevi e ben conosciuti | alla pianificazione degli sprint del team stesso | a misurare la dimensione, a confrontare | a misurare la dimensione, a confrontare, come base per l'offerta e la pianificazione |
La stima in ore non è uno strumento sbagliato, misura solo un'altra cosa: il lavoro previsto, che oltre che dalla dimensione del compito dipende anche dalle competenze, dagli strumenti e dalla prudenza del team. Gli story point sono utili per la pianificazione all'interno del team, ma secondo la guida pubblicata sul sito di COSMIC sono soggettivi, e il loro significato cambia da team a team. IFPUG e COSMIC sono entrambi dimensioni funzionali standard, ma con regole diverse, perciò i numeri dei due metodi non sono intercambiabili.
Perché la dimensione misurata è una base più affidabile?
Per rispondere con precisione alla domanda del titolo: COSMIC non stima le ore in modo più preciso, ma misura la grandezza del compito, e grazie a questo la stima dell'impegno diventa più affidabile. I motivi:
- Misura il requisito, non la realizzazione. La dimensione funzionale deriva solo dai requisiti, perciò è indipendente dalla tecnologia, dal processo e da chi sviluppa il software.
- Si può misurare di nuovo secondo regole pubbliche. Le regole sono pubbliche e il risultato della misurazione va documentato, così un altro misuratore può verificarlo partendo dalla stessa specifica.
- Dimensione e produttività restano separate. La stima dell'impegno risulta dalla dimensione e da una produttività misurata nella pratica (impegno = dimensione / produttività). Così si vede quale fattore cambia e perché.
- La misurazione migliora i requisiti. Secondo la guida di COSMIC, la misurazione precoce aiuta a individuare i requisiti ambigui, contraddittori o mancanti.
- È confrontabile. Per la stessa specifica due offerte ottengono la stessa dimensione, perciò i prezzi si riferiscono alla stessa portata.
La guida di COSMIC cita diversi studi in cui la dimensione misurata in CFP seguiva l'impegno effettivo più da vicino della stima espressa in story point. La stessa guida avverte anche che l'impegno stimato a partire dalla dimensione è affidabile se il processo di sviluppo è sufficientemente ripetibile e l'impegno è determinato soprattutto dalla dimensione. La dimensione misurata è quindi un punto di partenza migliore, ma per una buona stima bisogna conoscere anche la produttività.
Che cosa non misura COSMIC?
La dimensione COSMIC misura le funzioni, e la descrizione del metodo lo dice apertamente. Che cosa non esprime:
- Algoritmi complessi. Secondo la norma, il metodo non è stato progettato per misurare software caratterizzato da algoritmi matematici complessi o da sistemi di regole particolari (ad esempio sistemi esperti, simulazioni, software che apprende da sé, previsioni meteorologiche).
- Elaborazione di segnali continui. Anche l'elaborazione di audio e immagini e, ad esempio, le parti di questo tipo dei videogiochi sono fuori dall'ambito di applicazione della norma.
- Requisiti realmente non funzionali. Secondo il metodo, i vincoli tecnologici, di prestazione e di progetto vanno registrati, ma non li misuriamo in CFP.
- Lavoro creativo. Secondo la guida di COSMIC, i compiti puramente creativi, ad esempio la creazione artistica, non sono oggetto del metodo; il lavoro di grafica e di progettazione visiva su misura, quindi, non è espresso dalla dimensione.
- Introduzione di un pacchetto pronto. Se i requisiti sono coperti in gran parte dalla configurazione di un prodotto pronto, conviene stimare l'impegno nel modo tipico di quel pacchetto.
Per questo una buona offerta, accanto alla dimensione misurata, indica a parte ciò che la dimensione non esprime: le integrazioni, i requisiti non funzionali, l'interfaccia e la grafica personalizzate, le diverse piattaforme, la migrazione dei dati, i calcoli complessi e il funzionamento in tempo reale. Nelle nostre offerte queste voci compaiono così; ne parliamo nella pagina Prezzi.
Come lo usiamo nel nostro lavoro?
Misuriamo la dimensione funzionale dello sviluppo in punti funzione COSMIC. Per la misurazione abbiamo costruito un nostro flusso di lavoro assistito dall'intelligenza artificiale, e il risultato viene controllato da una persona in un giro di revisione. I passi:
- Specifica voce per voce: suddividiamo lo sviluppo in gruppi di funzioni e descriviamo ciascuno con lo stesso schema: obiettivo, attori, dati, funzioni, funzioni di IA e ciò che non ne fa parte (veda: Come lavoriamo).
- Più conteggi indipendenti: ogni gruppo di funzioni viene contato più volte da più modelli linguistici; la dispersione dei conteggi mostra l'incertezza.
- Giro di riconciliazione: garantisce che ogni processo funzionale conti esattamente una volta, anche se compare in più descrizioni.
- Revisione: esaminiamo la misurazione, chiariamo i punti incerti e, se necessario, correggiamo a mano gli accorpamenti automatici.
- Congelamento: la misurazione finita si può fissare come versione non modificabile, e questa diventa la base del contratto.
Nell'ulteriore sviluppo di un sistema esistente descriviamo a parte la parte esistente, così nella dimensione conta solo la parte nuova. La misurazione segnala anche ciò che la dimensione funzionale non esprime.
Come si passa dalla dimensione all'offerta e alla pianificazione?
Il prezzo dell'offerta deriva dalla dimensione misurata, integrato dalle voci che la dimensione non esprime. Poiché vediamo la dimensione anche per ciascun gruppo di funzioni, su questa basiamo anche la pianificazione: l'ordine delle fasi, il contenuto delle dimostrazioni e le scadenze. Se strada facendo nasce una nuova esigenza, la misuriamo allo stesso modo, e si vede di quanto cambia la portata e che cosa significa per il prezzo e per la pianificazione. Per questo un prezzo e una scadenza concreti li indichiamo solo dopo la misurazione, non in base a una prima conversazione.
Confrontare due offerte in base alla dimensione
Se chiede un'offerta a più sviluppatori, la dimensione aiuta a capire se riguardano lo stesso compito. Conviene procedere così:
- La stessa specifica: ogni offerente riceve la stessa descrizione voce per voce.
- La dimensione e l'elenco dei processi: chieda per quale dimensione e per quali processi funzionali è stato indicato il prezzo.
- Le cause delle differenze: se due offerte differiscono, verifichi se la differenza sta nella dimensione, nelle voci non espresse dalla dimensione o nel prezzo per unità di dimensione.
- Le voci separate: chieda che cosa compare in una riga a parte (integrazione, migrazione dei dati, gestione) e che cosa non è compreso nel prezzo.
- La gestione delle modifiche: chieda come vengono misurate e prezzate le modifiche in corso d'opera.
Se un offerente non misura la dimensione funzionale, la sua offerta resta comunque confrontabile, purché abbia formulato il prezzo sullo stesso elenco dettagliato di processi. Degli altri criteri per la scelta dello sviluppatore parliamo nell'articolo Come scegliere un'azienda di sviluppo software?; se serva davvero uno sviluppo su misura aiuta a deciderlo l'articolo Software su misura o soluzione pronta (SaaS)?.
Domande frequenti
Che cos'è il punto funzione COSMIC?
Il punto funzione COSMIC (CFP) è l'unità di misura della dimensione funzionale del software secondo la norma ISO/IEC 19761. Un CFP è un movimento di dati: l'ingresso, l'uscita, la lettura o la scrittura di un gruppo di dati in un processo funzionale. La dimensione del software è la somma dei movimenti di dati dei suoi processi.
In che cosa differisce dalla stima in ore?
La stima in ore indica il lavoro previsto, e dipende da chi stima e dal team. COSMIC misura la dimensione del compito a partire dai requisiti, con regole pubbliche, perciò partendo dalla stessa specifica anche un'altra persona può arrivare allo stesso risultato. Le ore si possono poi ricavare dalla dimensione e dalla produttività misurata nella pratica.
Che cosa non misura COSMIC?
Secondo la norma, non è stato pensato per misurare algoritmi matematici complessi e l'elaborazione di segnali continui (audio, immagini), e non esprime in CFP nemmeno i requisiti realmente non funzionali, ad esempio i vincoli di prestazione o tecnologici. Una buona offerta li indica come voci separate.
Chi esegue la misurazione, ed è verificabile?
La misurazione la esegue un misuratore che conosce il metodo; da noi il conteggio lo fa un flusso di lavoro assistito dall'IA, e il risultato lo rivede una persona. Le regole sono pubbliche e la misurazione è documentata processo per processo, perciò un altro specialista che conosce il metodo può verificarla partendo dalla stessa specifica.
Come si passa dalla dimensione all'offerta?
Il prezzo deriva dalla dimensione misurata, integrato da ciò che la dimensione non esprime: integrazioni, requisiti non funzionali, grafica personalizzata, più piattaforme, migrazione dei dati. La pianificazione si basa sulla dimensione per gruppo di funzioni, e le modifiche le misuriamo allo stesso modo. I dettagli sono nella pagina Prezzi.
Come possiamo aiutarLa?
Se sta progettando un software su misura, scriviamo insieme la specifica voce per voce, ne misuriamo la dimensione in punti funzione COSMIC e su questa base prepariamo l'offerta e la pianificazione. Su richiesta firmiamo un accordo di riservatezza (NDA) e dopo la consegna ci occupiamo anche della gestione e della manutenzione. Il codice sorgente e i diritti d'uso sono regolati dal contratto. La prima consulenza è gratuita: ci scriva ai recapiti indicati nella pagina Contatti.
Fonti
- COSMIC: Measurement Manual v5.0, Part 1: Principles, Definitions and Rules (PDF)
- COSMIC: Measurement Manual v5.0, Part 2: Guidelines (PDF)
- COSMIC: A Guide to Software Size Measurement (PDF)
- COSMIC: Measurement Manual (download)
- ISO: ISO/IEC 19761:2011, COSMIC: a functional size measurement method
- ISO: ISO/IEC 14143-1:2007, Functional size measurement, Part 1: Definition of concepts
- ISO: ISO/IEC 20926:2009, IFPUG functional size measurement method