[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# 2. Programmfehler

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 2.1 Einführung in Programmfehler

Maxima wird ständig weiterentwickelt. Der Funktionsumfang wird erweitert und Fehler, die bei einem Programm dieser Komplexität kaum zu vermeiden sind, werden korrigiert. Fehler können berichtet werden. Werden ausreichend Informationen mitgeteilt, können die Entwickler Maxima weiter verbessern. Ein aktueller Link zur Webseite zum Berichten von Fehlern sowie die notwendigen Informationen über die Maxima-Installation werden mit der Funktion `bug_report` angezeigt. Um die Installation auf dem Rechner zu testen, kann die Maxima-Testsuite mit der Funktion `run_testsuite` ausgeführt werden. Die folgende Übersicht zeigt die Funktionen und Variablen für das Testen der Installation und das Berichten von Fehlern:

       run_testsuite     testsuite_files     bug_report     build_info

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## 2.2 Funktionen und Variablen für Programmfehler

Funktion: run_testsuite ([options])

  Die Funktion `run_testsuite` führt die Maxima-Testsuite aus. Erfolgreiche Tests und Tests, die zwar nicht erfolgreich, aber als ein bekannter Fehler gekennzeichnet sind, geben die Meldung "passed". `run_testsuite` akzeptiert die folgenden optionalen Schlüsselworte als Argumente:

  `display_all`

    Hat das Schlüsselwort `display_all` den Wert `true`, werden alle Tests angezeigt. Der Standardwert ist `false`. In diesem Fall werden nur die Tests angezeigt, die fehlschlagen.

  `display_known_bugs`

    Hat das Schlüsselwort `display_known_bugs` den Wert `true`, werden alle Tests angezeigt, die als fehlerhaft gekennzeichnet sind. Der Standardwert ist `false`.

  `tests`

    Das Schlüsselwort `tests` erhält eine Liste mit den Testdateien, die ausgeführt werden sollen. Eine Testdatei kann durch eine Zeichenkette oder ein Symbol angegeben werden. Der Standard ist, dass alle Testdateien ausgeführt werden, die in der Optionsvariablen `testsuite_files` enthalten sind.

  `time`

    Hat das Schlüsselwort `time` den Wert `true`, werden die Laufzeiten der einzelnen Testdateien angezeigt. Hat `time` den Wert `all` und `display_all` den Wert `true`, wird die Laufzeit jedes einzelnen Tests angezeigt. Der Standardwert ist `false`.

  Das Ausführen einer Testdatei kann die Maxima-Umgebung ändern. Typischerweise führt eine Testdatei zuerst das Kommando `kill(all)` aus, um eine definierte Umgebung herzustellen, in der keine nutzerdefinierten Funktionen und Variablen vorhanden sind. Siehe auch die Funktion `kill`.

  Testdateien können auch von der Funktion `batch` mit der Option `test` ausgeführt werden. Siehe die Dokumentation der Funktion `batch` auch für ein Beispiel, wie eine Testdatei aufgebaut ist.

  `run_testsuite` hat den Rückgabewert `done`.

  Beispiele:

      (%i1) run_testsuite(tests = ["rtest1", rtest2]);
      Running tests in rtest1: 111/111 tests passed
      Running tests in rtest2: 66/66 tests passed

      No unexpected errors found out of 177 tests.
      Evaluation took:
        0.344 seconds of real time
        0.30402 seconds of total run time (0.30002 user, 0.00400 system)
        88.37% CPU
        581,206,031 processor cycles
        7,824,088 bytes consed

      (%o1)                         done

  Es werden zusätzlich alle Tests angezeigt. Die Ausgabe wird hier nach dem zweiten Test abgekürzt.

      (%i2) run_testsuite(display_all=true, tests=["rtest1",rtest2]);
      Running tests in rtest1:
      ********************** Problem 1 ***************
      Input:
      (fmakunbound(f), kill(functions, values, arrays))

      Result:
      done

      ... Which was correct.

      ********************** Problem 2 ***************
      Input:
                   2
      f(x) := y + x

      Result:
                   2
      f(x) := y + x

      ... Which was correct.

      [...]

  Im folgenden Beispiel werden die Tests ausgegeben, von denen bekannt ist, dass sie fehlerhaft sind. Dies sind die Tests mit den Nummern 76 und 78.

      (%i1) run_testsuite(display_known_bugs=true, tests=[rtest12]);
      Running tests in rtest12:
      ********************** Problem 76 ***************
      Input:
                 2
      letsimp(foo (x))

      Result:
             2
      1 - bar (aa)

      This differed from the expected result:
             2
      1 - bar (x)
      ********************** Problem 78 ***************
      Input:
                 4
      letsimp(foo (x))

      Result:
         4            2
      bar (aa) - 2 bar (aa) + 1

      This differed from the expected result:
               2         4
      1 - 2 bar (x) + bar (x)

      76/78 tests passed

      The following 2 problems failed: (76 78)

      Error summary:
      Errors found in /usr/local/share/maxima/5.23post/tests/rtest12.mac,
      problems: (76 78)
      2 tests failed out of 78 total tests.
      Evaluation took:
        0.157 seconds of real time
        0.12801 seconds of total run time (0.12401 user, 0.00400 system)
        [Run times consist of 0.008 seconds GC time,
         and 0.121 seconds non-GC time.]
        81.53% CPU
        9 forms interpreted
        71 lambdas converted
        254,604,658 processor cycles
        6,145,064 bytes consed

      (%o0)                         done

Optionsvariable: testsuite_files

  Die Optionsvariable `testsuite_files` enthält die Liste der Testdateien, die von `run_testsuite` standardmäßig ausgeführt werden. Wenn bekannt ist, dass einzelne Tests einer Testdatei fehlschlagen werden, dann wird anstatt dem Namen der Datei eine Liste eingefügt, die den Namen und die Nummern der fehlerhaften Tests enthält. Das folgende Beispiel zeigt die Zuweisung einer neuen Liste und wie fehlerhafte Tests gekennzeichnet werden:

       testsuite_files : ["rtest13s", ["rtest14", 57, 63]]

  Die Einträge der Liste bedeuten, dass die Dateien "rtest13s" und "rtest14" von der Funktion `run_testsuite` ausgeführt werden sollen und das bekannt ist, dass die Tests mit den Nummern 57 und 63 der Testdatei "rtest14" fehlschlagen werden.

Funktion: bug_report ()

  Zeigt die Maxima- und Lisp-Version der Installation sowie einen Link zur Webseite des Maxima-Projekts. Die Informationen zur Version werden auch von `build_info` angezeigt. Wenn ein Programmfehler berichtet wird, ist es hilfreich, die Maxima- und Lisp-Version in den Fehlerbericht aufzunehmen. `bug_report` gibt eine leere Zeichenkette `""` zurück.

  Beispiel:

      (%i1) bug_report();

      Please report bugs to:
          https://sourceforge.net/p/maxima/bugs/
      To report a bug, you must have a Sourceforge account.
      Please include the following information with your bug report:
      -------------------------------------------------------------
      Maxima version: "5.36.1"
      Maxima build date: "2015-06-02 11:26:48"
      Host type: "x86_64-unknown-linux-gnu"
      Lisp implementation type: "GNU Common Lisp (GCL)"
      Lisp implementation version: "GCL 2.6.12"
      -------------------------------------------------------------
      The above information is also reported by the function 'build_info()'.

Funktion: build_info ()

  Zeigt die Maxima- und Lisp-Version der Installation. `build_info` gibt die Eigenschaften der Maxima-Version als Maxima structure (definiert durch `defstruct`) zurück. Die Felder der Struktur sind: `version`, `timestamp`, `host`, `lisp_name` und `lisp_version`. Wenn die Ausgabe formatiert erfolgt (mit `display2d:true;`), werden die Ergebnisse als kurze Tabelle ausgegeben.

  Beispiel:

      (%i1) build_info ();
      (%o1)
      Maxima version: "5.36.1"
      Maxima build date: "2015-06-02 11:26:48"
      Host type: "x86_64-unknown-linux-gnu"
      Lisp implementation type: "GNU Common Lisp (GCL)"
      Lisp implementation version: "GCL 2.6.12"
      (%i2) x : build_info ()$
      (%i3) x@version;
      (%o3)                               5.36.1
      (%i4) x@timestamp;
      (%o4)                         2015-06-02 11:26:48
      (%i5) x@host;
      (%o5)                      x86_64-unknown-linux-gnu
      (%i6) x@lisp_name;
      (%o6)                        GNU Common Lisp (GCL)
      (%i7) x@lisp_version;
      (%o7)                             GCL 2.6.12
      (%i8) x;
      (%o8)
      Maxima version: "5.36.1"
      Maxima build date: "2015-06-02 11:26:48"
      Host type: "x86_64-unknown-linux-gnu"
      Lisp implementation type: "GNU Common Lisp (GCL)"
      Lisp implementation version: "GCL 2.6.12"

  Der Versionsstring (hier 5.36.1) kann auch folgendermassen aussehen: branch_5_37_base_331_g8322940_dirty

      (%i1) build_info();
      (%o1)
      Maxima version: "branch_5_37_base_331_g8322940_dirty"
      Maxima build date: "2016-01-01 15:37:35"
      Host type: "x86_64-unknown-linux-gnu"
      Lisp implementation type: "CLISP"
      Lisp implementation version: "2.49 (2010-07-07) (built 3605577779)
           (memory 3660647857)"

  In diesem Fall wurde Maxima nicht von einem Release sondern direkt aus dem Git checkout des Sourcecodes compiliert. Im obigen Beispiel ist der Checkout 331 Commits nach dem letzten Git-Tag (üblicherweise ein Maxima-Release (5.37 im obigen Beispiel)) und der verkürzte Commit Hash des letzten Commits lautet "8322940".

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

This document was generated by Viktor T. Toth on Oktober, 3 2017 using texi2html 1.76.