A bit of history...
The use of Function Points for measuring software functional size was initially introduced in the mid-1970s and is used today by organizations worldwide. Allan Albrecht (IBM) was the first person to publicly release a method for functionally sizing software. This method was called Function Point Analysis (Albrecht, 1979, 1981). Since its formation in 1986 the International Function Point Users Group (IFPUG) has continuously maintained and enhanced Albrecht's original method.
Evaluating the software Functional Size
Function Point is now a normalized metric that can be used consistently with an acceptable degree of accuracy. The value is centered on the ability to measure the size of any software in terms of functionalities provided to end-users. Function Point counting is qualified as "technology agnostic" in that it does not depend on the technologies or programming languages.
Function Point Counting method evaluates a software deliverable and measures its size based on its functional characteristics. It takes in to consideration the following constituents of an application:
- External Inputs: Input data that is entering a system (logical transaction inputs, system feeds)
- External Outputs and External Inquires: data that is leaving the system (on-line displays, reports, feeds to other systems)
- Internal Logical Files: data that is processed and stored within the system (logical groups of user defined data)
- External Interface Files: data that is maintained outside the system but is necessary to satisfy a particular process requirement (interfaces to other systems)
Along with selected other measures, Function Points can be used by organizations for different purposes:
- Quality and productivity analysis
- Estimating the costs and resources required for software development, enhancement, and maintenance
- Normalizing data used in software comparisons
- Determining the size of a purchased application package (Commercial On-the-shelf or customized systems) by sizing all the functionalities included in the package
- Enabling users to determine the Return on Investment (RoI) of an application by sizing the functionalities that specifically match the requirements from their organization
Function Point Usage Scenarios
There are three frequent scenarios in using Function Points: measuring software size in order to estimate effort and cost, normalizing other measures, and benchmarking to help decision-making.
- Function Points have been defined around components that can be identified in a well-written specification. Consequently Function Points can be counted from the specification before other sizing measures such as lines of code are available. This is the reason why many commercial cost estimation formulas integrate Function Points in their calculations as the preferred sizing measure to deduce effort and cost figures. These formulas can be adjusted to increase the result accuracy as soon as the number of Function Points is available for the delivered software.
- Function Points are frequently used to normalize other measures. For instance, the total number of defects detected in a software system can be normalized by the number of Function Points to deduce the defect density per Function Point. This allows a better comparison between systems that differ by their size as well as the programming language used.
- Because they are counted from constructs and are independent of the programming language, Function Points are a preferred method for comparing software systems when benchmarking the sub-contractor productivity. As a consequence, productivity KPI are often based on Function Points.
How does CAST AIP count Function Points?
CAST AIP uses OMG compliant Automated Function Point counting technology as the basis for its measurements. In addition, CAST AIP uses two methods to count Enhancement Function Points:
- OMG Automated Enhancement Points (AEP) - the default
- OMG Enhancement Function Points (EFP) - legacy, not active by default
You can find out more information about these methods in the following documentation: