チェックボックス検索のテストパターン（検索対象データが複数の場合）

検索条件がチェックボックス形式のときのテストパターンについて、自分の考えを纏めてみました。
※冒頭の記述は、前回投稿した[チェックボックス検索のテストパターン（検索対象データが単一の場合）](https://qiita.com/yasuhisa_ito/items/3df89acba61622bca1ae)と同一です。

##前提の話
チェックボックス形式の検索条件がどういうものか、以下で説明します。

###チェックボックス形式の検索条件
チェックボックス：選択可能な項目が列挙されていて、項目を選択すると選択状態となる
※（一般的には）左隣にある☐が☑となる

複数の不変の選択肢があり、複数の設定が可能なところが特徴です。

※中には、プルダウン形式で複数の設定が可能なUIとなっている場合もあります。
　チェックボックス形式と同じように考えてもよいと思います。　

検索条件が不変の選択肢の場合の多くは、検索対象も不変の場合が多いです。
そういった意味では、テストパターンは有限といえます。

###注意点
複数の選択肢が設定可能な項目の場合、検索対象のデータも複数設定可能な場合があります。
今回は、<font color="Red">設定値が複数のケース</font>を記載します。
設定値が単一と複数の例を挙げると、
**単一**
　学年 ⇒ 設定値：[ 1年生 / 2年生 / 3年生 / 4年生 / 5年生 / 6年生 ]のうちどれか一つ
　　このときの検索条件 ⇒ ☐1年生　☐2年生　☑3年生　☑4年生　☐5年生　☐6年生
**複数**
　好きな給食 ⇒ 設定値：[ カレー / ラーメン / スパゲティ / プリン ]のうちいくつでも
　　このときの検索条件 ⇒ ☐カレー　☑ラーメン　☑スパゲティ　☐プリン

のような感じです。検索条件の見た目は変わりませんが、裏で保持するデータの持ち方に違いがあります。
設定値を複数保持できる場合は、単純にケースが増える以外にも考慮しなければならないことが増えます。

##テストパターンについて
自分は、検索条件が検索条件がチェックボックス形式のときは、一致している/していないを網羅できるようにパターンを作成しています
前回投稿したときの最も大きい差異は、事前準備データのバリエーションです。

###事前準備データ
| |対象項目の設定値|その他（対象に関連の無い項目）|
|:--|:--|:--|
|データA|[未設定]|任意|
|データB|データ①|〃|
|データC|データ②|〃|
|データD|データ③|〃|
|データE|データ①、データ②|〃|
|データF|データ①、データ③|〃|
|データG|データ②、データ③|〃|
|データH|データ①、データ②、データ③|〃|
※複数設定可の3つのデータがあり、検索条件として3つのチェックボックスが表示されている場合を想定

###検索結果の確認

| |対象項目の<br>検索条件|その他の<br>検索条件|取得結果|補足|
|:--|:--|:--|:--|:--|
|no.1|[未設定]|[未設定]|A, B, C, D, E, F, G, H|①：F、②：F、③：F|
|no.2|①のみ|〃|B, E, F, H|①：<font color="Red">T</font>、②：F、③：F|
|no.3|②のみ|〃|C, E, G, H|①：F、②：<font color="Red">T</font>、③：F|
|no.4|③のみ|〃|D, F, G, H|①：F、②：F、③：<font color="Red">T</font>|
|no.2|①、②|〃|B, C, E, F, G, H|①：<font color="Red">T</font>、②：<font color="Red">T</font>、③：F|
|no.3|①、③|〃|B, D, E, F, H|①：<font color="Red">T</font>、②：F、③：<font color="Red">T</font>|
|no.4|②、③|〃|C, D, E, F, H|①：F、②：<font color="Red">T</font>、③：<font color="Red">T</font>|
|no.4|①、②、③|〃|B, C, D, E, F, G, H|①：<font color="Red">T</font>、②：<font color="Red">T</font>、③：<font color="Red">T</font>|

###注意
今回、上記の検索結果としては**一つでも条件に一致した場合**にヒットするような検索結果としてますが、システムによっては**全ての条件に一致した場合**のみヒットするような仕様の場合もあります。事前にちゃんと確認したほうが良いです。

ポイントとして、まずチェックボックス検索に限らないところでは
　●検索条件が複数設定できる場合は、対象以外の検索条件は必ず**<font color="Red">未設定</font>**にし、試験対象に影響が出ないようにする。
　　⇒組み合わせのテストは、それぞれの対象1つずつのテストが完了してから行う。
　●事前準備データの設定値が未設定の場合も考慮する。
　●検索条件が未設定の場合も考慮する。
辺りを思っています。

チェックボックス検索に関連するポイントとしては、
　●検索条件に表示されている全てのデータを用意して、各検索条件がT/Fだった場合を網羅するようなパターンとする
辺りを思っています。


##注意（件数が膨大になる場合）
チェックボックス検索の場合、パターンは有限ではありますが場合によってはパターンは膨大になります。
※データがn種類あった場合、未設定を含めると
　用意可能なデータ：2^n種類
　検索条件：2^n種類
　⇒2^n回検索を行い、その度に2^n種類のデータのヒットする/しないを確認する
そんな場合は、だいたい以下のパターンに絞って確認しています。
　・用意するデータ/チェックボックスが未設定の場合
　・用意するデータ/チェックボックスが1つのみの場合
　・用意するデータ/チェックボックスが複数件ONの場合
　　　⇒だいたい、1/4～1/2ほど
　・用意するデータ/チェックボックスが全てONの場合

###例：①～⑱まで、データパターンがあった場合

事前準備データ

| |対象項目の設定値|その他（対象に関連の無い項目）|
|:--|:--|:--|
|データX|[未設定]|任意|
|データX|①|〃|
|データX|②|〃|
|…|…|…|
|データX|<font color="Red">①、②、③</font>|〃|
|データX|<font color="Red">④、⑤、⑥</font>|〃|
|データX|<font color="Red">⑦、⑧、⑨</font>|〃|
|…|…|…|
|データX|①～⑱|〃|

検索結果

| |対象項目の<br>検索条件|補足|
|:--|:--|:--|:--|:--|
|no.X|[未設定]|未設定の確認|
|no.X|①のみ|チェックボックス1つずつの確認|
|no.X|②のみ|〃|
|…|…|…|
|no.X|<font color="Red">①、③、⑤、⑦</font>|チェックボックス複数の確認|
|no.X|<font color="Red">②、④、⑥、⑧</font>|〃|
|no.X|<font color="Red">⑨、⑪、⑬、⑮</font>|〃|
|…|…|…|
|no.X|①～⑱|チェックボックス全ての確認|

期日やコストによって、どこまでやるか判断しています。
工夫としては、事前準備と検索条件で、チェックボックスが複数件ONの場合を確認するときのパターンをずらしている部分です。**<font color="Red">※表の赤字部分</font>**
こうすることで膨大なパターンを機械的に減らして、なるべく網羅率が高くなるようにしています。

##最後に

検索画面の試験の場合は、個々の検索条件が仕様通り動作しているかを確認した後に、それぞれの条件を組み合わせた検索についても試験を行う必要があると思っています。流れとしては、
　①個々の検索条件が正しく動作する
　②それぞれの検索条件を組み合わせた検索が正しく動作する
だと思っています。
⇒①の試験で個々の条件の担保を取ったうえで、②にて組合せの試験を行うなど

検索条件を組み合わせる場合の試験パターンについては、以下のページに記載しています。
[複数の条件がAND条件/OR条件で繋がれているときのテストパターン](https://qiita.com/yasuhisa_ito/items/ca7ad58abd2b408110f0)
参考になれば幸いです。