Betrachten wir jede einzelne gerichtete Beziehung in diesem Diagramm, so ergeben sich insgesamt sechs Beziehungen:
- Physische Einheit → Wiederverwendung
- Physische Einheit ← Wiederverwendung
- Physische Einheit → Release
- Physische Einheit ← Release
- Wiederverwendung → Release
- Wiederverwendung ← Release
Physische Einheit → Wiederverwendung
Die physische Einheit ermöglicht eine applikationsübergreifende, native Wiederverwendung. Die Wiederverwendbarkeit einer physischen Einheit ist applikationsübergreifend, weil die Einheit verteilbar (deployable, [Knoernschild2012]) ist. Sie ist nativ, weil die Einheit in die jeweilige lokale Anwendung integriert und innerhalb des Prozesses der Anwendung aufgerufen wird (intraprocess reuse, [Knoernschild2012]).Physische Einheit ← Wiederverwendung
Da die Wiederverwendbarkeit ein wesentliches Entwurfsziel bei der Konstruktion der physischen Einheit ist, beeinflusst sie die Größe der physischen Einheit. Dabei gilt:- Je kleiner die physische Einheit ist, desto wahrscheinlicher ist sie wiederverwendbar.
- Je kleiner die physische Einheit ist, desto schwieriger ist sie wiederverwendbar.
"Maximizing reuse complicates use."Die Wahrscheinlichkeit der Wiederverwendung hängt davon ab, ob die Einheit genau diejenige Funktion erfüllt, die ich benötige. Tut sie wesentlich mehr, so wird es unwahrscheinlicher, dass ich sie einsetze, da ich keine Abhängigkeit zu Funktionen aufbauen möchte, die ich gar nicht benutze. Tut sie weniger, so kann ich allerdings denjenigen Teil, den die Einheit nicht abdeckt, durch eine andere Einheit erledigen lassen.
Die Schwierigkeit der Wiederverwendung wächst mit der Zahl der Einheiten, die ich zusammensetzen muss, um die gewünschte Funktion zu erhalten. Je mehr Einheiten beteiligt sind, desto komplexer wird das Geflecht der Abhängigkeiten und die funktionsgemäße Komposition der Einheiten.
Eines der Ziele des physischen Designs besteht darin, die optimale Balance zwischen der Wahrscheinlichkeit und der Einfachheit der Wiederverwendung der konstruierten physischen Einheiten zu schaffen.
Physische Einheit → Release
Die physische Einheit ist der eigentliche Gegenstand eines Releases. Sie ist das verteilbare Endprodukt, das von Benutzern in die eigene Anwendung integriert und dort ausgeführt werden kann.Physische Einheit ← Release
Durch ein Release wird eine physische Einheit um Eigenschaften ergänzt, die für den Nutzer der physischen Einheit erforderlich sind, um sie sinnvoll wiederverwenden zu können:- Die Einheit erhält einen eindeutigen Identifizierer (eine Nummer oder einen Namen), unter welchem sie jederzeit zum Zwecke der Verteilung bezogen werden kann.
- Die Veröffentlichung eines Releases hat keinen unmittelbaren Einfluss auf bereits verteilte ältere Versionen der physischen Einheit.
- Der Nutzer der Einheit wird über neue Versionen informiert und entscheidet auf der Grundlage der Neuerungen eines Releases, ob er das Release in die eigene Anwendung übernehmen will oder nicht.
Wiederverwendung → Release
Der Sachverhalt der Wiederverwendung und das Streben danach, die Wiederverwendbarkeit zu vereinfachen und wahrscheinlicher zu machen, beeinflussen die Eigenschaften von Releases:- Der Release-Zyklus wird davon beeinflusst, welche Wartezeit auf Fehlerkorrekturen, Änderungen und neue Funktionen den Nutzern zugemutet werden kann.
- Häufig werden Releases danach gekennzeichnet, wie hoch die zu erwartenden Aufwände sind, um eine ältere verwendete Version durch die Release-Version zu ersetzen. Ein Beispiel für eine derartige Kennzeichnung ist das Semantic Versioning.
Wiederverwendung ← Release
Ein neues Release hat keinen unmittelbaren Einfluss auf die Verwendung älterer Versionen der physischen Einheit. Soll ein neues Release verwendet werden, so entstehen dem Nutzer jedoch Aufwände. Der Nutzer wird diese Aufwände gegen den zusätzlichen Nutzen des Releases abwägen und dann entscheiden, ob er das Release verwenden möchte oder nicht.Warum Äquivalenz?
Der im Namen des Prinzips enthaltene Begriff der Equivalence wird am ehesten in folgenden Fassungen des Prinzips anschaulich:"The granule of reuse is the granule of release." [Granularity1996]
"The unit of reuse is the unit of release." [Knoernschild2012]Dies kann entweder als Gleichsetzung oder als logische Äquivalenz interpretiert werden. Gehen wir einmal, dem Namen des Prinzips folgend, von einer logischen Äquivalenz aus. Dann lässt sich die Beziehung
"unit of reuse" ⇔ "unit of release"auflösen in
"unit of reuse" → "unit of release" ∧ "unit of release" → "unit of reuse"Spätestens hier wird offensichtlich, dass es sich bei "unit of reuse/release" aber nicht um logische Aussagen handelt. Um hier sinnvoll von logischer Äquivalenz reden zu können, müsste etwas hinzugefügt werden wie
(1) Wenn eine physische Einheit wiederverwendet werden soll, dann muss muss sie ein Release sein.Das ergibt Sinn, aber wie lautet die umgekehrte Richtung?
(2) Wenn ein Release veröffentlicht werden soll, so muss es auch wiederverwendet werden.Das erscheint entweder fragwürdig oder trivial, so dass eigentlich nur (1) als Kurzfassung übrig bleibt. Der Begriff der Äquivalenz erscheint insgesamt unangebracht.
"Package cohesion"
In [Martin2002] zählt Martin das Reuse-Release Equivalence Prinzip zu den package cohesion principles. Es soll in diesem Sinn einen Beitrag zu der Entscheidung leisten, welche Granularität für eine physische Einheit angemessen ist. Nicht umsonst trägt die ursprüngliche Artikelserie Martins auch den Titel "Granularity".Wir haben oben (Sichwort Use/Reuse Paradox) gesehen, dass Granularität ein schwieriger Balanceakt zwischen der Wahrscheinlichkeit der Wiederverwendung und der Einfachheit der Wiederverwendung ist. Das Reuse-Release Equivalence Prinzip leistet bei dieser Abwägung allerdings nur wenig Hilfe.
Die Tatsache, dass eine physische Einheit nur dann wiederverwendet werden sollte, wenn sie als Release verfügbar ist, beeinflusst allenfalls auf subtile Weise die Granularität einer physischen Einheit. Für bereits veröffentlichte oder fremde Releases können wir uns diese Diskussion ohnehin sparen, da in diesem Fall die Granularität fremdbestimmt ist. Also gehen wir davon aus, dass das physische Design unter unserer eigenen Kontrolle steht.
Welche Entscheidungshilfe liefert uns dann das Wissen, dass physische Einheiten immer als Releases verwendet werden? Hier können allenfalls Aspekte des Releasemanagements in die Abwägung einbezogen werden wie z. B. Release-Zyklen, Anforderungen an die Versionierung der Einheiten oder Ähnliches. Der ursprünglich formulierte Anspruch, eine Hilfestellung bei der Wahl der geeigneten Granularität zu bieten, wird also vom Reuse-Release Equivalence Prinzip nur schwach erfüllt. Seine Einstufung als package cohesion principle erscheint daher nicht angebracht.
Katalogeintrag
Name, Kurzform | Reuse-Release Equivalence Prinzip |
Synonyme | Reuse/Release Equivalence Prinziple, REP |
Beschreibung | Eine physische Einheit, die wiederverwendet werden soll, muss als Release zur Verfügung stehen. |
Erläuterung |
Die
ursprüngliche Fassung des Prinzips von Robert C. Martin lautet
noch etwas anders:
„The
granule of reuse is the granule of release. Only components that
are released through a tracking system can be effectively reused.
This granule is the package.“
[Granularity1996]
Das
ist unnötig lang und bezieht sich zudem auf den Package-Begriff,
den ich [wie angekündigt] hier vermeide.
[Knoernschild2012]
gibt eine kürzere Version:
„The
unit of reuse is the unit of release.“
|
Beispiel(e) |
|
Historie |
|
Art des Prinzips |
|
Grad der formalen Spezifikation | Mäßig. Einerseits handelt es sich eher um ein „polititsches“ Prinzip. Andererseits sollte sich meist gut bestimmen lassen, was ein „Release“ ist. |
Vorteile |
|
Nachteile |
|
Übergeordnete Prinzipien | Modularisierungsprinzip |
Abgleitete Prinzipien | - |
Qualitätsmerkmale | Wiederverwendbarkeit (+), Wartbarkeit (+) |
Zusammenfassung
Die Beziehungen zwischen den Konzepten "physische Einheit", "Wiederverwendung" und "Release" lassen sich wie folgt zusammenfassen:Zudem ist festzuhalten, dass das Prinzip weder eine Äquivalenz ausdrückt, noch einen nennenswerten Beitrag zur Bestimmung der richtigen Granularität einer physischen Einheit liefert. Der Kern des Prinzips besteht in der einfachen Regel, physische Einheiten nur dann wiederzuverwenden, wenn sie in der Form eines Releases bereitstehen. Weitergehende Interpretationen erscheinen unangebracht.
Quellen
[Granularity1996]
– Granularity,
Robert
C. Martin, in:
IEEE
Software.
Dezember 1996, S. 4, siehe
http://www.objectmentor.com/resources/articles/granularity.pdf
[Knoernschild2012] - Java Application Architecture: Modularity Patterns with Examples Using OSGi, Kirk Knoernschild (2012)
[Martin 2002] – Agile
Software Development. Principles, Patterns, and Practices, Robert C.
Martin (2002)