数値解析コードのテスト ルーチンの作成、維持、および作成について考えるための優れたオンライン リソースはありますか?
行列の乗算のテストなどで見られる制限の 1 つは、明らかなテスト (1 つの行列を恒等式にするなど) では、コードの機能を完全にテストできない可能性があることです。
また、通常は大きなデータ構造も扱っているという事実があります。これにアプローチする方法について良いアイデアを持っている人、または良い場所へのポインタを持っている人はいますか?
少なくとも 2 つの異なる方法でテストについて考える必要があるように思えます。
一部の数値手法では、メタ思考が可能です。たとえば、可逆操作を使用すると、テスト ケースを設定して、結果が元のエラーの許容範囲内にあるかどうかを確認できます。たとえば、マトリックスM-逆数にマトリックスM * ランダム ベクトルVを掛けると、エラーの許容範囲内で、再びVになるはずです。
明らかに、この例では逆行列、行列の乗算、および行列とベクトルの乗算が実行されます。私はこのようなチェーンが好きです。かなり多くのランダムなテスト ケースを生成し、統計的なカバレッジを得ることができます。これは手作業で書かなければならない手間がかかります。ただし、単一の操作を単独で実行するわけではありません。
一部の数値計算法では、誤差の閉じた形式の表現があります。既知の解を使用して状況を設定できる場合は、解と計算結果の差を比較して、これらの既知の境界を超える差を探すことができます。
基本的に、この質問は、複雑なメソッドをうまくテストするにはかなり多くのドメイン知識が必要であるという問題を示しています。特定の参照には、テスト対象に関するもう少し具体的な情報が必要です。少なくとも、Steve Yegge の推奨書籍リストを手元に置いておくことを強くお勧めします。
行列計算を行う場合は、LAPACK を使用します。これは非常によくテストされたコードです。非常に賢い人々が何十年にもわたってそれに取り組んできました。彼らは、初心者が考えることのない問題について深く考えてきました。
一般に、システマティック テストとランダム テストの 2 種類のテストをお勧めします。体系的とは、エッジケースなどを調査することを意味します。ソースコードを読むことができれば役立ちます。多くの場合、アルゴリズムには分岐点があります。この範囲の数値についてはこの方法で計算し、別の範囲の数値については別の方法で計算するなどです。どちらの側の分岐点に近い値をテストするかは、近似誤差が最大になることが多いためです。
ランダムな入力値も重要です。すべてのテスト ケースを合理的に選択すると、問題であると認識していないものを体系的に回避できます。テストする正確な値がなくても、ランダムな入力値をうまく利用できる場合があります。たとえば、関数とその逆関数を計算するコードがある場合、1000 個のランダムな値を生成し、関数とその逆関数を適用すると、元の状態に戻るかどうかを確認できます。
The Science of ProgrammingというDavid Griesの本をチェックしてください。プログラムの正しさを証明することです。自分のプログラムが正しいことを (正しいことを証明するまで) 確認したい場合は、この本から始めることをお勧めします。
おそらくあなたが探しているものとは正確には異なりますが、ソフトウェア エンジニアリングの質問に対するコンピューター サイエンスの答えです。