Ein Vorschlag zur Nutzung von PassWEK (SemVer), JahrWEK (CalVer) und BezWEK (NameVer).
Tags: versioning, api, development, softwareengineering
Published: 2023-10-06 17:00:00

## Bezeichnung von Weiterentwicklungen

Die Abkürzungen _SemVer_, _CalVer_ und _NameVer_ sind geläufiger für die drei Muster zur Bezeichnung von Weiterentwicklungen ( Versionen ). Es geht hier im Wesentlichen darum eine Entscheidungshilfe anzubieten, die einem hilft ein passendes Bezeichnungsmuster zu wählen, abhängig von der Rolle, welche das Software-Erzeugnis in einem Gesamt-System hat.

## Software-Erzeugnisse

Folgendes soll eine Tafel sein. Ich weiß jedoch nicht wie man hier eine erstellt…
Daher hier der HTML-Code, damit könnt ihr euch ein Bild davon machen :-)

```
<table>
<tr>
  <th>Erzeugnis</th>
  <th>Begriffsklärung</th>
</tr>
<tr>
  <td>Bestandteil</td>
  <td>Teil einer ( natürlichen ) Einheit.<br />
Wichtig: Hat eine <i>interne</i> Schnittstelle.</td>
</tr>
<tr>
  <td>Bauteil</td>
  <td>Als ( komplexe ) Einheit, Modul zur Konstruktion eines technischen Gerätes, einer Maschine, eines Apparates o. Ä. gehöriges Teil.<br />
Wichtig: Hat eine <i>öffentliche</i> Schnittstelle.</td>
</tr>
<tr>
  <td>Einheit</td>
  <td>Das zu einem Ganzen Verbundene, Unteilbare
Wichtig: Es werden in diesem Sinne, <i>Bauteile</i> und <i>Bestandteile</i> verbunden. Anders gesagt eine Einheit besteht aus <i>Bauteilen</i> und <i>Bestandteilen</i>.</td>
</tr>
<tr>
  <td>System</td>
  <td>Herkunft := aus Einzelteilen zusammengefügtes und gegliedertes Ganzes.<br />
Wichtig: Für uns seien diese Einzelteile <i>Bestandteile</i>, <i>Bauteile</i> und <i>Einheiten</i>. Ein System bildet auch immer eine Einheit.</td>
</tr>
<tr>
  <td>Grundbau<br />
( Plattform )</td>
  <td>Grundbau := Teil eines Bauwerks, der in den Boden eingelassen ist oder ihm unmittelbar aufsitzt.
Plattform :=  Hardware oder Software, die den Rahmen für verschiedene Anwendungsprogramme o. Ä. Bildet.<br />
Wichtig: Besteht häufig u.a. aus <i>Einheiten</i>, sind also für gewöhnlich <i>Systeme</i>.</td>
</tr>
<tr>
  <td>Erweiterung</td>
  <td>( Rein sprachlich ) := Eine Sache die etw. in seinem Umfang, seiner Ausdehnung vergrößert, weiter macht.<br />
Wichtig: Hier wäre es für gewöhnlich der Leistungsumfang ( features ).</td>
</tr>
<tr>
  <td>Entwicklungszweig</td>
  <td>Kein Erzeugnis im eigentlichen Sinne…<br />
:= Von einem Entwicklungsstand aus gesehen, eine eigenständige Weiterentwicklung innerhalb eines Vorhabens.</td>
</tr>
</table>
```

## Kurzübersicht
```
<table>
<tr>
  <th>Bezeichnungsmuster</th>
  <th>Eignung</th>
</tr>
<tr>
  <td>PassWEK  ( SemVer )</td>
  <td>Bestandteile, Bauteile</td>
</tr>
<tr>
  <td>JahrWEK  ( CalVer )</td>
  <td>Systeme, Grundbauten</td>
</tr>
<tr>
  <td>BezWEK  ( NameVer )</td>
  <td>Einheiten,<br />
Erweiterungen,<br />
Entwicklungszweige</td>
</tr>
</table>
```
## PassWEK / BedWEK
BedWEK steht für _bedeutungstragende Weiterentwicklungskennung_. Die aus dem Englischen stammende Bezeichnung _SemVer_ für _semantic versioning_ ist geläufiger. Ein Beispiel wäre: bibbeispiel 1.12.4 ( libexample 1.12.4 ).

BedWEKen eignen sich um Aussagen über die Passbarkeit ( Kompatibilität ) von Bestandteilen, Bauteilen und ähnlichem zu treffen. Wichtig ist, dass das Software-Erzeugnis eine Schnittstelle anbietet welche regelmäßig von anderer Software oder von einem bestimmten Nutzerkreis verwendet wird.

### Benennungsvorschlag
Als zusätzliche Bezeichnung, aufgrund der Funktionsweise, schlage ich _Passbarkeitskennung_ bzw. _Passbarkeitskennungsmuster_ vor – kurz PassWEK.

### Wie PassWEK / BedWEK funktioniert
Die erste Stelle gibt eine Weiterentwicklungskennung für Schnittstellen an, die unpassbar ( inkompatibel ) zu anderen Weiterentwicklungen sind deren Kennungen sich an der ersten Stelle von einander unterscheiden. Die Weiterentwicklungen 1.x.y und 2.a.b sind also unpassbar zu einander. Die erste Stelle wird _Hauptkennung_ genannt  ( major version number ).

Die zweite Stelle kennzeichnet abwärtspassbare Weiterentwicklungen, sofern die erste Stelle gleich ist. Die Weiterentwicklung 1.2.x ist also abwärtspassbar zu 1.1.y. Die zweite Stelle wird _Nebenkennung_ genannt ( minor version number ).

An der dritten Stelle werden Fehlerbehebungen festgehalten. Es gilt, dass die Abwärtspassbarkeit erhalten bleibt. Die dritte Stelle wird auch _Berichtigungskennung_ genannt ( patch version number ).

Es kann noch Anhängsel an geben: 1.2.3-debug oder 1.3.5-nox.

Eine Sonderrolle hat hier die Hauptkennung „0“. Diese besagt, dass die öffentliche Schnittstelle sich in Entwicklung befindet und daher jegliche Veränderung an zweiter Stelle unpassbare Änderungen zu vorherigen Entwicklungen mit sich bringen kann.

## JahrWEK
JahrWEK steht für _jahresweiser-gegründete (1) Weiterentwicklungskennung_. Die aus dem Englischen stammende Bezeichnung _CalVer_ für _calender versioning_ ist geläufiger. Ein Beispiel wäre: Ubuntu 23.04.

JahrWEKen eignen sich um Weiterentwicklungen von Software-Systemen zu Kennzeichnen, insbesondere wenn vorgesehen ist, dass nach einem bekannten Zeitplan eine Weiterentwicklung veröffentlicht wird.

Es ist dabei darauf zu achten, dass klar ist welcher Jahresweiser genutzt wird und wie die Kennung zusammengesetzt wird. Beispiel: Ubuntu 23.04 besteht aus den letzten zwei Stellen des Jahres des gregorianischen Jahresweisers und dem zugehörigen Monat – stets zweistellig angegeben.

## BezWEK
BezWEK steht für _bezeichnungs-gegründete Weiterentwicklungskennung_. Die aus dem Englischen stammende Bezeichnung _NameVer_ für _name versioning_ ist geläufiger. Ein Beispiel wäre: Debian Sid.

BezWEKen eignen sich um Weiterentwicklungen von Einheiten eines Systems zu Kennzeichnen die keine oder öffentliche Schnittstelle haben, eine die gleichbleibend ist oder eine deren Veränderung nicht als wichtig eingestuft wird. Ein Beispiel für letzteres können Anwendungen für Endanwender mit graphischer Benutzeroberfläche sein, wobei dies auch nicht unbedingt ratsam ist. Zusätzlich lassen sich Entwicklungszweige kennzeichnen.

## Abschließender Vergleich
```
<table>
<tr>
  <th></th>
  <th>PassWEK</th>
  <th>JahrWEK</th>
  <th>BezWEK</th>
</tr>
<tr>
  <td>Bestandteile,<br />
Bauteile</td>
  <td>Geeignet, da es im Besonderen für öffentliche Schnittstellen gedacht ist. Die Passbarkeit wird ausdrücklich vermittelt.</td>
  <td>Ungeeignet, da eine Veränderung in der Zeit keine Aussage darüber trifft, ob sich Bauteil A mit Bauteil B verwenden lässt.<br /><br />
Kann ich also bibbeispiel 23.04 mit bibmuster 1445.02. verwenden?</td>
  <td>Grundsätzlich ungeeignet, da willkürlich gewählte Namen ebenfalls keine Aussage über die Passbarkeit machen.<br /><br />
Man müsste also ein System in die Bezeichnung reinbringen, welches von der Zielgruppe verstanden würde. Warum nicht einfach PassWEK nutzen?(2)</td>
</tr>
<tr>
  <td>Systeme und<br /> Grundbauten</td>
  <td>Ungeeignet, da diese selbst keine öffentliche Schnittstelle anbieten. Dies tun die Bestandteile.(3)</td>
  <td>Geeignet, insbesondere wenn nach einem bekannten Zeitplan veröffentlicht wird.<br /><br />
Welche Weiterentwicklung ist aus dem Bauch heraus neuer?
445 oder 446<br />
23.04. oder 23.10.</td>
  <td>Teilweise geeignet. Es benötigt ein Bezeichnungsmuster um bspw. feststellen zu können, dass „Bookworm“ neuer ist als „Squeeze“.</td>
</tr>
<tr>
  <td>Einheiten und deren Erweiterungen</td>
  <td>Grundsätzlich nicht. Sollte eine Einheit Erweiterungsmöglichkeiten bieten ( „Plug-ins“ ), so bietet es sich an die Weiterentwicklungen der Schnittstelle getrennt zu Kennzeichnen  mittels PassWEK.</td>
  <td>Ähnlich wie bei Systemen. Werden diese Einheiten jedoch auch in Systemen genutzt, bzw. mit Ihnen ausgeliefert, so empfiehlt sich auch BezWEK.</td>
  <td>Geeignet insbesondere wenn Einheiten mit Systemen ausgeliefert werden und selbst eine nüchterne Bezeichnung tragen.<br /><br />
Bspw. Dateiverwaltung im Vergleich zu Dateiverwaltung Birkenholzregal. Bei Einheiten genügt es zu Wissen, dass der Name der neusten Weiterentwicklung sich unterscheidet von der eigenen.</td>
</tr>
<tr>
  <td>Entwicklungszweige</td>
  <td>Nein, da Entwicklungszweige als solche kein Produkt sind mit einer öffentlichen Schnittstelle. Klar werden in Projekten Entwicklungszweige mit PassWEKen gekennzeichnet, dies ist jedoch eher im Sinne von BezWEK zu verstehen, siehe den zugehörigen Vermerk.</td>
  <td>Sofern Entwicklungszweige jahresweiserabhängig erstellt werden ( mir fällt da gerade nichts ein ).</td>
  <td>Geeignet, weil dadurch ganz klar vermittelt werden kann wozu dieser Entwicklungszweig überhaupt erstellt wurde.</td>
</tr>
</table>
```

## Quellen

- [https://dev.to/liyasthomas/hoppscotch-releases-semver-to-calver-1ajm](https://dev.to/liyasthomas/hoppscotch-releases-semver-to-calver-1ajm)
( Hat mich dazu begeistert diesen Beitrag zu verfassen. Danke nochmals. )
- [https://calver.org/](https://calver.org/)
- [https://semver.org/](https://semver.org/)

### Begriffe
- Bestandteil: [https://www.dwds.de/wb/Bestandteil](https://www.dwds.de/wb/Bestandteil)
- Bauteil: [https://www.dwds.de/wb/Bauteil#d-2-1](https://www.dwds.de/wb/Bauteil#d-2-1)
- System: [https://www.dwds.de/wb/System](https://www.dwds.de/wb/System)
- Grundbau: [https://www.dwds.de/wb/Grundbau](https://www.dwds.de/wb/Grundbau)
- Plattform: [https://www.dwds.de/wb/Plattform#d-1-3](https://www.dwds.de/wb/Plattform#d-1-3)
- Einheit: [https://www.dwds.de/wb/Einheit#d-1-1-2](https://www.dwds.de/wb/Einheit#d-1-1-2)
- Erweiterung: [https://www.dwds.de/wb/erweitern#d-1-1](https://www.dwds.de/wb/erweitern#d-1-1)
- Entwicklungszweig: [https://www.dwds.de/wb/abzweigen](https://www.dwds.de/wb/abzweigen)

Der Zugriff auf die Begriffsquellen erfolgte am 09.09.2023.


(1) Jahresweiser ist Deutsch für Kalender.
(2) Zugegebener Maßen kann es sein, dass ein bestimmtes Bezeichnungsmuster einfach schöner klingt als PassWEK, oder eine tiefergehende Bedeutung vermitteln kann.
(3) Für Webdienste bspw. gilt, dass die serverseitige Schnittstelle eines Dienstes ein Bestandteil des Gesamtsystems ist. Der Schnittstellennutzer ( die Software ) ist ebenfalls ein Bestandteil des Systems.