# Software Engineering | Calculation of Function Point (FP)

Function Point (FP) is an element of software development which helps to approximate the cost of development early in the process. It may measures functionality from user’s point of view.

Counting Function Point (FP):

• Step-1:
`F = 14 * scale`

Scale varies from 0 to 5 according to character of Complexity Adjustment Factor (CAF). Below table shows scale:

```0 - No Influence
1 - Incidental
2 - Moderate
3 - Average
4 - Significant
5 - Essential ```
• Step-2: Calculate Complexity Adjustment Factor (CAF).
`CAF = 0.65 + ( 0.01 * F )`
• Step-3: Calculate Unadjusted Function Point (UFP).

TABLE (Required)

Function Units Low Avg High
EI 3 4 6
EO 4 5 7
EQ 3 4 6
ILF 7 10 15
EIF 5 7 10

Multiply each individual function point to corresponding values in TABLE.

• Step-4: Calculate Function Point.
`FP = UFP * CAF`

Example:
Given the following values, compute function point when all complexity adjustment factor (CAF) and weighting factors are average.

```User Input = 50
User Output = 40
User Inquiries = 35
User Files = 6
External Interface = 4 ```

Explanation:

• Step-1: As complexity adjustment factor is average (given in question), hence,
```scale = 3.
F = 14 * 3 = 42 ```
• Step-2:
`CAF = 0.65 + ( 0.01 * 42 ) = 1.07 `
• Step-3: As weighting factors are also average (given in question) hence we will multiply each individual function point to corresponding values in TABLE.
`UFP = (50*4) + (40*5) + (35*4) + (6*10) + (4*7) = 628 `
• Step-4:
`Function Point = 628 * 1.07 = 671.96 `

Program to calculate Function Point is as follows :-

 `#include ` `using` `namespace` `std; ` `  `  `// Function to calculate Function Point ` `void` `calfp(``int` `frates[], ``int` `fac_rate) ` `{ ` `  `  `    ``// Function Units ` `    ``string funUnits = { ` `        ``"External Inputs"``, ` `        ``"External Outputs"``, ` `        ``"External Inquiries"``, ` `        ``"Internal Logical Files"``, ` `        ``"External Interface Files"` `    ``}; ` `  `  `    ``// Weight Rates ` `    ``string wtRates = { ``"Low"``, ``"Average"``, ``"High"` `}; ` `  `  `    ``// Weight Factors ` `    ``int` `wtFactors = { ` `        ``{ 3, 4, 6 }, ` `        ``{ 4, 5, 7 }, ` `        ``{ 3, 4, 6 }, ` `        ``{ 7, 10, 15 }, ` `        ``{ 5, 7, 10 }, ` `    ``}; ` `  `  `    ``int` `UFP = 0; ` `  `  `    ``// Calculating UFP (Unadjusted Function Point) ` `    ``for` `(``int` `i = 0; i < 5; i++) { ` `  `  `        ``for` `(``int` `j = 0; j < 3; j++) { ` `  `  `            ``int` `freq = frates[i][j]; ` `  `  `            ``UFP += freq * wtFactors[i][j]; ` `        ``} ` `    ``} ` `  `  `    ``// 14 factors ` `    ``string aspects = { ` `        ``"reliable backup and recovery required ?"``, ` `        ``"data communication required ?"``, ` `        ``"are there distributed processing functions ?"``, ` `        ``"is performance critical ?"``, ` `        ``"will the system run in an existing heavily utilized operational environment ?"``, ` `        ``"on line data entry required ?"``, ` `        ``"does the on line data entry require the input transaction to be built over multiple screens or operations ?"``, ` `        ``"are the master files updated on line ?"``, ` `        ``"is the inputs, outputs, files or inquiries complex ?"``, ` `        ``"is the internal processing complex ?"``, ` `        ``"is the code designed to be reusable ?"``, ` `        ``"are the conversion and installation included in the design ?"``, ` `        ``"is the system designed for multiple installations in different organizations ?"``, ` `        ``"is the application designed to facilitate change and ease of use by the user ?"` `    ``}; ` `  `  `    ``/* ` `    ``Rate Scale of Factors ` `    ``Rate the following aspects on a scale of 0-5 :- ` `    ``0 - No influence  ` `    ``1 - Incidental  ` `    ``2 - Moderate  ` `    ``3 - Average  ` `    ``4 - Significant  ` `    ``5 - Essential  ` `    ``*/` `  `  `    ``int` `sumF = 0; ` `  `  `    ``// Taking Input of factors rate ` `    ``for` `(``int` `i = 0; i < 14; i++) { ` `  `  `        ``int` `rate = fac_rate; ` `  `  `        ``sumF += rate; ` `    ``} ` `  `  `    ``// Calculate CFP ` `    ``double` `CAF = 0.65 + 0.01 * sumF; ` `  `  `    ``// Calculate Function Point (FP) ` `    ``double` `FP = UFP * CAF; ` `  `  `    ``// Output Values ` `    ``cout << ``"Function Point Analysis :-"` `<< endl; ` `  `  `    ``cout << ``"Unadjusted Function Points (UFP) : "` `<< UFP << endl; ` `  `  `    ``cout << ``"Complexity Adjustment Factor (CAF) : "` `<< CAF << endl; ` `  `  `    ``cout << ``"Function Points (FP) : "` `<< FP << endl; ` `} ` `  `  `// driver function ` `int` `main() ` `{ ` `    ``int` `frates = { ` `        ``{ 0, 50, 0 }, ` `        ``{ 0, 40, 0 }, ` `        ``{ 0, 35, 0 }, ` `        ``{ 0, 6, 0 }, ` `        ``{ 0, 4, 0 } ` `    ``}; ` `  `  `    ``int` `fac_rate = 3; ` `  `  `    ``calfp(frates, fac_rate); ` `  `  `    ``return` `0; ` `} `

Output:

```Function Point Analysis :-
Unadjusted Function Points (UFP) : 628
Complexity Adjustment Factor (CAF) : 1.07
Function Points (FP) : 671.96
```

Attention reader! Don’t stop learning now. Get hold of all the important CS Theory concepts for SDE interviews with the CS Theory Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : chitrasingla2001

Article Tags :

4

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.