Function Point Languages Table
Version 4.0 November 2009
Environmental factors can result in significant variation in the number of source statements per function point. For this reason, QSM recommends that organizations collect both code counts and final function point counts for completed software projects and use this data for estimates. Where there is no completed project data available for estimation, we provide the following gearing factor information (where sufficient project data exists):
* the average
* the median
* the range (low - high)
We hope this information will allow estimators to assess the amount of variation, the central tendency, and any skew to the distribution of gearing factors for each language.
Additional information on gearing factors and recommendations on using this table.
Request gearing factors for languages not found in the table.
* Indicates languages which were present before, but have updated gearing factors.
| Language | QSM SLOC/FP Data | David Consulting Data | |||
| Avg | Median | Low | High | ||
| ABAP (SAP) | 18 | 18 | 16 | 20 | - |
| Access * | 36 | 38 | 15 | 47 | - |
| Ada | 154 | - | 104 | 205 | - |
| Advantage | 38 | 38 | 38 | 38 | - |
| APS | 86 | 83 | 20 | 184 | - |
| ASP * | 56 | 50 | 32 | 106 | - |
| Assembler * | 209 | 203 | 91 | 320 | 575 Basic/ 400 Macro |
| C * | 148 | 107 | 22 | 704 | 225 |
| C++ * | 59 | 53 | 20 | 178 | 80 |
| C# * | 58 | 59 | 51 | 66 | - |
| Clipper * | 40 | 39 | 26 | 53 | 60 |
| COBOL * | 80 | 78 | 8 | 400 | 175 |
| ColdFusion | 68 | 56 | 52 | 105 | - |
| Cool:Gen/IEF * | 37 | 35 | 10 | 180 | - |
| Culprit | 51 | - | - | - | - |
| Datastage | 67 | 79 | 16 | 85 | - |
| DBase III | - | - | - | - | 60 |
| DBase IV | 52 | - | - | - | 55 |
| Easytrieve+ | 33 | 34 | 25 | 41 | - |
| Excel | 47 | 46 | 31 | 63 | - |
| Focus * | 45 | 45 | 40 | 49 | 60 |
| FORTRAN | 90 | 118 | 35 | - | 210 |
| FoxPro * | 36 | 35 | 34 | 38 | - |
| HTML | 43 | 42 | 35 | 53 | - |
| Ideal | 66 | 52 | 34 | 203 | - |
| Informix * | 42 | 31 | 24 | 57 | - |
| J2EE * | 57 | 50 | 50 | 67 | - |
| Java * | 55 | 53 | 9 | 214 | 80 |
| JavaScript * | 54 | 55 | 45 | 63 | 50 |
| JCL * | 96 | 59 | 58 | 173 | 400 |
| JSP | 59 | - | - | - | - |
| KML | 50 | 50 | 49 | 50 | - |
| Lotus Notes * | 23 | 21 | 15 | 46 | - |
| Maestro | 30 | 30 | 30 | 30 | - |
| Mantis | 71 | 27 | 22 | 250 | - |
| Mapper * | 69 | 70 | 58 | 81 | - |
| Natural * | 51 | 53 | 34 | 60 | 100 |
| .NET | 60 | 60 | 60 | 60 | - |
| Netron/CAP | 296 | 323 | 105 | 399 | - |
| Openroad | 39 | 34 | 20 | 69 | - |
| Oracle * | 42 | 29 | 12 | 217 | 60 |
| Oracle Dev 2K * | 35 | 30 | 23 | 100 | - |
| Pacbase * | 42 | 43 | 26 | 52 | - |
| PeopleSoft * | 37 | 32 | 34 | 40 | - |
| Perl | 57 | 57 | 45 | 60 | 50 |
| PL/1 * | 58 | 57 | 27 | 92 | 126 |
| PL/SQL * | 47 | 39 | 16 | 78 | - |
| Powerbuilder** | 28 | 22 | 8 | 105 | - |
| Powerhouse | 63 | 25 | 79 | - | |
| REXX | 50 | - | - | - | - |
| RPG II/III | 61 | 49 | 24 | 155 | 120 |
| Sabretalk * | 70 | 61 | 54 | 94 | - |
| SAS * | 50 | 35 | 32 | 102 | 50 |
| Siebel Tools | 13 | 13 | 5 | 20 | - |
| Slogan * | 81 | 80 | 66 | 100 | - |
| Smalltalk ** | 28 | 19 | 17 | 55 | - |
| SQL * | 31 | 30 | 13 | 80 | - |
| SQL Forms | 11 | 11 | 10 | 15 | - |
| Taskmate | 45 | 47 | 37 | 51 | - |
| Uniface | 61 | 50 | 31 | 120 | - |
| VB.Net | 28 | - | - | - | - |
| VBScript * | 38 | 37 | 29 | 50 | 50 |
| Visual Basic * | 50 | 52 | 14 | 276 | - |
| VPF | 95 | 95 | 92 | 98 | - |
| Web Scripts | 44 | 15 | 9 | 114 | - |
More Information on Using Gearing Factors
What is a gearing factor? The gearing factor is simply the average number of Source Lines of Code (SLOC) per function point in the completed project. It is calculated by dividing the final code count for a completed project by the final function point count. SLOC counts are logical, not physical line counts.
What if the language I am using is not in the table? If you do not see the language you need in the table, you may substitute a gearing factor from a comparable language. The uncertainty range for the estimated gearing factor may be increased to allow for any additional risk introduced by using a substitute. You may also contact QSM to see if revised information is available.
Should I use the average or the median? In a perfectly symmetrical distribution of gearing factors, the average and the median will be identical or very close. The average is obtained by summing the gearing factors and then dividing by the number of gearing factors included in that sum. Although its purpose is to measure "central tendency", the average can be pulled up or down by extreme data values (or outliers). The median, on the other hand, is simply the data point that lies in the center of an ordered list of gearing factors. One half of the data points will lie above (and one half below) the median. When the data set is skewed (biased either toward the high or low end by extreme data values), the median may be a more accurate indicator of the central tendency.
How should I use the range? The range simply shows lowest and highest gearing factors for each language. The range can be used, with the average and median, to choose a "most likely" gearing factor for estimation. The range can be useful as a starting point for choosing an uncertainty range around your "most likely" estimate of the gearing factor.
Where does the data come from? The gearing factors in this table were drawn from 2786 completed function point projects in the QSM database. As mixed-language projects are not a reliable source of gearing factors, only single-language projects are used. As an additional resource, the David Consulting Group has graciously allowed QSM to include their data.
© Copyright 2009 by Quantitative Software Management, Inc. All Rights Reserved.