第190回: 「ソフトウェアテストしようぜ」7 洗濯機(後編)
◀前の記事へ 次の記事へ▶
≡ はじめに
前回は、「洗濯機」のソフトウェアテストのとっかかりの話を書きました。
というのは、リナさんから以下のツイートをいただいたからです。
この「むずかしすぎて無理」(もちろん、謙遜されてのツイートですが……)という感覚ですが、私はテストをつくるときに謙遜なしでいつも同じようなことを感じています。
私は【難しいから面白い】と思うことにしています。
そう思ったうえで、「自分はどのようなとっかかりからテストをつくっているかな?」とふりかえって書きました。
結果としては、前回の「おわりに」に書いたとおり、
に思い至りました。
GAINとPAINを書き出していると、テストをしたいことがモリモリわいてきます。(笑)
きちんと学びたい方は、この辺のサイトなどを一読したうえで、バリュー・プロポジション・キャンバスという図を描くと良いと思います。
書籍で学ぶときには、以下の本となります。
※ Kindle版をリンクしましたが、紙版の方が使いやすいです。また、本に期待しすぎないようにしてください。情報としては上でリンクしたサイトからそんなに増えるものではありません。
ですから、知識よりも実践すること、実践した後に記事や本を読みなおすことが大切です。
今回は洗濯機のテストの続きです。ステップ1まで終わりましたので、ステップ2からです。
≡ テストを作成する(ステップ2)
第2回で書いたとおり、ステップ2は、「仕様を網羅するテスト」です。
仕様はマニュアルにありますが、使用者ができることは操作パネルにあることです。
仕事で、テストをするときには、「誤差因子」を考慮したテストもします。
■ 表のテスト
結論から書けば、今回は、「シーケンスカバリングアレイ」というテスト技法で仕様を網羅するテストをつくります。
今回、網羅したいことは「操作の順番」です。操作パネルを見ると「ふろ水」、「水流」、「水位」、「予約」、「洗い」、「すすぎ」、「脱水」、「コース」、「スタート・一時停止」、「切」、「入」の11個のボタンがあります。例えば左から順番に操作する等、想定した操作では問題がないのに「ある順番で操作すると不具合が出る」といったバグを見つけたいからです。
さて、操作のテストといえば、この連載の第3回、第4回で状態遷移図をつくってGIHOZに入れてテストケースをつくったことを思い出します。
第4回の状態遷移図とGIHOZが生成した状態遷移表を網羅するテストを再掲します。
洗濯機の操作パネルの状態遷移図をGIHOZで描いてみます。
状態は「洗濯条件の設定」の一つですが、イベントは、上に書いたとおり「ふろ水(の条件設定)」、「水流」、「水位」、「予約」、「洗い」、「すすぎ」、「脱水」の7個です。
できあがった状態遷移図はこちらです。
状態遷移図を書いたら、テストケースを生成しましょう。「状態遷移表とテストケースを更新」ボタンを押すだけです。GIHOZ、すばらしいです。
7件のテストケースが生成されましたが、順番らしいものはでてきません。
そりゃそうです。有効遷移と無効遷移のテストケースをつくるだけですから。順番をつくりたいなら、生成するテストケースに「1スイッチテスト」を加えて「状態遷移表とテストケースを更新」ボタンを押します。
49件のテストケースが生成されました。
こちらの49件のテストケースを実行すれば、任意の2つのイベント(操作)の前後関係が網羅的にテストできます。任意の3つなら「2スイッチテスト」を加えて「状態遷移表とテストケースを更新」ボタンを押せばよいです。
343のテストケースが生成されました。単純な表ですが、手作業でつくると誤りが起こりかねないのでツールの有り難さを感じます。
扇風機のテストの回で、
と書いたとおり、この343件のテストケースを実施するのもありです。また、「同じ操作を繰り返す必要があるか?」ということに気が付いて「同じ操作を繰り返さない」という前提に立てば、
7×7×7=343 を
7×6×5=210
に減らすことができます。2回目のイベントは1回目のイベントを除いた6つになり3回目は更に一つ減って5個のイベントから選ぶことになるからです。
でも、「洗い時間」、「すすぎ回数」と設定した後に「洗い時間」の設定を変えたくなることだってありますので、『同じボタンは押さないことにしていいのかなあ?』と、疑問が残ります。
以上のことから、私なら343件のテストを実施します。
以上のことから、343件のテストはするとしても、実際に洗濯を行うテストはできそうにないので、シーケンスカバリングアレイというテスト技法を合わせて使用します。どんな技法かは、以前書いた資料をご覧ください。
要点としては、例えば、aからgの7個の操作の順番を考えたときに、
全ての順序: 7×7×7×7×7×7×7=823,543
重複無し: 7×6×5×4×3×2×1=5,040
任意の3つの全順序: 12
と網羅基準を変えることでテストケースを減らしている技法です。(どの網羅基準が適切なのかはテストのコンテキストによって違います)
ただ、上記のPDFにあるNISTのリンク先のページはすでになくなっています。今のページはこちらです。
手順としては、こちらのウェブサイトの「SEQUENCE COVERING ARRAY LIBRARY」のところにある「test.3.x.csv」(xは操作数)というファイルをダウンロードして使います。今回でしたら7個の操作なので「test.3.7.csv」です。
ファイルをエクセルで開くとこんなデータです。
あとは、中にある7個の数字(0~6)を操作に対応させるだけです。
設定する値の組合せまで考慮すると、結果としては、以下の表の16回のテストを行います。テスト件数が少ないので、実機を用いて洗濯をして、じっくり観察します。
テストの実行時には、一番右側の“順番”列(この列がシーケンスカバリングアレイのtest.3.7.csvに対応します)を見て、操作する順序を把握して、操作するときに、他の列のセル内の値をセットします。
操作を3つ取り出すと、その全順序(3! = 6種類)が一番右の列にある下表に抜き出した12のパターン(13行以降は繰り返しなので)のどこかに含まれています。
『なんか難しそうなテストだなあ』と思われたかもしれません。こんなテストをしなくていいことをレビュー等で保証出来るともっと良いと思います。
■ 裏のテスト
今回も、意地悪な条件を考えます。
気になるのはもう少し大きなレベルのユースケース(特に、代替フローと例外フロー)です。ユースケーステストについては、こちらをお読みいただければと思います。洗濯を途中で止めて、設定を変更して再開するテストなどをしたいです。
また、チャイルドロック(安全のために動作中は洗濯機の蓋が開かない機能)についても、健康被害につながりますので念入りにテストをしたいです。
≡ 次回のお題
次回のお題はこちらです。
CDプレイヤーです。操作は、CDを差し込んだらあとはリモコンだけです。リモコンはこちらです。
マニュアルは下図のとおりです。
これまでの例題と比べ、機能が豊富なので、いきなりテストをつくるのは困難と思います。
まずは、テスト分析からとなります。
テスト分析とは? と思われた方はテスト設計コンテストのチュートリアル動画をみるといいですよ。
≡ おわりに
今回は、「洗濯機」の仕様を網羅するテストがテーマでした。
状態遷移図は、操作の順番に制約をかけたものだけれど、今回のように、どの順番でも構わないつくりになっていることが多いものです。その方が、ユーザーは便利ですから。
さて、次回のCDプレイヤーですが、テスト分析という普通はあまり考えないかもしれないけど、したほうがよいプロセスの説明となります。いきなりテストケースをつくりたいところなんですが、ぐっと我慢です。
先に書いておきますが、「テスト分析=マインドマップ」ではありません。相性が良いのは確かですし、次回、私もマインドマップを描くと思うけど。