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