(初心者向け)ソフトウェアテストの観点～帳票編

## はじめに
業務システムでよくある帳票などをダウンロードする機能で、ダウンロードされた帳票そのものに対するテストの観点を、簡単なサンプルシステムを例にしてまとめてみました。

テスト技法を本格的に勉強したわけではなく、今まで携わった案件で、この観点でテストすればＯＫだったっていう過去の経験を思い出しながら書きました。

## （サンプル）システム概要

- **システム名** ：音楽コンクール採点システム

- **ざっくり仕様**
  - 審査員が、出場者の演奏を聴き、採点フォームに入力し登録する。
  - ダウンロード画面から、出場者の成績一覧がダウンロードできる。

- **採点画面**
採点項目は3つで各10点、30点満点で採点します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/8f8a6266-5a71-86f3-fba4-39687307cb8a.png)


- **ダウンロード画面** 省略

- **帳票レイアウト（審査結果一覧）** :star2: 今回のテスト対象 :star2: 
ただの表ですが説明用にシンプルにしました。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/7fc0ceeb-cc4c-d599-4338-2b6074e19839.png)

- **データベースのテーブル**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/f49adeb5-c66c-737c-2e5c-ccb546807abc.png)

## 帳票のテスト観点
おおきくわけると、**レイアウト** と **データ（DBの値とか動的に変わる部分）** の確認で、別々にテストします。
不具合管理票とかでチケットを切るとき、もし1つの箇所でレイアウトとデータの値が両方不具合として見つかった場合、別々の不具合としてチケットをきります。

## 帳票レイアウトのテスト
要件定義で決めた通りのレイアウトで帳票が出力されるのかを確認します。

### ファイル形式

- ファイル形式が正しいか（CSV, PDF等）
- ファイル名称が正しいか

### 項目名称関連
- ヘッダー名称が正しいか
- ヘッダーの項目の順序が正しいか

CSVのようなテキストベースのファイルはこれくらいかもしれません。

### PDFとか画像データ、エクセルなどの場合
**例：**

- 項目の配置位置が正しいか（左揃え、中央揃えなど）
- 線の種類、太さ、色が正しいか
- 枠線がはみ出たり、切れてないか
- 項目名やデータの値が枠内に収まっているか（文字の折返しなど）
- フォントの種類、大きさが正しいか
- 列幅や高さが正しいか
- 余白が適切か
- 改ページがある場合
    - ページ番号の表示形式（`1/100`、`No.100` とか）
    - 1ページあたりの最大表示件数

などがあると思います。
外部のお客様に提出するようなファイルの場合はけっこう細かく確認します。

#### テストデータ作成時の注意点
氏名、住所など可変なデータは起こりうる最大文字数のデータを作成し、レイアウトがくずれないか確認します。

- :x: **悪いテストデータ例**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/de5db744-65e1-3f1d-365a-8b2ea1053598.png)
このデータだと、文字数確認だけでなく、姓と名が逆で出力されてた場合も不具合に気づくことができません。

- :o: **良いテストデータ例**
姓名が各全角10文字以内の場合。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/98fada3d-9589-2546-43f9-620880244265.png)
わたしは10文字ってわかりやすくする為、↑の画像みたいな感じでデータを登録します。


また、nullを許容してるカラムの場合は、nullの場合は空白で表示されるかなどを確認します。
帳票にnullとかNanとか表示されないことを確認しましょう。


### データ部の表示形式関連
データベースの値を何らかの形式で加工して表示する場合、表示形式が正しいか確認します。
**例：**

- 値の配置位置が正しいか
  - 数値は右揃え
  - 文字列は左揃え

- データのフォーマット
  - 数値 ... 金額だと￥マークがあるか、３ケタ区切りのカンマついてるか
  - 氏名 ... 姓と名が半角スペースで区切られているか
  - 日付 ... yyyy年、yy年、1月、01月、1990-01-01

などがあると思います。

## データのテスト
おおまかにわけると以下について確認します。

- データベースの登録内容と、帳票の出力結果の値が等しいか
- 計算結果が正しいか

### データ１行に対してテスト

#### テストデータ作成時の注意点
テーブルのカラムと、帳票の各項目のマッピングが正しいかを確認する為、各カラムをユニークな値で登録して作成します。

- :x: **悪いテストデータ例**
プログラマが間違えてメロディにharmony、ハーモニーにmelodyを出力するようプログラミングしてた場合、不具合に気づけません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/958cf959-d30f-0bf5-4674-e948e020cfd1.png)

- :o: **良いテストデータ例**
カラムの値をユニークにしていれば、帳票の各項目にカラムの値が正しくマッピングされていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/7a3c28e7-064d-e599-d848-e6ab87e9123a.png)

### 複数データに対してテスト
#### テストデータ作成時の注意点１
例えば、**合計点の高い順でソートして出力** って要件定義してある場合

- :x: **悪いテストデータ例**
合計点が全部同じなテストデータだと、ほんとに合計点順になってるか不明です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/7f892f35-6195-5ad0-ce12-d77d454ab876.png)

- :o: **良いテストデータ例**
合計点をユニークになるようデータを作成すれば、正しくソートされたことが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/122bd888-37a7-e4b1-a37f-c13594d04c1e.png)

#### テストデータ作成時の注意点２
例えば、**合計点が20点未満は出力しない**って要件定義してある場合

- :x: **悪いテストデータ例**

20点未満の人が2人いますが、本当に20点未満の判定がされているか不安です。
プログラムでもし `合計点 <= 20` (20点以下)って判定処理書いてても、不具合に気づくことができません。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/9d13b0ce-0052-5c03-dc6d-b54ef30a6b2b.png)

- :o: **良いテストデータ例**

合計が20点と19点になるようなテストデータを用意しておけば、20点未満の判定が正しく実装されている確認ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181001/330d2cfd-40c7-14e5-d5f5-87f22c29b9b2.png)

## さいごに
簡単なシステム例にしましたが、意外とたくさん観点がでてきました。仕様によってはもっと沢山の種類で確認が必要になってくると思います。

帳票に限らず、どのテストでもいえることですが、要件定義がきちんと話合われておらず仕様が漏れていた場合、その部分に関してテストが実施されない為、実装の手戻りが発生したり、不具合が発生する可能性もあります。きちんと要件定義して、テストの観点を洗い出しておくことは大切です。:cat: