VSTePにおけるテストケースの粒度について

テストケースの粒度を中心としたお話です。 テスト設計のどの段階でどんなパラメータまでを定義すべきか?という部分はよく迷いますので、メモメモφ(・_・”)
5
Yasuharu NISHI @YasuharuNishi

あ、そうそう。忘れてた。@johniojohnnyの質問に答えなきゃね。

2014-11-22 13:27:54
Yasuharu NISHI @YasuharuNishi

VSTePにおけるテストケースの粒度について。その前にまず、パラメータと値という考え方を理解する必要があります。直交配列表では因子と水準と呼びます。例えば、氏名はパラメータで、にしやすはるは値です。

2014-11-22 13:32:13
Yasuharu NISHI @YasuharuNishi

一言で言うと、VSTePにおけるテストケースとは、値です。厳密に言うと、構造つき値群、とでも呼びましょうかね。また、パラメータレベルになると、テストフレームと呼びます。

2014-11-22 13:33:17
Yasuharu NISHI @YasuharuNishi

例えば、にしやすはる(という文字)をカラー印刷する、なんてのはテストケースです。ユーザ名を入力して印刷系機能を行う、なんてのはテストフレームです。

2014-11-22 13:35:26
Yasuharu NISHI @YasuharuNishi

なぜVSTePでは、テストフレームとテストケースという2つの粒度を用意しているのでしょう。それは、テストフレームを設計するまでの作業(テスト要求分析~テストアーキテクチャ設計)と、テストフレームからテストケースを列挙する作業(テスト詳細設計)を区別したいからです。

2014-11-22 13:36:42
Yasuharu NISHI @YasuharuNishi

テスト要求分析~テストアーキテクチャ設計は、かなり頭を使う作業です。一方、テスト詳細設計は、手間がかかる作業です。できれば自動化したいですよね。頭を使う作業と手間がかかる作業を分離することで、テスト設計プロセスとしての自動化の容易性を高めているわけです。

2014-11-22 13:38:08
Yasuharu NISHI @YasuharuNishi

またVSTePでは、パラメータのことを「ボトムテスト観点」と呼びます。VSTePではパラメータを導出するために、階層構造で検討するからです。これはClassification Tree Testing法とよく似ています。

2014-11-22 13:39:45
Yasuharu NISHI @YasuharuNishi

ここまでは、そんなに違和感は無いと思います。難しいのはここから。

2014-11-22 13:40:01
Yasuharu NISHI @YasuharuNishi

先ほどのテストフレームの例を思い出しましょう:「ユーザ名を入力して印刷系機能を行う」でしたね。ちなみにテストケースは「にしやすはる(という文字)をカラー印刷する」です。

2014-11-22 13:43:04
Yasuharu NISHI @YasuharuNishi

ここで、ユーザ名をにしやすはるにすることをインスタンス化(インスタンシエーション)、にしやすはるをユーザ名にすることをパラメータ化(パラメタライゼーション)と呼びます。本当は、インスタンス化はバリュー化の法がいいんでしょうね。

2014-11-22 13:43:51
Yasuharu NISHI @YasuharuNishi

テストケースをテストフレームにパラメタライズするというリバーステスト設計はよく行われます。その際には普通、入力値などはパラメータ化しますが、機能はパラメータ化しません。しかしVSTePでは、機能もパラメータ化します。

2014-11-22 13:45:16
Yasuharu NISHI @YasuharuNishi

おっとメンションで質問。VSTePの件はちょっとおやすみ。

2014-11-22 13:45:34
Yasuharu NISHI @YasuharuNishi

VSTePの特徴は、機能を特別扱いしないことです。普通は機能をパラメタライズせず、テストフレームの粒度で既に機能は確定しています。しかしVSTePでは、テストフレームの時点で機能が確定していなくても構いません。パラメータとして印刷系機能、バリューとしてカラー印刷でもよいのです。

2014-11-22 14:04:02
Yasuharu NISHI @YasuharuNishi

VSTePのようにテスト設計プロセスとして考える場合は、単純にテストフレームはパラメータの塊でテストケースは値の塊だと言ってもいいでしょう。しかし現実には、あるテストフレームの一部はパラメータで一部はバリューという状況になります。

2014-11-22 14:05:46
Yasuharu NISHI @YasuharuNishi

ここを適当にやると、テストケースの粒度管理がうまくいかず、テストケースの自動生成に支障をきたします。テストフレームの粒度でインスタンス化する条件は、あるパラメータに含まれる2つ(以上)のインスタンスによって、テストフレームの狙いや意図が異なってくる場合です。

2014-11-22 14:07:47
Yasuharu NISHI @YasuharuNishi

例えばカラー印刷と白黒印刷という2つの(機能)バリューがあったとします。パラメータは印刷系機能ですね。この時、例えば見つけたいバグといったテストフレームの意図が異なってくるのであれば、カラー印刷のテストフレームと白黒印刷のテストフレームに分ける必要が生じます。

2014-11-22 14:09:11
Yasuharu NISHI @YasuharuNishi

テストフレームのモデリングって、ちゃんとやってみると、かなり難しいし頭を使うのですよ。単純に大中小の3階層に分ければいい、なんて考えている組織では、ちっとも上手くできないでしょうね。

2014-11-22 14:10:34
Yasuharu NISHI @YasuharuNishi

そもそも、ボトムテスト観点の粒度をきちんと下げておけないと、パラメータを導出できません。無理にパラメタライズした気になっていると、実はより下位のテスト観点を漏らしているということにもなります。

2014-11-22 14:14:34
Yasuharu NISHI @YasuharuNishi

まだ難しいところがあります。VSTePでは、テストケースには「テストケースの意図や狙いに必要な分だけ」値が記述されますが、「実行時に決まってればいい」値は記述されません。

2014-11-22 14:16:56
Yasuharu NISHI @YasuharuNishi

「実行時に決まってればいい」値は実行環境依存であり、その値の如何によってテストケースの意図や狙いが変わるわけではありませんので、テストケースには記述されず、(自動/手動を問わず)テスト手順に記載されます。

2014-11-22 14:17:31
Yasuharu NISHI @YasuharuNishi

そうすると、例えば最大のメモリ量、といったものは、どこに書かれるでしょう。テストフレーム(パラメータ)?テストケース(値)?テスト手順?

2014-11-22 14:19:35
Yasuharu NISHI @YasuharuNishi

VSTePでは、メモリ量がテストフレーム、最大のテスト量がテストケース、512Mbytesがテスト手順の場合もあります。メモリ量をテストフレームにして、512Mをテストケースに書いてしまう場合もあるでしょう。その場合、最大というのは網羅基準の一要素という扱いになります。

2014-11-22 14:22:48
Yasuharu NISHI @YasuharuNishi

もちろん、最大のメモリ量そのものにテストの意図や狙いが強く込められているのであれば、最大のメモリ量をテストフレーム(=ボトムテスト観点)として、512Mをテストケースに書いてもいいでしょうね。

2014-11-22 14:24:44
Yasuharu NISHI @YasuharuNishi

テスト詳細設計を2段階にして、まず上位のテストケースとして最大のメモリ量という値を記述し、次に下位のテストケースとして512Mを記述することも構わないとは思います。私は個人的にあまり好きではありませんが。

2014-11-22 14:26:20