Laufzeitfehler

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Laufzeitfehler (englisch runtime error) sind in der Informationstechnik Fehler, die während der Laufzeit eines Computerprogramms auftreten.

Laufzeitfehler führen zum Absturz des ausgeführten Programms, zu falschen Ergebnissen oder zu nicht vorhersehbarem Verhalten des Programms, z. B. durch Zugriff auf inkonsistente Daten (Variablen werden überschrieben, falsche Werte gelesen).

Abgrenzung: Nicht als Laufzeitfehler gelten Programmfehler, die bereits während der Entwicklung des Programmcodes, z. B. von Entwicklungswerkzeugen wie dem Compiler, festgestellt werden. Sind dies schwerwiegende, zum Beispiel grobe Syntaxfehler, so wird in der Regeln kein ausführbarer Code erzeugt, das Programm kann deshalb nicht ausgeführt werden.

Abweichende Bedeutungen: In der Literatur treten darüber hinaus sich in Details unterscheidende Beschreibungen für den Begriff „Laufzeitfehler“ auf:

  • So gelten z. B. nach [1], [2] oder [3] nur Programmfehler als Laufzeitfehler – die nach dieser Sicht eine der möglichen Klassifizierungen für Programmfehler sind.[4] Nach anderen Quellen können Laufzeitfehler auch andere Ursachen haben, z. B. nach [2] oder[5] („or as a result of external effects“).
  • Weiterhin werden Laufzeitfehler zum Teil immer mit Abbruch gleichgesetzt,[6] während bei anderen Autoren ([7]) auch zur Laufzeit auftretende logische Fehler ohne Abbruch als Laufzeitfehler bezeichnet werden.
  • In[8] gelten als Laufzeitfehler nur im Produktivbetrieb auftretende Fehler („... nicht während der Programmentwicklung erkannt“), während dieses Kriterium in anderen Quellen nicht genannt wird – wodurch Laufzeitfehler z. B. auch beim Testen auftreten und so genannt werden können.

Gemäß dem Leitfaden "Fehlerklassifikation für Software" der BITKOM[9] zählt das Auftreten von Laufzeitfehlern zu den Fehlern der Klasse A ("sehr schwere Fehler, die Anwendung ist nicht lauffähig ...").

Eine Möglichkeit, Laufzeitfehler zu verhindern, besteht darin, Fehlerquellen vorausschauend auszuschließen, beispielsweise durch eine Feldprüfung und Typisierung. Einige Programmiersprachen sehen ergänzend die Möglichkeit vor, Laufzeitfehler als Ausnahmesituationen zu behandeln, um sinnvoll auf unvorhergesehene Ereignisse reagieren zu können.

Fehleridentifikation[Bearbeiten]

Laufzeitfehler werden in vielen Systemumgebungen zur eindeutigen Benennung - und als Verweise in einschlägige Benutzerdokumentationen - mit Nummern gekennzeichnet, z. B. Laufzeitfehler 13 (Typen unverträglich ...), Laufzeitfehler 3190 (zu viele Felder definiert). Auch werden solche Nummerierungen häufig bei Anfragen in Internet-Chats als Referenz benutzt.

Beim Auftreten eines Laufzeitfehlers erzeugt das Betriebssystem in der Regel einen Speicherdump, aus dem ein Softwareentwickler meist nähere Informationen zum Fehler und seiner Ursache erkennen kann.

Typische Beispiele[Bearbeiten]

Die meisten der nachfolgend beschriebenen Fehler würden bei angemessenem Testumfang bereits im Softwaretest auftreten und nach der Programmbereinigung nicht mehr als Laufzeitfehler auftreten:

  • Verwendung von Objektverweisen, die bisher nicht auf ein Objekt verweisen, sondern auf „gar nichts“ (z. B. Nullpointer in C)
  • fehlerhafte Speicherplatzreservierung – tritt vor allem bei Programmiersprachen auf, die keine automatische Speicherbereinigung durchführen, wie C.
  • fehlende Dateien, aus denen das Programm Daten beziehen soll.
  • Versuch, Datensätze über das Dateiende hinaus zu lesen.
  • Division durch Null.
  • Server ist nicht verfügbar oder antwortet nicht nach der maximal vorgesehenen Wartezeit
  • ein Stack Overflow, dieser tritt typischerweise ein, wenn eine rekursive Funktion zu oft verschachtelt aufgerufen wird; meist liegt eine endlose Rekursion vor, zu der es aufgrund eines Logikfehlers kommt.
  • Fehler in der technischen Programmlogik wie Endlosschleifen wegen nie eintretender Endebedingung, fehlerhafte Datenformate, z. B. weil nicht initialisiert, Index-Überlauf oder -Unterschreitung, fehlende, aber benötigte Parameter, usw.

Auch unerwartete Änderungen an der verfügbaren Hardware, die das Programm weder testen noch selbst beheben oder umgehen kann, können Laufzeitfehler verursachen, zum Beispiel:

  • Versuch eines Datenbankzugriffs, der Datenbankserver ist jedoch ausgefallen
  • Versuch, Daten auf einem Wechseldatenträger zu speichern, scheitert daran, dass jemand das Medium aus dem Laufwerk genommen hat oder dass der Datenträger schreibgeschützt ist.
  • bei verteilten Anwendungen, bei denen mehrere Rechner gleichzeitig Teile desselben Programms ausführen, kann einer der Rechner ausgefallen sein. Dadurch fehlen dem restlichen Programm Berechnungsergebnisse.

Bedeutung und Folgen[Bearbeiten]

Entsprechend der Vielfalt von Ursachen für Laufzeitfehler kann auch die Bandbreite hinsichtlich der Bedeutung und der Folgen von Laufzeitfehlern sehr groß sein. Bestimmend dafür sind zum Beispiel folgende Aspekte:

In welcher Systemumgebung tritt der Fehler auf?

Ein Laufzeitfehler beim Softwaretest gilt z. B. im Debugmodus als Normalfall oder er kann absichtlich herbeigeführt werden, zum Beispiel um eine Ausnahmebehandlung zu testen. Im Produktivbetrieb ist er dagegen in der Regeln immer ein unerwünschtes, ggf. kritisches Ereignis, das zu erheblichen Störungen führen kann; siehe auch Programmfehlerfolgen. Auch unterscheiden sich Laufzeitfehler im Hinblick auf ihre Folgen danach, ob sie in einem privaten Computerumfeld (z. B. in einem Computerspiel) oder in einem hochsensiblen Unternehmensumfeld auftreten.

Erkennung/Beseitigung des Laufzeitfehlers / Behebungsdauer

Manche Laufzeitfehler können, abhängig von ihrer Art sehr schnell erkannt und auch behoben werden. Beispiel: Wenn eine Ausgabedatei in den Ausführungsspezifikationen (JCL etc.) nicht definiert war. In anderen Fällen muss zur Fehleranalyse ggf. ein Softwareentwickler eingeschaltet werden. Muss zur Fehlerbehebung eine neue Version der Software bereitgestellt werden, so bedarf dies je nach Situation umfangreicher administrativer Maßnahmen. In zeitkritischen Anwendungen kommt zur Vermeidung von Problemen/Schäden in den durch die Anwendung unterstützten Prozessen der schnellen Analyse und Behebung eine hohe Bedeutung zu.

Bereits erzeugte Teilergebnisse

Wenn zum Zeitpunkt des Laufzeitfehlers bereits Ergebnisse erzeugt waren, muss die Verarbeitung nach der Fehlerbehebung exakt an einer bestimmten Stelle des Programms fortgesetzt oder Ergebnisse müssen in ihrer Wirkung (z. B. Updates in Datenbeständen) zurückgesetzt werden (können); siehe auch Rollback.

Einzelnachweise[Bearbeiten]

  1. Duden Informatik, ISBN 3-411-05232-5.
  2. a b Softwareentwickler-Wiki [1]
  3. Uni Hagen [2] (PDF; 1,2 MB) Masterarbeit Bertschler
  4. Uni Oldenburg [3]
  5. BCS Glossary of Computing and ICT [4]
  6. dickbaldwin alice [5]
  7. Cay Horstmann [6] JAVA for everyone
  8. IT-Wissen [7]
  9. BITKOM: Leitfaden Fehlerkassifizierung für Software