The cyclomatic complexity of a section of source code is the count of the
number of linearly independent paths through the source code. For instance, if
the source code contained no decision points such as IF statements or FOR loops,
the complexity would be 1, since there is only a single path through the code.
If the code had a single IF statement containing a single condition there would
be two paths through the code, one path where the IF statement is evaluated as
TRUE and one path where the IF statement is evaluated as FALSE.
Cyclomatic complexity is normally calculated by creating a graph of the
source code with each line of source code being a node on the graph and arrows
between the nodes showing the execution pathways. As some programming languages
can be quite terse and compact, a source code statement when developing the
graph may actually create several nodes in the graph (for instance, when using
the "?:" ternary conditional operator in C, C++, C# and Java).
In general, in order to fully test a module all execution paths through the
module should be exercised. This implies a module with a high complexity number
requires more testing effort than a module with a lower value since the higher
complexity number indicates more pathways through the code. This also implies
that a module with higher complexity is more difficult for a programmer to
understand since the programmer must understand the different pathways and the
results of those pathways.
One would also expect that a module with higher complexity would tend to have
lower cohesion (less than functional cohesion) than a module with lower
complexity. The possible correlation between higher complexity measure with a
lower level of cohesion is predicated on a module with more decision points
generally implementing more than a single well defined function. However there
are certain types of modules that one would expect to have a high complexity
number, such as user interface (UI) modules containing source code for data
validation and error recovery.
The cyclomatic complexity of a section of source code is the count of the
number of linearly independent paths through the source code. For instance, if
the source code contained no decision points such as IF statements or FOR loops,
the complexity would be 1, since there is only a single path through the code.
If the code had a single IF statement containing a single condition there would
be two paths through the code, one path where the IF statement is evaluated as
TRUE and one path where the IF statement is evaluated as FALSE.
Cyclomatic complexity is normally calculated by creating a graph of the
source code with each line of source code being a node on the graph and arrows
between the nodes showing the execution pathways. As some programming languages
can be quite terse and compact, a source code statement when developing the
graph may actually create several nodes in the graph (for instance, when using
the "?:" ternary conditional operator in C, C++, C# and Java).
In general, in order to fully test a module all execution paths through the
module should be exercised. This implies a module with a high complexity number
requires more testing effort than a module with a lower value since the higher
complexity number indicates more pathways through the code. This also implies
that a module with higher complexity is more difficult for a programmer to
understand since the programmer must understand the different pathways and the
results of those pathways.
One would also expect that a module with higher complexity would tend to have
lower cohesion (less than functional cohesion) than a module with lower
complexity. The possible correlation between higher complexity measure with a
lower level of cohesion is predicated on a module with more decision points
generally implementing more than a single well defined function. However there
are certain types of modules that one would expect to have a high complexity
number, such as user interface (UI) modules containing source code for data
validation and error recovery.