Programming Languages TableRelease 8.2, March 1996 By Capers Jones, Chairman, Software Productivity Research, Inc. © Copyright 1997 by Software Productivity Research, Inc. All Rights Reserved. What Is A Language Level?As language levels go up, fewer statements to code one Function Point are required. For example, COBOL is a level 3 and requires about 105 statements per Function Point. The numeric levels of various languages provide a convenient shortcut for converting size from one language to another. For example, if an application requires 1000 non-commentary COBOL statements (level 3), then it would take only 500 statements in a level 6 language (such as NATURAL) and only 250 statements in a level 12 language (such as OBJECTIVE C). As you can see, the average number of statements required is proportional to the levels of the various languages. Do Language Levels Affect Productivity?The correlation between the level of a language and development productivity is not linear. For most large software projects, coding amounts to only about 30 percent of the effort. Assume a program is written in a language that is twice the level of a similar program, for instance level 6 versus level 3. In this example, the coding effort might be reduced by 50 percent. But the total project might be improved by only 15 percent, since coding only comprised 30 percent of the original effort. Double the level of the language again to a level 12. That will only give an additional 7.5 percent net savings. Once again, coding is halved. But coding is not a major factor for very high level languages. More accurate economic productivity rates can be gained by examining the average monthly Function Point production rates associated with various language levels. Table 1 looks at how language levels affect productivity. Table 1. Language Level Relationship to Productivity LANGUAGE LEVEL PRODUCTIVITY AVERAGE PER STAFF MONTH -------------- ------------------------- 1 - 3 5 to 10 Function Points What Is The Basis For Language Levels?The languages and levels in Table 2 were gathered in four ways.
Counting Function Points And Source CodeActual counts of Function Points and source code statements were performed. Samples of counting Function Points and source code statements were done on Ada, several BASIC dialects, COBOL, PASCAL, and PL/I. Counting Source CodeSource code statements were counted, then compared to the size of the same program in languages of known levels. Assembly, APL, C, OBJECTIVE C, FORTH, FORTRAN, LISP, PILOT, and PROLOG are languages that produce the same source code count as COBOL. So code sizes were compared to the known quantity of COBOL source code. Inspecting Source CodeSource code inspection for common applications was done. Then the volume of code for the application in a measured language was hypothesized. ACTOR, CLARION, and TRUE BASIC are examples of languages that were inspected and their levels hypothesized by subjective means. Researching LanguagesResearch was done by reading descriptions and genealogies of languages and making an educated guess as to their levels. KL, CLOS, TWAICE, and FASBOL are examples of languages that were assigned tentative levels merely from descriptions of the language, rather than from actual counts. For spreadsheets the ordinary concepts of a language do not apply. In this case, formulas, labels, and constants were considered to be statements. List Of Programming LanguagesAs of 1996, there were more than 500 languages and major dialects of languages available to software practitioners. Table 2 lists the most common of them in what is considered version 7 of the SPR Programming Languages Table. Table 2. Programming Languages and Levels |
LANGUAGE | LEVEL | AVERAGE SOURCE STATEMENTS PER FUNCTION POINT |
1032/AF | 20.00 | 16 |
1st Generation default | 1.00 | 320 |
2nd Generation default | 3.00 | 107 |
3rd Generation default | 4.00 | 80 |
4th Generation default | 16.00 | 20 |
5th Generation default | 70.00 | 5 |
AAS Macro | 3.50 | 91 |
ABAP/4 | 20.00 | 16 |
ACCEL | 17.00 | 19 |
Access | 8.50 | 38 |
ACTOR | 15.00 | 21 |
Acumen | 11.50 | 28 |
Ada 83 | 4.50 | 71 |
Ada 95 | 6.50 | 49 |
ADR/DL | 8.00 | 40 |
ADR/IDEAL/PDL | 16.00 | 20 |
ADS/Batch | 16.00 | 20 |
ADS/Online | 16.00 | 20 |
AI shell default | 6.50 | 49 |
AI SHELLS | 6.50 | 49 |
ALGOL 68 | 3.00 | 107 |
ALGOL W | 3.00 | 107 |
AMBUSH | 10.00 | 32 |
AML | 6.50 | 49 |
AMPPL II | 5.00 | 64 |
ANSI BASIC | 5.00 | 64 |
ANSI COBOL 74 | 3.00 | 107 |
ANSI COBOL 85 | 3.50 | 91 |
ANSI SQL | 25.00 | 13 |
ANSWER/DB | 25.00 | 13 |
APL 360/370 | 10.00 | 32 |
APL default | 10.00 | 32 |
APL*PLUS | 10.00 | 32 |
APPLESOFT BASIC | 2.50 | 128 |
Application Builder | 16.00 | 20 |
Application Manager | 9.00 | 36 |
APS | 19.00 | 17 |
APT | 4.50 | 71 |
APTools | 16.00 | 20 |
ARC | 6.50 | 49 |
Ariel | 3.00 | 107 |
ARITY | 6.50 | 49 |
Arity PROLOG | 5.00 | 64 |
ART | 6.50 | 49 |
ART-IM | 7.00 | 46 |
ART Enterprise | 7.00 | 46 |
Artemis | 8.00 | 40 |
AS/SET | 17.00 | 19 |
ASI/INQUIRY | 25.00 | 13 |
ASK Windows | 7.00 | 46 |
Assembly (Basic) | 1.00 | 320 |
Assembly (Macro) | 1.50 | 213 |
Associative default | 5.00 | 64 |
Autocoder | 1.00 | 320 |
awk | 15.00 | 21 |
Aztec C | 2.50 | 128 |
BALM | 3.00 | 107 |
BASE SAS | 6.00 | 53 |
BASIC | 3.00 | 107 |
BASIC A | 2.50 | 128 |
Basic assembly | 1.00 | 320 |
Berkeley PASCAL | 3.50 | 91 |
BETTER BASIC | 3.50 | 91 |
BLISS | 3.00 | 107 |
BMSGEN | 9.00 | 36 |
BOEINGCALC | 50.00 | 6 |
BTEQ | 25.00 | 13 |
C | 2.50 | 128 |
C Set 2 | 3.50 | 91 |
C++ | 6.00 | 53 |
C86Plus | 2.50 | 128 |
CA-dBFast | 8.00 | 40 |
CA-EARL | 11.50 | 28 |
CAST | 6.50 | 49 |
CBASIC | 3.50 | 91 |
CDADL | 16.00 | 20 |
CELLSIM | 7.00 | 46 |
Centerline C++ | 6.00 | 53 |
CHILI | 3.00 | 107 |
CHILL | 3.00 | 107 |
CICS | 7.00 | 46 |
CLARION | 5.50 | 58 |
CLASCAL | 4.00 | 80 |
CLI | 10.00 | 32 |
CLIPPER | 17.00 | 19 |
CLIPPER DB | 8.00 | 40 |
CLOS | 15.00 | 21 |
CLOUT | 8.00 | 40 |
CMS2 | 3.00 | 107 |
CMSGEN | 17.00 | 19 |
COBOL | 3.00 | 107 |
COBOL II | 3.00 | 107 |
Cobol/400 | 3.50 | 91 |
COBRA | 16.00 | 20 |
CodeCenter | 9.00 | 36 |
Cofac | 9.00 | 36 |
COGEN | 9.00 | 36 |
COGNOS | 9.00 | 36 |
COGO | 4.50 | 71 |
COMAL | 4.00 | 80 |
COMIT II | 5.00 | 64 |
Common LISP | 5.00 | 64 |
Concurrent PASCAL | 4.00 | 80 |
CONNIVER | 5.00 | 64 |
CORAL 66 | 3.00 | 107 |
CORVET | 17.00 | 19 |
CorVision | 22.00 | 15 |
CPL | 2.00 | 160 |
Crystal Reports | 16.00 | 20 |
CSL | 6.50 | 49 |
CSP | 6.00 | 53 |
CSSL | 7.00 | 46 |
CULPRIT | 25.00 | 13 |
CxPERT | 6.50 | 49 |
CYGNET | 17.00 | 19 |
Data base default | 8.00 | 40 |
Dataflex | 8.00 | 40 |
Datatrieve | 16.00 | 20 |
dBase III | 8.00 | 40 |
dBase IV | 9.00 | 36 |
DCL | 1.50 | 213 |
DEC-RALLY | 8.00 | 40 |
Decision support default | 9.00 | 36 |
DELPHI | 11.00 | 29 |
DL/1 | 8.00 | 40 |
DNA-4 | 17.00 | 19 |
DOS Batch Files | 2.50 | 128 |
DSP Assembly | 2.00 | 160 |
DTABL | 7.00 | 46 |
DTIPT | 7.00 | 46 |
DYANA | 4.50 | 71 |
DYNAMO-III | 7.00 | 46 |
EASEL | 11.00 | 29 |
EASY | 6.50 | 49 |
EASYTRIEVE + | 25.00 | 13 |
Eclipse | 6.50 | 49 |
ED-Scheme 3.4 | 6.00 | 53 |
EDA/SQL | 27.00 | 12 |
EIFFEL | 15.00 | 21 |
ENFORM | 7.00 | 46 |
English-based default | 6.00 | 53 |
Ensemble | 11.00 | 29 |
EPOS | 16.00 | 20 |
Erlang | 8.00 | 40 |
ESF | 8.00 | 40 |
ESPADVISOR | 6.50 | 49 |
ESPL/I | 4.50 | 71 |
EUCLID | 3.00 | 107 |
EXCEL 1-2 | 51.00 | 6 |
EXCEL 3-4 | 55.00 | 6 |
EXCEL 5 | 57.00 | 6 |
EXPRESS | 9.00 | 36 |
EXSYS | 6.50 | 49 |
Extended Common LISP | 5.75 | 56 |
EZNOMAD | 9.00 | 36 |
Facets | 16.00 | 20 |
FactoryLink IV | 11.00 | 29 |
FAME | 9.00 | 36 |
FileMaker Pro | 9.00 | 36 |
FLAVORS | 11.00 | 29 |
FLEX | 7.00 | 46 |
FlexGen | 11.00 | 29 |
FOCUS | 8.00 | 40 |
FOIL | 6.00 | 53 |
Forte | 18.00 | 18 |
FORTH | 5.00 | 64 |
FORTRAN 66 | 2.50 | 128 |
FORTRAN 77 | 3.00 | 107 |
FORTRAN 90 | 4.00 | 80 |
FORTRAN 95 | 4.50 | 71 |
FORTRAN | 3.00 | 107 |
FORTRAN II | 2.50 | 128 |
Foundation | 11.00 | 29 |
FOXPRO 1 | 8.00 | 40 |
FOXPRO 2.5 | 9.50 | 34 |
FRAMEWORK | 50.00 | 6 |
G2 | 6.50 | 49 |
GAMMA | 20.00 | 16 |
Genascript | 12.00 | 27 |
GENER/OL | 25.00 | 13 |
GENEXUS | 21.00 | 15 |
GENIFER | 17.00 | 19 |
GeODE 2.0 | 20.00 | 16 |
GFA Basic | 9.50 | 34 |
GML | 7.00 | 46 |
Golden Common LISP | 5.00 | 64 |
GPSS | 7.00 | 46 |
GUEST | 11.50 | 28 |
Guru | 6.50 | 49 |
GW BASIC | 3.25 | 98 |
Haskell | 8.50 | 38 |
High C | 2.50 | 128 |
HLEVEL | 5.50 | 58 |
HP BASIC | 2.50 | 128 |
HTML 2.0 | 20.00 | 16 |
HTML 3.0 | 22.00 | 15 |
Huron | 20.00 | 16 |
IBM ADF I | 16.00 | 20 |
IBM ADF II | 18.00 | 18 |
IBM Advanced BASIC | 3.25 | 98 |
IBM CICS/VS | 8.00 | 40 |
IBM Compiled BASIC | 3.50 | 91 |
IBM VS COBOL | 3.00 | 107 |
IBM VS COBOL II | 3.50 | 91 |
ICES | 4.50 | 71 |
ICON | 4.00 | 80 |
IDMS | 8.00 | 40 |
IEF | 23.00 | 14 |
IEW | 23.00 | 14 |
IFPS/PLUS | 10.00 | 32 |
IMPRS | 8.00 | 40 |
INFORMIX | 8.00 | 40 |
INGRES | 8.00 | 40 |
INQUIRE | 25.00 | 13 |
INSIGHT2 | 6.50 | 49 |
INSTALL/1 | 20.00 | 16 |
INTELLECT | 6.00 | 53 |
INTERLISP | 5.50 | 58 |
Interpreted BASIC | 3.00 | 107 |
Interpreted C | 2.50 | 128 |
IQLISP | 5.50 | 58 |
IQRP | 25.00 | 13 |
JANUS | 4.50 | 71 |
JAVA | 6.00 | 53 |
JCL | 1.45 | 221 |
JOSS | 3.00 | 107 |
JOVIAL | 3.00 | 107 |
KAPPA | 8.00 | 40 |
KBMS | 6.50 | 49 |
KCL | 5.00 | 64 |
KEE | 6.50 | 49 |
Keyplus | 8.00 | 40 |
KL | 5.00 | 64 |
KLO | 5.00 | 64 |
KNOWOL | 6.50 | 49 |
KRL | 5.50 | 58 |
KSH | 15.00 | 21 |
Ladder Logic | 9.00 | 36 |
LAMBIT/L | 5.00 | 64 |
Lattice C | 2.50 | 128 |
Liana | 2.50 | 128 |
LILITH | 4.50 | 71 |
LINC II | 23.00 | 14 |
LISP | 5.00 | 64 |
LOGLISP | 5.50 | 58 |
LOOPS | 15.00 | 21 |
LOTUS 123 DOS | 50.00 | 6 |
LOTUS Macros | 3.00 | 107 |
LUCID 3D | 51.00 | 6 |
LYRIC | 6.00 | 53 |
M | 20.00 | 16 |
macFORTH | 5.00 | 64 |
MACH1 | 8.00 | 40 |
Machine language | 0.50 | 640 |
Macro assembly | 1.50 | 213 |
MAESTRO | 20.00 | 16 |
MAGEC | 20.00 | 16 |
MAGIK | 15.00 | 21 |
MAKE | 15.00 | 21 |
MANTIS | 8.00 | 40 |
MAPPER | 6.00 | 53 |
MARK IV | 8.00 | 40 |
MARK V | 9.00 | 36 |
MATHCAD | 60.00 | 5 |
MDL | 9.00 | 36 |
MENTOR | 6.00 | 53 |
MESA | 3.00 | 107 |
Microfocus COBOL | 4.00 | 80 |
microFORTH | 5.00 | 64 |
Microsoft C | 2.50 | 128 |
MicroStep | 16.00 | 20 |
Miranda | 8.00 | 40 |
Model 204 | 8.50 | 38 |
MODULA 2 | 4.00 | 80 |
MOSAIC | 50.00 | 6 |
MS C ++ V. 7 | 6.00 | 53 |
MS Compiled BASIC | 3.50 | 91 |
MSL | 5.00 | 64 |
muLISP | 5.00 | 64 |
MUMPS | 17.00 | 19 |
NASTRAN | 4.50 | 71 |
NATURAL 1 | 6.00 | 53 |
NATURAL 2 | 7.00 | 46 |
NATURAL Construct | 13.00 | 25 |
Natural language | 0.10 | 3200 |
NETRON/CAP | 17.00 | 19 |
NEXPERT | 6.50 | 49 |
NIAL | 6.50 | 49 |
NOMAD2 | 8.00 | 40 |
Non-procedural default | 9.00 | 36 |
Notes VIP | 9.00 | 36 |
Nroff | 6.00 | 53 |
Object-Oriented default | 11.00 | 29 |
OBJECT Assembler | 5.00 | 64 |
Object LISP | 11.00 | 29 |
Object LOGO | 11.00 | 29 |
Object PASCAL | 11.00 | 29 |
Object Star | 20.00 | 16 |
Objective-C | 12.00 | 27 |
ObjectVIEW | 13.00 | 25 |
OGL | 4.00 | 80 |
OMNIS 7 | 8.00 | 40 |
OODL | 11.00 | 29 |
OPS | 7.00 | 46 |
OPS5 | 5.50 | 58 |
ORACLE | 8.00 | 40 |
Oracle Developer/2000 | 14.00 | 23 |
Oscar | 3.00 | 107 |
PACBASE | 22.00 | 15 |
PACE | 8.00 | 40 |
PARADOX/PAL | 9.00 | 36 |
PASCAL | 3.50 | 91 |
PC FOCUS | 9.00 | 36 |
PDL Millenium | 15.00 | 21 |
PDP-11 ADE | 6.00 | 53 |
PERL | 15.00 | 21 |
Persistance Object Builder | 15.00 | 21 |
PILOT | 6.00 | 53 |
PL/I | 4.00 | 80 |
PL/M | 4.50 | 71 |
PL/S | 3.50 | 91 |
PLANIT | 6.00 | 53 |
PLANNER | 5.00 | 64 |
PLANPERFECT 1 | 45.00 | 7 |
PLATO | 6.00 | 53 |
polyFORTH | 5.00 | 64 |
POP | 5.50 | 58 |
POPLOG | 5.50 | 58 |
Power BASIC | 6.50 | 49 |
PowerBuilder | 20.00 | 16 |
POWERHOUSE | 23.00 | 14 |
PPL (Plus) | 8.00 | 40 |
Pro-C | 12.00 | 27 |
PRO-IV | 5.50 | 58 |
Problem-oriented default | 4.50 | 71 |
Procedural default | 3.00 | 107 |
Professional PASCAL | 3.50 | 91 |
Program Generator default | 20.00 | 16 |
PROGRESS V4 | 9.00 | 36 |
PROLOG | 5.00 | 64 |
PROSE | 3.00 | 107 |
PROTEUS | 3.00 | 107 |
QBasic | 5.50 | 58 |
QBE | 25.00 | 13 |
QMF | 22.00 | 15 |
QNIAL | 6.50 | 49 |
QUATTRO | 51.00 | 6 |
QUATTRO PRO | 51.00 | 6 |
Query default | 25.00 | 13 |
QUICK BASIC 1 | 5.00 | 64 |
QUICK BASIC 2 | 5.25 | 61 |
QUICK BASIC 3 | 5.50 | 58 |
Quick C | 2.50 | 128 |
Quickbuild | 11.50 | 28 |
QUIZ | 22.00 | 15 |
RALLY | 8.00 | 40 |
RAMIS II | 8.00 | 40 |
RapidGen | 11.50 | 28 |
RATFOR | 3.50 | 91 |
RDB | 8.00 | 40 |
REALIA | 7.00 | 46 |
Realizer 1.0 | 8.00 | 40 |
Realizer 2.0 | 9.00 | 36 |
RELATE/3000 | 8.00 | 40 |
Reuse default | 60.00 | 5 |
REXX (MVS) | 4.00 | 80 |
REXX (OS/2) | 7.00 | 46 |
RM BASIC | 3.50 | 91 |
RM COBOL | 3.00 | 107 |
RM FORTRAN | 3.00 | 107 |
RPG I | 4.00 | 80 |
RPG II | 5.50 | 58 |
RPG III | 5.75 | 56 |
RT-Expert 1.4 | 5.50 | 58 |
S-PLUS | 10.00 | 32 |
SAIL | 3.00 | 107 |
SAPIENS | 20.00 | 16 |
SAS | 10.00 | 32 |
SAVVY | 25.00 | 13 |
SBASIC | 3.50 | 91 |
SCEPTRE | 4.50 | 71 |
SCHEME | 6.00 | 53 |
Screen painter default | 57.00 | 6 |
SEQUAL | 27.00 | 12 |
SHELL | 15.00 | 21 |
SIMPLAN | 9.00 | 36 |
SIMSCRIPT | 7.00 | 46 |
SIMULA | 7.00 | 46 |
SIMULA 67 | 7.00 | 46 |
Simulation default | 7.00 | 46 |
SMALLTALK 286 | 15.00 | 21 |
SMALLTALK 80 | 15.00 | 21 |
SMALLTALK/V | 15.00 | 21 |
SNAP | 4.00 | 80 |
SNOBOL2-4 | 2.50 | 128 |
SoftScreen | 23.00 | 14 |
SOLO | 5.50 | 58 |
SPEAKEASY | 9.00 | 36 |
Spinnaker PPL | 9.00 | 36 |
Spreadsheet default | 50.00 | 6 |
SPS | 1.00 | 320 |
SPSS | 10.00 | 32 |
SQL | 25.00 | 13 |
SQL-Windows | 27.00 | 12 |
Statistical default | 10.00 | 32 |
STRATEGEM | 9.00 | 36 |
STRESS | 4.50 | 71 |
Strongly typed default | 3.50 | 91 |
STYLE | 7.00 | 46 |
SUPERBASE 1.3 | 9.00 | 36 |
SURPASS | 50.00 | 6 |
SYBASE | 8.00 | 40 |
Symantec C++ | 11.00 | 29 |
SYMBOLANG | 5.00 | 64 |
Synchroworks | 18.00 | 18 |
SYNON/2E | 17.00 | 19 |
System-W | 9.00 | 36 |
Tandem Access Language | 3.50 | 91 |
TCL | 5.00 | 64 |
TELON | 20.00 | 16 |
TESSARACT | 8.00 | 40 |
THE TWIN | 50.00 | 6 |
THEMIS | 25.00 | 13 |
TI-IEF | 23.00 | 14 |
Topspeed C ++ | 11.00 | 29 |
TRANSFORM | 22.00 | 15 |
TRANSLISP PLUS | 5.75 | 56 |
TREET | 5.00 | 64 |
TREETRAN | 5.00 | 64 |
TRS80 BASIC II,III | 2.50 | 128 |
TRUE BASIC | 5.00 | 64 |
Turbo C | 2.50 | 128 |
TURBO C++ | 6.00 | 53 |
TURBO EXPERT | 6.50 | 49 |
Turbo PASCAL >5 | 6.50 | 49 |
Turbo PASCAL 1-4 | 4.00 | 80 |
Turbo PASCAL 4-5 | 4.50 | 71 |
Turbo PROLOG | 4.00 | 80 |
TURING | 4.00 | 80 |
TUTOR | 6.00 | 53 |
TWAICE | 6.50 | 49 |
UCSD PASCAL | 3.50 | 91 |
UFO/IMS | 9.00 | 36 |
UHELP | 10.00 | 32 |
UNIFACE | 20.00 | 16 |
UNIX Shell Scripts | 15.00 | 21 |
VAX ACMS | 5.50 | 58 |
VAX ADE | 8.00 | 40 |
VECTRAN | 3.00 | 107 |
VHDL | 17.00 | 19 |
Visible C | 6.50 | 49 |
Visible COBOL | 8.00 | 40 |
Visicalc 1 | 35.00 | 9 |
Visual 4.0 | 11.00 | 29 |
Visual Basic 1 | 7.00 | 46 |
Visual Basic 2 | 7.50 | 43 |
Visual Basic 3 | 8.00 | 40 |
Visual Basic 4 | 9.00 | 36 |
Visual Basic 5 | 11.00 | 29 |
Visual Basic DOS | 8.00 | 40 |
Visual C++ | 9.50 | 34 |
Visual COBOL | 16.00 | 20 |
Visual Objects | 20.00 | 16 |
VisualAge | 15.00 | 21 |
VisualGen | 18.00 | 18 |
VS-REXX | 10.00 | 32 |
VULCAN | 5.00 | 64 |
VZ Programmer | 9.00 | 36 |
WARP X | 8.00 | 40 |
WATCOM C | 2.50 | 128 |
WATCOM C/386 | 2.50 | 128 |
Waterloo C | 2.50 | 128 |
Waterloo PASCAL | 3.50 | 91 |
WATFIV | 3.75 | 85 |
WATFOR | 3.50 | 91 |
WHIP | 3.50 | 91 |
Wizard | 11.50 | 28 |
XLISP | 5.00 | 64 |
YACC | 6.00 | 53 |
YACC++ | 6.00 | 53 |
ZBASIC | 3.50 | 91 |
ZIM | 17.00 | 19 |
ZLISP | 5.00 | 64 |
On-Going Research Of LanguagesThe relationship between source code statements and Function Points has only been subject to research for a few years, so the margin of error in Table 2 can be quite high. Even so, the method is useful enough so publication of a preliminary table may be helpful in filling in the gaps and correcting the errors. A complete and reliable industry-wide study of languages and their levels is of necessity a large multi-year project. A reasonable sampling of applications and languages would require data from about 5000 projects, assuming 10 projects in each language or dialect. The organizing principle used in this research is basically sound and the construction of a periodic table of languages is potentially as useful to software engineering as the periodic table of the elements has been to chemical engineering and to physics. SPR is conducting an on-going study of languages and their levels. For additional information, or to participate in this study, contact SPR Customer Support at 781-273-0140 or use e-mail: [email protected]. [Home] [Company] [Products] [Services] [News] [Support] [Resources] © Copyright 1997 by Software Productivity Research, Inc. All Rights Reserved. |