「ブラックボックステスト」とは？特徴と主要な4つのテスト技法を徹底解説！

# はじめに
こんにちは。
今回は「**ブラックボックステスト**」について紹介していきたいと思います！
「ブラックボックステスト」は「**基本情報技術者試験**」、「**JSTQB FL**」ともに出題されるテスト技法となっています。

# 目次
* [1. ブラックボックステスト](https://qiita.com/itsuki_slj/private/bc06c214f47e07dc7438#1-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%83%86%E3%82%B9%E3%83%88)
    * [1-1. ブラックボックテスト](https://qiita.com/itsuki_slj/private/bc06c214f47e07dc7438#1-1-%E3%83%96%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9C%E3%83%83%E3%82%AF%E3%82%B9%E3%83%86%E3%82%B9%E3%83%88)
    * [1-2. 同値分割](https://qiita.com/itsuki_slj/private/bc06c214f47e07dc7438#1-2-%E5%90%8C%E5%80%A4%E5%88%86%E5%89%B2)
    * [1-3. 境界値分析](https://qiita.com/itsuki_slj/private/bc06c214f47e07dc7438#1-3-%E5%A2%83%E7%95%8C%E5%80%A4%E5%88%86%E6%9E%90)
    * [1-4. デシジョンテーブルテスト](https://qiita.com/itsuki_slj/private/bc06c214f47e07dc7438#1-4-%E3%83%87%E3%82%B7%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%83%86%E3%82%B9%E3%83%88)
    * [1-5. 状態遷移テスト](https://qiita.com/itsuki_slj/private/bc06c214f47e07dc7438#1-5-%E7%8A%B6%E6%85%8B%E9%81%B7%E7%A7%BB%E3%83%86%E3%82%B9%E3%83%88)
    * [状態遷移図 ](https://qiita.com/itsuki_slj/private/bc06c214f47e07dc7438#%E7%8A%B6%E6%85%8B%E9%81%B7%E7%A7%BB%E5%9B%B3)
    * [状態遷移表](https://qiita.com/itsuki_slj/private/bc06c214f47e07dc7438#%E7%8A%B6%E6%85%8B%E9%81%B7%E7%A7%BB%E8%A1%A8)
     
    

# 1. ブラックボックステスト
### 1-1. ブラックボックステスト
ブラックボックステストとは、システムの**内部構造を考慮せずに**実施するテスト技法のこと
「**入力**」と「**出力**」の部分のみに重点を置いてテストを行う技法となっています。
このテスト技法は、「**利用者側（ユーザー）視点**」でのテストになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540016/0ca29c9d-b83a-abf1-359f-5a16a6123f77.png)

### 1-2. 同値分割
同値分割とは、データ範囲を種類ごとのグループに分け、それぞれ**代表的な値を選択**しテストする技法のこと

**体脂肪率**を例にあげて説明していきます。
グループ分けとして、「**痩せ気味：15%未満**」、「**標準：15%〜20%**」、「**軽い肥満：21%以上**」という3つのグループに分けます。
それぞれのグループごとにテストデータとして代表的な値「**10%**」、「**18%**」、「**25%**」を選択します。
その選択した値が、**正しくグループ分けできるかどうか**を検証するテストになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540016/56394577-69a9-6540-a8e9-d63b6bc7368b.png)

### 1-3. 境界値分析
境界値分析とは、仕様条件の**境界となる前後の値**に対してテストする技法のこと

境界値分析も**体脂肪率**を例にあげて説明していきます。
グループ分けは同様で、テストデータが変わってきます。
ここで境界となってくるのが、「**15%**」と「**20%**」です。
「**14%**」が「**痩せ気味**」のグループに、「**15%**」「**20%**」が「**標準**」のグループに、「**21%**」が「**軽い肥満**」のグループに分けられることを検証するテストになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540016/744bb4c8-f66c-568d-bfe4-f303234553c5.png)

### 1-4. デシジョンテーブルテスト
テシジョンテーブルテストとは、**想定されるすべての条件**と、それに対して**実行すべき動作**を整理した表のこと

まず、「デシジョンテーブルテスト」に用いられる**アルファベット**（**Y、N、X**）について説明していきます。
>**条件**
条件を満たす場合は「**Y**」,
そうではない場合は「**N**」が入る
**期待値**
アクションが発生する場合は「**X**」,
そうではない場合は「**-**」が入る

それを踏まえて、下記内容を例にして説明していきます。
> **例)あるショップにおける、割引計算の仕様**
　**・会員：10% OFF**
　**・クーポン：5% OFF**

はじめに「**条件**」の説明です。
* テストケース１は、「**会員であり、クーポンも持っている**」ため、「**会員：Y**」,「**クーポン：Y**」となります。
* テストケース２は、「**会員ではあるが、クーポンは持っていない**」ため、「**会員：Y**」,「**クーポン：N**」となります。
* テストケース3,4も同様になります。
<br>

次に、「**期待値**」の説明です。
* テストケース１は、「**会員：Y**」,「**クーポン：Y**」ため、「**会員：10% OFF,クーポン：5% OFF**」ということから「**15% OFF**」のところに「**X**」が入り、それ以外に「**-**」が入ります。
* テストケース2は、「**会員：Y**」,「**クーポン：N**」ため、「**10% OFF**」のところに「**X**」が入り、それ以外に「**-**」が入ります。
* テストケース3,4も同様になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540016/45c1d733-3e96-996d-488b-52686c0aea99.png)

### 1-5. 状態遷移テスト
状態遷移テストとは、設計仕様通りの**イベント**によってソフトウェアの状態が変化することを検証するテストのこと
**イベント**：ある状態が異なる状態に変化する**きっかけ**のこと

状態遷移テストには、下記2種類の手法があります。
* 状態遷移図
* 状態遷移表
<br>

### 状態遷移図
状態遷移図とは、**システムの状態**と**その変化**を図で表したもの

状態遷移図の書き方として、「**状態**」を**四角**で表し、その「**遷移**」を**矢印**で図示します。
「**状態名**」を**四角の中**に、状態を遷移させるきっかけとなる「**イベント**」を**矢印のそば**に記載して表します。
<br>
ここでは、「**ストップウォッチ**」を例に説明していきます。

まず、「**計測準備中**」という状態から、「**スタートボタン**」を押すというイベントによって、「**計測中**」に状態が遷移することを表しています。
ここで、さらに「**スタートボタン**」を押すことで「**一時停止中**」に状態が遷移します。
このように、四角に書かれた**状態**から矢印のそばに記載されている**イベント**によって**状態遷移**することを表しています。

状態遷移図を使用するメリットとして、仕様書に書いてある遷移を読み解くよりも、**状態遷移全体の流れを視覚的に捉える**ことが可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540016/1d9ebd36-03d1-9617-fa1d-d83884a67b57.png)

### 状態遷移表
状態遷移表とは、「**遷移前の状態**」「**遷移後の状態**」「**イベント**」を表形式でまとめたもの
状態遷移表の書き方として、縦に「**遷移前の状態**」、横に「**イベント**」を表記し、それぞれの組み合わせを「**遷移後の状態**」として表しています。
<br>
これも同様に、「**ストップウォッチ**」を例にしていきます。

遷移前の状態の「**待機中**」とイベントの「**STARTボタン押下**」の組み合わせにより、遷移後の状態は、「**計測中**」になるということがわかります。
また、「**待機中**」と「**STOPボタン押下**」の組み合わせは、遷移が発生しないので、「**-**」が表記されています。（遷移が発生しない組み合わせは「**-**」で表記）

状態遷移表を使用するメリットとしては、全ての状態とイベントの組合せを網羅でき、**想定しないイベント**の対処も確認することができることに加え、遷移が発生しない「**状態**」と「**イベント**」の組み合わせも把握することができるというメリットがあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3540016/656968b4-eb59-2c44-6acf-bf3151c8563c.png)


# 終わりに
今回は、「**ブラックボックステスト**」について紹介してきました。
テスト技法が多く、区別することが難しいテストだと思います。
この記事を読んでいただき、少しでも勉強の参考にしていただければ幸いです！
次回は、「**ホワイトボックステスト**」について紹介したいと思います！
ここまで読んでいただきありがとうござました！！