60 likes | 170 Vues
Explore package stability, abstractness, and dependencies in software development for improved design and code quality. Learn about dependency metrics, stability vs. flexibility, the Main Sequence, and practical examples of metric analysis in C++ programming.
E N D
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 Maximally stable & abstract (0,1) Main Sequence (1,0) Maximally unstable & concrete Luca Lista - C++
…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 100 90 80 IfrGeomBase 70 IfrData 60 Abstractness 50 IfrPidData 40 30 20 IfrVisitors IfrReco IfrDataImp IfrPid 10 IfrSim IfrGeomP IfrGeom IfrEnv IfrSequence 0 IfrDataP 0 10 20 30 40 50 60 70 80 90 100 Instability Luca Lista - C++