Submit Search
Upload
組み合わせテストの落とし穴〜有則と無則〜
•
1 like
•
5,533 views
yufu yufu
Follow
ソフトウェアテスト初心者向けに作った、組み合わせテストの説明資料です。有則と無則の違いや、それを混同することのリスクについて説明しています。
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 38
Download now
Download to read offline
Recommended
探索的テスト入門
探索的テスト入門
H Iseri
インセプションデッキ:やらないことリストとトレードオフスライダーをやってる話
インセプションデッキ:やらないことリストとトレードオフスライダーをやってる話
Nobuhiro Yoshitake
概説 テスト分析
概説 テスト分析
崇 山﨑
テストの組み立て方
テストの組み立て方
kauji0522
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
Re-collection of embedded software qa in the last decade
Re-collection of embedded software qa in the last decade
Yasuharu Nishi
LINE Developer Meetup in Tokyo #39 Presentation (modified)
LINE Developer Meetup in Tokyo #39 Presentation (modified)
Yasuharu Nishi
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
Yasuharu Nishi
Recommended
探索的テスト入門
探索的テスト入門
H Iseri
インセプションデッキ:やらないことリストとトレードオフスライダーをやってる話
インセプションデッキ:やらないことリストとトレードオフスライダーをやってる話
Nobuhiro Yoshitake
概説 テスト分析
概説 テスト分析
崇 山﨑
テストの組み立て方
テストの組み立て方
kauji0522
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
Re-collection of embedded software qa in the last decade
Re-collection of embedded software qa in the last decade
Yasuharu Nishi
LINE Developer Meetup in Tokyo #39 Presentation (modified)
LINE Developer Meetup in Tokyo #39 Presentation (modified)
Yasuharu Nishi
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
Yasuharu Nishi
Unicode文字列処理
Unicode文字列処理
信之 岩永
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
Akira Ikeda
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
QAアーキテクチャの設計による説明責任の高いテスト・品質保証
QAアーキテクチャの設計による説明責任の高いテスト・品質保証
Yasuharu Nishi
アジャイル開発のストーリーをGherkin記法で作成
アジャイル開発のストーリーをGherkin記法で作成
Shinya Nakajima
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
What is quality culture? Is it something tasty?
What is quality culture? Is it something tasty?
Yasuharu Nishi
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
Kinji Akemine
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
ソフトウェアテスト入門
ソフトウェアテスト入門
Preferred Networks
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
TDD のこころ
TDD のこころ
Takuto Wada
アプリ開発へのOdc分析導入の取り組み
アプリ開発へのOdc分析導入の取り組み
NaokiKashiwagura
LINE Developer Meetup in Tokyo #39 Presentation
LINE Developer Meetup in Tokyo #39 Presentation
Yasuharu Nishi
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
toshihiro ichitani
はじめてのPRD
はじめてのPRD
Takuya Oikawa
品質とは何か.pdf
品質とは何か.pdf
kauji0522
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
More Related Content
What's hot
Unicode文字列処理
Unicode文字列処理
信之 岩永
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
Akira Ikeda
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada
QAアーキテクチャの設計による説明責任の高いテスト・品質保証
QAアーキテクチャの設計による説明責任の高いテスト・品質保証
Yasuharu Nishi
アジャイル開発のストーリーをGherkin記法で作成
アジャイル開発のストーリーをGherkin記法で作成
Shinya Nakajima
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
Yoji Kanno
What is quality culture? Is it something tasty?
What is quality culture? Is it something tasty?
Yasuharu Nishi
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
Kinji Akemine
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
ソフトウェアテスト入門
ソフトウェアテスト入門
Preferred Networks
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada
TDD のこころ
TDD のこころ
Takuto Wada
アプリ開発へのOdc分析導入の取り組み
アプリ開発へのOdc分析導入の取り組み
NaokiKashiwagura
LINE Developer Meetup in Tokyo #39 Presentation
LINE Developer Meetup in Tokyo #39 Presentation
Yasuharu Nishi
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
toshihiro ichitani
はじめてのPRD
はじめてのPRD
Takuya Oikawa
品質とは何か.pdf
品質とは何か.pdf
kauji0522
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
What's hot
(20)
Unicode文字列処理
Unicode文字列処理
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
テスト分析・設計を体感しよう ~マインドマップを活用してテスト観点を発想しよう
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
QAアーキテクチャの設計による説明責任の高いテスト・品質保証
QAアーキテクチャの設計による説明責任の高いテスト・品質保証
アジャイル開発のストーリーをGherkin記法で作成
アジャイル開発のストーリーをGherkin記法で作成
オブジェクト指向エクササイズのススメ
オブジェクト指向エクササイズのススメ
What is quality culture? Is it something tasty?
What is quality culture? Is it something tasty?
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
ソフトウェアテスト入門
ソフトウェアテスト入門
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Test Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
TDD のこころ
TDD のこころ
アプリ開発へのOdc分析導入の取り組み
アプリ開発へのOdc分析導入の取り組み
LINE Developer Meetup in Tokyo #39 Presentation
LINE Developer Meetup in Tokyo #39 Presentation
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
ユーザーストーリー駆動開発で行こう。
ユーザーストーリー駆動開発で行こう。
はじめてのPRD
はじめてのPRD
品質とは何か.pdf
品質とは何か.pdf
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
組み合わせテストの落とし穴〜有則と無則〜
1.
組み合わせテストの落とし穴 ~有則と無則~ 書いたひと:ゆふ(@yufu69) 書いたとき:2019/05 1
2.
今日話したいこと 組み合わせテスト には大きく2種類ある その2種類は、異なる技法でテストする どちらのテストなのか意識してないと、テストケースの過不足が発 生する 2
3.
組み合わせテスト、してますか? 「組み合わせテスト」って言われたら何を思い浮かべますか? 3
4.
「因子・水準」? 「2因子間網羅・全網羅」? 4
5.
どうしてこのテストは2因子間網羅なんですか? どうしてあのテストは全網羅なんですか? ちゃんと答えられますか? 5
6.
「なんとなく、量が多いから2因子間網羅」 「なんとなく、量が少ないから全網羅」 …とかなってませんか?? 6
7.
実は、組み合わせテストには、大きく分けて2つの種類があります。 有則 の組み合わせのテスト 無則 の組み合わせのテスト この2つは違うアプローチでテストすべきものです。 7
8.
有則の組み合わせ 組み合わせに規則(ルール)があるとき パラメータAで採用する値 と、 パラメータBで採用する水準
の組み合わせ が、結果に影響を与えるとき。 (「パラメータAで値1を選んでパラメータBで値2を選んだ場合、結果は こうなる」というのが仕様で決まってるとき) 無則の組み合わせ 組み合わせに規則(ルール)がないとき パラメータAで採用する値 と、 パラメータBで採用する値 の組み合わせが どうであっても、結果が変化しない(するべきじゃない)とき。 8
9.
…よく分かんないですね。 というわけで、ラーメン屋さんを例に出して説明します。 9
10.
解説用の仕様 こんなラーメン屋さんがあるとします。 ラーメンの金額 ラーメン:700円 ラーメン大盛り:+100円 ランチタイム割引:‑100円 学生割引:‑50円 ※ランチタイム割引と学生割引は、重複利用NG ラーメンのバリエーション 味タイプ:醤油/塩/味噌 麺:固め/ふつう/柔らかめ 濃さ:濃いめ/ふつう/薄め 油:多め/ふつう/少なめ 10
11.
有則の具体例 このラーメン屋さんの 金額計算が正しいこと のテストをしたい場合、そ れは有則の組み合わせのテストです。 ラーメンの金額 ラーメン:700円 ラーメン大盛り:+100円 ランチタイム割引:‑100円 学生割引:‑50円 ※
ランチタイム割引と学生割引は、重複利用NG 料金には一定の規則(ルール)が有ります。 大盛りか否か , ランチタイムか否か , 学生か否か といった条件によっ て、結果である 金額 が決定されます。 11
12.
有則のテスト 「大盛りか否か」「ランチタイムか否か」「学生か否か」といった 条件 の組み合わせ によって
金額(結果) が変化するので、 料金計算が正しいこと を確かめるためには色々な条件の組み合わせを入 力して、結果(金額)をチェックする必要があります。 そして、こんなときに使える有名なテスト技法があります。 12
13.
デシジョンテーブル こんな感じのヤツです。 13
14.
デシジョンテーブル具体例 さっきのラーメン屋さんの金額計算をデシジョンテーブルで表現する と、こんな感じになります。 値が2種類(Yes/No)のパラメータが3個あるで、トータルの組み合わせ数 は 2 ×
2 × 2 = 8 になります。 (ちなみに「内部の判定順序が分かっている場合のみ」デシジョンテーブ ルを圧縮してケース数を減らせますが、今回それには触れません) 14
15.
デシジョンテーブルis条件分岐のテスト 要するに、こーゆー仕様(条件判定ルール)があった場合に、「それが正 しく実装されているか?」を確かめるテストです。 15
16.
次は、 無則の組み合わせ の話をします。 解説用の仕様(再掲) ラーメンの金額 ラーメン:700円 ラーメン大盛り:+100円 ランチタイム割引:‑100円 学生割引:‑50円 ※ランチタイム割引と学生割引は、重複利用NG ラーメンのバリエーション 味タイプ:醤油/塩/味噌 麺:固め/ふつう/柔らかめ 濃さ:濃いめ/ふつう/薄め 油:多め/ふつう/少なめ
16
17.
無則の具体例 このラーメン屋さんは、お客さんの好みに合わせて味タイプや麺の固さ などを選べます。 どの組み合わせでも、ちゃんとそれぞれ美味しいはずです。 つまり、「味タイプが 醤油 で、麺が
柔らかめ の場合、 味(結果) = 不 味い になる」といった規則(ルール)はありません。 味タイプ , 麺 , 濃さ , 油 は、互いに無関係なパラメータ達です。 17
18.
でも、「無関係なパラメータ」というのはあくまで想定です。 「そうなるように(そのつもりで)作ってる」ってだけです。 そして人間は全知全能じゃないし、ミスをする生き物です。 18
19.
もし、 味タイプ と
麺 には誰も気付いてない何らかの関係性があっ て、「特定の組み合わせだけ美味しくない」としたら…? そーゆー「望まない事象(欠陥)」が潜んでるとしたら…? 19
20.
試してない以上、「そんなことはありえない」とは言えないですよ ね?? 不安ですよね???? お客さんにラーメン出す前に、ちょっとテストしてみたいですよ ね???????(圧) 20
21.
組み合わせの爆発 試しに、全部テストしたらどうなるか考えてみます。 特に「この味とこの麺は組み合わせNG」といった制約はないので、組み 合わせ数は 3 ×
3 × 3 × 3 = 81 になります。 ラーメンのバリエーション 味タイプ:醤油/塩/味噌 麺:固め/ふつう/柔らかめ 濃さ:濃いめ/ふつう/薄め 油:多め/ふつう/少なめ 21
22.
はちじゅーいちっ!?!?!?!?∑(゚Д゚ノ)ノ さっきの金額計算は8ケースだったのに。。。。。 22
23.
そう、81です。 これが俗に言う組み合わせの爆発です。 今回は全パラメータとも値が3種類だったので組み合わせ数は81だけ ど、値の種類がちょっと増えたら組み合わせ数はポンポコ増えます。 平成組み合わせ合戦ポンポコです。令和なのに。(<=時事ネタ) 23
24.
無則の組み合わせ、なんですぐ爆発してしまうん? さっきの金額計算(有則の組み合わせ)は、「仕様で規則(ルール)が決まっ てるもの」でした。 言い換えれば、条件分岐のパターンでした。 何百、何千パターンもの条件分岐がある仕様なんて、フツーないですよ ね?そんなん人類には難しすぎるし。 でも、無則の組み合わせは違います。 「無関係な、独立したもの」同士だから、大量の組み合わせが生まれま す。 24
25.
…「無関係な、独立したもの=どう組み合わせても問題ないだろうも の」って前提で、「でも一応チェックしよう」に対して、81ケースはち ょっと過酷ですよね。 バグ探しのコスパが悪すぎます。 25
26.
無則のテスト 全網羅は無理・・・でも全然やらないのは不安・・・ できる範囲ではがんばりたい・・・ ベストが無理でもベターでありたい・・・ 「全組み合わせの網羅はできないけど、なるべく問題を拾えるように効率 的にテストしたい」 そんなときに使える有名なテスト技法があります。 26
27.
組み合わせテスト技法 ペアワイズ法(All‑Pair法とも) 直交表 こういった技法を使うと、無則の組み合わせ達を効率的にテストできま す。 ここで、たまによく聞く「2因子間網羅」とかが出てきます。 27
28.
「2つのパラメータ(因子)の間では、全ての組み合わせを網羅している」 状態のことです。 味×麺 , 味×濃さ
, 味×油 , 麺×濃さ , 麺×油 , 濃さ×油 という2因子 間では、すべての組み合わせが出現している ただし、3因子間以上の組み合わせでは、出現しないものもある 28
29.
具体的な組み合わせの作り方 PICT というツールを使うと、簡単にペアワイズ法を使った組み合わせ を生成できます。 使い方は、Qiitaに超絶わかりやすい解説があります↓。 テストの数を減らそう!プリキュアで学ぶPICT (直交表はもーちょっと難しいです。) 29
30.
なんで2因子間の組み合わせを網羅するの? むかし行われた研究で、色んな業界で出たバグを分析してみたところ 全体のバグのうち90%くらいが「1パラメータ」または「2パラメータ 間の組み合わせ」で発生してたからです。 なので、「(全部網羅できないから)2パラメータ間の組み合わせを網羅す れば、大体のバグを見つけられるんじゃないか?」と期待できるからで す。 30
31.
注意点 ちなみに、(当然ですが)いつでも2因子間網羅してればいい訳じゃないで す。 さっきの例はあくまで「統計とったらそーだった」なので、「あなたの 目の前のプロダクト」はそうじゃない可能性は全然あります。 もし自分がテストするプロダクトが「3パラメータ間の組み合わせでも 多くの問題が報告されてるプロダクト」なら、フツーに3因子間網羅ま でテストすべきです。 (PICTで、3因子間網羅の組み合わせも生成できます) 31
32.
ここまでのまとめ 組み合わせには 有則 と
無則 がある 有則 の組み合わせ 因子間の組み合わせに規則(ルール)がある 「人間が決めた何らかの規則」なので、組み合わせ数はそんな 多くない 有名なテスト技法は「デシジョンテーブル」など (他にも「原因結果グラフ」とか「CFD法」とかがあります) 無則 の組み合わせ 因子間の組み合わせに規則(ルール)がない 本来関係ない要素たちの組み合わせなので、往々にして組み合 わせ数が爆発する だから、バグ見つける可能性とテスト工数のトレードオフ が大事 有名なテスト技法は「ペアワイズ法」「直交表」など 有則と無則は違う!!!!!!!!! 32
33.
組み合わせテスト、よくあるミス こっから本題、「組み合わせテストの落とし穴」です。 1.有則なのに2因子間網羅 2.無則なのに全網羅 33
34.
1.有則なのに2因子間網羅 ダメな理由 大盛り: あり、ランチタイム割引: なし、学生割引:
あり => 750円 等の テストが漏れてる!! 漏れる理由 2因子間網羅では 大盛り × ランチタイム , 大盛り × 学生 , ランチタイム × 学生 という2因子間の組み合わせは網羅できるが、 大盛り × ランチ タイム × 学生 という3因子間の組み合わせは網羅できないため 34
35.
2.無則なのに全網羅 81パターン全部やるやつ。 ダメな理由 状況によるけど、大体は過剰でコスパが悪い、非現実的。 35
36.
ふだんのテストを振り返ってみましょう 有則の組み合わせなのに、2因子間網羅して必要なテストケース間引いち ゃったり… 無則の組み合わせなのに、全網羅でテストして死にそうになったり… してませんか???? 36
37.
まとめ 組み合わせには 有則 と
無則 がある 有則の組み合わせ パラメータ間の組み合わせに規則(ルール)がある 基本的に、全部のパターンのテストが必要 無則の組み合わせ パラメータ間の組み合わせに規則(ルール)がない 組み合わせ数が爆発しがちなので、効率よく間引きたい 自分が作ろうとしてるテストが、どっちなのか意識しましょう じゃないと、テストの過不足が発生しちゃいます!!!! 37
38.
おしまい(。・w・。)ノs 38
Download now