私は、特定のトピックに関するアドバイスを提供する Python プログラムを維持しています。これは、複雑なアルゴリズムを入力データに適用することによって行われます。
プログラム コードは定期的に変更され、新たに発見されたバグを解決し、基礎となるアルゴリズムを変更します。
回帰テストを使用したい。問題は、プログラムを実行する以外に、特定の入力に対する「正しい」出力が何であるかを知る方法がないことです (それでも、バグがない場合のみ)。
以下に、現在のテスト プロセスについて説明します。私の質問は、このプロセスを自動化するのに役立つツールがあるかどうかです (もちろん、私が行っていることについて他のフィードバックがある場合)。
すべての入力ケースでプログラムが最初に正しく実行されたように見えたとき、「検証済み」出力用に指定したフォルダーに出力を保存しました。「検証済み」とは、出力が、私の知る限り、プログラムの特定のバージョンに対して正しいことを意味します。
バグを見つけたら、それを修正できると思われる変更を加えます。次に、すべての入力セットでプログラムを再実行し、手動で出力を比較します。出力が変更されるたびに、私はそれらの変更を非公式にレビューし、次のことを確認するように最善を尽くします。
- 変更がバグ修正のみによるものである、または
- 変更は、少なくとも部分的には、私が導入した新しいバグによるものです
ケース 1 では、内部バージョン カウンターをインクリメントします。出力ファイルにバージョン カウンターと同じサフィックスを付けて、「検証済み」フォルダーに移動します。次に、変更を Mercurial リポジトリにコミットします。
将来、このバージョンが最新ではなくなったときに分岐することにした場合、これらの検証済みの出力が、この特定のバージョンの「正しい」出力として必要になります。
ケース 2 の場合、もちろん、新たに導入されたバグを見つけて修正しようとします。このプロセスは、以前の検証済みバージョンに対する唯一の変更が意図したバグ修正によるものであると確信できるまで続きます。
コードを変更してアルゴリズムを変更する場合も、同様のプロセスに従います。