Download presentation
Presentation is loading. Please wait.
1
Nov 200291.3913 R. McFadyen1 Metrics Fan-in/fan-out Lines of code Cyclomatic complexity* Comment percentage Length of identifiers Depth of conditional nesting Fog index Weighted methods per class Response for a class Lack of cohesion of methods* Coupling between objects* Depth of inheritance tree Number of children Number of overriding operations TraditionalObject-Oriented * November 2002 see http://satc.gsfc.nasa.gov/support/STC_APR98/apply_oo/apply_oo.doc
2
Nov 200291.3913 R. McFadyen2 Traditional Metrics Fan-in/fan-outFan-in is a measure of the number of functions that call some other function, say X Fan-out is a measure of the number of functions which are called by a function, say X. (See RFC) Cyclomatic complexity CC is a count of the number of test cases required to test comprehensively
3
Nov 200291.3913 R. McFadyen3 Traditional Metrics Lines of Code LOC can be counted as lines (LOC) non-comment non-blank lines (NCNB) executable statements (EXEC) Note that NASA uses executable lines of code to evaluate size Comment percentage Calculated as the total number of comments divided by the {total lines of code less the number of blank lines}
4
Nov 200291.3913 R. McFadyen4 Traditional Metrics Depth of conditional nesting Measure of the depth of nesting of IF statements in programs Fog indexMeasure of the average length of words and sentences in documents. The higher the value for the Fog index, the more difficult... Length of identifiers Measures average length of distinct identifiers
5
Nov 200291.3913 R. McFadyen5 OO Metrics Weighted methods per class WMC is the number of methods included in a class weighted by the complexity of each method Response for a class RFC is a count of all methods that can be invoked in response to a message to an object of the class
6
Nov 200291.3913 R. McFadyen6 OO Metrics Lack of cohesion of methods LOCM measures the dissimilarity of methods in a class. A highly cohesive module stands alone. Lack of cohesion increases complexity. Coupling between objects CBO is a count of the number of other classes to which a class is coupled. Measured by counting the number of distinct non-inheritance related class hierarchies on which a class depends
7
Nov 200291.3913 R. McFadyen7 OO Metrics Depth of inheritance tree DIT is the maximum number of steps from the class node to the root of the tree Number of children NOC is the number of immediate subclasses subordinate to a class in the hierarchy Number of overriding operations Number of operations in a superclass that are overridden in a subclass
8
Nov 200291.3913 R. McFadyen8 WMC Weighted methods per class WMC is the number of methods included in a class weighted by the complexity of each method How does one count this? a) simply count the number of methods, or, b) sum the complexities of the methods (complexity might be rated: 1 Simple, 2 Moderately complex, 3 Complex)
9
Nov 200291.3913 R. McFadyen9 WMC Shows that most classes have less than 20 methods, … but some have over 200 methods.
10
Nov 200291.3913 R. McFadyen10 RFC Response for a class RFC is a count of all methods that can be invoked in response to a message to an object of the class How does one count this? For a class, we count the number of distinct methods that can be invoked in response to a message, including all methods within the class hierarchy For a class, we count all messages that can be sent by all methods in the class
11
Nov 200291.3913 R. McFadyen11 RFC In this case, about half the classes have an RFC <=20
12
Nov 200291.3913 R. McFadyen12 LCOM Lack of cohesion of methods LOCM measures the dissimilarity of methods in a class. A highly cohesive module stands alone. Lack of cohesion increases complexity. How does one count this? We need a way of measuring cohesiveness (or not). Possibilities: a) compute the average over all attributes in a class number of methods using the attribute total number of methods convert to a percentage and subtract from 100
13
Nov 200291.3913 R. McFadyen13 LCOM Possibilities (continued): b) for each method, create a set of the attributes it accesses. For each pair of methods, perform the intersection of attributes. If an intersection is not empty put the set in P; if it is empty put the set in Q. The measure is the difference in cardinalities of P and Q: LCOM = P - Qif P > Q otherwise LCOM = 0
14
Nov 200291.3913 R. McFadyen14 LCOM
15
Nov 200291.3913 R. McFadyen15 CBO Coupling between objects CBO is a count of the number of other classes to which a class is coupled. Measured by counting the number of distinct non-inheritance related class hierarchies on which a class depends How does one count this? count the number of distinct noninheritance-related class hierarchies on which a class depends
16
Nov 200291.3913 R. McFadyen16 CBO A CBO value of zero corresponds to a class that is only coupled to others in its related inheritance hierarchy
17
Nov 200291.3913 R. McFadyen17 DIT Depth of inheritance tree Most classes are at level 0 and 1 DIT is the maximum number of steps from the class node to the root of the tree
18
Nov 200291.3913 R. McFadyen18 NOC Number of children NOC is the number of immediate subclasses subordinate to a class in the hierarchy How does one count this? the number of immediate subclasses subordinate to a class in the hierarchy
19
Nov 200291.3913 R. McFadyen19 NOC One of these classes, at depth 3, has almost 40 children!
20
Nov 200291.3913 R. McFadyen20 CC Cyclomatic complexity CC is a count of the number of test cases required to test comprehensively CC measures the amount of decision logic in a module. A value of 10 or less is the general recommendation. Formally, based on a program’s flowgraph, Cyclomatic complexity = number of edges – number of nodes + 2
21
Nov 200291.3913 R. McFadyen21 CC Control flowgraphs describe the logic structure of software modules. A module corresponds to a single function or subroutine in typical languages, has a single entry and exit point, and is able to be used as a design component via a call/return mechanism. Each flowgraph consists of nodes and edges. nodes represent computational statements or expressions, edges represent transfer of control between nodes.
22
Nov 200291.3913 R. McFadyen22 Flowgraph Construction - Sequence x=z y=7 y=10 Sequences are reducible to a single node: CC=?
23
Nov 200291.3913 R. McFadyen23 Flowgraph Construction – If then if x>4 then y=7 … end if CC=
24
Nov 200291.3913 R. McFadyen24 Flowgraph Construction – If Else if x>4 then y=7 … else y=10 … end if CC=
25
Nov 200291.3913 R. McFadyen25 Flowgraph Construction - While while x>0 do x=x/2 … end while CC=
26
Nov 200291.3913 R. McFadyen26 Flowgraph Construction – Do Until Do … Read x Until x=0 CC=
27
Nov 200291.3913 R. McFadyen27 Program FindMean (FILE ScoreFile) { float SumOfScores = 0.0; int NumberOfScores = 0; float Mean=0.0; float Score; Read(ScoreFile, Score); while (! EOF(ScoreFile) { if (Score > 0.0 ) { SumOfScores = SumOfScores + Score; NumberOfScores++; } Read(ScoreFile, Score); } /* Compute the mean and print the result */ if (NumberOfScores > 0) { Mean = SumOfScores / NumberOfScores; printf(“ The mean score is %f\n”, Mean); } else printf (“No scores found in file\n”); } 1 2 3 4 5 7 6 8 9
28
Nov 200291.3913 R. McFadyen28 Flowgraph 4 3 2 1 5 6 78 9 Cyclomatic complexity = CC = 11-9+2 = 4 decision structures: one while one if then one if else
29
Nov 200291.3913 R. McFadyen29 CC
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.