ソフトウェアの品質を学びまくる2.0

ソフトウェアの品質、テストなどについて学んだことを記録するブログです。

Checking vs Testing 論争への強烈な皮肉

Socrates

 Jason Arbonさんによるブログ記事「Checking vs Testing」は、「Checking vs Testing みたいな議論は、時間の浪費に過ぎない。この記事自体も含めて」という皮肉ですね。

medium.com

 なお、ほぼ同じタイトルの記事は、有名なコチラ。

www.developsense.com

 Jasonさんは記事の中で、「テストとチェック」と「手動テストと自動テスト」というよくある二つの比較について言及しています。そもそもこの議論の目的は、別に真実を追求したいわけではなく、ソフトウェアテストの現代化の波の中で、エキスパートとしてのロールを守りたいだけの人が騒いでいるのだろうと一刀両断しています。

testing と checking

 まず test と check については、「Googleで検索すれば、test の定義に check も入っている。以上。別に大した違いはない」としています。
 一部の人が、check に「機械的で単調」というイメージを押し付け、一方で test をより高尚なものと位置づけることで、自分たちが価値ある活動に従事していると言いたがっているというわけです。

 James BackさんやMichel Blotonさんの主張を皮肉っているようにも思えますが、「簡単なチェックを手動で実行するにしたって、頭は使う」「テストケースに基づくテストも探索的テストも、どちらも大事なんだ」という立場をみると、言っていることは同じかなという印象です。

www.kzsuzuki.com

automated と manual

 ここでも、「自動テストはチェック(上で述べた意味での)の繰り返ししかできない」という決めつけによって、「人間のテスターが重要」という主張を正当化しようとしていると言います。Jasonさんはこれを、2つの理由から否定しています。

  1. スピード・コスト・再現性という自動テストのメリットを無視している
  2. 二種類ある自動化のうち、一方しか見ていない。

 「二種類ある自動化」というのは、わたしにとって新鮮な分類でした。
 いわく、「リグレッション」「生成的」の二つです。

 自動テストとしてまずイメージするのは一つ目ですよね。まず人間がテストケースを書き、それに従って自動化する。そのあと、リグレッションテストとして繰り返し実行されます。
 これは「毎回同じ」「単調」なものとされがちですが、賢いテスト自動化エンジニアだったら、実行のたびに環境やパラメタを変えたりしていると。殺虫剤のパラドックスを、自動テストでも回避しようと頭を使っているということですね。「同じことしかできない」という認識はあらためる必要があります。

 二つ目は、人間によるテストケースを前提とせず、仕様などの情報からテストを自動的に生み出すものです。最近も記事に書いたモデルベースドテストが該当しますよね。

www.kzsuzuki.com

 また他の例として、AIの強化学習によってテストを見つけ出すものを挙げています。ここまでくると、もう「単調」とはほど遠いですよね。

ためにする議論はもう・・・

 保身を目的として、あるいは自分を立派に見せたくてこの手の議論をする人たちを、Jasonさんは皮肉をこめていろいろな言葉で呼んでいます。testing philosopher、quirky deep thinkers、evangelists、sophists、・・・。

 「テストとは何か」を議論することが悪いわけではないと思います。
 ダメなのは、「自分は価値のある仕事をしているんだ!」とアピールするためだけに、この手の議論をふっかけて、耳目を集めようとすることです。