プログラミングメモ - すべてのコードパスを通すということ

2009/10/01

『Writing Solid Code』よりちとメモ。

Writing Solid Code Steve Maguire Microsoft Press 1993年

邦書もあるんですけど,手元にあるのが仕方なく買った洋書の方なので,こっちから引用します。

Either you can create test cases that force the error conditions to occur, or you can simulate failures while you're stepping through the code. Simulating failures usually takes much less time. Take a look at this code extract, for example:

pbBlock = (byte *)malloc(32);
if (pbBlock == NULL)
{
    handle the error condition:
    :
}

Normally, when you step through this code, malloc will allocate a 32 byte block of memory and return a non-NULL pointer, which causes the code to bypass the error handling code. But instead of leaving the error code untested, step through the code a second time and use the debugger to set pbBlock to the NULL pointer right after you execute this line:

pbBlock = (byte *)malloc(32);

malloc may allocate the block, but if you set pbBlock to the NULL pointer, it will look to your code as if malloc failed, allowing you to step through the error handler. (For you detail-oriented readers: Yes, malloc's block will be lost when you change pbBlock, but this is only a test.)

(snip)

Step through every code path.

[2] Writing Solid Code. Steve Maguire. Microsoft Press. 1993年. p79.

xUnit が流行しても,とりあえず基本は泥臭いけどホワイトボックステストということで。実際,エラーハンドリングのブロックまでテストする人ってあまりいない気がします。あたしゃこれでもかってほどテストするので,ちと信じられないところがあるんですけど。全部のパスが通ることを確認すれば,それだけソースに対する自信も深まるから,精神衛生上いいんですけどね。

Site Navigation
SNS Accounts (@aian)

普段はここら辺に住んでいます.