VSTeP/NGTのテストフレームの考え方

@YasuharuNishi さんによるVSTeP/NGTのテストフレームの考え方の解説です。
5
Hidetoshi SUHARA @suhahide

@YasuharuNishi VSTePを受講している須原です。今観点間の関連を引こうとしています。CombinationとFrameは、共に「組合せ」を示すと思うのですが、違いはどこにあるのでしょうか。前者は「テスト条件」内で組合せを作るときなどに使う、ということでしょうか。

2013-10-29 22:31:10
Yasuharu NISHI @YasuharuNishi

例えば、データサイズとアクセス頻度を組み合わせて負荷をかけたい場合はcombiを使います。組み合わせて網羅をすることに意味がある(負荷がかかる)からです。逆に言うと、両者をそれぞれ単独に網羅するだけでは意味は(負荷は十分では)ありません。

2013-10-30 15:34:15
Yasuharu NISHI @YasuharuNishi

例えば、負荷をかけた時の性能を評価したい場合はframeを使います。負荷と性能を組み合わせたいわけではありません。もう少し踏み込んで言うと、負荷のパラメータ(水準)と性能の水準(?)を組み合わせているわけではありませんね。

2013-10-30 15:37:06
Yasuharu NISHI @YasuharuNishi

このように、条件-ふるまい、条件-対象-ふるまいなどはframeを使って組み合わせます。あくまで、(パラメータや水準を)組み合わせるためではなく、それらのテスト観点を一緒にしないとテストケースが不完全になってきちんと評価できないからです。

2013-10-30 15:40:00
Yasuharu NISHI @YasuharuNishi

とはいえ、ある関連がcombiなのかframeなのか迷うケースもあります。例えば、負荷と構成を関連づけるケースです。我々はしばしば、負荷と構成を関連づけるテストを設計します。この関連はcombiでしょうか、frameでしょうか。それはテストケースの狙いによって異なります。

2013-10-30 15:59:14
Yasuharu NISHI @YasuharuNishi

負荷と構成をcombiで関連づけるテスト観点モデルは、きっと、構成の子観点である搭載メモリ量に依存する「残メモリ量」というテスト観点に暗黙的に着目しています。

2013-10-30 15:59:53
Yasuharu NISHI @YasuharuNishi

そのため、負荷と残メモリ量の組み合わせでより高い負荷をかけたいと考え、combiで関連づけるのだと思います。この場合、各構成(各残メモリ量)に対して、様々な負荷をかけることになるでしょう。

2013-10-30 15:59:59
Yasuharu NISHI @YasuharuNishi

一方、負荷と構成をframeで関連づけるモデルは、例えば、あらかじめ準備されたテスト環境がいくつかあって、構成ごとに負荷を網羅するわけではないが、構成に依存して負荷をかけよう、と考えているのだと思います。

2013-10-30 16:00:07
Yasuharu NISHI @YasuharuNishi

そして、この依存関係をきちんとテストケースに反映させないとバグを見逃してしまうと感じてるのだと思います。この場合、負荷と構成の組み合わせはテストしません。

2013-10-30 16:00:14
Yasuharu NISHI @YasuharuNishi

逆に、負荷と構成が全く依存しないと考えるのであれば、そもそも同じテストフレームに負荷と構成を含める必要はありません。負荷のテストケースと構成のテストケースを別々に設計した後に、実装段階で両者を集約して一緒に実行することはあるかもしれませんが。

2013-10-30 16:00:24
Yasuharu NISHI @YasuharuNishi

どうしてもテストアーキテクチャ設計段階でこの集約関係を示しておきたい場合(=この関係がcombiでもframeでもないと明示しておきたい場合)は、<<aggregation>>というステレオタイプを使います。

2013-10-30 16:00:30
Yasuharu NISHI @YasuharuNishi

combi、frame、aggreは、組み合わせ網羅基準の違いではありません。組み合わせて網羅する必要があるとテスト技術者が考えているかどうかの違いです。結果として、網羅基準の違いのように実装されるかもしれませんが、区別して捉えないといけません。

2013-10-30 16:02:52
Yasuharu NISHI @YasuharuNishi

ちなみにcombination関連は、その関連をテストしたい理由や狙いを明文化できるのであれば、その理由や狙いをテスト観点としてモデリングする方が私はよいモデルだと考えています。モデルそのものもスッキリしますしね。それには、上手なソフトウェア設計の検討やバグの分析が必要です。

2013-10-30 16:06:13
Yasuharu NISHI @YasuharuNishi

以上、NGT/VSTePでの代表的な関連のステレオタイプであるcombination、framing、aggregationの3つの違いに関する説明でした。@sunahideさん、いかがです?

2013-10-30 16:07:28
Yasuharu NISHI @YasuharuNishi

まぁ逆に言えば、意図や意味がきちんとあれば、同時に引いてもいいということになります。同時に引きたいと思えるようなモデルを具体的に見せてもらえると、もう少し中身のあるコメントができますよ。 (^_^)

2013-10-30 21:18:40
Yasuharu NISHI @YasuharuNishi

テストフレームについては説明が少ないので補足しますね。まずテストフレームは、テストケース(群)のスケルトンです。そしてテストフレームは、1つ以上のテスト観点から構成されます。

2013-10-30 21:23:39
Yasuharu NISHI @YasuharuNishi

例えば「機能」というテスト観点だけでテストフレームを構成することも、原理的にはできます。その場合テストケースは、全ての機能について「○○機能が動作すること」といった感じになります。良し悪しは別にして、こういうテストケースを書く人はいますよね。

2013-10-30 21:24:43
Yasuharu NISHI @YasuharuNishi

例えば「負荷」と「性能」の2つのテスト観点から構成されるテストフレームもあります。この場合のテストケースは、「○○の負荷をかけて性能を評価する」といった感じになります。

2013-10-30 21:26:35
Yasuharu NISHI @YasuharuNishi

例えば「負荷」「機能」「性能」の3つのテスト観点から構成されるテストフレームもあります。この場合のテストケースは「○○の負荷を△△の機能に与えて性能を評価する」といった感じになります。このくらいのテストフレームは割と一般的だと思います。

2013-10-30 21:27:36
Yasuharu NISHI @YasuharuNishi

もう少し込み入ってくると、「負荷」「機能」「構成」「性能」「計測箇所」から構成されるテストフレームなんかもありえます。この場合のテストケースは「○○の負荷を□□の構成で△△の機能に与えた時に、◎◎の計測箇所で性能を評価する」のようになります。

2013-10-30 21:30:05
Yasuharu NISHI @YasuharuNishi

ここまでの例で出てきたテスト観点は、全て<<framing>>のステレオタイプです。それぞれ別に組み合わせることを意図しているわけではありませんから。

2013-10-30 21:30:49
Yasuharu NISHI @YasuharuNishi

一方、ちょっと厄介なのが<<aggregation>>です。例えば「負荷」「性能」というテストフレームと、「構成」「信頼性」というテストフレームの2つがあった時に、負荷と構成が相互に影響を与えず、性能と信頼性が相互に影響を与えないのであれば、一緒にテストを実施する場合があります。

2013-10-30 21:34:19
Yasuharu NISHI @YasuharuNishi

その場合、通常はテスト実装の段階で2種類のテストケースを集約して1つのテスト手順にします。しかし場合によって、テストアーキテクチャ設計の段階で集約して実施することを明示したい場合があります。その場合に<<aggregation>>を使います。そんなに登場頻度は高くないと思います。

2013-10-30 21:36:36
Yasuharu NISHI @YasuharuNishi

で、米の量-水の量というテスト観点のペアおよびフレームを構成するその他の観点と関連を、コンテナ箱で囲んでやります。名前が付けられなければ、左上のネームタグは付けなくて構いません。

2013-10-30 21:40:53
Yasuharu NISHI @YasuharuNishi

すなわち、テストフレームはとても小さなコンテナなわけです。

2013-10-30 21:41:46