By far, the project sizing technique that delivers the greatest accuracy and flexibility is function point analysis. Based upon logical, user-defined requirements, function points permit the early sizing of the software problem domain. In addition, the function point methodology presents the opportunity to size a user requirement regardless of the level of detail available. An accurate function point size can be determined from the detailed information included in a thorough user requirements document, or an adequate function point size can be derived from the limited information provided in an early proposal.
The function point method is dependent upon the identification of five elements: inputs, outputs, inquiries, internal stores of data, and external references to data. During the early stages of development, these elements are exposed at a functional level (for example, we know that we will generate an output report, although we may not know the detailed characteristics of that report). The first "level" of function point counting is to identify these five elements. As more information becomes available regarding the characteristics of these elements, such as data fields, file types, and so on, the function point count will become more detailed. During the early phases of a count, it may be necessary to assume levels of complexity within the system (for example, whether our report will be simple or complex). The value of using function points is that it allows for this distinctionin fact, requires itearly in the process.
Alternative sizing methods, such as counting lines of code or COCOMO, are dependent upon information that is not available until later in the development life cycle. Other functional measurement methods, such as DeMarco's Bang and 3D, require detailed knowledge about system processing that is not available early enough for accurate counting, such as states and transitions.
Function points accurately size the stated requirement. If the problem domain is not clearly or fully defined, the project will not be properly sized. When there are missing, brief, or vague requirements, a simple process using basic diagramming techniques with the requesting user can be executed to more fully define the requirements. Function points can be utilized in conjunction with the developed diagram to identify stated inputs, outputs, inquiries, internal stores of data, and external stores of data (see Figure 2). For an average-size project, hours (not days) are required to complete the diagramming and sizing task.
Function points can be utilized in conjunction with the developed diagram to identify stated inputs, outputs, inquiries, internal stores of data, and external stores of data.