1

私は、特定のトピックに関するアドバイスを提供する Python プログラムを維持しています。これは、複雑なアルゴリズムを入力データに適用することによって行われます。

プログラム コードは定期的に変更され、新たに発見されたバグを解決し、基礎となるアルゴリズムを変更します。

回帰テストを使用したい。問題は、プログラムを実行する以外に、特定の入力に対する「正しい」出力が何であるかを知る方法がないことです (それでも、バグがない場合のみ)。

以下に、現在のテスト プロセスについて説明します。私の質問は、このプロセスを自動化するのに役立つツールがあるかどうかです (もちろん、私が行っていることについて他のフィードバックがある場合)。

すべての入力ケースでプログラムが最初に正しく実行されたように見えたとき、「検証済み」出力用に指定したフォルダーに出力を保存しました。「検証済み」とは、出力が、私の知る限り、プログラムの特定のバージョンに対して正しいことを意味します。

バグを見つけたら、それを修正できると思われる変更を加えます。次に、すべての入力セットでプログラムを再実行し、手動で出力を比較します。出力が変更されるたびに、私はそれらの変更を非公式にレビューし、次のことを確認するように最善を尽くします。

  1. 変更がバグ修正のみによるものである、または
  2. 変更は、少なくとも部分的には、私が導入した新しいバグによるものです

ケース 1 では、内部バージョン カウンターをインクリメントします。出力ファイルにバージョン カウンターと同じサフィックスを付けて、「検証済み」フォルダーに移動します。次に、変更を Mercurial リポジトリにコミットします。

将来、このバージョンが最新ではなくなったときに分岐することにした場合、これらの検証済みの出力が、この特定のバージョンの「正しい」出力として必要になります。

ケース 2 の場合、もちろん、新たに導入されたバグを見つけて修正しようとします。このプロセスは、以前の検証済みバージョンに対する唯一の変更が意図したバグ修正によるものであると確信できるまで続きます。

コードを変更してアルゴリズムを変更する場合も、同様のプロセスに従います。

4

1 に答える 1

0

これが私がおそらく使用するアプローチです。

  1. Mercurial でコード、入力ファイル、回帰テストの出力を管理します。
  2. 特定の親リビジョンから開始します。
  3. 変更を行い、文書化します (できるだけ少ないことが望ましい)。
  4. 回帰テストを実行します。
  5. 親リビジョンのリグレッション テストの出力との違いを確認します。
  6. これらの違いが予想と一致しない場合は、新しいバグが導入されたのか、それとも予想が間違っていたのかを確認してください。新しいバグを修正して 3 に進むか、期待値を更新して 4 に進みます。
  7. 回帰テストの出力を、検証済みの出力用に指定されたフォルダーにコピーします。
  8. 変更を Mercurial にコミットします (コード、入力ファイル、出力ファイルを含む)。
于 2012-02-20T13:02:06.820 に答える