Welche Softwareversion muss ein Sachverständiger untersuchen?

Warum der neueste Quellcode nicht automatisch der richtige Untersuchungsgegenstand ist und wie Commit, Release, Build und Systemzustand nachvollziehbar zugeordnet werden.

Stand: 18.09.2026 Quellen geprüft: 18.09.2026 Autor: Mathias Ellmann Status: veröffentlicht

Software & Quellcode

Welche Softwareversion technisch untersucht werden muss, hängt von der konkreten Fragestellung und dem relevanten Zeitpunkt ab. Der aktuellste Stand eines Repositories ist deshalb nicht automatisch der richtige Prüfgegenstand. Entscheidend ist die nachvollziehbare Zuordnung zwischen dem zu untersuchenden Ereignis, dem damaligen Softwarestand, dem erzeugten Build und der tatsächlich verwendeten Umgebung.

Kurzantwort

Untersucht werden sollte der Softwarezustand, der zur technischen Fragestellung gehört. Geht es beispielsweise um eine Abnahme, ist der hierfür bereitgestellte oder verwendete Stand technisch relevant. Geht es um einen später beobachteten Fehler, kann dagegen der zu diesem Fehlerzeitpunkt eingesetzte Produktionsstand entscheidend sein.

Commit, Branch, Tag, Release-Bezeichnung und Build-Artefakt sind dabei nicht gleichbedeutend. Für eine belastbare Untersuchung sollte dokumentiert werden, welche dieser Angaben tatsächlich den untersuchten Zustand identifiziert und wie ihre Zuordnung belegt ist.

1. Ausgangspunkt ist die technische Fragestellung

Die Frage nach der „richtigen Version“ lässt sich nicht unabhängig vom Untersuchungsauftrag beantworten. Zunächst muss geklärt werden, für welchen technischen Zustand eine Aussage benötigt wird.

Mögliche Bezugspunkte können beispielsweise sein:

Erst wenn dieser Bezug feststeht, kann technisch bestimmt werden, welche Artefakte für die Untersuchung relevant sind.

2. Der neueste Stand ist nicht automatisch der relevante Stand

Software verändert sich im Zeitverlauf. Fehler können behoben, Funktionen ergänzt, Abhängigkeiten aktualisiert oder Konfigurationen geändert werden. Eine spätere Fassung kann deshalb technisch andere Eigenschaften besitzen als die Version, auf die sich eine ursprüngliche Beanstandung bezieht.

Wird ausschließlich der aktuelle Repository-Stand untersucht, obwohl sich die Fragestellung auf eine frühere Auslieferung oder Abnahme bezieht, können zeitlich unterschiedliche Systemzustände miteinander vermischt werden.

Methodische Grenze: Eine aktuelle Softwarefassung kann für bestimmte Vergleichs- oder Rekonstruktionsfragen nützlich sein. Sie darf aber nicht ohne dokumentierte Grundlage als identisch mit einem früheren ausgelieferten oder produktiv eingesetzten Stand behandelt werden.

3. Commit beziehungsweise Objekt-ID als technischer Bezugspunkt

In einem Git-Repository können Revisionsangaben unter anderem konkrete Commit-Objekte bezeichnen. Ein vollständiger Objektname oder eine innerhalb des Repositories eindeutige Kurzform kann dadurch einen bestimmten Repository-Zustand technisch referenzieren.

Die Git-Dokumentation beschreibt außerdem, dass mit git rev-parse --verify geprüft werden kann, ob eine angegebene Revision auf ein vorhandenes Objekt aufgelöst werden kann. Mit dem Zusatz ^{commit} lässt sich zusätzlich verlangen, dass die Angabe auf ein Commit-Objekt beziehungsweise ein auf einen Commit auflösbares Objekt verweist.

Eine dokumentierte Commit-ID ist deshalb regelmäßig aussagekräftiger als eine bloße Beschreibung wie „Stand aus dem Frühjahr“.

4. Warum ein Branch-Name allein nicht genügt

Ein Branch-Name ist in Git eine Referenz. Er bezeichnet typischerweise das Commit, auf das die entsprechende Referenz aktuell zeigt. Wird auf dem Branch weitergearbeitet, kann sich dieser Bezug verändern.

Die Aussage „untersucht wurde der Branch main“ dokumentiert deshalb für sich genommen keinen dauerhaft bestimmten historischen Softwarestand.

Für eine reproduzierbare Untersuchung sollte zusätzlich festgehalten werden, auf welches konkrete Commit sich der Branch zum relevanten Untersuchungszeitpunkt bezog.

5. Ist ein Tag automatisch unveränderlich?

Auch ein Git-Tag ist zunächst eine Referenz beziehungsweise, bei annotierten Tags, ein eigenes Tag-Objekt mit Bezug zu einem anderen Objekt. Git unterscheidet insbesondere zwischen Lightweight Tags und annotierten Tags.

Die offizielle Git-Dokumentation sieht mit git tag -f ausdrücklich die Möglichkeit vor, einen bereits vorhandenen Tag-Namen zu ersetzen. Ein Tag-Name sollte deshalb nicht allein deshalb als unveränderlicher Nachweis behandelt werden, weil er wie eine Versionsnummer aussieht.

Für eine technische Dokumentation ist es sinnvoll, zusätzlich festzuhalten, auf welches konkrete Objekt der verwendete Tag verweist.

6. Release-Bezeichnung und Repository-Stand sind zu unterscheiden

Eine Bezeichnung wie Version 2.4.1 oder Release 2026-09 ist zunächst eine organisatorische oder technische Versionsbezeichnung. Entscheidend ist, wie diese Bezeichnung dem tatsächlichen Quellcode, einem Commit, einem Tag oder einem erzeugten Softwareartefakt zugeordnet wurde.

Eine Release-Bezeichnung kann ein wichtiger Identifikator sein. Für die technische Nachvollziehbarkeit sollte jedoch dokumentiert werden, wodurch die Zuordnung zum konkreten Untersuchungsgegenstand belegt wird.

7. Quellcodestand und Build-Artefakt sind nicht dasselbe

Ein Commit beschreibt den versionierten Zustand des Repositories. Das tatsächlich ausgeführte Programm kann zusätzlich von Build-Prozess, Compiler oder Laufzeit, Abhängigkeiten, Build-Parametern und eingebundenen Artefakten beeinflusst werden.

Deshalb sollte bei einer Untersuchung, die das tatsächlich ausgelieferte oder ausgeführte System betrifft, soweit möglich auch das konkrete Build-Artefakt beziehungsweise dessen dokumentierte Herkunft berücksichtigt werden.

Ein Quellcode-Commit allein beweist nicht, dass genau aus diesem Stand das untersuchte Binär- oder Deployment-Artefakt erzeugt wurde. Diese Zuordnung benötigt zusätzliche technische Nachweise.

8. Hashwerte können ein Artefakt identifizieren

Für Dateien, Archive, Container-Images oder andere übergebene Artefakte können kryptografische Hashwerte dokumentiert werden. Ein kryptografischer Hashwert kann dabei als technischer Identifikator für das konkret übernommene Artefakt festgehalten werden. Seine Aussagekraft hängt vom verwendeten Hashverfahren und von der gesicherten Zuordnung zum untersuchten Artefakt ab.

Ein Hashwert dokumentiert jedoch nicht automatisch, aus welchem Quellcode ein Artefakt erzeugt wurde oder zu welchem fachlichen Ereignis es gehört. Provenienz und zeitliche Zuordnung müssen gesondert nachvollzogen werden.

9. Der produktive Systemzustand kann über die Softwareversion hinausgehen

Das beobachtete Verhalten einer Anwendung wird nicht ausschließlich vom Quellcode bestimmt. Je nach System können beispielsweise relevant sein:

Soll ein konkretes Laufzeitverhalten untersucht werden, kann deshalb die bloße Angabe einer Softwareversionsnummer unzureichend sein.

10. Wie lässt sich der relevante Stand dokumentieren?

Abhängig von der Fragestellung kann eine belastbare technische Dokumentation beispielsweise enthalten:

11. Was tun, wenn der ursprüngliche Stand fehlt?

Nicht immer ist der tatsächlich ausgelieferte oder produktiv eingesetzte Softwarestand noch vorhanden. Dann kann geprüft werden, ob sich der relevante Zustand aus Repository-Historie, Tags, Releases, CI/CD-Protokollen, Deployment-Daten, Backups oder anderen technischen Nachweisen rekonstruieren lässt.

Eine solche Rekonstruktion ist vom unmittelbar überlieferten Originalzustand zu unterscheiden. Verbleibende Unsicherheiten, Annahmen und fehlende Artefakte müssen im Untersuchungsergebnis ausdrücklich dokumentiert werden.

12. Befund und rechtliche Würdigung bleiben getrennt

Ein technischer Befund kann beispielsweise lauten, dass ein bestimmtes Build-Artefakt einem dokumentierten Commit nicht eindeutig zugeordnet werden konnte oder dass der untersuchte Commit zeitlich nach einer relevanten Abnahme liegt.

Daraus lässt sich fachlich ableiten, welche technische Aussage mit dem vorhandenen Untersuchungsmaterial möglich ist und wo Unsicherheiten verbleiben.

Rechtliche Grenze: Welcher Softwarestand aufgrund vertraglicher Vereinbarungen rechtlich geschuldet, maßgeblich oder einer Abnahme zuzurechnen ist, ist nicht allein durch eine technische Versionsanalyse zu entscheiden. Die technische Untersuchung beschreibt identifizierbare Zustände, Zuordnungen und deren Nachweisbarkeit.

Konstruiertes Beispiel

Bei einer Softwareabnahme wurde die Bezeichnung „Release 3.2“ verwendet. Im Repository existiert ein Tag mit demselben Namen, zusätzlich liegt ein ZIP-Archiv vor, das nach Angaben einer Projektpartei ausgeliefert wurde.

Eine technische Untersuchung würde zunächst den relevanten Zeitpunkt bestimmen, den Tag auf das bezeichnete Git-Objekt auflösen und das übergebene Archiv als eigenständiges Artefakt dokumentieren. Anschließend wäre zu prüfen, ob sich dessen Inhalt nachvollziehbar dem bezeichneten Repository-Stand zuordnen lässt.

Lassen sich Tag, Commit und ausgeliefertes Archiv nicht eindeutig miteinander verbinden, wäre genau diese fehlende Zuordnung Bestandteil der technischen Aussagegrenze.

Das Beispiel ist vollständig konstruiert und stellt kein reales Mandat und keine gerichtliche Beauftragung dar.

Quellen und fachliche Grundlage

  • Technische Primärquelle Git-Projekt: gitrevisions – Specifying revisions and ranges . Grundlage für die technische Einordnung von Revisionsbezeichnern, Objekt-IDs und Referenznamen. Geprüft am 18.09.2026.
  • Technische Primärquelle Git-Projekt: git-rev-parse – offizielle Dokumentation . Relevant insbesondere für --verify und die Prüfung auf ein Commit-Objekt. Geprüft am 18.09.2026.
  • Technische Primärquelle Git-Projekt: git-tag – offizielle Dokumentation . Grundlage für die Unterscheidung von Lightweight und annotierten Tags sowie für die Möglichkeit, vorhandene Tag-Namen mit --force zu ersetzen. Geprüft am 18.09.2026.
  • Eigene Fachliteratur Mathias Ellmann: Von Code zu Lösungen im Software Engineering mit Java . Fachlicher Hintergrund zu Versionsverwaltung, Softwareentwicklung, Build-Prozessen und Fehleranalyse.
  • Eigene fachliche Einordnung Die Zuordnung von relevantem Zeitpunkt, Repository-Stand, Build-Artefakt und Systemumgebung ist eine sachverständige Untersuchungsmethodik. Welche dieser Ebenen benötigt wird, richtet sich nach der konkreten technischen Frage.

Weiterführende Beiträge

Welche Unterlagen zur Bestimmung eines konkreten Softwarestands benötigt werden können, erläutert der Beitrag Welche Unterlagen benötigt ein IT-Sachverständiger bei Streit über Individualsoftware? .

Wie ein identifizierter Softwarestand anschließend mit dokumentierten Anforderungen verglichen werden kann, erläutert Softwaremängel technisch untersuchen: Soll-Ist-Vergleich .

Wie Repository, Commit, Working Tree, Submodule und Build für eine konkrete Quellcodeuntersuchung dokumentiert werden können, erläutert der Beitrag Quellcode als Untersuchungsgegenstand: Repository, Commit, Branch und Build .

Der allgemeine methodische Rahmen ist unter Quellen und Methodik dokumentiert.

IT-Sachverständiger Mathias Ellmann

Software- und Quellcode-Gutachten

Wenn unklar ist, welcher Softwarestand für eine technische Untersuchung relevant ist, können Versionshistorie, Releases, Build-Artefakte und vorhandene Nachweise zunächst eingegrenzt werden.

Software-Gutachten ansehen