「無効にする」という仕様でプログラマーとテスターが違うものを想像した話です。開発中の些細な出来事ですがツイートするには長すぎるのでこっちにメモしました。
ある日のこと
ある画面に表示しているスライダーコントロールを触っていたら、おかしな現象に気づきました。Trackの部分をマウスの中ボタン(ホイールボタン)でコロコロしたら、値の増減が正しく行われる時と行われない時があるんですね。
説明上、スライダーコントロールの部品の名称を載せたかったので docs.microsoft.com .NET.Framework の Slider Class の図を直接リンクしました(わたしたちが開発してる製品とは無関係です)
担当のプログラマーTさんとFさんにその現象を見せて、そのあとチームでどうするか話し「中ボタンは無効にする」ことになったのですが、翌日修正したものを触ったらなんかおかしい。
- Trackの部分を中ボタンでコロコロしても値は増減しない。無効になっているのでOK
- Trackの部分を左ボタンで長押しすると連動して値が増減する。元からあった仕様でこれもOK
- 左ボタンを長押ししたまま(マウスダウンしたまま)中ボタンをコロコロすると値が戻ってしまう。あれ?
例えば、値が10の時プラス方向に長押しすると11、12、13、14と増えていきマウスボタンを離したときに増加が止まります。これは良いのですが、長押ししながら中ボタンをコロッとすると10(長押しする前の値)に戻ってしまう。
中ボタンは無効にすることになったので、長押ししながら中ボタンをコロッとしても何もせずに無視するが、わたし(テスター)が期待した動作でした。直しきれてないコードがあって中ボタンのイベントが発火したのかなと思いました。…にしてもどう作るとこうなるんだろう。
さっそくプログラマーTさんとFさんにその現象を見せたら「そうなるように作ってます」と衝撃の言葉が!えっえっどういうこと?と聞いてみたら「中ボタンは無効にすることになったので、中ボタンが押されたら前の状態に戻してます」とのこと。無効=取り消し=それまでの操作を取り消す意味で捉えたのか!なるほどー。*1
結局、中ボタンを押しても無視する(何もしない)ことになったのだけど「無効にする」という言葉は案外むずかしいのかもしれない。今後「無効にする」が出てきたら無効とはどういうことか、どう動くのか(どう動かないのか)を具体的に話そうと思います。
*1:前の状態に戻すにはある時点での状態をどこかに記録しておく必要があるので作るの大変だったのではなかろうか…