Metriche nel software
Luca Lista
INFN, Sezione di Napoli
Luca Lista - C++
The Dependency Metrics[1]
• Responsibility, Independence and Stability
of a Package
– Ca: Afferent Couplings
• # of dependent external classes
– Ce: Efferent Couplings
• # internal classes dependent on external
– Instability: Ce / (Ca+Ce) [0,1]
• 0 = maximally independent
• 1 = dependent but with no dependents
[1] R.Martin, www.oma.com
Luca Lista - C++
Stability vs. Flexibility
• Open Closed Principle
– Stable (good) Package
• Responsible independent abstract classes
– Unstable (good) Package
• Dependent irresponsible concrete classes
• Abstractness
– # abstract classes / total # of classes [0,1]
Luca Lista - C++
The Main Sequence
• Define Stability-Abstractness relationship
(0,1)
Maximally
stable &
abstract
Abstractness
1
0
(1,0)
0
1
Instability
Luca Lista - C++
Maximally
unstable &
concrete
…and its statement
• The MS textual definition
– Packages that are maximally stable should be
maximally abstract. Instable packages should
be concrete. The abstraction of a package
should be in proportion to its stability
• Combined with the Stable Dependencies
– Dependency Inversion Principle for classes
• dependencies toward abstractions
Luca Lista - C++
Example of metrics
Main Sequence
Abstractness - Visibility
100
IfrVisitors
90
IfrSim
80
IfrSequence
IfrGeomBase
IfrReco
Abstractness
70
IfrPidData
IfrData
60
IfrPid
50
IfrGeomP
IfrPidData
40
IfrGeomBase
IfrGeom
30
IfrEnv
20
IfrReco
IfrDataImp
10
IfrGeomP
IfrGeom
0
0
10
20
30
40
50
60
70
IfrVisitors
IfrPid
IfrSim
IfrEnv IfrSequence
IfrDataP
80
90
IfrDataP
IfrDataImp
IfrData
100
Instability
0
20
40
60
%
Luca Lista - C++
80
100
120
Scarica

Nessun titolo diapositiva