今、私の質問は、論理的な理由なしにコンピュータプログラムが突然失敗するのでしょうか。
まったく同じコンピューティング環境がある場合、プログラムへの入力Xを指定すると、常に同じ結果Rが生成されます。実際には、単一のプログラムを分離して実行することはほとんどありません。今日、最も単純なアプリケーションはオペレーティングシステムで実行され、同時にメモリに「ロード」される他のプログラムとメモリを共有します。これらのプログラムは、特定のプログラムを誤動作させるような方法でメモリを変更する可能性があります。これは、たとえば「ポインタ」型の変数の有名な問題です。通常、このようなエラーはシステムの異常な動作を引き起こし、間違った計算結果にはなりません。
あなたのケースでは、問題は私が上で説明したものではないかもしれません(そして通常はそうではありません)。問題は次のとおりです。
- プログラムは誤ったデータ型を使用して結果を計算しました。そのエラーは、特別な値が使用された場合にのみ現れます。
- プログラムは(論理条件が原因で)計算中にエラーを検出しましたが、エラーを処理せず、結果を生成しました。(例:浮動小数点と整数演算の混合)
- ビジネスルールまたは論理条件が正しくコーディングされていない場合、入力されたデータはこの条件を表しますが、誤った計算が使用されました。(例えば、口座の金額を最初にチェックする前に、口座の金額から金額を引きます)。
- 特定の範囲の数値にのみ適用される数式を使用するが、データに異なる範囲が含まれている。(例:値の範囲に基づいて金利を計算する)
上記およびその他多くの理由により、ソフトウェアの人々は正しいソフトウェアを作成するために多くのリソースを費やしますが、ソフトウェアエラーは引き続き発生しますが、エラーは「論理的」であり、理由があります。良い研究のない人にも。したがって、一般的にテスト済みのソフトウェアは予測可能であり、ランダムな結果を生成しません。一部のプログラムの複雑さやその他の要因により、テスト済みのプログラムでも問題が発生する可能性がありますが、それが発生した場合、エラーは論理的な理由によるものです。
サーバーマシンを叩くと、コンピューターが計算している数値の1つが別の数値になり、計算が間違ってしまいますか?
答えはノーです。ソフトウェアはその意味で壊れやすいものではありません。
あなたができることは、エラーが発生しているケースを分離し、エラーを引き起こしているこれらのデータセット間の類似性を見つけ、これらのセットと正しい結果を生成する他のセットとの違いを見つけることです。問題の原因となっている特定の値のセットを特定できる場合があります。たとえば、変数が負の値を持つたびに、結果が間違っていることがあります。
メモリ破損エラーに関する更新情報:メモリ破損を参照してください