単体テストとは
単体テストは、1つのプログラム単位で仕様書通りの動作が実現できるか検証するテストのことを指します。
開発に使用する言語仕様によって、単体テストの大きさは異なります。1つの業務処理を「単体テスト」として実施する場合もあれば、関数やメソッドが単体テストの単位になることもあります。
単体テストは、1つの仕様書に対するコード化が完了した段階で、担当プログラマーの手で実施されます。
単体テストのメリット
単体テストは1つの仕様書に対する実装が完了したタイミングで実施されるので、問題の原因特定や修正が比較的簡単にできます。単体テストの段階でバグが見つかれば、開発プロジェクト全体としてのバグ修正コストはあまり高くならないはずです。
コードの内容をよく理解している開発者が、コード作成と同時かコード記述の直後に、テスト仕様を作成するため、妥当性の高いテスト項目を作成でき、後の資産として残すこともできます。
単体テストの課題点
プログラムコードを書いている人が、テスト仕様を作成し、テストを実施することから、プログラムコードを書いている開発者にすべての負担がかかってしまうという問題があります。
開発者の負担を緩和するため、ほかの技術者にテスト仕様の作成や実施を割り振ることもできますが、代わりに担当する技術者にもスキルが必要です。開発者の負担が高すぎると、単体テストの仕様や実行の際に手を抜きがちになるという問題もあります。
単体テストのチェックリストを作る際のポイント7つ
単体テストの仕様を作成する際は、準備や手順に漏れが発生しないよう、チェックリスト形式の単体テスト仕様書兼テスト結果報告書を作成することも多く見られます。
単体テスト仕様書には、単体テストの事前準備と、機能仕様書にある実現を確認しなければならない動作項目をリストアップし、結果の記入欄も作成します。チェックリスト形式の単体テスト仕様書兼結果報告書を作成する際は、以下のポイントを踏まえて作成しましょう。
単体テストのチェックリストを作る際のポイント1:漏れのないようにする
単体テストのチェックリストを作成する上で、最も大切なことは、単体テストの対象項目を漏らさず網羅することです。注意深く実装しているつもりでも、バグは作りこまれてしまうものです。
単体テストなどのテスト工程で検知する必要があります。単体テストで見過ごしたバグは、次の工程まで検知されることがありません。バグは上流に進むほど、発見された時の戻り工数と費用が多くなります。
単体テストのチェックリストを作る際のポイント2:何が重要かを把握する
単体テストのチェックリストを作成する際は、作成する単体テストの重要ポイントが何であるか、きちんと理解し、把握しておくことが重要です。
単体テストのチェックリストにテスト項目漏れを起こさないことは当然ですが、単体テストの重点ポイントを理解していれば、おのずとテスト項目のリストアップ漏れも回避することができます。
単体テストのチェックリストを作る際のポイント3:マトリクスを使う
単体テスト仕様書の作成や、単体テストの実施を、仕様担当者でも実装者でもない人が担当する場合は、機能仕様書を理解できていないので大変な作業になります。
仕様書を読みながら単体テスト項目を拾っていっても、テスト項目漏れは発生してしまうものです。機能を縦軸に、その機能の操作パターンや動作パターンを横軸に記述する「マトリクス型」のチェックリストを作成すると、テストパターンの洗い出し漏れが回避できます。
単体テストのチェックリストを作る際のポイント4:機能仕様書をそのまま使う
プロジェクトによっては、機能仕様書をそのまま単体テスト仕様書兼結果報告書に流用する場合もあります。機能仕様書には、コード化すべき機能が記載されています。この機能仕様書の「実現機能」が記載された行の欄外などに、「動作したか」をチェックしていきます。
単体テスト仕様書を作成する手間を省くことができますが、単体テスト実施者によって単体テストとしての精度が異なるという問題はあります。
単体テストのチェックリストを作る際のポイント5:デシジョンテーブルを使う
単体テストのチェックリストを作るすべての場合に有効な方法ではありませんが、期待値や条件が複数パターンあるテストケースの場合は、デシジョンテーブルを利用することも考えてみましょう。
作成したデシジョンテーブルの各パターンごとに結果記入欄を作成しておけば、そのまま単体テスト仕様書兼結果報告書として利用できます。
単体テストのチェックリストを作る際のポイント6:チェック欄は複数必要
単体テストでNGとなった項目があった場合、バグ修正されます。修正結果の単体テストを再実施することを考え、単体テストのチェック欄は複数用意しておきましょう。
バグ修正の確認テストでは、修正ポイントだけをテストしても、デグレードを検知できないため、本来はすべての単体テストをやりなおすべきです。
時間不足などの原因で簡略化を図る場合は、せめて修正ポイントに関連する範囲を含めて、再実施する必要があります。
単体テストのチェックリストを作る際のポイント7:端的に記載する
単体テストのチェックリストは、できるだけ1行に単体テストで実施すべき内容が記載されるよう、簡潔に記載しましょう。「である調」で構わないので、何をすべきかがわかりやすいように記述します。
条件などが多く、読み解きにくくなる場合は、条件の行と単体テストの実施項目の行を分けるとわかりやすくなります。実装者以外が単体テストを担当することも考え、第三者にわかりやすいチェックリストを作成するよう心がけましょう。
単体テストのチェックリストに必要なもの7つ
単体テストのチェックリストには、単体テスト項目以外にも必要な内容があります。ここでは、単体テストのチェックリストに必要になる内容をご紹介します。
単体テストのチェックリストを作成する際は、ご紹介する内容についても考えたうえで、テスト項目を並べていく必要があります。
単体テストのチェックリストに必要なもの1:テストでの前提条件
テストの前提条件を記載することは必須です。単体テストを実施するプログラムを動作させる前提にしている環境と、全く異なる環境でテストを行っても、単体テストの意味を成しません。
スマホで使うことを前提に作られたプログラムを、最新式の大画面パソコンで動作させても、期待通りの表示や動作にはなりません。機能仕様書に記載された開発の前提条件を、単体テストのチェックリストにも記載しておく必要があります。
単体テストのチェックリストに必要なもの2:動作条件によるテストケースの分類
テストケースとは、単体テストを実施する際に考慮すべき、プログラムの実行条件や入力データ、期待される出力や結果などの組み合わせのことです。
プログラムが動作する環境を想定し、単体テストも実際の動作環境に近い状態で実施した方が、テスト精度をあげることができます。
単体テストのチェックリストは、動作環境ごとにテスト項目をまとめて記載することで、テスト項目漏れも回避でき、テストも実行しやすくなります。
単体テストのチェックリストに必要なもの3:境界値と異常値を含める
単体テストのチェックリストには、境界値テスト、異常値テストを盛り込む必要があります。機能仕様書には、境界値が明確に記載されていないことも多く、異常値に至っては「異常値とはどのような値か」が記載されていることはありません。
単体テストのチェックリストを作成する際に、テスト時に「境界値」としてどのような値でテストすべきか、「異常値」としてどのような値をテストすべきかを明記する必要があります。
単体テストのチェックリストに必要なもの4:分岐の確認
単体テストのチェックリストには、機能仕様書からテスト項目を拾って記載しますが、仕様書に記載されている分岐条件は残さず拾うように心がけましょう。機能仕様書の精度によっては、分岐条件のすべてについて処理記述がされているとは限りません。
単体テストのチェックリストとして分岐条件を拾い上げることで、仕様書の不備が見つかることもあり、分岐結果が想定されていない部分が実際されているのか確認することもできます。
単体テストのチェックリストに必要なもの5:「オペミス」の設定
画面系の単体テストの場合、プログラミングに精通している人ほど、想定外の使い方をせず、単体テストで「オペレーション(操作)ミス」を検知できなくなります。オペミスについては、機能仕様書にも明確な記載がなく、内部処理として抜けている可能性も高くなります。
単体テストであっても、チェックリストには「オペミス」関連の分類を設け、あえて「オペミス」を想定した単体テストを実施できるようにしておきましょう。
単体テストのチェックリストに必要なもの6:テスト結果の記入ルール
多くの人が単体テストの実施に携わることを前提に、チェックリストの記入様式は統一したルールを周知させておくことが必要です。口頭で周知させるよりも、誰でもわかるような様式でチェックリストを作成することが大切です。
パソコンやタブレットなどを使って記録していく場合は、チェックボックスの結果記入は、チェックボックスやリストボックスなどのオブジェクトを配置し、想定外の値が入力されないように作成しておきます。
単体テストのチェックリストに必要なもの7:件数表記
単体テストのチェックリストには、「テスト件数」「消化件数」「バグ発生件数」「修正対応件数」など、テストの全体像が確認できる件数表示ができるようにしておきましょう。単体テストの実施状態を行頭で確認できるようチェックリストを作成しておくのがおすすめです。
分類名やテスト条件などで行を使用することもあるので、行数で判断するのではなく、テスト件数だけをカウントできる仕組みを作成しておくことをおすすめします。
あなたの会社に仕事の生産性をあげる「働き方改革」を起こしませんか?
名刺が多すぎて管理できない…社員が個人で管理していて有効活用ができていない…そんな悩みは「連絡とれるくん」で解決しましょう!まずはこちらからお気軽に資料請求してみてください。
チェックリストのテンプレートをダウンロードできる?
単体テストのチェックリストを作成するためのひな型やサンプルは、多くのサイトに掲載されており、ダウンロードも可能です。
多くのプロジェクトで単体テストのチェックリストには、項目に共通性があります。ひな型を有効活用し、単体テストチェックリスト作成の効率化を図りましょう。
ダウンロードして、そのまま使うのではなく、自分の単体テストの方式に合うよう、カスタマイズして利用しましょう。
選び方
単体テスト用のチェックリストには共通性がありますが、実装しているプログラムの種類による特性もあります。
これから単体テストを行うプログラムと同分類のプログラムの単体テストを想定したテンプレートを参考にするのがベストです。ダウンロードサイトに表示されている、サンプルのサムネイルなども参考に、自分が求めるチェックリストに一番近いものを探すようにしましょう。
単体テストのチェックリストを活用しよう
多くのプロジェクトで、単体テストにチェックリストを使用していることからもわかるように、チェックリストの活用は、テスト漏れを回避できる優れた方式といえます。チェックリストの利点を最大限に引き出し、テスト漏れのない単体テストを実施していきましょう。