読者です 読者をやめる 読者になる 読者になる

テスターもバグの原因を知りたいのだ

 

テスターが見つけるバグには、狙い通りに見つかる(またはそれに近い)ものと、そうでないものがありますよね。

前者の「狙い通りに見つかるバグ」というのは、例えば、プログラマーが「いつも動く」を前提に作っていることを想定して、テスターは「動かないときもある」を起こして見つかるものです。

  • 使用するファイルをリネームしてみる
  • データベースのサービスを停止してみる
  • ネットワークケーブルを引き抜いてみる

同期処理なら、こんなことを考えながら、手を動かしていきます。

  • 何をしたら二人は永遠に待ち続けてしまうだろうか
  • お互いの状態を変数でフラグ管理しているのだとしたら、それらが正しく更新されないのはどんな時か
  • その更新が遅れる時はあるのだろうか、実際の状態と変数の値が矛盾してしまうとしたらどんな時か

そうやって見つかるバグは、その原因が何となくですけど、想像できます。


後者は「狙ってないけど出会ってしまったバグ」です。わたしたちのチームは、おかしな状況はプログラマーに見せることが一番喜ばれるのですが、すぐに見てもらえないときは、再現試験も兼ねながら、与えるパラメータを変えたり、怪しそうだなと思う操作のタイミングをずらしながら、同じバグが発生するのか、しないのかを確認します。

ここでも、原因が想像できるものと、そうでないものに分かれます。

何となく原因が想像できるものは(おそらくテスターならみなさんそうだと思いますけど)そこからさらに対象を変えるなどして、似たようなバグを見つけに行こうとします。

でも、原因が全く想像できないものは、それができません。テスターも(どんな実装をしたらこうなるんだろう?)と興味がありますし、バグの原因にもつながる実装寄りの事情(←コードそのものではありません)を知ると、さらにそこをついたようなテストができるようになります。見た目は大したことをやっているようには見えないのに、そんな複雑なことをしてたのかーーと知ったら、いじめ方も変わっていきますよね。

はじめのツイートに戻りますが、わたしがこれまでに遭遇した「実装がまったく思いつかないバグ」は、プログラマーにとっても厄介であることが多いように感じます。ですので「◯◯のように直したら(バグが)出なくなりました」と言われても「おお、よかったー」で終わりにせず、「なにがまずかったの?」と、チームの話題にしてあげるのがよいと思います。*1

 

*1:練度があがると「なにがまずかったの?」は「えー」で通じるようになります