cs 635 advanced object-oriented design & programming ... · cs 635 advanced object-oriented...

40
CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics 28 Apr 2009 Copyright ©, All rights reserved. 2009 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA. OpenContent (http:// www.opencontent.org/opl.shtml) license defines the copyright on this document. 1

Upload: others

Post on 18-Jul-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

CS 635 Advanced Object-Oriented Design & ProgrammingSpring Semester, 2009

Doc 21 Metrics28 Apr 2009

Copyright ©, All rights reserved. 2009 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA. OpenContent (http://www.opencontent.org/opl.shtml) license defines the copyright on this document.

1

Page 2: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

References

2

Cyclomatic complexity, http://en.wikipedia.org/wiki/Cyclomatic_complexity

Lines of Code, http://en.wikipedia.org/wiki/Source_lines_of_code

Eclipse Metrics, http://metrics.sourceforge.net/

Specialization Index, http://semmle.com/documentation/semmlecode-glossary/specialization-index-of-a-type/

OO Design Quality Metrics: An Analysis of Dependencies, Robert Martin, http://www.objectmentor.com/resources/articles/oodmetrc.pdf

Source code for twitter4j, http://yusuke.homeip.net/twitter4j/en/index.html

Eclipse Metrics Plugin, http://eclipse-metrics.sourceforge.net/

Object-Oriented Metrics: Measures of Complexity, Brian Henderson-Sellers, Prentice Hall, 1996

2

Page 3: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Metrics

3

Effort moves toward whatever is measured

DeMarco's Principle

3

Page 4: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

The Swedish Army Dictum

4

When the map and the territory don't agree, always believe the territory.

4

Page 5: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Eclipse Metrics 1.3.6

5

http://metrics.sourceforge.net/

Docs

http://sourceforge.net/projects/metrics

Source Forge Site

Eclipse plugin

Generates about 20 metricsDisplays result in tables in EclipseGenerates dependency graphs

5

Page 6: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Eclipse Metrics Plugin

6

http://eclipse-metrics.sourceforge.net/

Author: Lance Walton

Generates about same metrics as Metrics 1.3.6Exports results to html or csvGenerates table and graphs

6

Page 7: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Lines Of Code

7

SLOCRough measure of size

Physical SLOCCode + comments + blank linesNot count blank lines over 25% of a sectionEclipse Metrics - calls this Total Lines of Code (TLOC)

Logical SLOCJust lines of actual codeEclipse Metrics

calls this Method Lines of Code (MLOC)But only code inside method bodies

Effort is highly correlated with SLOC

7

Page 8: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Basic COCOMO

8

Effort Applied = a(KLOC)b [ man-months ]

Software Cost Estimation Model

Type a b

Organic 2.4 1.05

Semi-detached 3.0 1.12

Embedded 3.6 1.20

OrganicSmall team, less than rigid requirements

Semi-detachedMedium teams,

EmbeddedTight constraints

8

Page 9: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Example - 2 KLOC Embedded

9

Effort Applied = a(KLOC)b [ man-months ]

Effort Applied = 3.6*(2)1.20 = 8.3 man-months

9

Page 10: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Problems with LOC

10

Language differences

Hand written code verses autogenerated code

Programmer variation

Defining and counting LOC

Coding accounts for about 35% of overall effort

10

Page 11: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Twitter4j Example

11

11

Page 12: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Eclipse Metrics Plugin

12

12

Metrics 1.3.6 finds 8161 total lines of code. Eclipse Metrics Plugin finds 11113 total lines of code as it does not remove large segments of white space

Page 13: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Eclipse Metrics Plugin

13

13

Number of statements = Logical LOC. Not the difference from the graph on the previous slide.

Page 14: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

More Size Metrics

14

Number of PackagesNumber of InterfacesNumber of classes per Package

14

The number of interfaces might be considered a metric related to abstraction. Although (number of interfaces / number of class) per package might be a better metric. At least in Java. Abstraction is a better metric for this.

Page 15: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

McCabe Cyclomatic Complexity

15

Number of linearly independent paths through a program

From graph theory

M = E − N + 2P

M = cyclomatic complexityE = the number of edges of the graphN = the number of nodes of the graphP = the number of connected components.

15

Page 16: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Example

16

if( c1() ) f1();else f2(); if( c2() ) f3();else f4();

f1 f2

f3 f4

N = 7E = 8M = 8 - 7 + 2*1 = 3

16

Example From http://en.wikipedia.org/wiki/Cyclomatic_complexity

Page 17: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

What does it tell us?

17

branch coverage ≤ cyclomatic complexity ≤ number of paths

Is an upper bound for the number of test cases that are necessary to achieve a complete branch coverage

Is a lower bound for the number of paths through the code

Cyclomatic Complexity

17

Page 18: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Cyclomatic Complexity & Quality

18

Higher Cyclomatic Complexity might indicate lower cohesionOne study indicated it is better indicator than metrics designed for cohesion

Some evidence that higher Cyclomatic Complexity implies more bugs

18

Page 19: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

NIST Structured Testing methodology

19

Split modules with cyclomatic complexity greater than 10

It may be appropriate in some circumstances to permit modules with a complexity as high as 15

19

Page 20: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Eclipse Metrics 1.3.6

20

20

Page 21: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Eclipse Metrics Plugin

21

21

Page 22: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Weighted Methods per Class (WMC)

22

Sum of the McCabe Cyclomatic Complexity for all methods in a class

22

Page 23: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Basic Class Metrics

23

Number of methods per classNumber of static methods per classNumber of attributes(fields) per classNumber of static attributes per class

Number of parameters per method

23

Page 24: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Twitter4j Example

24

24

Page 25: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Nested Block Depth

25

The depth of nested blocks of code

public static JSONObject toJSONObject(String string) throws JSONException { JSONObject o = new JSONObject(); JSONTokener x = new JSONTokener(string); while (x.more()) { String name = Cookie.unescape(x.nextTo('=')); x.next('='); o.put(name, Cookie.unescape(x.nextTo(';'))); x.next(); } return o; }

Depth = 2

25

Page 26: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Twitter4j Example

26

26

Page 27: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Some Inheritance Metrics

27

Depth of Inheritance Tree (DIT)Distance from class Object in the inheritance hierarchy

Number of ChildrenTotal number of direct subclasses of a class

Number of Overridden Methods (NORM)

Specialization IndexNORM * DIT / number of methods

If greater than 5 likely that superclass abstraction has a problem

27

Page 28: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Lack of Cohesion in Methods (LCOM)

28

M be the set of methods defined by the classF be the set of fields defined by the classr(f) be the number of methods that access field f, where f is a member of F<r> be the mean of r(f) over F.

High Cohesion

When each method accesses all fields<r> = |M|LCOM = 0

Low Cohesion

When each method accesses one fields<r> = 1LCOM = 1

<r> - |M|

1 - |M|

28

Some people recommend that you create an accessor for each field. When you need to access the field in the class you use the accessor, rather than access the field directly. This will give you a LCOM of 1. One has to be careful with metrics.

Page 29: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Lack of Cohesion of Methods

29

29

Page 30: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Metrics for Stable Code

30

Dependencies make code rigid, fragile and difficult to reuse

Copy

Read Keyboard

Write Printer

30

Consider a program that copies characters typed on a keyboard to a printer. Rest of lecture is from OO Design Quality Metrics: An Analysis of Dependencies, Robert Martin, http://www.objectmentor.com/resources/articles/oodmetrc.pdf

Page 31: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Flexible version

31

reader

writer

CopyReader

Writer

KeyboardReader

KeyboardReader

Have dependencies on Reader/Writer classesBut these classes are stable

31

Page 32: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Main Idea

32

When code depends on other classes, changes to those classes can force the code to change

The fewer classes code depends on the stabler the code is

32

Page 33: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Class Categories

33

Group of highly cohesive classes that

1. The classes within a category are closed together against any force of change

2. The classes within a category are reused together

3. The classes within a category share some common function or achieve some common goal

If one class must change, all classes are likely to change

33

Page 34: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Dependency Metrics

34

Afferent Couplings (Ca) The number of classes outside this category that depend upon classes within this category

Efferent Couplings (Ce) The number of classes inside this category that depend upon classes outside this categories

Instability (I)

Ce

Ca+Ce

I = 0 means a category is maximally stable

I = 1 means a category is maximally instable

34

Page 35: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Instabilty Twitter4j Example

35

35

Page 36: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

How to be flexible and stable?

36

Use abstract classes

36

Page 37: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Abstractness (A)

37

# of abstract classes in category

total # of classes in category

A = 1, all classes are abstract

A = 0, all classes are concrete

37

Page 38: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Main Sequence

38

1

1

Abstraction

Instability

Main Sequence

(0,1)

(1,0)

38

Page 39: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Distance From Main Sequence

39

Dn = | A + I - 1 |

Dn = 0 , category is on the main sequence

Dn = 1, category is far from main sequence

Values not near zero suggest restructuring the category

39

Page 40: CS 635 Advanced Object-Oriented Design & Programming ... · CS 635 Advanced Object-Oriented Design & Programming Spring Semester, 2009 Doc 21 Metrics ... Object-Oriented Metrics:

Twitter4j Example

40

40