Stateflow Halstead Complexity
Metric ID
sfdesignlayer.StateflowHalsteadComplexity
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 Stateflow® charts and calculate design volume and difficulty using the Halstead complexity metrics.
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:
Ignores objects that you comment out.
Ignores unresolved symbols.
Ignores empty lines and empty columns in the Condition Table and Action Table.
Ignores Stateflow states and transitions that have syntax errors.
Halstead Volume
The metric calculates the Halstead volume,
V
, using the equation . 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 . 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
sfdesignlayer.StateflowHalsteadComplexity
.
metric_engine = metric.Engine; execute(metric_engine,"sfdesignlayer.StateflowHalsteadComplexity"); results = getMetrics(metric_engine,"sfdesignlayer.StateflowHalsteadComplexity")
Results
This metric returns metric results for each Stateflow design layer in the units and components in your project. A Stateflow design layer is an artifact, like a Stateflow chart, state, or truth table, that has its own canvas in Stateflow.
For each Stateflow design layer, the metric returns a metric.Result
object
with properties including:
Value
— Structure with fields for:TotalOperators
— Number of Stateflow operators and MATLAB operatorsTotalOperatorsSF
— Number of Stateflow operatorsTotalOperatorsML
— Number of MATLAB operatorsUniqueOperators
— Number of unique Stateflow operators and MATLAB operatorsUniqueOperatorsSF
— Number of unique Stateflow operatorsUniqueOperatorsML
— Number of unique MATLAB operatorsTotalOperands
— Number of Stateflow operands and MATLAB operandsTotalOperandsSF
— Number of Stateflow operandsTotalOperandsML
— Number of MATLAB operandsUniqueOperands
— Sum of unique Stateflow operands,UniqueOperandsSF
, and unique MATLAB operands,UniqueOperandsML
UniqueOperandsSF
— Each operand in Stateflow is unique, soUniqueOperandsSF
is equal toTotalOperandsSF
UniqueOperandsML
— Number of unique MATLAB operandsVolume
— Size of the design layerDifficulty
— Estimate of how difficult the design layer is to read and write
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
Model Maintainability Metrics | Stateflow Halstead Difficulty | Stateflow Halstead Difficulty Distribution