McCabe’s Cyclomatic Complexity Number_Software Measurement

14
COMPSCI 702: Software Measurement McCabe’s Cyclomatic Complexity Number Ewan Tempero [email protected] www.cs.auckland.ac.nz: ewan Emilia Mendes (supervisor) [email protected] COMPSCI 702 c Ewan Tempero – p.1/14

Transcript of McCabe’s Cyclomatic Complexity Number_Software Measurement

Page 1: McCabe’s Cyclomatic Complexity Number_Software Measurement

COMPSCI 702:

Software Measurement

McCabe’s Cyclomatic Complexity Number

Ewan Tempero [email protected]

www.cs.auckland.ac.nz:∼ewan

Emilia Mendes (supervisor) [email protected]

COMPSCI 702 c© Ewan Tempero – p.1/14

Page 2: McCabe’s Cyclomatic Complexity Number_Software Measurement

Lecture Overview

• Structure complexity• McCabe’s Cyclomatic Complexity Number• References — Fenton and Pfleeger, Chapters 7 & 8• Potential Exam Question

Explain the intuition that supports using McCabe’sCyclomatic Complexity Number as a metric for“complexity”.

COMPSCI 702 c© Ewan Tempero – p.2/14

Page 3: McCabe’s Cyclomatic Complexity Number_Software Measurement

Structure complexity: Intuition

• The more “complex” the structure of code◦ . . . the harder it is to understand◦ . . . the more likely it will have a defect◦ . . . the harder it will be to change◦ . . . the longer it will take to produce◦ . . . the more difficult it will be to reuse

COMPSCI 702 c© Ewan Tempero – p.3/14

Page 4: McCabe’s Cyclomatic Complexity Number_Software Measurement

What is structure?

• control-flow — the sequence of instructions that areexecuted

• data-flow — the creation and movement of data between“components” of the code

• data organisation — the relationship of data items to eachother

COMPSCI 702 c© Ewan Tempero – p.4/14

Page 5: McCabe’s Cyclomatic Complexity Number_Software Measurement

Directed Graphs

• a mathematical structure (with an appealing visualrepresentation) for representing things that are related

• consists of vertices (or nodes, or points), connected byedges (or line segments, or arcs).Vertices: A, B, C, D, E, FEdges: (A,C), (A,C), (A,E), (B,C), (B,F), (C,D), (D,A), (E,F),

A

B

CE

F

D

• Also: undirected graphs, rules restricting edges betweenvertices, classification of vertices

• Graph Theory — the study of properties of graphs

COMPSCI 702 c© Ewan Tempero – p.5/14

Page 6: McCabe’s Cyclomatic Complexity Number_Software Measurement

Flowgraphs

• Directed graphs (flowgraphs) can be used to model controlflow of a program

• vertex = statement, edge = (A,B) if control flows fromstatement A to B

• properties of flowgraphs may provide information aboutproperties of the code

COMPSCI 702 c© Ewan Tempero – p.6/14

Page 7: McCabe’s Cyclomatic Complexity Number_Software Measurement

Example

public static boolean isPrime(int n) {A boolean prime = true;B int i = 2;C while (i < n) {D if (n % i == 0) {E prime = false;

}F i++;

}G return prime;

}

A

G

F

E

D

C

B

COMPSCI 702 c© Ewan Tempero – p.7/14

Page 8: McCabe’s Cyclomatic Complexity Number_Software Measurement

McCabe’s Cyclomatic Complexity Number (CCN)

• measures the number of linearly independent paths throughthe flowgraph

• v(F ) = e− n + 2, F the flowgraph of the code, n the numberof vertices, e the number of edges

• Intuition — the larger the CCN the “more complex” the code• Various sources recommend a CCN of no more than 10-15• Example: CCN = 8 − 7 + 2 = 3

COMPSCI 702 c© Ewan Tempero – p.8/14

Page 9: McCabe’s Cyclomatic Complexity Number_Software Measurement

Example 2

public static boolean isPrimeA(int n) {A for (int i = 2; i < n; i++) {B if (n % i == 0) {C return false;

}}

D return true;}

A

D

C

B

COMPSCI 702 c© Ewan Tempero – p.9/14

Page 10: McCabe’s Cyclomatic Complexity Number_Software Measurement

(counter) Example

if (u)

print "How are you?"

print "Hi"

if (w)

if (v)

if (a) if (b) goto d: else goto e:else if (c) goto d: else goto e:d: print "Hi. "e: print "How are you?"

CNN= 11 − 9 + 2 = 4 CNN= 7 − 5 + 2 = 4

COMPSCI 702 c© Ewan Tempero – p.10/14

Page 11: McCabe’s Cyclomatic Complexity Number_Software Measurement

(counter) Example (2)

• From graph theory, v(f) = d + 1, where d is the number ofpredicate nodes (tests/conditions)

public static boolean isPrimeA(int n) {for (int i = 2; i < n; i++) {

if (n % i == 0) {return false;

}}return true;

}

public static boolean dividableBy4(int n) {if (n % 2 == 0) {

if ((n/2) % 2 == 0) {return true;

}}return false;

}

COMPSCI 702 c© Ewan Tempero – p.11/14

Page 12: McCabe’s Cyclomatic Complexity Number_Software Measurement

Switch statements

switch (a) {case one:

break;case two: // fall throughcase three:

break;default:}....if (a == one) {

// do case one} else if (a == two) {

// do case two// do case three

} else if (a == three) {// do case three

} else {// default

}

COMPSCI 702 c© Ewan Tempero – p.12/14

Page 13: McCabe’s Cyclomatic Complexity Number_Software Measurement

Exceptions

public void aMethod(Object obj) {// some code without conditionalsobj.toString();// more code without conditionals

}

...try {

// some codeFileInputStream f = new FileInputStream("foo");// more code

} catch (FileNotFoundException e) {e.printStackTrace();

} catch (SecurityException e2) {e2.printStackTrace();

} finally {System.out.println("finally!");

}...

COMPSCI 702 c© Ewan Tempero – p.13/14

Page 14: McCabe’s Cyclomatic Complexity Number_Software Measurement

Validation

• Attribute relation model: direct metric• Unit Definition Model: number of linearly independent paths• Instrumentation Model: construct the flowgraph of the code,

determine the number of edges and vertices — compute or(much easier) identify condition vertices — compute

• Measurement protocol model: for loops, exceptions, switchstatements

• Entity population Model: does it make sense to talk about“average” CCN?

• Representation Condition:◦ for complexity — dubious◦ for number of linearly independent paths — valid

COMPSCI 702 c© Ewan Tempero – p.14/14