SlideShare a Scribd company logo
1 of 38
Download to read offline
組み合わせテストの落とし穴
~有則と無則~
書いたひと:ゆふ(@yufu69)
書いたとき:2019/05
1
今日話したいこと
組み合わせテスト には大きく2種類ある
その2種類は、異なる技法でテストする
どちらのテストなのか意識してないと、テストケースの過不足が発
生する
2
組み合わせテスト、してますか?
「組み合わせテスト」って言われたら何を思い浮かべますか?
3
「因子・水準」?
「2因子間網羅・全網羅」?
4
どうしてこのテストは2因子間網羅なんですか?
どうしてあのテストは全網羅なんですか?
ちゃんと答えられますか?
5
「なんとなく、量が多いから2因子間網羅」
「なんとなく、量が少ないから全網羅」
…とかなってませんか??
6
実は、組み合わせテストには、大きく分けて2つの種類があります。
有則 の組み合わせのテスト
無則 の組み合わせのテスト
この2つは違うアプローチでテストすべきものです。
7
有則の組み合わせ
組み合わせに規則(ルール)があるとき
パラメータAで採用する値 と、 パラメータBで採用する水準 の組み合わせ
が、結果に影響を与えるとき。
(「パラメータAで値1を選んでパラメータBで値2を選んだ場合、結果は
こうなる」というのが仕様で決まってるとき)
無則の組み合わせ
組み合わせに規則(ルール)がないとき
パラメータAで採用する値 と、 パラメータBで採用する値 の組み合わせが
どうであっても、結果が変化しない(するべきじゃない)とき。
8
…よく分かんないですね。
というわけで、ラーメン屋さんを例に出して説明します。
9
解説用の仕様
こんなラーメン屋さんがあるとします。
ラーメンの金額
ラーメン:700円
ラーメン大盛り:+100円
ランチタイム割引:‑100円
学生割引:‑50円
※ランチタイム割引と学生割引は、重複利用NG
ラーメンのバリエーション
味タイプ:醤油/塩/味噌
麺:固め/ふつう/柔らかめ
濃さ:濃いめ/ふつう/薄め
油:多め/ふつう/少なめ 10
有則の具体例
このラーメン屋さんの 金額計算が正しいこと のテストをしたい場合、そ
れは有則の組み合わせのテストです。
ラーメンの金額
ラーメン:700円
ラーメン大盛り:+100円
ランチタイム割引:‑100円
学生割引:‑50円
※ ランチタイム割引と学生割引は、重複利用NG
料金には一定の規則(ルール)が有ります。
大盛りか否か , ランチタイムか否か , 学生か否か といった条件によっ
て、結果である 金額 が決定されます。
11
有則のテスト
「大盛りか否か」「ランチタイムか否か」「学生か否か」といった 条件
の組み合わせ によって 金額(結果) が変化するので、
料金計算が正しいこと を確かめるためには色々な条件の組み合わせを入
力して、結果(金額)をチェックする必要があります。
そして、こんなときに使える有名なテスト技法があります。
12
デシジョンテーブル
こんな感じのヤツです。
13
デシジョンテーブル具体例
さっきのラーメン屋さんの金額計算をデシジョンテーブルで表現する
と、こんな感じになります。
値が2種類(Yes/No)のパラメータが3個あるで、トータルの組み合わせ数
は 2 × 2 × 2 = 8 になります。
(ちなみに「内部の判定順序が分かっている場合のみ」デシジョンテーブ
ルを圧縮してケース数を減らせますが、今回それには触れません) 14
デシジョンテーブルis条件分岐のテスト
要するに、こーゆー仕様(条件判定ルール)があった場合に、「それが正
しく実装されているか?」を確かめるテストです。
15
次は、 無則の組み合わせ の話をします。
解説用の仕様(再掲)
ラーメンの金額
ラーメン:700円
ラーメン大盛り:+100円
ランチタイム割引:‑100円
学生割引:‑50円
※ランチタイム割引と学生割引は、重複利用NG
ラーメンのバリエーション
味タイプ:醤油/塩/味噌
麺:固め/ふつう/柔らかめ
濃さ:濃いめ/ふつう/薄め
油:多め/ふつう/少なめ 16
無則の具体例
このラーメン屋さんは、お客さんの好みに合わせて味タイプや麺の固さ
などを選べます。
どの組み合わせでも、ちゃんとそれぞれ美味しいはずです。
つまり、「味タイプが 醤油 で、麺が 柔らかめ の場合、 味(結果) = 不
味い になる」といった規則(ルール)はありません。
味タイプ , 麺 , 濃さ , 油 は、互いに無関係なパラメータ達です。
17
でも、「無関係なパラメータ」というのはあくまで想定です。
「そうなるように(そのつもりで)作ってる」ってだけです。
そして人間は全知全能じゃないし、ミスをする生き物です。
18
もし、 味タイプ と 麺 には誰も気付いてない何らかの関係性があっ
て、「特定の組み合わせだけ美味しくない」としたら…?
そーゆー「望まない事象(欠陥)」が潜んでるとしたら…?
19
試してない以上、「そんなことはありえない」とは言えないですよ
ね??
不安ですよね????
お客さんにラーメン出す前に、ちょっとテストしてみたいですよ
ね???????(圧)
20
組み合わせの爆発
試しに、全部テストしたらどうなるか考えてみます。
特に「この味とこの麺は組み合わせNG」といった制約はないので、組み
合わせ数は 3 × 3 × 3 × 3 = 81 になります。
ラーメンのバリエーション
味タイプ:醤油/塩/味噌
麺:固め/ふつう/柔らかめ
濃さ:濃いめ/ふつう/薄め
油:多め/ふつう/少なめ
21
はちじゅーいちっ!?!?!?!?∑(゚Д゚ノ)ノ
さっきの金額計算は8ケースだったのに。。。。。
22
そう、81です。
これが俗に言う組み合わせの爆発です。
今回は全パラメータとも値が3種類だったので組み合わせ数は81だけ
ど、値の種類がちょっと増えたら組み合わせ数はポンポコ増えます。
平成組み合わせ合戦ポンポコです。令和なのに。(<=時事ネタ)
23
無則の組み合わせ、なんですぐ爆発してしまうん?
さっきの金額計算(有則の組み合わせ)は、「仕様で規則(ルール)が決まっ
てるもの」でした。
言い換えれば、条件分岐のパターンでした。
何百、何千パターンもの条件分岐がある仕様なんて、フツーないですよ
ね?そんなん人類には難しすぎるし。
でも、無則の組み合わせは違います。
「無関係な、独立したもの」同士だから、大量の組み合わせが生まれま
す。
24
…「無関係な、独立したもの=どう組み合わせても問題ないだろうも
の」って前提で、「でも一応チェックしよう」に対して、81ケースはち
ょっと過酷ですよね。
バグ探しのコスパが悪すぎます。
25
無則のテスト
全網羅は無理・・・でも全然やらないのは不安・・・
できる範囲ではがんばりたい・・・
ベストが無理でもベターでありたい・・・
「全組み合わせの網羅はできないけど、なるべく問題を拾えるように効率
的にテストしたい」
そんなときに使える有名なテスト技法があります。
26
組み合わせテスト技法
ペアワイズ法(All‑Pair法とも)
直交表
こういった技法を使うと、無則の組み合わせ達を効率的にテストできま
す。
ここで、たまによく聞く「2因子間網羅」とかが出てきます。
27
「2つのパラメータ(因子)の間では、全ての組み合わせを網羅している」
状態のことです。
味×麺 , 味×濃さ , 味×油 , 麺×濃さ , 麺×油 , 濃さ×油 という2因子
間では、すべての組み合わせが出現している
ただし、3因子間以上の組み合わせでは、出現しないものもある 28
具体的な組み合わせの作り方
PICT というツールを使うと、簡単にペアワイズ法を使った組み合わせ
を生成できます。
使い方は、Qiitaに超絶わかりやすい解説があります↓。
テストの数を減らそう!プリキュアで学ぶPICT
(直交表はもーちょっと難しいです。)
29
なんで2因子間の組み合わせを網羅するの?
むかし行われた研究で、色んな業界で出たバグを分析してみたところ
全体のバグのうち90%くらいが「1パラメータ」または「2パラメータ
間の組み合わせ」で発生してたからです。
なので、「(全部網羅できないから)2パラメータ間の組み合わせを網羅す
れば、大体のバグを見つけられるんじゃないか?」と期待できるからで
す。
30
注意点
ちなみに、(当然ですが)いつでも2因子間網羅してればいい訳じゃないで
す。
さっきの例はあくまで「統計とったらそーだった」なので、「あなたの
目の前のプロダクト」はそうじゃない可能性は全然あります。
もし自分がテストするプロダクトが「3パラメータ間の組み合わせでも
多くの問題が報告されてるプロダクト」なら、フツーに3因子間網羅ま
でテストすべきです。
(PICTで、3因子間網羅の組み合わせも生成できます)
31
ここまでのまとめ
組み合わせには 有則 と 無則 がある
有則 の組み合わせ
因子間の組み合わせに規則(ルール)がある
「人間が決めた何らかの規則」なので、組み合わせ数はそんな
多くない
有名なテスト技法は「デシジョンテーブル」など
(他にも「原因結果グラフ」とか「CFD法」とかがあります)
無則 の組み合わせ
因子間の組み合わせに規則(ルール)がない
本来関係ない要素たちの組み合わせなので、往々にして組み合
わせ数が爆発する
だから、バグ見つける可能性とテスト工数のトレードオフ
が大事
有名なテスト技法は「ペアワイズ法」「直交表」など
有則と無則は違う!!!!!!!!! 32
組み合わせテスト、よくあるミス
こっから本題、「組み合わせテストの落とし穴」です。
1.有則なのに2因子間網羅
2.無則なのに全網羅
33
1.有則なのに2因子間網羅
ダメな理由
大盛り: あり、ランチタイム割引: なし、学生割引: あり => 750円 等の
テストが漏れてる!!
漏れる理由
2因子間網羅では 大盛り × ランチタイム , 大盛り × 学生 , ランチタイム
× 学生 という2因子間の組み合わせは網羅できるが、 大盛り × ランチ
タイム × 学生 という3因子間の組み合わせは網羅できないため
34
2.無則なのに全網羅
81パターン全部やるやつ。
ダメな理由
状況によるけど、大体は過剰でコスパが悪い、非現実的。 35
ふだんのテストを振り返ってみましょう
有則の組み合わせなのに、2因子間網羅して必要なテストケース間引いち
ゃったり…
無則の組み合わせなのに、全網羅でテストして死にそうになったり…
してませんか????
36
まとめ
組み合わせには 有則 と 無則 がある
有則の組み合わせ
パラメータ間の組み合わせに規則(ルール)がある
基本的に、全部のパターンのテストが必要
無則の組み合わせ
パラメータ間の組み合わせに規則(ルール)がない
組み合わせ数が爆発しがちなので、効率よく間引きたい
自分が作ろうとしてるテストが、どっちなのか意識しましょう
じゃないと、テストの過不足が発生しちゃいます!!!!
37
おしまい(。・w・。)ノs
38

More Related Content

What's hot

Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理信之 岩永
 
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しようテスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しようAkira Ikeda
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
QAアーキテクチャの設計による 説明責任の高いテスト・品質保証
QAアーキテクチャの設計による説明責任の高いテスト・品質保証QAアーキテクチャの設計による説明責任の高いテスト・品質保証
QAアーキテクチャの設計による 説明責任の高いテスト・品質保証Yasuharu Nishi
 
アジャイル開発のストーリーをGherkin記法で作成
アジャイル開発のストーリーをGherkin記法で作成アジャイル開発のストーリーをGherkin記法で作成
アジャイル開発のストーリーをGherkin記法で作成Shinya Nakajima
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメYoji Kanno
 
What is quality culture? Is it something tasty?
What is quality culture? Is it something tasty?What is quality culture? Is it something tasty?
What is quality culture? Is it something tasty?Yasuharu Nishi
 
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateKinji Akemine
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門Preferred Networks
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTakuto Wada
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころTakuto Wada
 
アプリ開発へのOdc分析導入の取り組み
アプリ開発へのOdc分析導入の取り組みアプリ開発へのOdc分析導入の取り組み
アプリ開発へのOdc分析導入の取り組みNaokiKashiwagura
 
LINE Developer Meetup in Tokyo #39 Presentation
LINE Developer Meetup in Tokyo #39 PresentationLINE Developer Meetup in Tokyo #39 Presentation
LINE Developer Meetup in Tokyo #39 PresentationYasuharu Nishi
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。toshihiro ichitani
 
品質とは何か.pdf
品質とは何か.pdf品質とは何か.pdf
品質とは何か.pdfkauji0522
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveTokoroten Nakayama
 

What's hot (20)

Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しようテスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
QAアーキテクチャの設計による 説明責任の高いテスト・品質保証
QAアーキテクチャの設計による説明責任の高いテスト・品質保証QAアーキテクチャの設計による説明責任の高いテスト・品質保証
QAアーキテクチャの設計による 説明責任の高いテスト・品質保証
 
アジャイル開発のストーリーをGherkin記法で作成
アジャイル開発のストーリーをGherkin記法で作成アジャイル開発のストーリーをGherkin記法で作成
アジャイル開発のストーリーをGherkin記法で作成
 
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメオブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
 
What is quality culture? Is it something tasty?
What is quality culture? Is it something tasty?What is quality culture? Is it something tasty?
What is quality culture? Is it something tasty?
 
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
ソフトウェアテスト入門
ソフトウェアテスト入門ソフトウェアテスト入門
ソフトウェアテスト入門
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
アプリ開発へのOdc分析導入の取り組み
アプリ開発へのOdc分析導入の取り組みアプリ開発へのOdc分析導入の取り組み
アプリ開発へのOdc分析導入の取り組み
 
LINE Developer Meetup in Tokyo #39 Presentation
LINE Developer Meetup in Tokyo #39 PresentationLINE Developer Meetup in Tokyo #39 Presentation
LINE Developer Meetup in Tokyo #39 Presentation
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
 
はじめてのPRD
はじめてのPRDはじめてのPRD
はじめてのPRD
 
品質とは何か.pdf
品質とは何か.pdf品質とは何か.pdf
品質とは何か.pdf
 
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLiveDXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
 

組み合わせテストの落とし穴〜有則と無則〜