テスト仕様書の観点漏れから学んだ、テストファーストの大切さ
目次
はじめに
プログラム開発では、機能定義書に書かれた仕様をもとに実装を行い、テストによって期待どおりに動作するかを確認します。しかし、テスト仕様書を作成する際には、定義書に記載された内容を確認するだけでは、十分とは限りません。
私は以前、テスターとして、機能定義書からテスト仕様書を書き起こす業務を担当していました。その中で苦労したのが、テスト観点の漏れです。定義書に記載された内容をもとにテスト項目を考えていても、実装されたプログラムの条件分岐や、定義書に明記されていない入力値・条件のパターンを見落とすことがありました。
また、プログラマーとして実装に取り組む中で、テストを実装後の確認作業としてだけ捉えるのではなく、実装する前からテストを意識することにも意味があると感じています。
この記事では、テスト仕様書の作成で苦労した経験と、テストファーストという考え方から学んだことを紹介します。
1. 機能定義書をもとにテスト仕様書を作る難しさ
テスト仕様書を作成する際には、機能定義書を読み、記載されている仕様や条件を確認しながらテスト項目を整理します。
しかし、定義書に書かれている内容をそのままテスト項目にするだけでは、確認が不十分になる場合があります。
私が経験したのは、実装されたプログラムに含まれる if 文の確認が漏れてしまうことや、入力値・条件のパターンについて、定義書に明記されていないケースを見落としてしまうことでした。
プログラムには、仕様を実現するための条件分岐が実装されます。条件分岐があれば、その条件によって処理がどのように変わるのかを確認する必要があります。
一方、機能定義書に明記されていない条件については、何を確認すべきなのか判断が難しい場合もあります。定義書を読むだけでなく、実際にどのような条件で処理が分岐するのかを把握することも重要です。
この経験から、テスト仕様書を作成する際には、定義書の記載内容と、実際のプログラムに実装されている処理の両方に目を向ける必要があると感じました。
2. テスト観点の漏れを防ぐために意識したいこと
定義書の内容だけでなく、実装された条件分岐も確認する
テスト仕様書を作成する際には、まず機能定義書から必要なテスト項目を整理します。そのうえで、実際のプログラムにどのような条件分岐が実装されているのかを確認すると、追加で検討すべき観点を見つけられる場合があります。
例えば、プログラム内に条件分岐がある場合、その条件が成立するケースと成立しないケースで処理がどのように変わるのかを考える必要があります。
ただし、実装されている if 文をすべて機械的にテスト項目にすればよいわけではありません。仕様との関係を確認し、何を保証するための条件分岐なのかを理解したうえで、必要なテストを検討することが大切です。
入力値や条件のパターンを考える
入力値や条件によって処理が変わる場合には、どのようなパターンを確認する必要があるのかを考えることも重要です。
定義書に記載された代表的なケースだけでなく、仕様上考慮すべき入力値や条件の違いがないかを確認する必要があります。
例えば、入力値の範囲や条件の組み合わせによって処理が変わるのであれば、その違いが動作にどのような影響を与えるのかを検討します。
もちろん、必要なテストパターンは機能の仕様によって異なります。定義書に記載されていないからといって、すべてのケースを独自に想定するのではなく、仕様や実装の意図を確認しながら必要な観点を整理することが重要です。
3. 実装前からテストを考えるという視点
テスト仕様書の作成を経験した後、プログラムを実装する側の視点からも、テストについて考えるようになりました。
特に意識したいのが、実装が終わってからテストを考えるのではなく、実装する前からテストを意識することです。
テストファーストとは、一般に、実装より先にテストを考え、テストを通じて必要な振る舞いを明確にしていく開発の考え方です。テスト駆動開発(TDD)では、テストを書き、そのテストが失敗することを確認してから実装し、テストが通るようにコードを改善するサイクルを繰り返します。
実装前に、どのような条件で何が起きるべきなのかを整理しておくと、必要な処理を考えやすくなります。
また、期待する動作を先に明確にすることは、実装するコードを必要以上に複雑にしないためにも役立ちます。例えば、テストで確認すべき動作を整理することで、本当に必要な条件分岐なのか、変数を用意する必要があるのかを見直すきっかけになります。
私自身も、テストファーストで考えて実装することで、不要な if 文や変数を省ける場合があると感じています。
ただし、条件分岐や変数が不要かどうかは、仕様や処理の内容を踏まえて判断する必要があります。単純にコードの量を減らすことが目的ではなく、必要な動作を満たしながら、分かりやすい実装にすることが大切です。
4. まとめ
テスト仕様書を機能定義書から作成する経験を通じて、定義書の記載内容を確認するだけでは、テスト観点が不足する場合があることを学びました。
実装された if 文による条件分岐や、入力値・条件のパターンにも目を向け、仕様と実装の両方から必要なテストを検討することが重要です。
さらに、テストは実装後に行うだけでなく、実装前から意識することにも意味があります。先に期待する動作を整理することで、必要な処理を明確にし、不要な条件分岐や変数を見直すきっかけにもなります。
テスト観点を漏れなく洗い出すことは簡単ではありません。だからこそ、仕様を確認するだけで終わらず、実装される処理や期待する動作まで意識することを、今後の開発でも大切にしていきたいと思います。



















