Donnerstag, 5. Dezember 2013

Stabilität - die Analogie

Zwei der Packaging-Prinzipien von Robert C. Martin basieren auf dem Konzept der Stabilität. Bevor wir uns diesen Prinzipien (dem Stable Dependencies Prinzip und dem Stable Abstractions Prinzip) widmen und diese angemessen einordnen können, ist daher zunächst einige Beschäftigung mit dem von Martin postulierten Stabilitätsbegriff erforderlich.

"Physische" Stabilität

Martin verbindet den Begriff der Stabilität mit einer anschaulichen und gewissermaßen "physikalischen" Intuition: Stabil ist, was sich schwer bewegen lässt:
"The classic definition of the word stability is: 'Not easily moved' " [MartinStability1996]. 
Ähnlich wie Modularität liefert dieses Konzept einen Ansatz, über Software-Systeme in Analogie zu realweltlichen, physischen Systemen nachzudenken. Viele Systeme verfügen über eher variable, bewegliche Teile einerseits und über stabile Stützpunkte oder Rahmenelemente andererseits. Beide wirken zusammen und ermöglichen so erst die Systemleistungen. So verfügen beispielsweise viele, insbesondere die höheren Lebewesen über innere oder äußere Skelette. Auch Bauwerke werden leicht mit dem Begriff der Stabilität assoziiert. 

Zeitliche Stabilität

Zudem schwingen mit dem Begriff auch Aspekte der Veränderlichkeit über längere Zeiträume mit: Stabilität meint dann, dass sich gewisse Bedingungen nicht ändern, dass sie in der Zukunft stabil bleiben. Während die physikalische Dimension des Begriffs eher mit gewissen strukturellen Vorstellungen von Fundamenten, fixen Konstruktionselementen usw. verknüpft ist, suggeriert die zeitliche Dimension des Begriffs eine gewisse Verlässlichkeit und Konstanz.

"Nur" eine Analogie

Bei aller Anschaulichkeit muss die Frage gestellt werden, wie tragfähig eine solche Analogie in Bezug auf Software-Systeme ist. Wenn ein Software-Element als "stabil" bezeichnet wird, so wird man gewisse Erwartungen an dieses Element haben:
  • Das Element sollte fehlerfrei funktionieren.
  • Es sollte keinen größeren künftigen Änderungen unterliegen.
  • Es sollte verlässlicher Bezugspunkt für andere Elemente sein.
Ob diese Bedingungen für ein Software-Element erfüllt sind, kann man diesem für sich genommen jedoch nur schwer ansehen. Während Stabilität in der realen Welt meist unmittelbar wahrgenommen werden kann (solide Bauweise, Festigkeit, Größe usw.), hat ein Software-Element keine offensichtlichen Eigenschaften, die es ohne weiteres als stabil oder instabil erkennbar machen. 

Insgesamt entsteht der Eindruck einer mehrdeutigen Analogie, die Eigenschaften physikalischer Systeme auf Software-Systeme abbilden möchte und dabei Gefahr läuft, Software in unpassenden Kategorien zu behandeln. In den kommenden Blog-Artikeln soll betrachtet werden, wie Martin diese Übertragung leisten möchte und welche Probleme dabei zu beachten sind.

Quellen

[MartinStability1996] - Stability, Robert C. Martin (1996), http://www.objectmentor.com/resources/articles/stability.pdf