# Function point

Il function point è un'unità di misura utilizzata nell'ambito dell'ingegneria del software per esprimere la dimensione delle funzionalità fornite da un prodotto software.

## Storia

Questa unità di misura è stata definita per la prima volta nel 1975 da Allan Albrecht (presso l'IBM), al fine di dimensionare i requisiti funzionali utente (FUR - Functional User Requirements) di un prodotto software già in fase di progettazione per ottenere una stima maggiormente oggettiva dell'impegno richiesto, in luogo delle LOC (Lines of Code), conteggiabili solo a valle della realizzazione e fortemente influenzate dallo stile di programmazione e dal linguaggio utilizzato (cfr. 'Productivity Paradox').
Successivamente lo sviluppo di questo particolare approccio di misura è stato preso in carico da un'associazione di utilizzatori denominata IFPUG (International Function Point Users Group).
Col passare degli anni sono state sviluppate una serie di varianti del metodo originario tra cui altre quattro divenute - insieme al metodo IFPUG - standard de jure: MARK-II, NESMA, COSMIC, e FISMA.

## Standardizzazione

L'organizzazione ISO ha emanato una famiglia di norme che regolano i metodi di misurazione della dimensione funzionale del software (Functional Size Measurement - FSM), specificatamente, gli standard
* ISO/IEC 14143-1:2007, Information technology -- Software measurement -- Functional size measurement -- Part 1: Definition of concepts
* ISO/IEC 14143-1:2007/Cor 1:2011, Information technology -- Software measurement -- Functional size measurement -- Part 1: Definition of concepts
* ISO/IEC 14143-2:2011, Information technology -- Software measurement -- Functional size measurement -- Part 2: Conformity evaluation of software size measurement methods to ISO/IEC 14143-1
* ISO/IEC TR 14143-3:2003, Information technology -- Software measurement -- Functional size measurement -- Part 3: Verification of functional size measurement methods
* ISO/IEC TR 14143-4:2002, Information technology -- Software measurement -- Functional size measurement -- Part 4: Reference model
* ISO/IEC TR 14143-5:2004, Information technology -- Software measurement -- Functional size measurement -- Part 5: Determination of functional domains for use with functional size measurement
* ISO/IEC 14143-6:2012, Information technology -- Software measurement -- Functional size measurement -- Part 6: Guide for use of ISO/IEC 14143 series and related International Standards.

## Requisiti funzionali e non funzionali

Secondo gli standard i requisiti utente vengono distinti in:
* requisiti funzionali (FUR - Functional User Requirements)
* requisiti non funzionali (NFR - Non Functional Requirements) [es: requisiti di qualità, sicurezza, organizzativi, tecnici, documentazione tecnica, usabilità, performance, etc.)]
I Function Point misurano esclusivamente i FUR di un prodotto software, mentre per i NFR esistono diversi approcci e tecniche.
Recentemente l'IFPUG ha prodotto una tecnica parallela alla FPA (Function Point Analysis) denominata SNAP (Software Non-functional Assessment Process), sempre tesa a misurare il prodotto software, e non il progetto che lo genera. Tali requisiti di natura organizzativa sono 'out-of-scope' dall'applicazione di ambedue le tecniche.

## Obiettivi d'analisi

Obiettivi dell'analisi dei function point sono:
* misurare le funzionalità che l'utente riceve e richiede;
* misurare i risultati dello sviluppo e/o la manutenzione del software indipendentemente dalla tecnologia utilizzata;
* fornire una misura che sia coerente tra progetti e produttori differenti.

## Altre caratteristiche

Gli attuali metodi di misurazione della dimensione funzionale riconosciuti come standard internazionali sono legati alla rilevazione e pesatura dei "movimenti di dati" e degli "archivi logici" ed escludono, per il momento, ogni valutazione della complessità e numero di algoritmi ovvero di elementi di "manipolazione" dei dati.
I Function Point possono essere messi in relazione con variabili come il costo di un progetto di sviluppo o di manutenzione evolutiva, o l'impegno in ore di lavoro previste, o lo staff necessario, o la durata solare; occorre, però, ricordare che la dimensione funzionale rappresenta solo un aspetto del prodotto software che entra in gioco nei modelli di costo, altre variabili che impattano su queste relazioni sono i requisiti di qualità, i requisiti tecnici e in generale i requisiti non funzionali.