アサートが最善の方法です。プログラムを終了させないアサートはさらに優れているため、同僚は関数スタブによってブロックされることなくコードをテストし続けることができ、まだ実装されていないものについて完全な情報を得ることができます。
IDE がスマート アサートまたは永続的なブレークポイントをサポートしていない場合は、簡単な実装 (c++) を次に示します。
#ifdef _DEBUG
// 0xCC - int 3 - breakpoint
// 0x90 - nop?
#define DebugInt3 __emit__(0x90CC)
#define DEBUG_ASSERT(expr) ((expr)? ((void)0): (DebugInt3) )
#else
#define DebugInt3
#define DEBUG_ASSERT(expr) assert(expr)
#endif
//usage
void doStuff()
{
//here the debugger will stop if the function is called
//and your coworker will read your message
DEBUG_ASSERT(0); //TODO: will be implemented on the next week;
//postcondition number 2 of the doStuff is not satisfied;
//proceed with care /Johny J.
}
利点:
- コードのコンパイルと実行
- 開発者は、テスト中にコードに遭遇した場合にのみ、何が実装されていないかについてのメッセージを受け取るので、不必要な情報に圧倒されることはありません。
- メッセージは関連するコードを指しています(例外キャッチブロックなどではありません)。コール スタックが利用できるので、未完成のコードを呼び出した場所を追跡できます。
- メッセージを受け取った後、開発者はプログラムを再起動せずにテスト実行を続行できます
短所:
- メッセージを無効にするには、コード行をコメントアウトする必要があります。このような変更は、コミットに忍び込む可能性があります。
最初の DEBUG_ASSERT 実装の PS クレジットは同僚の EG に贈られます