Zum Inhalt springen

Digital-Lexikon

N-Versionen-Programmierung

Auch bekannt als: N-Version Programming, NVP, Mehrversionen-Programmierung, Multiversion Programming, diversitäre Software

Definition N-Versionen-Programmierung ist ein Verfahren der Software-Fehlertoleranz, bei dem mehrere unabhängig entwickelte Programme nach derselben Spezifikation dieselbe Aufgabe parallel ausführen und ein Entscheider das Ergebnis per Mehrheit auswählt. Das N steht für die Zahl der Versionen, mindestens zwei.
Abgrenzung N-Versionen-Programmierung ist nicht dasselbe wie Hardware-Redundanz, bei der identische Kopien derselben Software auf mehreren Rechnern laufen und Programmierfehler daher alle Kopien gleich treffen. Sie setzt voraus, dass die Versionen getrennt entwickelt werden, nicht nur getrennt ausgeführt.

Herkunft und Begriff

Das Verfahren wurde 1977 von Liming Chen und Algirdas Avizienis an der University of California, Los Angeles, beschrieben. Es überträgt das Prinzip der Hardware-Redundanz auf Software: Da ein Programmierfehler in jeder Kopie desselben Programms steckt, sollen verschiedene Teams verschiedene Programme schreiben. Die zentrale Annahme lautet, dass unabhängig entwickelte Versionen selten dieselben Fehler enthalten.

Funktionsweise

  1. Eine gemeinsame Spezifikation legt fest, was das Programm leisten soll.
  2. Mehrere Teams entwickeln unabhängig voneinander je eine Version, oft mit verschiedenen Programmiersprachen, Werkzeugen oder Algorithmen.
  3. Im Betrieb laufen alle Versionen mit denselben Eingaben.
  4. Ein Entscheider vergleicht die Ausgaben und wählt das Ergebnis der Mehrheit. Bei zwei Versionen lässt sich nur eine Abweichung erkennen, nicht auflösen.

Anwendung

Eingesetzt wird das Verfahren vor allem in sicherheitskritischen Bereichen wie Luft- und Raumfahrt, Bahntechnik und Kraftwerkssteuerung. Ein bekanntes Beispiel ist das Space Shuttle: Die Hauptsoftware stammte von IBM, die Ersatzsoftware auf dem fünften Bordcomputer entwickelte Rockwell getrennt davon, nach eigenen Anforderungen und ohne gemeinsamen Code.

Bei Systemen mit künstlicher Intelligenz wird ein verwandter Gedanke diskutiert: Mehrere Sprachmodelle verschiedener Hersteller bearbeiten dieselbe Aufgabe, und ihre Antworten werden verglichen oder zur Abstimmung gestellt.

Kritik und Grenzen

  • Korrelierte Fehler: John Knight und Nancy Leveson ließen 1986 27 unabhängig entwickelte Versionen eines Programms je eine Million Tests durchlaufen. Die Versionen scheiterten deutlich häufiger gemeinsam, als es bei unabhängigen Fehlern zu erwarten gewesen wäre. Die Unabhängigkeitsannahme hielt der statistischen Prüfung nicht stand.
  • Gemeinsame Spezifikation: Ein Fehler in der Spezifikation geht in alle Versionen ein.
  • Entscheider: Der Vergleich der Ausgaben ist selbst eine mögliche Fehlerquelle, besonders bei Ergebnissen, die nicht exakt übereinstimmen müssen.
  • Kosten: Jede weitere Version vervielfacht Entwicklungs- und Prüfaufwand.
  • Sprachmodelle: Eine Studie mit über 350 Sprachmodellen (Kim u. a., ICML 2025) fand, dass zwei Modelle, die beide falsch antworten, auf einem Ranglisten-Datensatz in 60 Prozent der Fälle dieselbe falsche Antwort wählen. Modelle verschiedener Hersteller sind demnach keine unabhängigen Versionen im Sinne des Verfahrens.

Siehe auch

Änderungsprotokoll

Aktuelle Version 1.0 · Stand: · Zitierfähige Quelle: https://www.alpha-digital.de/lexikon/n-versionen-programmierung/

  1. Version 1.0 Erstveröffentlichung am
Kostenlose Erstberatung