You are on page 1of 12

Cyclomatic Complexity

Dan Fleck
Fall 2009

Coming up: What is it?


What is it?
 A software metric used to measure the
complexity of software
 Developed by Thomas McCabe
 Described (informally)
as the number of
simple decision
points + 1

Coming up: What is it?


What is it?
 Essentially the number of linearly
independent paths through the code
 The code has no decision statements:
complexity = 1
 The code has an if statement, there are two
paths through the code: complexity = 2
Cyclomatic Complexity V(G)

Computing the cyclomatic


complexity:

number of simple decisions + 1

In this case, V(G) = 4

From Pressman Slides - Software Engineering a Practical Approach 6,e


Coming up: What is it?
Cyclomatic Complexity V(G)

Convert
To

This is NOT a simple decision!


These are simple decisions!

A simple decision chooses one of two options


Steps to calculate complexity
 Draw the control flow graph of the code
 Count the number of edges = E
 Count the number of nodes = N
 Count the number of connected
components = P
 Complexity = M – N + 2P
 What is the complexity for the graph?
Graph Complexity
(Cyclomatic Complexity)
A number of industry studies have indicated
that the higher V(G), the higher the probability
or errors.

modules

V(G)

modules in this range are


more error prone

From Pressman Slides - Software Engineering a Practical Approach 6,e


Coming up: What is it?
Basis Path Testing

Next, we derive the


independent paths:
1

Since V(G) = 4,
2 there are four paths

3 Path 1: 1,2,3,6,7,8
4
5 6 Path 2: 1,2,3,5,7,8
Path 3: 1,2,4,7,8
Path 4: 1,2,4,7,2,4,...7,8
7
Finally, we derive test
cases to exercise these
8
paths.

From Pressman Slides - Software Engineering a Practical Approach 6,e


Coming up: What is the complexity?
What is the complexity?
public void howComplex(i) {

while (i<10) {
i++;
System.out.printf("i is %d", i);
if (i%2 == 0) {
System.out.println("even");
} else {
System.out.println("odd");
}
}
}

Coming up: What is the complexity V(G)?


What is the complexity V(G)?
public void howComplex() {
int i=20;

while (i<10) {
System.out.printf("i is %d", i);
if (i%2 == 0) {
System.out.println("even");
} else {
System.out.println("odd");
}
}
}

V(G) = 2 decisions + 1 = 3

Coming up: Output from JavaNCSS


Output from JavaNCSS
NCSS = Non Commenting Source Statements

CCN = cyclomatic complexity number


Better Tool Found
Better Tool Found (Nov 2009)
 RefactorIt
 http://sourceforge.net/projects/refactorit/
 http://www.aqris.com/display/A/Refactorit

 Provides Cyclomatic Complexity many


other metrics, and refactoring tools
 Comment density
 Coupling
 Depth of inheritance,
 …

You might also like