Main Content

MATLAB Halstead Complexity

Since R2024a

Metric ID

mldesignlayer.MATLABHalsteadComplexity

Description

The Halstead complexity metrics measure the size and complexity of code, which can help you monitor code quality, identify complex areas in the design, and address software maintainability concerns.

Use this metric to count the operators and operands in MATLAB® code and calculate code volume and difficulty.

Supported Artifacts

You can collect this metric for:

To control what the dashboard classifies as a unit or component, see Categorize Models in Hierarchy as Components or Units.

Computation Details

Operators and Operands

An operator specifies an action that influences the content of a variable. An operand is the basic logical unit that the operator acts on.

The metric:

  • Uses the following definitions:

    •  MATLAB Operators

    •  MATLAB Operands

  • Ignores code that you comment out.

  • Only analyzes MATLAB code that does not contain syntax errors.

Halstead Volume

The metric calculates the Halstead volume, V, using the equation V=(N1+N2)×log2(n1+n2). N1 is the number of total operators, N2 is the total number of operands, n1 is the number of unique operators, and n2 is the number of unique operands.

Halstead Difficulty

The metric calculates the Halstead difficulty, D, using the equation D=n12×N2n2. n1 is the number of unique operators, N2 is the total number of operands, and n2 is the number of unique operands.

Collection

To collect data for this metric, execute the metric engine and use getMetrics with the metric ID mldesignlayer.MATLABHalsteadComplexity.

metric_engine = metric.Engine;
execute(metric_engine,"mldesignlayer.MATLABHalsteadComplexity");
results = getMetrics(metric_engine,"mldesignlayer.MATLABHalsteadComplexity")

Results

This metric returns metric results for each MATLAB design layer in the units and components in your project. A MATLAB design layer is an artifact, like a MATLAB function or method, that you implement using MATLAB code.

For each MATLAB design layer, the metric returns a metric.Result object with properties including:

  • Value — Structure with fields for:

    • Difficulty — Estimate of how difficult the code is to read and write

    • TotalOperands — Number of MATLAB operands

    • TotalOperators — Number of MATLAB operators

    • UniqueOperands — Number of unique MATLAB operands

    • UniqueOperators — Number of unique MATLAB operators

    • Volume — Size of the design layer

  • Scope — Structure with information about the design layer

For information on how the metric calculates the metric results, see Computation Details.

References

[1] Halstead, Maurice H. Elements of Software Science. New York: North Holland, 1979.

[2] Stürmer, Ingo, Hartmut Pohlheim, and Thorsten Rogier. 2010. "Berechnung und Visualisierung der Modellkomplexität bei der modellbasierten Entwicklung sicherheitsrelevanter Software." In Automotive - Safety & Security, edited by B. Keller et al., 69-82. Aachen: Shaker Verlag.

[3] Yu, Sheng, and Shijie Zhou. “A Survey on Metric of Software Complexity.” In 2010 2nd IEEE International Conference on Information Management and Engineering, 352–56, 2010. https://doi.org/10.1109/ICIME.2010.5477581.

See Also

| |

Related Topics