# Function Points

## Basic idea

Measure software size by the *functionality* delivered to the user, not by code volume. Counts inputs, outputs, inquiries, internal files, and external interfaces; multiplies by complexity weights; adjusts by 14 general system characteristics.

## Key formulas

* Adjusted FP: $FP = UFP \times VAF$
* VAF: $VAF = 0.65 + 0.01 \sum\_{i=1}^{14} F\_i$, with each $F\_i \in \[0,5]$
* $UFP = \sum\_{\text{type, complexity}} (\text{count} \times \text{weight})$

Is used to express the amount of functionality in a software system, as seen by the user. A higher number of function points indicates more functionality. Typically used to:

* Estimate the cost and effort required to design, code and test a software system.
* Predict the number of errors
* Predict the number of components
* Measure productivity

  Function Points are computed from the Software Requirements Specification (SRS)

## Advantages of function points

* Measure the size of the solution instead of the size of the problem
* Requirements are the only thing needed for function points count
* Can be estimated early in analysis and design
* Is independant of technology
* Is independant of programming languages

## Disadvantages of function points

* A well defined requirements specification is necessary
* Gaining proficency is not easy, the learning curve is quite long
* Could be quite time-consuming this could be costly


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://isubasinghe.gitbook.io/isithas-wiki/software_engineering/management/cost_estimation/function_points.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
