Efferent Coupling definition
- It is a code quality metric.
- Efferent coupling is a coupling metric in software development.
- It measures the number of data types a class knows about.
- Efferent coupling is a coupling metric in software development, it measures the number of data types a class knows about.
- This includes inheritance, interface implementation, parameter types, variable types, and exceptions.
Efferent Coupling purpose
- This metric identifies the number of classes inside this component that depend on classes outside the component.
Outgoing dependencies (Fan-out)
- Efferent (outgoing) couplings = Who do you depend on.
- Measure of how many different packages are used by a specific package.
- Efferent couplings signal outward.
- This has also been referred to by Robert C. Martin as the Fan-out stability metric which in his book Clean Architecture he describes as Outgoing dependencies.
Efferent coupling calculation
- This metric is often used to calculate instability of a component in software architecture
- I= Fan-out / (Fan-in + Fan-out).
- This metric has a range [0,1].
- I = 0 is maximally stable while I = 1 is maximally unstable.
- Instability of a class or a module is the ratio between its efferent coupling and total coupling.
- Obviously, instability is a value between 0 and 1, inclusive.
- Instability of zero means that the class or module is absolutely stable. It depends on nobody, everybody depend on it.
- A large efferent coupling can indicate that a class is unfocused and may also indicate that it is unstable since it depends on the stability of all the types to which it is coupled.
Efferent Coupling practice
- Efferent coupling measures the number of classes on which a given class depends and has the following characteristics :
- Efferent Coupling determines the number of classes in other packages that the classes in a package depend upon.
- Efferent Coupling is an indicator of the package’s dependence on externalities.
- Classes with high efferent coupling will receive the effects of changes or defects in other classes.
- Efferent Coupling includes inheritance, interface implementation, parameter types, variable types, and exceptions.
- This has also been referred to by Robert C. Martin as the Fan-out stability metric which in his book Clean Architecture he describes as Outgoing dependencies.
- The term “stable” itself indicates the desired quality of such class or module.
- We want such class never to change, we want it to be absolutely stable, or otherwise we will have to maintain other classes that depend on it whenever we change it.
- Instability equal to one means that the class or module is absolutely instable.
- It depends on other classes and must be changed when other classes are changed.
- On the other hand, changing this class means nothing to others.
- That is why we call it “absolutely instable” – we can change it liberally and no harm will be done to other parts of the system.
More informations for the Scrum PSD certification here.