zur vorherigen Seite  zum Inhaltsverzeichnis   zur nächsten Seite

Antwort:

  1. Wird das fehlerhafte Programm (mit der geänderten Schleife) das korrekte Maximum der Daten, wie es in der ursprünglichen Initialisierungsliste gegeben ist, finden?
    • Ja — für dieses spezielle Set von Daten wird das Programm das korrekte Maximum berechnen.
  2. Wann wird das Programm nicht korrekt arbeiten?
    • Wenn das größte Element des Arrays in der letzten Zelle ist (und nur einmal im Array vorkommt).
  3. Ist es offensichtlich, dass es einen Bug gibt?
    • Nein — für die meisten Daten funktioniert das Programm korrekt. Wenn es nur ein paar Mal getestet wurde, könnte es jeden Test bestanden haben.

Klassischer Bug (3): Arraygrenzen übersehen

Die Änderung des Programms hat zu einem off-by-one Fehler geführt. Der Arrayindex geht nicht weit genug um die letzte Zelle des Arrays zu testen.

Mit der 10 Elemente Initialisierungsliste wird das oben stehende fehlerhafte Programm einmal in zehn Fällen scheitern (eine Liste von zufälligen Zahlen vorausgesetzt). Der Fehler könnte nicht bemerkt werden, da die Antwort des Programms nahe am Maximum ist. In einem Array mit 10.000 Elemente wird das Programm nur in einem von 10.000 Fällen scheitern. Schlampiges Testen wird den Fehler niemals finden. Off-by-one Fehler können sehr unauffällig sein.

Klassischer Bug (3): Das nicht Testen der Arraygrenzen. Fehler werden oft an den Grenzen gefunden:


Frage 13:

Was passiert, wenn der folgende Code ausgeführt wird?

int[] meinWochenlohn = {769, 588, 1245, 309, 388, 902};
int summe = 0;

for ( int j=0; j<=6; j++ ) summe += meinWochenlohn[j];

zur vorherigen Seite  zum Inhaltsverzeichnis   zur nächsten Seite