ブラックボックステストのテスト技法
筆者のスペック
- 社会人2年生
- 学生の頃のプログラマー経験を活かし、今はソフトウェアエンジニア
- プログラミング以外のエンジニアに必要なことは勉強中
よ~し、実装できた!単体テスト仕様書サクッと作ろう!
私は、人生で初めてソフトウェアエンジニアとして要件定義、設計、製造、テスト仕様書作成全てを一人で任せてもいただきました。
設計ではかなり苦労し、連日頭をひねりつぶして考え、製造では自社フレームワークに悩まされつつ、プログラマ経験を生かしてなんとか実装して、ちゃんと動いた! 設計書を実装に合わせて書き直し、あとはサクッと単体テスト仕様書を作って終わらせよう!(テスト実施は外注)
と、思っていたら、、、単体テスト仕様書、ちゃんと書いていたつもりだけど、レビュー指摘の嵐でした。悔しさをばねに勉強しました。
そんな私が、テスト仕様書を初めて作るあなたに向けて、解説します!
テスト仕様書とは?
テスト仕様書とは、以下を記載したドキュメントのこと
- テストの条件
- テスト操作
- 期待結果
単体テストとは?
単体テストの定義を調べると色んな定義が出てきますが、要するに結合テストの前に行うテストのことです。
「単体テスト」という言葉は会社によって取り決めがあることも多いようです。 例えばjavaなどのオブジェクト指向言語はクラス単位で単体テストを実施すると定義されていますが、私の会社では機能ごとでのテストです。
参考
Lee Copeland. "第1章 テストのプロセス". 初めて学ぶソフトフェアテスト技法, 2021佐々木 真 , 2022 , 単体テスト(UT)
ブラックボックス
ブラックボックスとは?
要件と設計書のみを見て行うテスト戦略 = 実装を確認しない
ブラックボックステストには、様々なテスト技法があります。本記事ではこれだけは知っておきたい!というものに厳選して解説します。
参考
Lee Copeland. "第1章 テストのプロセス". 初めて学ぶソフトフェアテスト技法, 2021同値クラステスト
同値クラステストとは?
有効値、無効値でテストするテスト技法
同値クラスとは、モジュールで同等に評価されるデータ、あるいは同じ結果を返すデータの集合を意味します。
Lee Copeland.[著] 初めて学ぶソフトフェアテスト技法
例えば、60点以上で合格の試験があって、合格の時は「おめでとうございます!合格です。」と表示、不合格の時は再受験申込フォームに遷移させる処理を考えましょう。
60点でも、61点でも100点でも「おめでとうございます!合格です。」と表示し、58点でも3点でも10点でも、再受験申込フォームに遷移するのが正しい仕様です。
0 ≦ x < 60 , 60 ≦ y ≦ 100
x , y はそれぞれ別の同値クラスということができます。
詳細
有効値のとりうるパターンが少ない時は全てテストを実施し、パターンが多い場合は、その機能の重要度にや組織にとってのリスクによって、どの程度までテスト実施するか決める。
有効なデータのみのテストは単一でも良く、有効データのテストケースを増やしてもバグが見つかることは稀。 無効値には1つの無効値がほかの項目の入力値のエラーを取り消すことがあるため、入力値が3つあったら、3つのうち1つの入力値が無効値であるテストケースを3つ作り、システムの挙動を調べる必要があります。
1つの入力項目のエラーが別の項目のエラーを帳消しにしたり覆い隠したりした結果、システムがそれを有効データとして受け入れることは、そう珍しくありません。
Lee Copeland.[著] 初めて学ぶソフトフェアテスト技法
参考
Lee Copeland. "第3章 同値クラステスト". 初めて学ぶソフトフェアテスト技法, 2021境界値テスト
境界値テストとは?
処理が変わる境界値付近を調べるテスト技法
詳細
プログラマーなら、境界値にはバグが潜んでいる確率が高いのは経験則でわかるでしょう。
テストするのは境界値のすぐ下、境界値、境界値のすぐ上です。
再び、60点以上で合格の試験があって、合格の時は「おめでとうございます!合格です。」と表示、不合格の時は再受験申込フォームに遷移させる処理を考えましょう。
境界値のすぐ下は59点、境界値は60点、境界値のすぐ上は61点ですね。
■境界値テストと同値クラステスト
ここで、同値クラステストの章ではは60点も、61点も同値クラスになるからテストは1ケースでよいはずだが、
境界値テストでは59点,60点,61点をテストすることになります。
61点はテストすべきでしょうか?
上記のように、境界付近の値が別の同値クラスに含まれる場合はテスト実施は必要ないと言われています。
参考
Lee Copeland. "第4章 境界値テスト". 初めて学ぶソフトフェアテスト技法, 2021デシジョンテーブルテスト
デシジョンテーブルテストとは?
テストの条件と期待結果を組み合わせた表を用いるテスト技法
詳細
デシジョンテーブルはそのままテスト仕様書としても使うことができる。具体的には以下がデシジョンテーブル。
テストNo | 1 | 2 | 3 |
---|---|---|---|
条件1 | true | true | true |
条件2 | true | false | false |
条件3 | false | true | false |
期待結果 | 成功 | エラー | 更新されない |
■すべての条件の組み合わせを含めよう
3つの条件のうち1つがAなら、期待結果は必ずBになる場合は、ほかの2つの条件を変化させてテストする必要は内容に思います。
しかし、デシジョンテーブルの縮小は、間違えると誤ったテストケースを作成してしまうのでやめましょう。
参考
Lee Copeland. "第5章 デシジョンテーブルテスト". 初めて学ぶソフトフェアテスト技法, 2021ペア構成テスト
ペア構成テストとは?
ペア構成テストとは、条件の全ての組み合わせではなく、全ての条件のペアの組み合わせをテストするテスト技法
このテスト技法が有効なケース
- 条件を組み合わせる場合
- テストケースが多いとき
詳細
ふつう、すべての組み合わせでテストしようとしますが、「テストケースが多すぎる!!」というときがありますよね。 そんな時はテストケース削減のため、ペア構成テストの実施を検討しましょう。
当然、全ての条件のペアの組み合わせをテストするだけで十分なのか?という疑問が生まれます。 残念ながら、ペア構成テストの有効性を示すロジックが分かっているわけではありません。 但し、このテスト技法は様々なプロジェクトで使われて、開発者を満足させている事実があるのです。
戦後日本の製造業発展は直交表の効果と言う人もいるほど効果的な手法
引用:直交表とは
さて、ペア構成テストには2種類の考え方があります。 残念ながら筆者は数学者ではなく、ただのソフトフェアエンジニアなので、数学的な解説はできませんので、ご了承ください。
■直交表
- 数学者のオイラーが考えたと言われている
- 直交表を用いた工業実験の計画は主に日本で発展した
- 任意の二列を選ぶと全てのペアを持つ
- 全てのペアがテストケースに同じ数だけ現れる(均衡が保たれる)
条件1 | 条件2 | 条件3 | |
---|---|---|---|
テストケース1 | true | true | true |
テストケース2 | true | false | false |
テストケース3 | false | true | false |
テストケース4 | false | false | true |
■全ペアアルゴリズム
- ペアは1回以上テストケースに現れればよい(均衡は保たれない)
- 直交表よりもテストケースが少なくなる
- テストケース作成のためのツールは世の中に沢山ある
■テスト技法としては有名だが、業務で使われにくいペア構成テスト
「うちの会社では使ったことがないけど」というエンジニアの皆様がいらっしゃると思います。
実は私の会社でも使っていません。やはり、テストケースを省くリスクを考えると躊躇するのでしょう。
参考リンク
Lee Copeland. "第6章 ペア構成テスト". 初めて学ぶソフトフェアテスト技法, 20212019.06.16 , 直交表はなぜ使われないのか?【ともかく使ってみるしかない!】
Fumikazu Fujiwara , 2020.05.18 , ペアワイズ テストのアルゴリズムを実装して学ぼう
Ryoma Maeda , 2022.10.21 , 組合せテストの技法: ペアワイズ法(オールペア法)を3分で理解する
SSAITS(サイツ)社 , 2022.06.06 , 直交表(OAT)とオールペア法(ペアワイズ法)の違いとは何か?2つのテストケース作成技法を解説
熊坂 治(ものづくりドットコム社) , 2022 , 「直交表」とは
菱祐一(株式会社NTTデータMSE) , 2022 , 直交表の欠点と克服
おわりに
最後まで読んでくださり、ありがとうございました。
テストが好きなエンジニアは少ないと思いますが、品質を保証するためにとても大切なので、頑張ってテストしましょー!