Functional Point Analysis (FPA) for Accurate Software Project Estimation
Learn about Functional Point Analysis (FPA), a method for estimating software project size based on functionality rather than lines of code. This tutorial explains FPA's principles, calculation methods (Unadjusted Function Points, Complexity Adjustment Factor), and its advantages in providing consistent size estimations across different technologies.
Functional Point Analysis (FPA) for Software Estimation
Introduction to Functional Point Analysis
Functional Point Analysis (FPA), initially developed by Allan J. Albrecht at IBM in 1979 and refined by the IFPUG (International Function Point Users Group), is a method for estimating the size of a software project based on its functionality. Unlike methods that count lines of code, FPA focuses on the features the software provides to the user.
Objectives of FPA
The primary goal of FPA is to provide a consistent measure of software size, regardless of the programming language or development tools used. This allows for better project planning, estimation, and tracking across various projects and technologies.
Counting Function Points
FPA counts and categorizes functions within an application into five types:
Type | Description | Examples |
---|---|---|
External Inputs (EI) | Data entered into the system. | Input screens, tables |
External Outputs (EO) | Data sent out from the system. | Output screens, reports |
External Inquiries (EQ) | Online queries to the system. | Prompts, interrupts |
Internal Logical Files (ILF) | Data stored within the system. | Databases, directories |
External Interface Files (EIF) | Data exchanged with external systems. | Shared databases, shared routines |
Each function is assigned a weight based on its complexity (low, average, high). These weights are then used to calculate the Unadjusted Function Point (UFP).
Parameter | Low | Average | High |
---|---|---|---|
EI | 7 | 10 | 15 |
EO | 5 | 7 | 10 |
EQ | 3 | 4 | 6 |
ILF | 4 | 5 | 7 |
EIF | 3 | 4 | 6 |
Calculating Function Points
The UFP is calculated by summing the weighted counts of each function type. This UFP is then adjusted using a Complexity Adjustment Factor (CAF) based on 14 General System Characteristics (GSCs) to get the final Function Point (FP) count:
FP = UFP * VAF
Where:
UFP
is the unadjusted function point count.VAF
(Value Adjustment Factor) is calculated from the sum of the General System Characteristics ratings (0-5 each) using the formula:VAF = 0.65 + (TDI * 0.01)
, where TDI is the Total Degree of Influence (sum of the 14 GSC ratings).
Derived Metrics and FP vs. LOC
Once the FP is determined, other metrics can be derived, such as errors per FP, cost per FP, and productivity (FP per person-month). FPA is also used to estimate lines of code (LOC) and vice versa (a process called "backfiring"). However, FP and LOC are different:
Aspect | FP | LOC |
---|---|---|
Basis | Specification-based | Implementation-based |
Language Dependency | Language-independent | Language-dependent |
Orientation | User-oriented | Design-oriented |