「テスト計画書」を作成してみる

この記事は、「[架空プロジェクトを通してシステム開発とドキュメント作成を体験してみる（2022 Late）](https://qiita.com/minimumskills/items/aedf6a93658db3f74747)」の記事の一部です。

## テスト計画書の概要

テスト計画書は、何を目標に（多くの場合は品質基準）、どのようなテストをいつ、誰が、どのように行うのかを記述するものです。

|項目|内容|
|-|-|
|作成目的|確保したい品質、そのために実施するテスト内容を記載|
|記述すべき内容|品質、目的（目標）、テストの種類、方法、評価方法等|
|作成タイミング|テスト実施前まで（要件定義〜開発と並行して）|
|対象者|テスト実施者（技術者中心）|
|ファイル形式|パワーポイント、Excel|
|備考||

>一般的にはどうなのか？が気になる人は後半にある「一般的には（参考）」に先に目を通してもらったほうがいいかもしれません。

### サンプルダウンロード

サンプルのダウンロードは[こちら](https://docs.google.com/uc?export=download&id=1NRaEtQwxRHeGn7S1NuUIYANy0Xn0GPLZ)から。

## 作成してみる

では作成していきましょう。

### 作成方針・ポイント

テストは非常に重要で、しっかりリソースを割いて計画的に実施すべき工程です。
一方で、テストの限界（性質）を知っておくことも重要です。テストは多くのパターンをこなせばこなすほどソフトウエアの品質は確実に向上します。一方で、どこまでやっても「絶対にバグはない」、「絶対に仕様通り」ということを証明することはできないとされています。プロジェクトの規模や確保すべき品質、（テスト後の）バグ発生時の対応方針などを定め、バランスの取れた計画を立てることが重要です。

>テスト（量）の妥当性の評価（信頼度成長曲線とかテスト密度等）についてはテスト結果報告書で触れていますので、そちらも見てください。

### 構成（目次）を考える

今回は下記のような項目を記述してみました。基本的に各要件に対して「それを満たしているか」を確認することになるので、結構盛りだくさんです、

* テストの目的と品質基準
* テストの種類・目的・方法
* 機能テスト
  * 単体テスト
  * 結合テスト（シナリオテスト）
* 非機能テスト
  * 可用性テスト
  * 性能テスト
  * セキュリティーテスト
  * 留意事項
* テストスケジュール
* テスト体制
* コミュニケーション

### 記述例（サンプルから抜粋）

では、サンプルの主要なページについて少し解説したいと思います。

#### 表紙

特に補足はありません。

![000001.jpg](https://drive.google.com/uc?export=view&id=12FSLB4X55VtIsnmUd8YFj1JDCZ2E_TJg)

#### 目次

こんな感じ。

![000010.jpg](https://drive.google.com/uc?export=view&id=1JaNGgeFkfA_BRNW-l1FuOGDjjG3mR8b8)

#### テストの目的と品質基準

まあ、形式張って意味ないと感じるかもしれないんですが、意外と品質基準定義って重要なんですよね。。。

![000020.jpg](https://drive.google.com/uc?export=view&id=1rJJwyN_PfbHWANdqU7kF7SpmV8i6cMBW)

#### テストの種類・目的・方法

実施するテストの種類、目的、方法などの概要を書いてます。

![000030.jpg](https://drive.google.com/uc?export=view&id=1VSQ_385TXncJlujG3jHo_wvUHSp9BO9W)

#### 機能テスト：単体テスト

各テストの実施内容の概要を記載。

![000040.jpg](https://drive.google.com/uc?export=view&id=1EV0_6TLCkH4Hv_FVM7aHDF7XKFfWzq3I)

#### 機能テスト：結合テスト

各テストの実施内容の概要を記載。

![000050.jpg](https://drive.google.com/uc?export=view&id=1Zetm32ngrsSNS8-0-gn8zguqmrC5DeLU)

#### 非機能テスト：可用性テスト

各テストの実施内容の概要を記載。
サーバレス環境なのでサービスのSLA等の確認とエビデンス取得のみとしている。

![000060.jpg](https://drive.google.com/uc?export=view&id=1u12Hc1A86rk3Y00biyHYNzEoEz0v9uqJ)

#### 非機能テスト：性能テスト

ベンチマークテストツールであるJMeterとかつかってもいいのですが、簡単なスクリプトを書くことにしています。

![000070.jpg](https://drive.google.com/uc?export=view&id=1TuJGKLFV3gpplYjIcpAlEZYMGZs1GABN)

#### 非機能テスト：セキュリティーテスト

セキュリティーチェックツールであるOWASP-ZAPを使って形だけのテストを実施。

>雰囲気だけ。

![000080.jpg](https://drive.google.com/uc?export=view&id=1NCs34WtmW1tWjEY9LhpJdReio-r-Mnrd)

#### 非機能テスト：留意事項１

一般的な内容じゃなくてもチェックする項目などがあれば実施します。
ここでは通常ではないDrive To Webを利用したWeb公開が本当にできるのか心配なのでチェックします。

![000090.jpg](https://drive.google.com/uc?export=view&id=1aF2Np1lWi7U8j_ytfLtKQVjk3q9S2aTd)

#### 非機能テスト：留意事項２

推奨ブラウザで問題なく閲覧できるか、念の為に確認します。

![000100.jpg](https://drive.google.com/uc?export=view&id=1eq8aIKgGRzyPKcHe_trItdojSYCxWPIG)


#### テストスケジュール

準備とかも想定して記載（メインスケジュールと矛盾がないよう）。

![000110.jpg](https://drive.google.com/uc?export=view&id=1nhSSfOI_l7MYOqhZjoVCBCzRiMvA2f7F)

#### テスト体制

役割などをなるべく明確に。

![000120.jpg](https://drive.google.com/uc?export=view&id=1X_7WDH1PzaTDdL4sTJwY459PBlDecxE2)

#### コミュニケーション

とりあえず。

![000130.jpg](https://drive.google.com/uc?export=view&id=1WDeSgVRun5Bp1-V8AsFVCYKqgae5PQik)

## 一般的には（参考）

### 実践ガイドブックでは？

まず、実践ガイドブックでは、テストが、下記の２つに別れています。

* 開発プロセスとして行うテスト
* 受入テスト

そして、受入テストについてはテンプレートが提供されておりますが、開発プロセスで行う（我々にとっての一般的な）テストについてはテンプレートがありません。

#### 開発プロセスとしてのテスト

実践ガイドブックでは第3編5章の要件定義でテストの種類を定義、7章 設計・開発のP30に「テストの計画を立てる」という節があり、その中で

* A. V字モデルと発注者・受託先事業者の役割分担を把握する
* B. テストのレベルや種類を理解する
  * 単体、結合、総合、受入テスト
  * ブラックボックステスト、ホワイトボックステスト
* C. リスクを踏まえてテストの方針を決める
* D. テストにおける役割分担と必要な環境を明記する
* E. テストツールを有効に活用する
  * 静的解析ツール
  * 自動テストツール
  * CIツール
  * タスク管理ツール

といったことを決めようという記述がある感じですが、それ以上の情報はありません。

（いわゆるV字モデル）
開発工程とそれを検証するテスト工程の対応を表しております。

![000140.jpg](https://drive.google.com/uc?export=view&id=1p13xd_hJDtBXOx7Mqg2wYK2ENri5U6nl)


#### 受入テスト

受入テスト計画書の目次は以下のようになっています。

<img width="500" alt="000150.jpg" src="https://drive.google.com/uc?export=view&id=16jxGK_KtPIkr4fVWDj3vuvS36CPxi5h1">

## 参考

* [デジタル庁 デジタル社会推進標準ガイドライン](https://www.digital.go.jp/resources/standard_guidelines/)
* [DS-120 デジタル・ガバメント推進標準ガイドライン実践ガイドブック　各種テンプレート](https://www.digital.go.jp/assets/contents/node/basic_page/field_ref_resources/e2a06143-ed29-4f1d-9c31-0f06fca67afc/ec6f6641/20220422_resources_standard_guidelines_guideline_09.zip)
* [TISインテックグループさん](https://www.tis.co.jp/)が運営する[Fintan](https://fintan.jp/)の[テスト関連資料](https://fintan.jp/blog-category/software-testing/)も非常に参考になります。