Man könnte die bisherige Stabilitäts-Definition als Änderungswiderstand bezeichnen, wobei sich dieser Widerstand auf der Basis der Kosten ergibt, die mit der Änderung verbunden sind.
Diesem Widerstand stellt Martin nun den Änderungsdruck gegenüber, der darauf hinwirkt, dass die Komponente geändert werden muss. Wie sich zeigt, lassen sich beide Kräfte durch ein vereinfachtes metrisches Modell ausdrücken, das ausschließlich die eingehenden und ausgehenden Abhängigkeiten der Komponente abzählt und in Beziehung setzt.
Die Anzahl von Abhängigkeiten
Abhängigkeiten lassen sich zählen. Ein Software-Element verwendet ein anderes Software-Element zählbar häufig, und es wird auch zählbar häufig verwendet.- Änderungsdruck: Verwendet ein Software-Element viele andere Software-Elemente, so wird es hierdurch instabiler, da Änderungen in diesen anderen Elementen auch Änderung im betrachteten Element erforderlich machen könnten. Man könnte sagen: Durch die Zahl der Abhängigkeiten wächst der Änderungsdruck auf das Element. Hängt ein Software-Element von keinem anderen Element ab, so nennt Martin diese Eigenschaft "Unabhängigkeit" (engl. "Independence").
- Änderungswiderstand: Wird ein Software-Element von vielen anderen Software-Elementen verwendet, so wird es hierdurch stabiler, da Änderungen in diesem Element potentiell auch Änderungen in allen von ihm abhängigen Elementen bewirken könnten. Diese hohen Änderungskosten wirken der potentiellen Änderung entgegen und machen sie unwahrscheinlicher. Der Änderungswiderstand des Elements wächst. Martin nennt diese Eigenschaft eines Software-Elements "verantwortungsvoll" (engl. "responsible").
- Ca (afferent couplings): Die Anzahl von Klassen außerhalb des Packages, die von Klassen innerhalb des Packages abhängen.
- Ce (efferent couplings): Die Anzahl von Klassen innerhalb des Packages, die von Klassen außerhalb des Packages abhängen.
- I (Instability): Ce / (Ca + Ce).
Man kann sich bei Ansicht der Instability-Metrik fragen, warum nicht direkt Ce / Ca gewählt wurde: Die ausgehenden Abhängigkeiten wirken erhöhend, die eingehenden Abhängigkeiten vermindernd auf die Metrik. Dann aber wäre die Metrik nicht auf einen Wert zwischen 0 und 1 "genormt". Andererseits hat auch die von Martin gewählte Form ihre Nachteile. Ist Ce = 0, so macht die Metrik keinen Unterschied mehr, ob eine oder 100 Klassen von dem Package abhängen: Das Package wird in beiden Fällen als maximal stabil (I = 0) gemessen (selbst dann, wenn der Änderungsdruck minimal ist).
Im folgenden Blogartikel werde ich auf einige differenziertere Aspekte der Instability-Metrik eingehen.