Need Help?

What metrics does Understand have?

This list is intended to be comprehensive, but we do make errors. If you don't see a metric you want, it may be named differently, or we may have it but forgot to add it to this list, or we may need to add it. E-mail us and we can sort it out for you.

Language Key:
  • A = Ada 83 or Ada 95
  • C = C/C++
  • F = FORTRAN
  • J = Java
  • P = Pascal
  • V = Jovial
So "CFJ" in the File column means the metric is available for Files and for the C/C++, FORTRAN and Java languages.

Column Header explanations:

  • Understand API Metric Name - the name used to get the metric when programming with Understand's PERL or C/C++ API.
  • Project - the metric is available as a measure for an entire project.
  • File - metric available as measure for entire file.
  • Function or Program Unit - metric is available as a measure for a function, method, or Program Unit.
  • Class- metric is available as measure of a Class.
  • Common Name - the name of the metric as described in most metrics literature. Not all metrics have this.


Understand API Metric Name and DescriptionProjectFile Function or Program UnitClassCommon Name

AvgCyclomatic -- Average cyclomatic complexity for all nested functions or methods.ACFJPVCJP
AvgCyclomaticModified -- Average modified cyclomatic complexity for all nested functions or methods.ACFJPVCJP
AvgCyclomaticStrict -- Average strict cyclomatic complexity for all nested functions or methods.ACJCJP
AvgEssential -- Average essential cyclomatic complexity for all nested functions or methods.ACFJCJ
AvgLine -- Average number of lines for all nested functions or methods.ACFPVCJ
AvgLineBlank -- Average number of blank for all nested functions or methods.ACFPVCJ
AvgLineCode -- Average number of lines containing source code for all nested functions or methods.ACFPVCJ
AvgLineComment -- Average number of lines containing comment for all nested functions or methods.ACFPVCJ
CountClassBase -- Number of immediate base classes. CJIFANIN
CountClassCoupled -- Number of other classes coupled to. Coupling means using a type, data, or member from that class. Any number of couplings to a given class counts as 1 towards the metric total.CJCBO, Coupling between Object classes
CountClassDerived -- Number of immediate subclasses. (i.e. the number of classes one level down the inheritance tree from this class).CJNOC, Number Of Children
CountDeclClass -- Number of classes.CJCJ
CountDeclClassMethod -- Number of class methods.CJ
CountDeclClassVariable -- Number of class variables.CJ
CountDeclFile -- Number of files. Note that this doesn't count files brought in via includes unless they are also defined in the Understand project file.ACFJPV
CountDeclFileCode -- Number of code files.C
CountDeclFileHeader -- Number of header files.C
CountDeclFunction -- Number of functions.CJCJ
CountDeclInstanceMethod -- Number of instance methods. CJNIM
CountDeclInstanceVariable -- Number of instance variables. CJNIV
CountDeclInstanceVariablePrivate -- Number of private instance variables.C
CountDeclInstanceVariableProtected -- Number of protected instance variables.C
CountDeclInstanceVariablePublic -- Number of public instance variables.C
CountDeclLibunit -- Number of library units. A "library unit" in Ada is a top-level (not nested) Ada program unit.A
CountDeclMethod -- Number of local (not inherited) methods. CJWMC
CountDeclMethodAll -- Number of methods, including inherited ones. CJRFC, Response For Class
CountDeclMethodConst -- Number of local const methods.C
CountDeclMethodDefault -- Number of local default visibility methods.J
CountDeclMethodFriend -- Number of local (not inherited) friend methods. CNFM
CountDeclMethodPrivate -- Number of local (not inherited) private methods. CJNPRM
CountDeclMethodProtected -- Number of local protected methods.CJ
CountDeclMethodPublic -- Number of local (not inherited) public methods. CJNPM
CountDeclModule -- Number of modules.FPFPVF
CountDeclProgUnit -- Number of program units.FF
CountDeclSubprogram -- Number of subprograms.FPVFPVFPVV
CountInput -- The number of inputs a function uses. Inputs include parameters and global variables that are used in the function. Of the two general approachs to calculating FANIN (informational versus structural) ours is the informational approach. CJFANIN
CountLine -- Number of all lines. ACFJPVACFJPVACFJPVACJVNL
CountLineBlank -- Number of blank lines. ACFJPVACFJPVACFJPVACJVBLOC
CountLineCode -- The number of lines that contain source code. Note that a line can contain source and a comment and thus count towards multiple metrics. For Classes this is the sum of the CountLineCode for the member functions of the class. ACFJPVACFJPVACFJPVACJVLOC
CountLineCodeDecl -- Number of lines containing declarative source code. Note that a line can be declarative and executable - int i =0; for instance.ACACACAC
CountLineCodeExe -- Number of lines containing executable source code.ACACACAC
CountLineComment -- Number of lines containing comment. This can overlap with other code counting metrics. For instance int j = 1; // comment has a comment, is a source line, is an executable source line, and a declarative source line.ACFJPVACFJPVACFJPVACJVCLOC
CountLineInactive -- This is the number of lines that are inactive from the view of the preprocessor. In other words, they are on the FALSE side of a #if or #ifdef preprocessor directive.CCCC
CountLinePreprocessor -- Number of preprocessor lines.CCCC
CountOutput -- The number of outputs that are SET. This can be parameters or global variables. Of the two general approachs to calculating FANOUT (informational versus structural) ours is the informational approach.CJFANOUT
CountPath -- Number of unique paths though a body of code, not counting abnormal exits or gotos. CFJANPATH
CountSemicolon -- Number of semicolons.ACJACJACJAJ
CountStmt -- Number of declarative plus executable statements.ACFJVACFJPVACFJPVACJV
CountStmtDecl -- Number of declarative statements. Note that there can be overlap here with executable statements - int i = 0; for instance.ACFJPVACFJPVACFJPVACJV
CountStmtEmpty -- Number of empty statements.Note that there can be overlap here with executable statements - int i = 0; for instance.CCCC
CountStmtExe -- Number of executable statements.Note that there can be overlap with declarative statements (int i = 0; )ACFJPVACFJPVACFJPVACJ
Cyclomatic -- Cyclomatic complexity as per the original NIST paper on the subject. Edges - Nodes + Connected Components.ACFJPVA
CyclomaticModified -- Modified cyclomatic complexity.The Cyclomatic Complexity except that each decision in a multi-decision structure (switch in C/Java, Case in Ada, computed Goto and arithmetic if in FORTRAN) statement is not counted and instead the entire multi-way decision structure counts as 1 ACFJPVA
CyclomaticStrict -- Strict cyclomatic complexity. The Cyclomatic Complexity with logical conjunction and logical and in conditional expressions also adding 1 to the complexity for each of their occurrences.ACJPVA
Essential -- Essential complexity. ACFJAev(G)
Knots -- Measure of overlapping jumps.ACA
MaxCyclomatic -- Maximum cyclomatic complexity of all nested functions or methods.CJCJ
MaxCyclomaticModified -- Maximum modified cyclomatic complexity of all nested functions or methods.CJCJ
MaxCyclomaticStrict -- Maximum strict cyclomatic complexity of all nested functions or methods.CJCJ
MaxEssentialKnots -- Maximum Knots after structured programming constructs have been removed.ACA
MaxInheritanceTree -- The depth of a class within the inheritance hierarchy is the maximum number of nodes from the class node to the root of the inheritance tree. The root node has a DIT of 0. The deeper within the hierarchy, the more methods the class can inherit, increasing its complexity. CJDIT
MaxNesting -- Maximum nesting level of control constructs (if, while, for, switch, etc.) in the function. ACFJPVA
MinEssentialKnots -- Minimum Knots after structured programming constructs have been removed.ACA
RatioCommentToCode -- Ratio of number of comment lines to number of code lines.Note that because some lines are both code and comment, this could easily yield percentages higher than 100 ACFJPVACJPVACFJPVACJV
PercentLackOfCohesion -- 100% minus average cohesion for class data members. Calculates what percentage of class methods use a given class instanceCJ
SumCyclomatic -- Sum of cyclomatic complexity of all nested functions or methods. CJCJWMC
SumCyclomaticModified -- Sum of modified cyclomatic complexity of all nested functions or methods.CJCJ
SumCyclomaticStrict -- Sum of strict cyclomatic complexity of all nested functions or methods.CJCJ
SumEssential -- Sum of essential complexity of all nested functions or methods.CJCJ
©1996-2008 Scientific Toolworks, Inc. All rights reserved.