
Steven Thomas
London, UK
Contact me
I wanted a summary of the function point counting process as the various manuals and books tended to be overly fulsome.
The effort involved in a count typically takes 0.2% - 0.4% of the total project effort for a new large development project (UKSMA, 1998).
Type of count: Development/Application or Change?
What is the desired accuracy of the count? Earlier means less accurate.
What is the boundary of the count, i.e. what logical transactions to include?
Note: Step 2-4 are likely to be concurrent and iterative.
Analyse the requirements to find the Logical Transactions, although we're only interested in these so we can find their associated Entities (Step 3) and Data Element Types (Step 4) and from this determine a Functional Size (Step 5).
Logical Transaction …
The basic functional component of MK II FPA. The smallest complete unit of information processing that is meaningful to the end user in the business. It is triggered by an event in the real world of interest to the user, or by a request for information. It comprises an input, process and output component. It must be self-contained and leave the application being counted in a consistent state. (UKSMA, 1998, p. 72).
Most Entities in the system are going to have at least 5 transactions: Create, Read, Update, Delete, and List (CRUDL). For example, a requirement to "Maintain Customer" will correspond to these five transactions, and may well have more if there are variations in processing.
Counting rules:
The processing element of the Function Point Count corresponds to the storage and retrieval of information about Entities of interest to the external world. It is useful to draw an Entity Relationship Diagram (ERD) to find the primary Entities in the system; because we're only interested in the primary Entities, this doesn't have to be full Third Normal Form.
Entity (or Data Entity Type) …
A fundamental thing of relevance to the user, about which information is kept. An association between entities that has attributes is itself an entity (UKSMA, 1998, p. 71).
A non-primary Entity is created to satisfy Third Normal Form, e.g. master tables only used for validation of data entry. They are fairly static and only have a few attributes, e.g. code, description. All references to non-primary entities are considered references to a single entity called the System Entity; there is only ever one System Entity.
Counting rules:
Data Element Type (DET) …
A unique user recognisable, non-recursive item of information. The number of DET's is used to determine the input and output size of each Logical Transaction. (UKSMA, 1998, p. 71)
An Input DET (In-DET) comes from outside the system boundary and changes the state of the system. They are concerned with acquisition and validation of data.
An Output DET (Out-DET) goes back across the system boundary so a user can see/use it. They are concerned with formatting and presentation of data.
Counting Rules:
Calculate the functional size or Function Point Index (FPI) of each Logical Transactions whose input and output components cross the system boundary.
FPI =
0.58 * Count(In-DET)
+ 1.66 * Count(Entities-Referenced)
+ 0.26 * Count(Out-DET)
The functional size of the system, i.e. the total FPI, is the sum of the sizes of each of the Logical Transactions.
Total FPI = Sum (FPI of all Logical Transactions)
Example:
Code | Transaction Description | CRUDL | Entities Referenced | Response | In-DET | Entities | Out-DET | FPI | |
|---|---|---|---|---|---|---|---|---|---|
R01.0 | Maintain Customer |
|
|
|
|
|
|
| 51.3 |
R01.1 | Add Customer | C | Customer | OK/Error | 20 | 1 | 1 | 13.5 |
|
R01.1.1 | Find All Sales People (for drop down) | L | Sales Rep | List | 1 | 1 | 1 | 2.5 |
|
R01.2 | Update Customer | U | Customer | OK/Error | 20 | 1 | 1 | 13.5 |
|
R01.3 | Delete Customer | D | Customer | OK/Error | 1 | 1 | 1 | 2.5 |
|
R01.4 | Read Customer | R | Customer | Details | 4 | 2 | 25 | 12.1 |
|
R01.5 | List Customers | L | Customer | List | 1 | 1 | 19 | 7.2 |
|
|
|
|
|
|
|
|
|
|
|
R02.0 | Maintain Account |
|
|
|
|
|
|
| 12.5 |
R01.1 | Add Account | C | Customer, Account | OK/Error | 15 | 2 | 2 | 12.5 |
|
Etc |
|
|
|
|
|
|
|
|
|
Total |
|
|
|
|
|
|
| 63.8 | 63.8 |
Count Entities and DETs if they are touched by the change, i.e. added, modified, or deleted. If a component is not changed, then don't count it.
FPI of Change = Added + Modified + Deleted functionality
FPI after Change = FPI before Change + Added - Deleted functionality
Note: this has the interesting effect that the cost of deleting functionality is the same as it originally cost to build it.
If you don't have time to itemise each Logical Transaction for a Use Case, you could try approximating it with the following:
Type of Use Case | Transaction Category | Simple | Average | Complex 25 fields |
|---|---|---|---|---|
Create | C | 5.1 | 14.2 | 23.3 |
View | R | 3.5 | 10.6 | 17.7 |
Update | U | 5.1 | 14.2 | 23.3 |
Delete | D | 7.5 | 7.5 | 7.5 |
Search, List, Report, Email | L | 3.5 | 10.6 | 17.7 |
Maintain | CRUDL | 24.7 | 57.1 | 89.5 |
If you've done the count very early in the development process, i.e. before the requirements are detailed, you'll have to add a bigger contingency to the total FPI to take into account unknown requirements.
Following the suggestion of UKSMA (1998), I have ignored Technical Complexity Adjustments as they don't add value.
I used Albrecht/IFPUG FPA in the past, but I now have a preference for Mk II FPA because:
UKSMA. (1998 Sept). MK II Function Point Analysis: Counting Practices Manual, Version 1.3.1. United Kingdom Software Metrics Association (UKSMA). [Available On-Line at http://www.gifpa.co.uk/library/Resources/MkIIr131.pdf.]
This is the definitive description of Mk II Function Point Analysis, including all changes up to October 1998.
Function Point FAQ - Frequently asked questions about FPA.
If you want to learn more on Function Point Analysis (FPA) then check out:
UKSMA. (1998 Sept). MK II Function Point Analysis: Counting Practices Manual, Version 1.3.1. United Kingdom Software Metrics Association (UKSMA).