6

どのようなエラーチェックを行いますか?実際にどのようなエラーチェックが必要ですか?ファイルが正常に保存されたかどうかを本当に確認する必要がありますか?それがテストされ、初日から問題なく動作する場合、それは常に動作するべきではありませんか?

私は自分自身がすべての小さなことをチェックしていることに気づきます、そしてほとんどの場合、やり過ぎだと感じます。ファイルがファイルシステムに正常に書き込まれたかどうかを確認したり、データベースステートメントが失敗したかどうかを確認したりするようなものです。

どのくらいのエラーチェックをしますか?エラーチェックの要素は、それが正しく機能すると信じているために省略していますか?

「実際には決して起こらないことをテストしないでください」という行に沿ってどこかで何かを読んだことを覚えていると確信しています.....しかし、ソースを思い出せません。

では、失敗する可能性のあるすべてのものに失敗がないかチェックする必要がありますか?それとも、これらの単純な操作を信頼する必要がありますか?たとえば、ファイルを開くことができる場合、各行の読み取りが失敗したかどうかを確認する必要がありますか?おそらく、それはアプリケーション内のコンテキストまたはアプリケーション自体に依存します。

他の人がしていることを聞くのは面白いでしょう。

更新:簡単な例として。画像を表すオブジェクトをギャラリーに保存します。次に、画像をディスクに保存します。ファイルの保存に失敗した場合、オブジェクトが画像があると考えていても、画像を表示する必要があります。ディスクへの画像保存の失敗を確認してからオブジェクトを削除するか、またはトランザクション(作業単位)で画像保存をラップすることもできますが、テーブルロックを使用するdbエンジンを使用するとコストがかかる可能性があります。

ありがとう、

ジェームズ。

4

5 に答える 5

1

私は質問全体に取り組んでいるわけではなく、この部分だけに取り組んでいます:

では、失敗する可能性のあるものはすべて、失敗がないかチェックする必要がありますか? それとも、これらの単純な操作を信頼する必要がありますか?

次のステップが重要な場合、エラーチェックが最も重要であるように私には思えます。ファイルを開かないとエラー メッセージが完全に失われる場合、それは問題です。アプリケーションが単純に停止してユーザーにエラーを与える場合、私はそれを別の種類の問題と考えます。しかし、黙って死んだり、黙ってぶら下がったりすることは、コードを作成するために最善を尽くすべき問題です。ですから、「単純な操作」かどうかは私には関係ありません。次に何が起こるか、または失敗した場合の結果によって異なります。

于 2010-04-05T18:31:35.703 に答える
1

空き容量がなくなってファイルを書き込もうとしてエラーをチェックしないと、アプリケーションは黙って落ちるか、ばかげたメッセージを出して落ちます。他のアプリでこれを見ると嫌いです。

于 2010-04-05T18:28:40.227 に答える
0

あなたの例について...

画像を表すオブジェクトをギャラリーに保存します。次に、画像をディスクに保存します。ファイルの保存に失敗した場合、オブジェクトがイメージがあると認識していても、表示するイメージが [no] になります。ディスクへの画像保存の失敗を確認してからオブジェクトを削除するか、代わりに画像保存をトランザクション (作業単位) にラップすることができますが、テーブル ロックを使用する db エンジンを使用するとコストが高くなる可能性があります。

この場合、オブジェクトを保存する前に、まずイメージをディスクに保存することをお勧めします。そうすれば、画像を保存できない場合でも、ギャラリーをロールバックする必要はありません。一般に、依存関係は最初にディスクに書き込む (またはデータベースに配置する) 必要があります。

エラーチェックに関しては...意味のあるエラーをチェックしてください。fopen()がファイル ID を提供し、エラーが発生しない場合は、通常、「無効なファイル ID」を返すそのファイル ID をチェックする必要はありませんfclose()。ただし、ファイルのオープンとクローズが別々のタスクである場合は、そのエラーをチェックすることをお勧めします。

于 2010-04-05T22:38:58.933 に答える
0

これはあなたが探している答えではないかもしれませんが、あなたがやろうとしていることの完全な文脈で見たときに「正しい」答えしかありません.

内部で使用するプロトタイプを作成していて、おかしなエラーが発生しても問題にならない場合は、余分なチェックを追加することで時間と会社のお金を無駄にしていることになります。

一方、航空管制用の本番ソフトウェアを作成している場合は、考えられるすべてのエラーを処理するための余分な時間を十分に費やすことができます。

私はそれをトレードオフと考えています.エラーコードを書くのに余分な時間を費やすことと、エラーが発生した場合にそのエラーを処理したことの利点. すべてのエラーを宗教的に処理することは、最適な IMO である必要はありません。

于 2010-04-06T00:40:54.233 に答える
0

私は通常、これらのルールに従います。

  1. ユーザー入力を過度に検証します。
  2. 公開 API を検証します。
  3. 他のすべての製品コードからコンパイルされる Assert を使用します。
于 2010-04-05T18:28:30.803 に答える