2016/7/23(土)「VSTeP勉強会(仮)」:テストフレーム設計

JaSST東北実行委員による、VSTePの勉強会を実施しました。
VSTePをテーマとした、JaSST'16東北は2016/5/20に完了しています。しかし、「まだ俺たちはVSTePを十分に理解していない」という考えのもと、実行委員で集まって勉強会を開催しました。

今回のテーマは「テストフレーム」です。JaSST東北のワークショップでは、チーム内の考えを揃える「テスト観点図」、テストの戦略を検討する「テストコンテナ」を扱いました。しかし、具体的なテストケースを生成するための準備に相当する「テストフレーム」はワークショップでは扱いませんでした。そのため、テストフレーム設計まで実施して、テストケースまで生成できるようになることが今回の目的でした。

テストフレーム設計を実践してみて理解したことをまとめます。実行委員のみで検討した内容になりますので、実際のVSTePの意図とは異なるかもしれませんが参考まで。

  • テストフレームの構成要素により、抽象的なテストケースが生成できる
  • テストケースにおけるテスト条件、テスト対象、振る舞い
  • 同じテストフレームでも異なるテストが作成できる
  • テストフレームはテスト観点をまとめたもの

参考資料:
http://qualab.jp/materials/VSTeP.130510.color.pdf

テストフレームの構成要素により、抽象的なテストケースが生成できる

テストフレームとは「テストケースの構造(スケルトン)をテスト観点の組み合わせで示す」もの。
例えば、解凍ソフトというテーマがあったとして、以下のようなテスト観点から構築されるテストフレームがあったとする。

  • 環境(OS)
  • ファイル(ファイル名、ファイル数)
  • トリガ(ドラッグ&ドロップ、GUIからの指定)
  • 解凍(圧縮前と解凍後のファイルが一致)

このテストフレームからは「<環境>において、<ファイル>を<トリガ>によって<解凍>することを確認する」という抽象的なテストケースを作成することができる。
具体的なテストケースでは、このテスト観点に当たるところに具体的な値を入れればよい。

テストケースにおけるテスト条件、テスト対象、振る舞い

テストフレームにおけるテスト観点は大きく3つに分類される。テストフレームに現れたテスト観点は必ずしも全ての項目を組み合わせでテストしなければならないわけではない。

  • テスト条件

テストケースにおけるインプットに当たる。そのテストにおいて、網羅されるもの。あるテストフレームからテストを生成する際に、パターンを試したいものを示す。

  • テスト対象

テストケースにおけるインプットに当たる。そのテストにおいて、テストしたいもの。あるテストフレームからテストを生成する際に、変化しないものを示す。

  • 振る舞い

テストケースにおけるアウトプットに当たる。そのテストにおいて、期待される結果。あるテストフレームからテストを生成する際に、確認したいものを示す。

同じテストフレームでも異なるテストが作成できる

何をテストしたいかによって、同じテストフレームでも異なるテストケースを作ることができる。テストフレームにおいて、各テスト観点をテスト条件、テスト対象、振る舞いのいずれかに割り当てることによって、生成できるテストが異なる。

  • どんな解凍方法でも適切に解凍できることをテストしたい

テスト条件:トリガ
テスト対象:環境、ファイル
振る舞い:解凍

  • どんな環境でも適切に解凍できることをテストしたい

テスト条件:環境
テスト対象:ファイル、トリガ
振る舞い:解凍


上記は一例。「GUIの挙動はOSに依存するから、環境とトリガをテスト条件にして、組み合わせテストしたい」というものも可能です。設定の仕方はテストエンジニアのうで次第。

テストフレームはテスト観点をまとめたもの

テスト観点図からテストコンテナを生成する。テストコンテナでどんなテストを実施したいかを定めた後に、詳細なテストフレームを設計する。テストコンテナで大まかにテスト観点をまとめるが、ここで集まったテスト観点は粗い粒度でのテストフレーム構築に相当する。粗い粒度のテストフレームから、テストしたいことに合わせて詳細なテストフレームを生成する。
例えば、「環境はOSの他にCPUやメモリ搭載量などもあるが、OSに限定してテストフレームを生成する」などが挙げられる。


感想

テストフレームの考え方を理解することにより、テストコンテナの重要性を理解することができた。詳細なテストフレームの作成には、何をテストしたいを明確にする必要がある。テストしたいことが定まっていないと詳細なテストフレームを生成することができず、意味のあるテストケースが生成できない。