Buzzurlの中の人日記
昔新人にバグとは何かについて偉そうに語ったことがある。
バグとは何か。以下のようなものである。
- バグの定義
- 「Aという入力に対して、Bという結果を期待したのに、Cのような結果になった」
B≠Cな状態がバグである。
最低限必要な要素は三つ:入力条件、期待する動作、実際の挙動 である。
入力というのは関数への引数でもいいし、何かの操作とか設定とか環境とかでもいい。結果というのも返り値でも挙動でも表示されるメッセージとかでもいい。
プログラマがバグ報告をするならば、上記のような書き方が好ましい。
Aという入力が100%Cという結果を引き起こすならバグ報告としてなおよい。再現状況が判明しているということだからだ。
したがって、tracにバグ報告のチケットを作るならば、必ず上記の3要素(条件、期待する動作、実際に起きたこと)を書きなさいという風に教えた。
このようにバグを定義した場合、バグ"#the_bug"が直ったとは次のような状態である。
- あるバグが修正された状態の定義
- 「#the_bugの修正としてXを行った。結果、Aという入力に対して、期待通りBという結果が返ってきた」
最低限必要な要素は4つ:何をしようとしたか(どのバグを直そうとしたかのポインタ)、修正内容、入力条件、期待通りの動作をしたという事実
したがって、commit logには必ずバグ報告へのポインタ、修正内容、入力条件、実際の挙動を書きなさいと教えた。
そんな僕の commit log はこんな感じである。
$ svn log
------------------------------------------------------------------------
r3574 | y-sudo | 2007-11-13 20:01:09 +0900 (火, 13 11月 2007) | 2 lines
アレ直した
------------------------------------------------------------------------
r3572 | y-sudo | 2007-11-13 19:46:11 +0900 (火, 13 11月 2007) | 2 lines
hogehoge
------------------------------------------------------------------------
r3571 | y-sudo | 2007-11-13 18:49:09 +0900 (火, 13 11月 2007) | 2 lines
hogehoge
...(略)
$
※この物語はフィクションです。実在の人物団体コミットログ等とは関係ありません。

