mhlyc -practice

ソフトウェアテストと品質保証がメインテーマです。

同値分割って難しいよなという話

こちらはソフトウェアテストの小ネタアドベントカレンダーの12日目の記事です。

qiita.com

前日のブログはYutoMさんの QAの多様な役割を活かす:特化型チーム編成のすすめ #QAエンジニア - Qiita

でした。

 

この記事はとても納得する話で、私も昔2人の新人QAエンジニアを教えたり進捗の管理をするサブリーダーをやったことがありますが

その時も得意分野で役割分担を分けていました。一人は複雑な手順であってもミスなく正確に速くテストするのが得意で、もうひとりは正確性や速さはそこまでではありませんでしたが代わりにエラー推測が得意で、「そのバグどうやって見つけたの?」みたいなのが多かったです。なので、「バグはそこまで潜んでなさそうだけど念のためテストしておきたい、でも手順が難解」みたいなのは前者のひとにお願いして、「一見シンプルな仕様だけど、やろうと思ったら自由度高くテスト実行できる」みたいなものは後者のひとにお願いしました。タスクの分担のしかただけで全然結果が変わるので、なるべく強みを活かそうというのは大事なことだと思います。

 

さて本題に入りますが、先に前提を説明させてください。

前提

目新しい情報は全くありません。

これを読まれる方であれば当然ご存知のことと思いますが、日頃不勉強な私が今更実感した「同値分割って難しいな」という話を書きます。あくまで暇つぶし、エンタメ程度に読んでいただければと思います。

--

ある日私はテスト設計をすることになりました。

いつも通り、同値分割を使ってテストの設計をしようと考えました。

 

テスト対象はざっくり、こんな感じのシステムでした。

・Webブラウザでログインし、ユーザの登録、削除、一覧表示などを行うWebアプリケーション

・アプリケーションが乗っているサーバはAサーバ、Bサーバ、Cサーバの3種類があって、CサーバはBサーバを完全にコピーして構築したため設定は全く同じになっている

 

それで、こんなふうな考え方をしました。

  • Webアプリケーションの機能は一通りテストしたいな
  • AサーバとBサーバは設定が違う部分があるから、テストケース数は掛け算になるけど、それぞれの環境で同じテストをしたほうがいいな
  • CサーバはBサーバのコピーで同じ設定だから、BサーバだけテストすればOKということにしよう

 

私がテストを終えて数日後、見つからずに残っていたバグが発見されました。おかしい、ちゃんとテストしたはずなのに…

 

それはこんな不具合でした。

 

  • 実はCサーバだけ構築後に設定を変更しており、Bサーバとは設定が違っていた。その変更した箇所の影響で、Cサーバで実行した時だけエラーになる機能があった

 

これってつまり同値分割を間違えているんですよね。BサーバとCサーバ、本来同値ではないものを同値として扱っている。正しく同値のものに分割できていなかったんです。「同値分割は基礎的ながら非常に難しいテスト設計技法」だと、昔教わったことを改めて身にしみて感じたのでした。

でもこれは、テスト設計技法としての同値分割を「知識として」知らなくて起きた見逃しではないと思っています。私は同値分割がどういう技法でどういう時に使うものかは、理解していたつもりでした。

何が足りなかったのかというと、私はテストの要求分析が足りなかったんじゃないかなと思っています。

本来違うものを、なぜ同じと認識してしまったのか。それは「情報が足りなかったから」だと私は考えました。

BサーバとCサーバ、私がもらった情報では「差分はない」ということになっていました。しかし、よく調査してみると、昔チームにいて、いまは辞めてしまっているチームメンバーが別案件の事情でCサーバだけ設定変更を行っていたということがわかりました。

同値分割をする前にそういった情報をもっと集めるべきでした。もっと頑張って探したら、この追加の情報も見つけられたかもしれません。もっと、テストすべきところ、確認が漏れたらまずいところ、どの設定が変わっていたらまずいのか、本当に設定がすべて同じなのかなどの調査をしっかり行うべきでした。

 

これは私見ですが、私は知識として技法を使えるか否かより、その前段階をしっかり準備できるかのほうがより重要だと考えています。

テストもテスト開発プロセスといったりしますし、そう考えるといわゆる「シフトレフト」みたいに、テスト詳細設計よりテスト要求分析に比重を置くというのは自然な話ではないでしょうか。(雰囲気で書いているので、意味わからないことを言っていたらすみません)

 

以上、さして目新しさのないお話で恐縮ですが、ここまで読んでくださりありがとうございました。引き続き、アドベントカレンダーをお楽しみください。