Lernpfad:Objektorientierte Programmierung mit Java/Systematisch Fehler suchen

Aus Informatik-Box
Zur Navigation springen Zur Suche springen

Jedem Programmierer passieren Fehler. Je größer das Programm wird, desto größer wird sich die Wahrscheinlichkeit, dass sich ein Fehler einschleicht. Einige Fehler bemerkt man schnell, wenn der Compiler beim Übersetzen eine Fehlermeldung ausgibt. Andere Fehler bemerkt man erst, wenn das Programm ausgeführt wird. In der Informatik kennt man sie als Bugs.

Die Suche nach Fehlern ist eine Kunst für sich. Man kann drei Niveaus unterscheiden, wie professionell man dabei vorgeht.

Niveau 1: Versuch und Irrtum

Anfänger gehen zur Fehlersuche häufig nach dem Versuch-und-Irrtum-Prinzip vor. Dafür startest du das Programm und prüfst, ob es das erwartete Ergebnis produziert. Ist dies nicht der Fall, dann wird im Programm etwas dort geändert, wo der Fehler vermutet wird. Dann wird wieder getestet, ob das Ergebnis nun der Erwartung entspricht.

Dieses Vorgehen ist sehr zeitaufwändig und oft frustrierend, da du nur rätst, wo der Fehler liegt. Da du als Anfänger noch nicht weißt, wo typische Fehlerquellen liegen, suchst du oft an der falschen Stelle und im schlimmsten Fall baust du neue Fehler ein.

Du solltest möglichst schnell versuchen, auf dem nächsten Niveau zu arbeiten.

Niveau 2: Logging

Etwas gezielter nach Fehlern suchen kannst du, indem du in deinem Programm Ausgaben auf der Kommandozeile machst. In der Informatik nennt man das Logging.

Die einfachste Variante des Loggings in Java erhältst du mit System.out.println(String). Dieser Befehl gibt einen String auf der Kommandozeile (oder Konsole) aus. So kannst du insbesondere den Wert einer Variablen zu einem bestimmten Zeitpunkt ausgeben lassen:

for( int i = 100; i != 0; i *= -2 ) {
    i = (i-1) % 5;
    System.out.println("i ist "+i);
}

Der Nachteil an dieser Methode ist, dass sie schnell und unübersichtlich wird, wenn mehrere Variablen ausgegeben werden sollen. Dann findest du die entscheidenden Ausgaben im Wust der Informationen nicht wieder, und du verfällst wieder in Versuch-und-Irrtum.

Außerdem müssen alle println-Befehle von Hand wieder gelöscht werden. Das vergisst man leicht.

Für die Fehlersuche ist diese Methode nur geeignet, wenn auf die Schnelle der Wert einer bestimmten Variablen geprüft werden soll, oder welche Alternative in einer bedingten Anweisung eingeschlagen wird. Für alles andere solltest du das Werkzeug auf Niveau 3 nutzen.

Icon Info.png

Es ist üblich bei der Programmierung das Logging dennoch einzusetzen, um die Fehlersuche in Zusammenarbeit mit den Nutzern zu erleichtern. Viele Programme produzieren Logs, in denen wichtige Ereignisse stehen. Wenn ein Nutzer einen Fehler findet, kann er das Log an den Entwickler schicken und diesem dadurch die Fehlersuche erleichtern.


Niveau 3: Der Debugger

Alle großen Entwicklungsumgebung haben mittlerweile einen Debugger eingebaut. So auf BlueJ. Mit diesem Werkzeug kann ein Programm systematisch und gezielt auf Fehler analysiert werden.

Ein Debugger erlaubt es dir, zur Laufzeit (also während das Programm ausgeführt wird) alle Variablen zu inspizieren. Dazu kann das Programm an beliebigen Stellen abgehalten werden.

Systematisches Testen

Fragen und Antworten finden