Frage

Ich unterhalte ein Python -Programm, das Ratschläge zu bestimmten Themen enthält. Dies geschieht, indem ein komplizierter Algorithmus auf die Eingabedaten angewendet wird.

Der Programmcode wird regelmäßig geändert, um neu gefundene Fehler zu beheben, und um den zugrunde liegenden Algorithmus zu ändern.

Ich möchte Regressionstests verwenden. Das Problem ist, dass es keine Möglichkeit gibt, zu sagen, was die "richtige" Ausgabe für eine bestimmte Eingabe ist - außer durch Ausführen des Programms (und selbst dann nur, wenn es keine Fehler hat).

Ich beschreibe unter meinem aktuellen Testprozess. Meine Frage ist Egal, ob es Tools gibt, mit denen dieser Prozess automatisiert wird (und natürlich, wenn es noch andere Feedback zu dem gibt, was ich tue).

Das erste Mal, dass das Programm für alle meine Eingabefälle korrekt ausgeführt wurde, habe ich ihre Ausgänge in einem Ordner gespeichert, den ich für "validierte" Ausgänge bezeichnet habe. "Validiert" bedeutet, dass die Ausgabe nach meinem besten Wissen für eine bestimmte Version meines Programms korrekt ist.

Wenn ich einen Fehler finde, mache ich alle Änderungen vor, von denen ich denke, dass sie ihn beheben würden. Ich habe das Programm dann mit allen Eingangssätzen erneut ausgelegt und die Ausgänge manuell vergleichen. Wenn sich der Ausgang ändert, tue ich mein Bestes, um diese Änderungen informell zu überprüfen und herauszufinden, ob:

  1. Die Änderungen sind ausschließlich auf die Fehlerbehebung zurückzuführen oder
  2. Die Änderungen sind zumindest teilweise auf einen neuen Fehler zurückzuführen, den ich eingeführt habe

In Fall 1 erhöht ich den internen Versionszähler. Ich markiere die Ausgabedatei mit einem Suffix, der dem Versionschalter entspricht, und verschiebe sie in den Ordner "Validierter". Ich verpflichte dann die Änderungen am Quecksilberrepository.

Wenn ich in Zukunft, wenn diese Version nicht mehr aktuell ist, entscheide ich mich, diese zu verzweigen, ich benötige diese validierten Ausgänge als "richtige" für diese bestimmte Version.

In Fall 2 versuche ich natürlich, den neu eingeführten Fehler zu finden und ihn zu beheben. Dieser Prozess wird fortgesetzt, bis ich der Meinung bin, dass die einzigen Änderungen gegenüber der vorherigen validierten Version auf die beabsichtigten Fehlerbehebungen zurückzuführen sind.

Wenn ich den Code so ändere, dass der Algorithmus geändert wird, folge ich einem ähnlichen Prozess.

War es hilfreich?

Lösung

Hier ist der Ansatz, den ich wahrscheinlich verwenden werde.

  1. Lassen Sie den Code, die Eingabedateien und die Regressionstestausgänge mercurial verwalten.
  2. Beginnen Sie von einer bestimmten übergeordneten Überarbeitung.
  3. Nehmen und dokumentieren und dokumentieren (vorzugsweise so wenige) Modifikationen.
  4. Regressionstests durchführen.
  5. Überprüfen Sie die Unterschiede mit der Ausgabe der Elternrevisionsregressionstest.
  6. Wenn diese Unterschiede nicht mit den Erwartungen übereinstimmen, versuchen Sie, festzustellen, ob ein neuer Fehler eingeführt wurde oder ob die Erwartungen falsch waren. Entweder den neuen Fehler beheben und zu 3 gehen oder die Erwartungen aktualisieren und zu 4 gehen.
  7. Kopieren Sie die Ausgabe von Regressionstests in den für validierten Ausgaben festgelegten Ordner.
  8. Bestimmen Sie die Änderungen an Mercurial (einschließlich des Codes, der Eingabedateien und der Ausgabedateien).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top