24
1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens ([email protected] ) Postdoctoral Fellow – Fund for Scientific Research (Flanders) Vrije Universiteit Brussel, Belgium

1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( [email protected] ) [email protected] Postdoctoral Fellow – Fund for Scientific

Embed Size (px)

Citation preview

Page 1: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

1

A Graph-Based Metamodelfor Object-Oriented

Software Metrics

A Graph-Based Metamodelfor Object-Oriented

Software Metrics

Tom Mens ([email protected])

Postdoctoral Fellow – Fund for Scientific Research (Flanders)

Vrije Universiteit Brussel, Belgium

Page 2: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

2ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

GoalGoal

use graphs as an underlying formalism/representation to define a formal framework for OO metrics independent of

the programming language (e.g., Smalltalk, Java, or C++) the life-cycle phase (e.g., design or implementation)

identify a minimal set of primitive functions to cover an as wide variety of OO metrics as possible

implement open and customisable metrics tools easy to add new OO metrics easy to incorporate new language features easy to use and customise at different levels of abstraction

Page 3: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

3ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

ApproachApproach

top-down improve existing metrics tools

CodeCrawler SoulMetrics

bottom-up develop generic graph-based formalism

validate on a variety of OO metrics suites on a significant number of different programs

Page 4: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

4ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Tool support: CodeCrawlerTool support: CodeCrawler

a language independent reverse engineering tool combines metrics and software visualization based on the FAMIX language-independent metamodel implemented in VisualWorks 3.0 Smalltalk runs on every major platform

Page 5: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

6ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Tool support: CodeCrawlerTool support: CodeCrawler

Page 6: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

7ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Tool support: SoulMetricsTool support: SoulMetrics

a generic logic-programming-based metrics tool defined in SOUL, a logic meta-programming environment on top of Smalltalk VisualWorks 7 a collection of logic predicates fully integrated in the Smalltalk GUI (browser) runs on every major platform

Page 7: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

8ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Tool support: SoulMetricsTool support: SoulMetrics

Page 8: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

10ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Tool support: SoulMetricsTool support: SoulMetrics

Page 9: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

11ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Represent software as graphsRepresent software as graphs

Directed attributed multi-graphs

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 10: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

12ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Primitive graph functionsPrimitive graph functions

pred: Node PF(Node) predecessor nodes

succ: Node PF(Node) successor nodes

fanIn: Node PF(Edge) incoming edges

fanOut: Node PF(Edge) outgoing edges

path: Node Node PF(Edge) edge paths

+ iterative versions predi, pred+, pred*, succi, succ+, succ*

Page 11: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

13ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Primitive graph functionsPrimitive graph functions

pred(c4)

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 12: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

14ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Primitive graph functionsPrimitive graph functions

succ(c4)

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 13: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

15ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Primitive graph functionsPrimitive graph functions

fanIn(c3)

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 14: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

16ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Primitive graph functionsPrimitive graph functions

fanOut(c3)

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 15: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

17ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Primitive graph functionsPrimitive graph functions

path(c2,c)

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 16: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

18ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Qualified graph functionsQualified graph functions

pred: NodeNodeConstraintEdgeConstraint PF(Node) idem for predi, pred+, pred*, succi, succ+, succ*

fanIn: NodeEdgeConstraint PF(Edge) idem for fanOut

path: NodeNodeNodeConstraintEdgeConstraint PF(Edge+)

begin is defined in terms of pred* calculates all nodes that have no predecessors

end is defined in terms of succ* calculates all nodes that have no successors

Page 17: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

19ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Qualified graph functionsQualified graph functions

fanIn(c,isNoUsesEdge)

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 18: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

20ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Qualified graph functionsQualified graph functions

pred(c,isClassNode,isUsesEdge)

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 19: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

21ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Object-oriented inheritance metricsObject-oriented inheritance metrics

Let nNode such that isClassNode(n)subclasses(n) := pred(n,isClassNode,isInheritsEdge)

descendants(n) := pred+(n,isClassNode,isInheritsEdge)

leafClasses(n) := start(n,isClassNode,isInheritsEdge)

inheritanceToRoot(n) := path(n,m,isClassNode,isInheritsEdge)

mend(n,isClassNode,isInheritsEdge)

NOS(n) = |subclasses(n)|

NOD(n) = |descendants(n)|

NOL(n) = |leafClasses(n)|

DIT(n) = average(inheritanceToRoot(n),map(length))

Page 20: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

22ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Object-oriented inheritance metricsObject-oriented inheritance metrics

subclasses(c) NOS(c)=2

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 21: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

23ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Object-oriented inheritance metricsObject-oriented inheritance metrics

descendants(c) NOD(c)=4

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 22: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

24ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Object-oriented inheritance metricsObject-oriented inheritance metrics

leafClasses(c) NOL(c)=2

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 23: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

25ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Object-oriented inheritance metricsObject-oriented inheritance metrics

inheritanceToRoot(c2) DIT(c2)=2

publicclassc4

protectedclassc3

privateclassc1

protectedclassc2

publicclass

c

e6uses

e3uses

e4uses

publicpackage

p1e1

uses

e8inherits

e5uses private

packagep2

e2imports

e7inherits

e12uses

e9inherits

e10inherits

e11inherits

Page 24: 1 A Graph-Based Metamodel for Object-Oriented Software Metrics Tom Mens( tom.mens@vub.ac.be ) tom.mens@vub.ac.be Postdoctoral Fellow – Fund for Scientific

26ICGT, 10 October 2002, Barcelona © Tom Mens, Vrije Universiteit Brussel

Ratio MetricsRatio Metrics

MethodHidingFactor(n)= 1 – Ratio(succ,isMethodNode,isPublicNode,isContainsEdge)(n)

= 1- |succ(n,isMethodNodeisPublicNode,isContainsEdge)|

|succ(n,isMethodNode,isContainsEdge)|

AbstractSubclassRatio(n)= 1 – Ratio(pred,isClassNode,isAbstractNode,isInheritsEdge)(n)

LeafclassRatio(n)= 1 – Ratio(pred*,isClassNode,isInheritanceLeaf,isInheritsEdge)(n)