1. ホーム
  2. language-agnostic

[解決済み】Debug.Assert()はいつ使うべきですか?)

2022-04-20 07:16:59

質問

CSを卒業し、プロのソフトウェアエンジニアとして1年程経ちました。C++やC言語では以前からアサーションについて知っていましたが、C#や.NETでは最近まで全く存在を知りませんでした。

私たちのプロダクションコードにはアサートが一切含まれていません。私の質問はこれです...

当社のプロダクションコードで Asserts を使い始めるべきですか?また、その場合、どのような場合に使用するのが最も適切でしょうか?また、その場合、どのような場合に使用するのが適切でしょうか?

Debug.Assert(val != null);

または

if ( val == null )
    throw new exception();

解決方法は?

Microsoft .NET 2.0アプリケーションのデバッグ John Robbinsは、アサーションについて大きなセクションを設けています。彼の主なポイントは以下の通りです。

  1. 自由にアサルトする。アサーションは多いに越したことはない。
  2. アサーションは例外を置き換えるものではありません。例外はコードが要求することをカバーし、アサーションはコードが想定することをカバーします。
  3. うまく書かれたアサーションは、(例外のように) どこで何が起こったかだけでなく、その理由も教えてくれます。
  4. 例外メッセージはしばしば不可解で、エラーの原因となったコンテキストを再現するためにコードを逆行作業する必要がある場合があります。アサーションは、エラーが発生した時点のプログラムの状態を保持することができます。
  5. アサーションは、あなたのコードがどのような暗黙の前提に依存しているかを他の開発者に伝える、文書としての役割も果たします。
  6. アサーションが失敗したときに表示されるダイアログでは、プロセスにデバッガをアタッチして、あたかもそこにブレークポイントを置いたかのようにスタックをつつくことができます。

PS: Code Completeが気に入ったのなら、この本でフォローすることをお勧めします。私はWinDBGとダンプファイルの使い方を学ぶために購入しましたが、前半はバグを未然に防ぐためのヒントが満載です。