Metrics list with reference values

This page lists the available metrics along with reference values for VB6 code.
See also:  Metrics list   Metrics list, sorted

Reference values

The statistics in the table were calculated from a reference base of 20 Visual Basic 6.0 projects totaling 707,000 physical lines. These values are provided to be an indication of typical values. They are not meant to be used as benchmarks nor do they represent good, bad or average code. They are provided to give an idea of what kind of ranges the metrics may lie in.

The projects in question are real functional VB6 projects by different authors. They represent different coding styles and application areas. There are both small and large projects included (from 1,825 up to 183,148 lines). Most projects are standard executables but there are also DLL and OCX projects. The projects were analyzed under the following settings: Analyze a single .vbp file, unselect COM files, disable DLL analysis, accept late-bound references.

Notice that as they are all VB6 projects, some metrics are 0. For example, MIF (method inheritance factor) is 0 as there is no method inheritance in VB6.

Interesting findings

Here we have picked up some interesting findings from the analyses of the 20 reference projects. You shouldn't take these values as benchmarks, but as an idea of typical values. According to this data, in the average VB6 project:

File metrics

In the average program, we find the following values for the average file:

Class metrics

In the average program, we find the following averages for a class. It has to be noted that VB6 is not a fully class-oriented language, so these metrics may be very different for VB.NET.

Procedure metrics

In the average program, we find the following averages for a procedure:

Variable metrics

In the average program, the average variable has the following metrics (global and module-level variables, no locals):

Interpreting the data

The data in the table below are given for the 20 projects mentioned above. Average is the average of project-level averages. Min is the minimum average, Max is the maximum average among those 20 projects. The Outliers column displays limits outside which the averages can be considered exceptional. When the column displays "-", no exceptional values were found.

Example: PROCS/file. This example shows how to interpret the data in the table below. For each file in project A, count the number of procedures. Take the average of these counts. It is the PROCS/file metric for project A. — Do the same for all the 20 projects. Suppose you get values such as {67.7, 9.0, 22.2, 13.9, ...}.

Metrics list with reference values

Project metricName Average MinMax Outliers Description
DATE Project date 3.5.02 30.11.98 11.11.05 - Date of newest file in project.
LINES Physical lines 35,355 1,825 183,148 >122,957 Physical source lines, including code, comments, empty comments and empty lines. This metric is what you would see with a simple text editor or line count program.
LLINES Logical lines 33,720 1,680 178,074 >119,248 Logical source lines, including code, comments, empty comments and empty lines. One logical line may be split on several physical lines by a line continuation character. LLINES=LLOC + LLOC' + LLOW
LLOC Logical lines of code 21,263 1,152 107,569 >70,522 Code lines count. One logical line may be split on several physical lines by a line continuation character.
LLOC' Logical lines of comment 5,970 119 52,947 >14,819 Comment lines count. All full-line comments count, even if empty. End-of-codeline comments not included. One logical line may be split on several physical lines by a line continuation character.
LLOW Logical lines of whitespace 6,487 287 39,292 >28,735 Logical lines of whitespace. This is mostly equal to physical lines of whitespace, that is lines that have no other content than spaces, tabs and the line continuation character.
LLOC% Code percentage 70% 23% 92% <31% Percentage of code lines. Counted from logical lines. LLOC%=LLOC/LLINES
LLOC'% Comment percentage 12% 0.83% 30% - Percentage of comment lines. Counted as full-line comments per logical lines. LLOC'%=LLOC/LLINES
LLOW% Whitespace percentage 17% 1.90% 72% >34% Percentage of whitespace lines. Counted from logical lines. LLOW%=LLOW/LLINES
MCOMM Meaningful comments 5,172 162 48,867 >14,000 Full-line and end-of-line comments that have meaningful content.
MCOMM% Comment density 17% 1.61% 45% >44% Meaningful comments divided by number of logical lines of code. MCOMM%=MCOMM/LLOC
kB Project size 1612.2 64 7,649 >4,333 Project size in kilobytes. Includes all source files included in the analysis, excluding referenced files.
DATEF Average file date 2.8.01 6.6.98 10.4.05 - Average file date.
STMT Number of statements 21525.7 1,171 108,941 >70,613 Total number of all statements.
STMTd Declarative statements 4598.3 379 26,028 >10,620 Number of declarative statements, which are are: procedure headers, variable and constant declarations, all statements outside procedures.
STMTx Executable statements 16927.4 792 82,913 >52,708 Number of executable statements. A statement is executabe if it is not declarative. Executable statements can only exist within procedures. STMTx=STMT-STMTd
STMTc Control statements 6698.6 313 32,394 >21,970 Number of control statements. A control statement is an executable statement that can alter the order in which statements are executed.
STMTnc Non-control statements 10228.9 479 50,519 >26,478 Number of non-control statements, which are executable statements that are neither control nor declarative statements. STMTnc=STMTx-STMTc
XQT Executability 76% 59% 92% - Executability measures the amount of executable statements. It equals the number of executable statements divided by the number of all statements. XQT=STMTx/STMT
CTRL Control density 40% 29% 53% - Control density measures the amount of control statements. It equals the number of control statements divided by the number of all executable statements. CTRL=STMTc/STMTx
FILES Number of files 104.3 18 291 - Number of files in project.
PROCS Number of procedures 1164.1 97 5,640 >3,039 Number of procedures, including subs, functions, property blocks, API declarations and events.
VARS Number of variables 2796.2 186 17,561 >5,926 Number of variables, including arrays, parameters and local variables.
CONSTS Number of consts 408.0 0 2,164 >1,236 Number of constants, excluding enum constants.
UDTS Number of user-defined types 19.0 0 118 >47 Number of user-defined types, that is, Type and/or Structure statements.
ENUMS Number of Enums 23.0 0 104 >90 Number of enumeration names.
ENUMCS Number of Enum constants 166.1 0 1,019 >720 Number of enumeration constant names.
VARSgm Global and module-level variables 358.5 8 1,502 >1,076 Total number of global and module-level variables and arrays.
VARSloc Local variables 1264.9 65 9,364 >2,450 Total number of procedure local variables and arrays, excluding parameters.
FORMS Number of forms 27.3 0 82 - Number of real forms excluding any usercontrols.
MDLS Number of standard modules 14.6 0 77 >43 Number of standard modules: .bas files and Module blocks.
dPROCS Number of dead procedures 264.0 0 1,373 >1,144 Number of unused procedures.
dVARS Number of dead variables 203.1 1 1,324 >600 Number of unused variables.
dCONSTS Number of dead consts 139.0 0 812 >386 Number of unused constants.
dLINES Dead lines 4799.2 0 19,702 - Physical lines in dead procedures.
DEAD Deadness index 15% 0.06% 47% >23% Evaluates the average percentage of dead code. DEAD=(dPROCS + dVARS + dCONSTS) / (PROCS + VARS + CONSTS)
LEN Length of names 9.86 7.4 14.6 >14.4 Average length of names defined in VB files, including everything in LENV, LENC and LENP, plus Types, Enums, Type fields, Enum constants, controls, classes, structures and modules.
LENV Length of variable and parameter names 7.88 4.9 11.8 - Average length of names of variables, arrays and parameters defined in VB files, excluding parameters in event handlers and implementing procedures.
LENC Length of constant names 13.31 0.0 26.2 - Average length of all constant names defined in VB files.
LENP Length of procedure names 13.55 10.0 16.6 - Average length of procedure names defined in VB files, excluding event handlers and implementing procedures. Each property is counted only once. This metric may differ from the other LENP, which is defined for a slighly different set of procedures.
UNIQ Name uniqueness ratio 55% 24% 88% <36%, >74% Number of unique names divided by the total number of names. All the names in LEN are counted.
ENUMSZ Average Enum size 4.70 0.0 15.0 - Average number of constants in an Enum block. ENUMSZ=ENUMCS/ENUMS
ENUMR Enum ratio 23% 0% 90% - The percentage of Enum constants among all constants. ENUMR=ENUMCS/(ENUMCS+CONSTS)
DECDENS Decision density 0.20 0.14 0.25 - Indicates the density of decision statements in the code. Calculated as sum of procedural cyclomatic complexity divided by logical lines of code. DECDENS=Sum(CC)/LLOC
TCC Total cyclomatic complexity 2939.7 141 14,817 >8,441 Total cyclomatic complexity equals the total number of decisions + 1. TCC=Sum(CC)-Count(CC)+1
SYSC System complexity 34679.9 151 343,267 >113,625 Sum of SYSC over all procedures. Measures the total complexity of a project. SYSC=Sum(SYSC) over all procedures
RSYSC Relative system complexity 18.15 1.5 62.2 >48.8 Average system complexity among procedures. RSYSC=avg(SYSC)
CALLS Number of procedure calls 4169.3 46 38,598 >8,292 Number of procedure call statements, including calls to subs, functions and declares, accesses to properties and the raising of events. Implicit calls (such as Form_Load) are not counted.
CALLDENS Call density 0.14 0.02 0.36 - Average number of calls on a code line. Measures the modularity or structuredness. CALLDENS=CALLS/LLOC
maxDCALLT Maximum depth of call tree 14.1 2 76 >32 The depth of the largest call tree in the system: number of levels in the tree. maxDCALLT=Max(DCALLT)
maxSCALLT Maximum size of call tree 391.8 4 3,217 >980 The size of the largest call tree in the system: number of distinct procedures in the tree. maxSCALLT=Max(SCALLT)
RB Reuse benefit 0.49 0.08 0.80 - Reuse benefit RB is the extent to which you reuse your procedures. A procedure that is being called at several locations is said to be reused. A procedure that is called just once or not at all is not reused. RB measures the overall amount of reuse in the entire system.
Rc Reuse of constants 4.19 0.53 25.64 >11.19 The average number of times you reuse your constants and enum constants. Rc=uses/count - 1
CLS Number of classes 28.1 1 94 >81 Number of classes defined in project.
ROOTS Number of root classes 28.1 1 94 >81 Number of root classes defined in project.
LEAFS Number of root classes 28.1 1 94 >81 Number of leaf classes defined in project. A leaf class has no descendants.
INTERFS Number of Interface definitions 0.0 0 0 - Number of Interfaces defined in project.
maxDIT Maximum depth of inheritance tree 0.0 0 0 - maxDIT is the depth of the deepest inheritance tree. maxDIT=max(DIT)
CLSa Number of abstract classes 0.3 0 3 >0 Number of abstract classes defined in project. In VB.NET, an abstract class is declared MustOverride. In VB Classic, it's a skeleton class that defines an interface class for Implements.
CLSc Number of concrete classes 27.9 1 94 >81 Number of concrete classes defined in project. A concrete class is one that is not abstract (see CLSa). CLSc=CLS-CLSa
U Reuse ratio 0.00 0.00 0.00 - Reuse ratio for classes. A class is reused if it has descendants. U=(CLS - LEAFS) / CLS
S Specialization ratio 0.00 0.0 0.0 - Specialization ratio for classes. A class is specialized if it inherits from a parent class. In a project without superclasses, S is undefined. S=subclasses/superclasses
MIF Method inheritance factor 0.00 0.00 0.00 - The sum of inherited methods divided by the total number of methods in a project.
AIF Attribute inheritance factor 0.00 0.00 0.00 - The sum of inherited variables divided by the total number of variables in a project.
MHF Method hiding factor 0.28 0.07 0.77 >0.75 Measures how class methods are hidden from other classes.
AHF Attribute hiding factor 0.93 0.41 1.00 <0.92 Measures how class attributes (variables) are hidden from other classes.
PF Polymorphism factor 0.00 0.00 0.00 - Percentage of actual polymorphic definitions of all possible polymorphic definitions. Also known as POF.
CF Coupling factor 0.14 0.01 0.50 >0.45 Measures the actual couplings among classes in relation to the maximum number of possible couplings. Also known as COF.
OHEF Operation hiding effectiveness factor 0.06 0.00 0.43 >0.16 Classes that do access operations / Classes that can access operations.
AHEF Attribute hiding effectiveness factor 0.48 0.02 1.63 >1.58 Classes that do access attributes / Classes that can access attributes.
IIF Internal inheritance factor 0.00 0.00 0.00 - The relative amount of internal inheritance. Internal inheritance happens when a class inherits another class in the same system (not an external class).
PPF Parametric polymorphism factor 0.00 0.00 0.00 - Percentage of parametrized classes (generic classes).
TREADS Total variable reads 4069.5 75 24,068 >7,254 Number of read instructions from global and module-level variables. TREADS=Sum(READS)
TWRITES Total variable writes 1564.2 53 8,466 >3,515 Number of write instructions to global and module-level variables. TWRITES=Sum(WRITES)
TRW Total variable reads+writes 5633.7 132 32,534 >10,666 Number of reads from and writes to global and module-level variables. TRW=TREADS+TWRITES
DATADENS Data access density 0.23 0.07 0.76 >0.61 Average number of variable access instructions per logical line of code. DATADENS=TRW/LLOC
IOg% Global I/O ratio 60% 36% 94% - Amount of data flow via global and module-level variables versus procedure parameters and function return values. IOg%=Sum(IOg) / Sum(IOg+IOp)
File averageName Average MinMax Outliers Description
LINES/file Physical lines 567.9 152.1 1236.0 - Physical source lines, including code, comments, empty comments and empty lines. This metric is what you would see with a simple text editor or line count program.
LLINES/file Logical lines 539.4 140.0 1217.9 - Logical source lines, including code, comments, empty comments and empty lines. One logical line may be split on several physical lines by a line continuation character. LLINES=LLOC + LLOC' + LLOW
LLOC/file Logical lines of code 355.9 96.0 904.1 - Code lines count. One logical line may be split on several physical lines by a line continuation character.
LLOC'/file Logical lines of comment 71.4 1.7 233.2 - Comment lines count. All full-line comments count, even if empty. End-of-codeline comments not included. One logical line may be split on several physical lines by a line continuation character.
LLOW/file Logical lines of whitespace 112.1 7.6 873.2 >261.2 Logical lines of whitespace. This is mostly equal to physical lines of whitespace, that is lines that have no other content than spaces, tabs and the line continuation character.
LLOC%/file Code percentage 67% 34% 92% <37% Percentage of code lines. Counted from logical lines. LLOC%=LLOC/LLINES
LLOC'%/file Comment percentage 11% 0.50% 28% - Percentage of comment lines. Counted as full-line comments per logical lines. LLOC'%=LLOC/LLINES
LLOW%/file Whitespace percentage 22% 2% 59% >45% Percentage of whitespace lines. Counted from logical lines. LLOW%=LLOW/LLINES
MCOMM/file Meaningful comments 62.7 2.7 215.3 - Full-line and end-of-line comments that have meaningful content.
MCOMM%/file Comment density 22% 1.16% 92% >62% Meaningful comments divided by number of logical lines of code. MCOMM%=MCOMM/LLOC
kB/file File size 25.2 5.4 57.8 - File size in kilobytes.
DATEF/file File date 2.8.01 6.6.98 10.4.05 - File date.
PROCS/file Number of procedures 20.9 9.0 67.7 >48.0 Number of procedures, including subs, functions, property blocks, API declarations and events.
VARS/file Number of variables 6.3 1.1 17.8 - Number of variables, including arrays, parameters and local variables.
CONSTS/file Number of consts 8.1 0.0 41.0 >31.6 Number of constants, excluding enum constants.
SFIN/file Structural fan-in 4.5 1.6 11.3 - Number of files that use a file.
SFOUT/file Structural fan-out 4.7 1.9 11.4 - Number of files that a file uses.
STMT/file Number of statements 359.9 97.6 924.0 - Total number of all statements.
STMTd/file Declarative statements 79.8 25.9 264.3 >225.3 Number of declarative statements, which are are: procedure headers, variable and constant declarations, all statements outside procedures.
STMTx/file Executable statements 280.1 66.0 661.9 - Number of executable statements. A statement is executabe if it is not declarative. Executable statements can only exist within procedures. STMTx=STMT-STMTd
STMTc/file Control statements 115.3 26.1 346.6 >319.9 Number of control statements. A control statement is an executable statement that can alter the order in which statements are executed.
STMTnc/file Non-control statements 164.8 39.9 462.1 - Number of non-control statements, which are executable statements that are neither control nor declarative statements. STMTnc=STMTx-STMTc
XQT/file Executability 62% 46% 78% - Executability measures the amount of executable statements. It equals the number of executable statements divided by the number of all statements. XQT=STMTx/STMT
CTRL/file Control density 31% 20% 43% - Control density measures the amount of control statements. It equals the number of control statements divided by the number of all executable statements. CTRL=STMTc/STMTx
Class averageName Average MinMax Outliers Description
WMC/cls Weighted Methods Per Class 23.6 1.0 55.8 >55.0 Number of subs, functions and property procedures in class.
DIT/cls Depth of Inheritance Tree 0.0 0.0 0.0 - Number of ancestor classes.
NOC/cls Number of Children 0.0 0.0 0.0 - Number of immediate sub-classes that inherit from a class.
CBO/cls Coupling between Object Classes 3.8 0.0 17.0 >9.8 Number of classes to which a class is coupled. Coupling is defined as method call or variable access.
RFC/cls Response for a Class First step 38.3 1.0 85.2 - Number of methods that can potentially be executed in response to a message received a class. Counts only the first level of the call tree.
RFC'/cls Response for a Class 252.8 1.0 2429.7 >278.3 Number of methods that can potentially be executed in response to a message received a class. Counts the full call tree.
LCOM1/cls Lack of Cohesion of Methods (1) 582.7 0.0 4046.8 >1311.3 A zero value indicates a cohesive class. A positive value indicates a class that should be split. Also known as LCOM. Defined by Chidamber & Kemerer.
LCOM2/cls Lack of Cohesion of Methods (2) 0.59 0.00 0.83 - The percentage of methods that do not access a specific attribute averaged over all attributes in the class.
LCOM3/cls Lack of Cohesion of Methods (3) 0.66 0.00 1.00 <0.05 Also known as LCOM*. Defined by Henderson-Sellers. Values of 1 and greater are considered extreme lack of cohesion.
LCOM4/cls Lack of Cohesion of Methods (4) 3.5 1.0 6.0 - Defined by Hitz & Montazeri. Value 1 indicates a good, cohesive class. Values 2 and greater are considered bad (lack of cohesion). Such a class should be split. LCOM4 is more suitable for VB than the other LCOMx variants.
TCCi/cls Tight Class Cohesion 0.58 0.00 1.00 <0.09 TCCi is 'TCC with inheritance'. TCC tells the connection density of the methods in a class. TCC varies from 0 (totally non-cohesive) to 1 (maximally cohesive).
LCCi/cls Loose Class Cohesion 0.71 0.00 1.00 <0.11 LCCi is 'LCC with inheritance'. LCC describes the connectedness of the methods in a class. LCC<1 indicates a non-cohesive class. LCC=1 indicates a cohesive class."
TCCl/cls Tight Class Cohesion (local) 0.58 0.00 1.00 <0.09 TCCl is 'TCC without inheritance'. TCC tells the connection density of the methods in a class. TCC varies from 0 (totally non-cohesive) to 1 (maximally cohesive).
LCCl/cls Loose Class Cohesion (local) 0.71 0.00 1.00 <0.11 LCCl is 'LCC without inheritance'. LCC describes the connectedness of the methods in a class. LCC<1 indicates a non-cohesive class. LCC=1 indicates a cohesive class."
MPC/cls Message-Passing Coupling 36.4 0.0 112.1 - Number of procedure calls going outside of a class. Each call is counted once, whether it's early bound, late bound or polymorphic.
LINES/cls Physical lines 680.0 34.0 1772.0 - Physical source lines, including code, comments, empty comments and empty lines. This metric is what you would see with a simple text editor or line count program.
LLINES/cls Logical lines 644.0 34.0 1745.6 - Logical source lines, including code, comments, empty comments and empty lines. One logical line may be split on several physical lines by a line continuation character. LLINES=LLOC + LLOC' + LLOW
LLOC/cls Logical lines of code 376.3 19.0 1010.0 - Code lines count. One logical line may be split on several physical lines by a line continuation character.
LLOC'/cls Logical lines of comment 98.5 4.2 460.0 >230.6 Comment lines count. All full-line comments count, even if empty. End-of-codeline comments not included. One logical line may be split on several physical lines by a line continuation character.
LLOW/cls Logical lines of whitespace 169.3 5.0 1424.2 >330.9 Logical lines of whitespace. This is mostly equal to physical lines of whitespace, that is lines that have no other content than spaces, tabs and the line continuation character.
STMT/cls Number of statements 378.1 19.0 1024.8 - Total number of all statements.
STMTd/cls Declarative statements 96.9 7.0 269.8 >261.5 Number of declarative statements, which are are: procedure headers, variable and constant declarations, all statements outside procedures.
STMTx/cls Executable statements 281.2 12.0 755.0 - Number of executable statements. A statement is executabe if it is not declarative. Executable statements can only exist within procedures. STMTx=STMT-STMTd
STMTc/cls Control statements 128.3 9.0 398.8 - Number of control statements. A control statement is an executable statement that can alter the order in which statements are executed.
STMTnc/cls Non-control statements 152.9 3.0 356.2 - Number of non-control statements, which are executable statements that are neither control nor declarative statements. STMTnc=STMTx-STMTc
XQT/cls Executability 61% 43% 87% >85% Executability measures the amount of executable statements. It equals the number of executable statements divided by the number of all statements. XQT=STMTx/STMT
CTRL/cls Control density 38% 22% 75% >62% Control density measures the amount of control statements. It equals the number of control statements divided by the number of all executable statements. CTRL=STMTc/STMTx
IMPL/cls Implemented interfaces 0.1 0.0 1.0 >0.5 Number of interfaces implemented by class.
WMCnp/cls Non-private methods defined by class 18.2 0.0 46.5 >38.8 WMC excluding private methods.
WMCi/cls Methods defined and inherited by class 23.6 1.0 55.8 >55.0 WMC including inherited methods.
VARS/cls Variables defined by class 7.7 0.0 20.7 <2.1, >11.8 Number of variables defined by class. Does not include inherited variables.
VARSnp/cls Non-private variables 0.5 0.0 4.3 >0.6 Number of non-private variables defined by class. VARS excluding private variables.
VARSi/cls Variables defined+inherited 7.7 0.0 20.7 <2.1, >11.8 Number of variables defined and inherited by class.
EVENTS/cls Events 0.8 0.0 5.0 >2.8 Events defined by class. This metric coutns the event definitions, not event handlers.
CTORS/cls Constructors 0.0 0.0 0.0 - Constructors defined by class. VB.NET Sub New is a constructor, whereas VB Classic Class_Initialize is an event.
CSZ/cls Class size 31.4 1.0 76.5 >63.6 Size of class measured by number of methods and variables. CSZ=WMC + VARS
CIS/cls Class interface size 18.7 0.0 46.8 >40.9 Size of class interface measured by number of non-private methods and variables. CIS=WMCnp + VARSnp
TCC/cls Total cyclomatic complexity 56.6 4.0 176.3 - Total cyclomatic complexity equals the total number of decisions + 1. TCC=Sum(CC)-Count(CC)+1
Procedure averageName Average MinMax Outliers Description
LINES/proc Physical lines 29.9 10.0 86.5 >61.9 Physical source lines, including code, comments, empty comments and empty lines. This metric is what you would see with a simple text editor or line count program.
LLINES/proc Logical lines 28.6 9.9 86.0 >59.0 Logical source lines, including code, comments, empty comments and empty lines. One logical line may be split on several physical lines by a line continuation character. LLINES=LLOC + LLOC' + LLOW
LLOC/proc Logical lines of code 18.1 8.7 48.2 >35.8 Code lines count. One logical line may be split on several physical lines by a line continuation character.
LLOC'/proc Logical lines of comment 3.7 0.2 24.1 >7.9 Comment lines count. All full-line comments count, even if empty. End-of-codeline comments not included. One logical line may be split on several physical lines by a line continuation character.
LLOW/proc Logical lines of whitespace 6.8 0.2 57.1 >15.4 Logical lines of whitespace. This is mostly equal to physical lines of whitespace, that is lines that have no other content than spaces, tabs and the line continuation character.
MCOMM/proc Meaningful comments 2.9 0.3 11.3 >8.5 Full-line and end-of-line comments that have meaningful content.
LLOCt/proc Lines in call tree 2,333 16 42,835 >646 Logical lines of code in call tree. The number of lines that may potentially execute in a call to this procedure. Includes all procedures that may execute.
PARAMS/proc Procedure parameters 0.9 0.3 1.9 - Number of formal parameters defined in procedure header.
VARSloc/proc Local variables 1.1 0.1 2.6 >2.4 Number of procedure local variables and arrays, excluding parameters.
STMT/proc Number of statements 18.2 9.0 48.1 >36.1 Total number of all statements.
STMTd/proc Declarative statements 3.0 2.1 4.4 >4.1 Number of declarative statements, which are are: procedure headers, variable and constant declarations, all statements outside procedures.
STMTx/proc Executable statements 15.2 6.4 46.0 >29.2 Number of executable statements. A statement is executabe if it is not declarative. Executable statements can only exist within procedures. STMTx=STMT-STMTd
STMTc/proc Control statements 6.0 2.5 15.2 >13.7 Number of control statements. A control statement is an executable statement that can alter the order in which statements are executed.
STMTnc/proc Non-control statements 9.3 4.0 30.8 >17.2 Number of non-control statements, which are executable statements that are neither control nor declarative statements. STMTnc=STMTx-STMTc
XQT/proc Executability 62% 47% 76% - Executability measures the amount of executable statements. It equals the number of executable statements divided by the number of all statements. XQT=STMTx/STMT
CTRL/proc Control density 25% 12% 37% - Control density measures the amount of control statements. It equals the number of control statements divided by the number of all executable statements. CTRL=STMTc/STMTx
IOg/proc Global I/O 1.5 0.6 4.4 >3.2 Number of global and module-level variables accessed by a procedure.
IOp/proc Parameter I/O 1.0 0.2 2.2 - Number of parameters used or returned by a procedure. The function return value counts as one parameter (output parameter).
IOvars/proc Input and output variables 2.5 0.9 4.7 - Total number of input and output variables for a procedure, including parameters and function return value. IOvars=IOg+IOp
IFIN/proc Informational fan-in 3.4 1.0 5.6 - Amount of data read.
IFOUT/proc Informational fan-out 2.2 0.6 4.2 - Amount of data written.
IFIO/proc Informational fan-in x fan-out 15.9 1.3 58.8 >47.9 Fan-in multiplied by fan-out. IFIO=IFIN*IFOUT
IC1/proc Informational complexity 2,731 45 33,147 >5,561 Fan-in multiplied by fan-out multiplied by procedure length (logical lines of code). IC1=IFIO*LLOC
CC/proc Cyclomatic complexity 3.6 2.2 7.8 >6.3 McCabe cyclomatic complexity equals the number of execution paths through a procedure. Also known as V(C).
CC2/proc Cyclomatic complexity with Booleans 3.9 2.2 8.6 >6.6 CC2 equals the regular CC metric but each Boolean operator within a branching statement causes complexity to increase by one. Also called Extended cyclomatic complexity (ECC).
CC3/proc Cyclomatic complexity without Cases 3.3 2.0 7.0 >6.3 CC3 equals the regular CC metric, but each Select Case block is counted as one branch, not as multiple branches.
DCOND/proc Depth of conditional nesting 0.9 0.6 1.5 - Maximum number of nested conditional statements in a procedure.
DLOOP/proc Depth of looping 0.2 0.1 0.3 - Maximum number of nested loop statements in a procedure.
DCALLT/proc Depth of call tree 3.8 0.3 39.9 >8.0 Maximum number of nested procedure calls from a procedure. Recursive calls are not counted.
SCALLT/proc Size of call tree 101.8 0.4 1835.4 >52.9 Number of distinct procedures in the call tree of a procedure, not counting the procedure itself.
SC/proc Structural complexity 16.8 0.4 61.2 >48.7 Measures the external complexity of a procedure. Equals the number of other procedures called squared. Defined by Card & Agresti, also known as S(i). Used to calculate SYSC. SC=SFOUT^2
DC/proc Data complexity 1.38 0.65 2.85 >2.62 Measures the internal complexity of a procedure. Calculated by dividing the number of input/output variables by SFOUT+1. Defined by Card & Agresti, also known as D(i). Used to calculate SYSC. DC=IOVariables/(SFOUT+1)
SYSC/proc System complexity 18.15 1.55 62.19 >48.79 Composite measure of complexity inside procedures and between them. Defined by Card & Agresti, also known as C(i), or design complexity. SYSC=SC+DC
LENP/proc Length of procedure name 14.5 10.5 18.7 - Length of procedure name in characters.
SFIN/proc Structural fan-in 1.4 0.2 3.5 - Number of procedures that call a procedure.
SFOUT/proc Structural fan-out 1.5 0.3 3.5 - Number of procedures that a procedure calls.
Variable averageName Average MinMax Outliers Description
READS/var Reads from variable 9.6 3.1 21.7 - Number of read instructions from variable.
WRITES/var Writes to variable 4.0 1.4 11.9 >8.1 Number of write instructions to variable.
RW/var Reads and writes 13.6 4.6 33.6 - Number of reads and writes. A single instruction may count both as a read and as a write. RW=READS+WRITES
FLOWS/var Data flows 1320.8 12.9 23033.6 >678.0 Number of data flows into and out of a variable. FLOWS=READS*WRITES
VARUSR/var Variable users 1.4 1.0 2.7 - Number of modules that use a variable.
LENVgm/var Length of variable name 10.6 6.4 15.8 - Length of variable name in characters.

©Aivosto Oy - Project Analyzer Help Contents