Metrics list

Project metrics
DATEProject dateDate of newest file in project.
DAYSDays passedDays passed between versions.
LINESPhysical linesPhysical 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.
LLINESLogical linesLogical 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
LLOCLogical lines of codeCode lines count. One logical line may be split on several physical lines by a line continuation character.
LLOC'Logical lines of commentComment 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.
LLOWLogical lines of whitespaceLogical 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 percentagePercentage of code lines. Counted from logical lines. LLOC%=LLOC/LLINES
LLOC'%Comment percentagePercentage of comment lines. Counted as full-line comments per logical lines. LLOC'%=LLOC/LLINES
LLOW%Whitespace percentagePercentage of whitespace lines. Counted from logical lines. LLOW%=LLOW/LLINES
MCOMMMeaningful commentsFull-line and end-of-line comments that have meaningful content.
MCOMM%Comment densityMeaningful comments divided by number of logical lines of code. MCOMM%=MCOMM/LLOC
kBProject sizeProject size in kilobytes. Includes all source files included in the analysis, excluding referenced files.
DATEFAverage file dateAverage file date.
STMTNumber of statementsTotal number of all statements.
STMTdDeclarative statementsNumber of declarative statements, which are: procedure headers, variable and constant declarations, all statements outside procedures.
STMTxExecutable statementsNumber of executable statements. A statement is executable if it is not declarative. Executable statements can only exist within procedures. STMTx=STMT-STMTd
STMTcControl statementsNumber of control statements. A control statement is an executable statement that can alter the order in which statements are executed.
STMTncNon-control statementsNumber of non-control statements, which are executable statements that are neither control nor declarative statements. STMTnc=STMTx-STMTc
XQTExecutabilityExecutability measures the amount of executable statements. It equals the number of executable statements divided by the number of all statements. XQT=STMTx/STMT
CTRLControl densityControl 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
SDENSStatement densityAverage number of statements per logical line. SDENS=STMT/LLOC
FILESNumber of filesNumber of files in project.
PROCSNumber of proceduresNumber of procedures, including subs, functions, property blocks, API declarations and events.
VARSNumber of variablesNumber of variables, including arrays, parameters and local variables.
CONSTSNumber of constsNumber of constants, excluding enum constants.
UDTSNumber of user-defined typesNumber of user-defined types, that is, Type and/or Structure blocks.
ENUMSNumber of EnumsNumber of enumeration names.
ENUMCSNumber of Enum constantsNumber of enumeration constant names.
VARSgmGlobal and module-level variablesTotal number of global and module-level variables and arrays.
VARSlocLocal variablesTotal number of procedure local variables and arrays, excluding parameters.
FORMSNumber of formsNumber of real forms excluding any UserControls.
MDLSNumber of standard modulesNumber of standard modules: .bas files and Module blocks.
dPROCSNumber of dead proceduresNumber of unused procedures.
dVARSNumber of dead variablesNumber of unused variables.
dCONSTSNumber of dead constsNumber of unused constants.
dLINESDead linesPhysical lines in dead procedures.
dUDTSNumber of dead user-defined typesNumber of unused user-defined types, that is, Type and/or Structure blocks.
dENUMSNumber of dead EnumsNumber of unused enumeration names.
dENUMCSNumber of dead Enum constantsNumber of unused enumeration constants.
DEADDeadness indexEvaluates the average percentage of dead code. DEAD=(dPROCS + dVARS + dCONSTS) / (PROCS + VARS + CONSTS)
LENLength of namesAverage 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. Excludes compiler constants.
LENVLength of variable and parameter namesAverage length of names of variables, arrays and parameters defined in VB files, excluding parameters in event handlers and implementing procedures.
LENCLength of constant namesAverage length of all constant names defined in VB files. Excludes enum constants and compiler constants.
LENPLength of procedure namesAverage 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 slightly different set of procedures.
UNIQName uniqueness ratioNumber of unique names divided by the total number of names. All the names in LEN are counted.
ENUMSZAverage Enum sizeAverage number of constants in an Enum block. ENUMSZ=ENUMCS/ENUMS
ENUMREnum ratioThe percentage of Enum constants among all constants. ENUMR=ENUMCS/(ENUMCS+CONSTS)
DECDENSDecision densityIndicates 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
TCCTotal cyclomatic complexityTotal cyclomatic complexity equals the total number of decisions + 1. TCC=Sum(CC)-Count(CC)+1
SYSCSystem complexitySum of SYSC over all procedures. Measures the total complexity of a project. SYSC=Sum(SYSC) over all procedures
RSYSCRelative system complexityAverage system complexity among procedures. RSYSC=avg(SYSC)
CALLSNumber of procedure callsNumber 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.
CALLDENSCall densityAverage number of calls on a code line. Measures the modularity or structuredness. CALLDENS=CALLS/LLOC
maxDCALLTMaximum depth of call treeThe depth of the largest call tree in the system: number of levels in the tree. maxDCALLT=Max(DCALLT)
maxSCALLTMaximum size of call treeThe size of the largest call tree in the system: number of distinct procedures in the tree. maxSCALLT=Max(SCALLT)
RBReuse benefitReuse 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.
RcReuse of constantsThe average number of times you reuse your constants and enum constants. Rc=uses/count - 1
CLSNumber of classesNumber of classes defined in project.
ROOTSNumber of root classesNumber of root classes defined in project.
LEAFSNumber of leaf classesNumber of leaf classes defined in project. A leaf class has no descendants.
INTERFSNumber of Interface definitionsNumber of Interfaces defined in project.
maxDITMaximum depth of inheritance treemaxDIT is the depth of the deepest inheritance tree. maxDIT=max(DIT)
CLSaNumber of abstract classesNumber 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.
CLScNumber of concrete classesNumber of concrete classes defined in project. A concrete class is one that is not abstract (see CLSa). CLSc=CLS-CLSa
UReuse ratioReuse ratio for classes. A class is reused if it has descendants. U=(CLS-LEAFS)/CLS
SSpecialization ratioSpecialization 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
MIFMethod inheritance factorThe sum of inherited methods divided by the total number of methods in a project.
AIFAttribute inheritance factorThe sum of inherited variables divided by the total number of variables in a project.
MHFMethod hiding factorMeasures how class methods are hidden from other classes.
AHFAttribute hiding factorMeasures how class attributes (variables) are hidden from other classes.
PFPolymorphism factorPercentage of actual polymorphic definitions of all possible polymorphic definitions. Also known as POF.
CFCoupling factorMeasures the actual couplings among classes in relation to the maximum number of possible couplings. Also known as COF.
OHEFOperation hiding effectiveness factorClasses that do access operations / Classes that can access operations.
AHEFAttribute hiding effectiveness factorClasses that do access attributes / Classes that can access attributes.
IIFInternal inheritance factorThe relative amount of internal inheritance. Internal inheritance happens when a class inherits another class in the same system (not an external class).
PPFParametric polymorphism factorPercentage of parameterized classes (generic classes).
TREADSTotal variable readsNumber of read instructions from global and module-level variables. TREADS=Sum(READS)
TWRITESTotal variable writesNumber of write instructions to global and module-level variables. TWRITES=Sum(WRITES)
TRWTotal variable reads+writesNumber of reads from and writes to global and module-level variables. TRW=TREADS+TWRITES
DATADENSData access densityAverage number of variable access instructions per logical line of code. DATADENS=TRW/LLOC
IOg%Global I/O ratioAmount of data flow via global and module-level variables versus procedure parameters and function return values. IOg%=Sum(IOg) / Sum(IOg+IOp)
File metrics
LINESPhysical linesPhysical 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.
LLINESLogical linesLogical 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
LLOCLogical lines of codeCode lines count. One logical line may be split on several physical lines by a line continuation character.
LLOC'Logical lines of commentComment 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.
LLOWLogical lines of whitespaceLogical 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 percentagePercentage of code lines. Counted from logical lines. LLOC%=LLOC/LLINES
LLOC'%Comment percentagePercentage of comment lines. Counted as full-line comments per logical lines. LLOC'%=LLOC/LLINES
LLOW%Whitespace percentagePercentage of whitespace lines. Counted from logical lines. LLOW%=LLOW/LLINES
MCOMMMeaningful commentsFull-line and end-of-line comments that have meaningful content.
MCOMM%Comment densityMeaningful comments divided by number of logical lines of code. MCOMM%=MCOMM/LLOC
kBFile sizeFile size in kilobytes.
DATEFFile dateFile date.
PROCSNumber of proceduresNumber of procedures, including subs, functions, property blocks, API declarations and events.
VARSNumber of variablesNumber of variables, including arrays, parameters and local variables.
CONSTSNumber of constsNumber of constants, excluding enum constants.
SFINStructural fan-inNumber of files that use a file.
SFOUTStructural fan-outNumber of files that a file uses.
STMTNumber of statementsTotal number of all statements.
STMTdDeclarative statementsNumber of declarative statements, which are: procedure headers, variable and constant declarations, all statements outside procedures.
STMTxExecutable statementsNumber of executable statements. A statement is executable if it is not declarative. Executable statements can only exist within procedures. STMTx=STMT-STMTd
STMTcControl statementsNumber of control statements. A control statement is an executable statement that can alter the order in which statements are executed.
STMTncNon-control statementsNumber of non-control statements, which are executable statements that are neither control nor declarative statements. STMTnc=STMTx-STMTc
XQTExecutabilityExecutability measures the amount of executable statements. It equals the number of executable statements divided by the number of all statements. XQT=STMTx/STMT
CTRLControl densityControl 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 metrics
WMCWeighted Methods Per ClassNumber of subs, functions and property procedures in class.
DITDepth of Inheritance TreeNumber of ancestor classes.
NOCNumber of ChildrenNumber of immediate sub-classes that inherit from a class.
CBOCoupling between Object ClassesNumber of classes to which a class is coupled. Coupling is defined as method call or variable access.
RFCResponse for a Class First stepNumber 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'Response for a ClassNumber of methods that can potentially be executed in response to a message received a class. Counts the full call tree.
LCOM1Lack of Cohesion of Methods (1)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.
LCOM2Lack of Cohesion of Methods (2)The percentage of methods that do not access a specific attribute averaged over all attributes in the class.
LCOM3Lack of Cohesion of Methods (3)Also known as LCOM*. Defined by Henderson-Sellers. Values of 1 and greater are considered extreme lack of cohesion.
LCOM4Lack of Cohesion of Methods (4)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.
TCCiTight Class CohesionTCCi 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).
LCCiLoose Class CohesionLCCi 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."
TCClTight Class Cohesion (local)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).
LCClLoose Class Cohesion (local)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."
MPCMessage-Passing CouplingNumber of procedure calls going outside of a class. Each call is counted once, whether it's early bound, late bound or polymorphic.
LINESPhysical linesPhysical 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.
LLINESLogical linesLogical 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
LLOCLogical lines of codeCode lines count. One logical line may be split on several physical lines by a line continuation character.
LLOC'Logical lines of commentComment 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.
LLOWLogical lines of whitespaceLogical 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.
STMTNumber of statementsTotal number of all statements.
STMTdDeclarative statementsNumber of declarative statements, which are: procedure headers, variable and constant declarations, all statements outside procedures.
STMTxExecutable statementsNumber of executable statements. A statement is executable if it is not declarative. Executable statements can only exist within procedures. STMTx=STMT-STMTd
STMTcControl statementsNumber of control statements. A control statement is an executable statement that can alter the order in which statements are executed.
STMTncNon-control statementsNumber of non-control statements, which are executable statements that are neither control nor declarative statements. STMTnc=STMTx-STMTc
XQTExecutabilityExecutability measures the amount of executable statements. It equals the number of executable statements divided by the number of all statements. XQT=STMTx/STMT
CTRLControl densityControl 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
IMPLImplemented interfacesNumber of interfaces implemented by class.
WMCnpNon-private methods defined by classWMC excluding private methods.
WMCiMethods defined and inherited by classWMC including inherited methods.
VARSVariables defined by classNumber of variables defined by class. Does not include inherited variables.
VARSnpNon-private variablesNumber of non-private variables defined by class. VARS excluding private variables.
VARSiVariables defined+inheritedNumber of variables defined and inherited by class.
EVENTSEventsEvents defined by class. This metric counts the event definitions, not event handlers.
CTORSConstructorsConstructors defined by class. VB.NET Sub New is a constructor, whereas VB Classic Class_Initialize is an event.
CSZClass sizeSize of class measured by number of methods and variables. CSZ=WMC + VARS
CISClass interface sizeSize of class interface measured by number of non-private methods and variables. CIS=WMCnp + VARSnp
TCCTotal cyclomatic complexityTotal cyclomatic complexity equals the total number of decisions + 1. TCC=Sum(CC)-Count(CC)+1
Procedure metrics
LINESPhysical linesPhysical 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.
LLINESLogical linesLogical 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
LLOCLogical lines of codeCode lines count. One logical line may be split on several physical lines by a line continuation character.
LLOC'Logical lines of commentComment 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.
LLOWLogical lines of whitespaceLogical 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.
MCOMMMeaningful commentsFull-line and end-of-line comments that have meaningful content.
LLOCtLines in call treeLogical 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.
PARAMSProcedure parametersNumber of formal parameters defined in procedure header.
VARSlocLocal variablesNumber of procedure local variables and arrays, excluding parameters.
STMTNumber of statementsTotal number of all statements.
STMTdDeclarative statementsNumber of declarative statements, which are: procedure headers, variable and constant declarations, all statements outside procedures.
STMTxExecutable statementsNumber of executable statements. A statement is executable if it is not declarative. Executable statements can only exist within procedures. STMTx=STMT-STMTd
STMTcControl statementsNumber of control statements. A control statement is an executable statement that can alter the order in which statements are executed.
STMTncNon-control statementsNumber of non-control statements, which are executable statements that are neither control nor declarative statements. STMTnc=STMTx-STMTc
XQTExecutabilityExecutability measures the amount of executable statements. It equals the number of executable statements divided by the number of all statements. XQT=STMTx/STMT
CTRLControl densityControl 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
IOgGlobal I/ONumber of global and module-level variables accessed by a procedure.
IOpParameter I/ONumber of parameters used or returned by a procedure. The function return value counts as one parameter (output parameter).
IOvarsInput and output variablesTotal number of input and output variables for a procedure, including parameters and function return value. IOvars=IOg+IOp
IFINInformational fan-inAmount of data read. Procedures called + parameters read + global variables read.
IFOUTInformational fan-outAmount of data written. Procedures that call this procedure + ByRef parameters written to + global variables written to.
IFIOInformational fan-in x fan-outFan-in multiplied by fan-out. IFIO=IFIN*IFOUT
IC1Informational complexityFan-in multiplied by fan-out multiplied by procedure length (logical lines of code). IC1=IFIO*LLOC
CCCyclomatic complexityMcCabe cyclomatic complexity equals the number of execution paths through a procedure. Also known as V(C).
CC2Cyclomatic complexity with BooleansCC2 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).
CC3Cyclomatic complexity without CasesCC3 equals the regular CC metric, but each Select Case block is counted as one branch, not as multiple branches.
DCONDDepth of conditional nestingMaximum number of nested conditional statements in a procedure.
DLOOPDepth of loopingMaximum number of nested loop statements in a procedure.
DCALLTDepth of call treeMaximum number of nested procedure calls from a procedure. Recursive calls are not counted.
SCALLTSize of call treeNumber of distinct procedures in the call tree of a procedure, not counting the procedure itself.
SCStructural complexityMeasures 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
DCData complexityMeasures 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)
SYSCSystem complexityComposite measure of complexity inside procedures and between them. Defined by Card & Agresti, also known as C(i), or design complexity. SYSC=SC+DC
LENPLength of procedure nameLength of procedure name in characters.
SFINStructural fan-inNumber of procedures that call a procedure.
SFOUTStructural fan-outNumber of procedures that a procedure calls.
Variable metrics
READSReads from variableNumber of read instructions from variable.
WRITESWrites to variableNumber of write instructions to variable.
RWReads and writesNumber of reads and writes. A single instruction may count both as a read and as a write. RW=READS+WRITES
FLOWSData flowsNumber of data flows into and out of a variable. FLOWS=READS*WRITES
VARUSRVariable usersNumber of modules that use a variable.
LENVgmLength of variable nameLength of variable name in characters.