VSTeP

Twitterで2013/6/14で@akiyama924さんからご質問頂いたものをまとめておきますね。回答もTwitterで行ったので、140字ずつになっていますから、少し読みにくいかもしれませんが、ご容赦下さい。

にしさんには、テスト観点でない観点を何故それはテスト観点ではないのかといった理由とともに教えてほしいです。「意地悪漢字はテスト観点ではない」「同値はテスト観点ではない」等々の理由。その辺がもやっとしています。

 まず、同値はテスト観点ではない、というのは正確ではありません。同値クラスは(末端の)テスト観点ですが、境界値はテスト観点ではありません。境界値は、あるテスト観点のカバレッジ基準、もしくは選ばれた値そのものに過ぎないからです。全値、代表値、境界値などは全て同様です。

で、この説明を聞くとモヤモヤ感が高まると思います。

実はテスト設計における境界値というのは、2つの意味があるからです。1つは、同値クラスの主要な代表値としての意味。もう1つは、バグを如実に叩き出す武器としての意味。

テスト技法のセミナーを想像してみましょう。私の基礎コースもそうですが、同値分割の後に境界値分析を扱い、両者は関連があると教えることが多いですね。

しかしよく考えてみましょう。同値クラスというのは全て同じふるまいをする入力値集合です。しかし境界値とは、同じ同値クラスに属する他の値よりもバグを検出する確率が高いのです。ならば、境界値とそれ以外の値は、同じ同値クラスには属しません。なぜなら、ふるまいが異なると予想されるからです。

ここから論理的に帰結されるのは、実は境界値分析は同値分割と「意味的に」つながっていないということです。手順的につながっているだけです。言い換えると、境界値分析というのは同値分割に新たなテスト観点を加えているわけです。

もう少し正確に表現しましょう。同値分割は、入力条件網羅を行うためのテスト要求分析の技法です。境界値分析は、入力条件網羅のテスト詳細設計の技法です。これが一つの位置づけ。この位置づけを元に、NGTでは「境界値はテスト観点ではない」と取り扱います。

もう一つの解釈をすると、境界値分析はif文の比較演算子のミスや配列の境界越えのようなバグのパターンを示唆するテスト観点に基づき、テスト要求分析からテスト詳細設計までを統合した技法です。

この解釈を取るのであれば、境界値という曖昧なテスト観点よりも、むしろ「比較演算子のミス」をテスト観点として挙げた方が、モデリングが分かりやすくなります。ですのでNGTでは「境界値はテスト観点じゃないよ」という教え方をしています。

エキスパートの皆さんがモヤモヤしないように正確に表現するならば「境界値そのものじゃなくて、境界値で狙っているバグのパターンを直接テスト観点として挙げましょう。何のバグを狙ってもいない境界値は、単なる同値クラスのカバレッジ基準ないし値ですから、テスト観点ではありません」となります。

意地悪漢字も同様です。意地悪漢字が狙っているバグのパターンを直接テスト観点として挙げる方が、モデリングとして分かりやすくなります。

ただそれが難しいことも多々あるので、最終的にテスト観点に残さない前提で、他のテスト観点と組み合わせて考えるヒントとして、境界値や意地悪漢字が初期のテスト観点図に出てくる方がモデリングしやすい、ということであれば、別に構わないと思います。私もそうすることがあります。

あ、まだ疑問があったか、テスト技法はテスト観点じゃない、というやつね。

NGTでは、テスト技法はテスト観点じゃないという説明をしています。それは、テスト技法というのが何を意味しているか、に依存した説明です。より正確に言うと、一般的にテスト技法という用語が含んでいるものは、単純にテスト観点になるわけじゃないよ、という意味です。ヒントにはなります。

一般にテスト技法というのは、2つの工程をいっしょに行います。テスト要求分析すなわちテスト観点の特定と、テスト詳細設計すなわちテストデータの特定です。ただ面倒なのは、片方しかやらないテスト技法もある点です。

例えば境界値分析は両方やりますし、同値分割はテスト要求分析が主です。制御パステストはテスト詳細設計が主です。

テスト観点を挙げる時にヒントとなるのは、制御パステストのようにテスト詳細設計を主に行う技法です。なぜなら、テスト詳細設計を行うためにテスト観点を特定しているからです。テスト技法をテスト観点にすると、そのテスト技法で特定しているテスト観点を挙げていることになります。

ただall-pair法のように、テスト詳細設計を主に行うのにテスト観点を特定していないテスト技法もありますから、そう一筋縄ではいきません。ですのでNGTでは、テスト技法はテスト観点を挙げる際のヒントにはなるけれど、直接テスト観点にすべきではない、と説明しています。

一般に、NGTを教わるテストのモデラーはここまでテスト技法について考察しているわけではありませんので、ここまで詳しく説明するとかえって混乱を招くと予想されます。

要するに「テスト技法」という用語は、テスト要求分析とテスト詳細設計が分離されてなかった時代につくられた用語なので、テスト観点の特定とテストデータの導出の切り分けが難しい用語なのです。それが本件の原因。これは29119-4でテスト条件の粒度がずいぶん変わることからも分かります。

VSTeP

 2012/4/3に行われたWARAI(関西テスト勉強会)の受講者の方から頂いた質問です。

NGTはUMLのクラス図によく似た記述形式ですが、UML同様、関連に方向性があったりするのでしょうか?それともテスト観点に、依存関係の方向などなく、すべてフラットに抽出すべきでしょうか?(あるテスト観点と「その前提となるテスト観点」などは依存関係が存在しそうにも思えます。。。)

 ご質問ありがとうございます。まずお答えを先に申し上げてしまうと、関連に方向性をつけるかどうかはモデリングを行うテスト設計者が決めて構いません。

 ちょっと分かりにくいですね。NGTという記法としては、順序依存性を持つ関連に対して開き矢印で方向性を表します。一方、組み合わせテストの必要性のように方向性を持たない関連に対しては、矢印の無い直線で表します。また、関連の表す意味についてはステレオタイプで表します。WARAIではその辺りを詳しく説明する時間がありませんでしたね。申し訳ありませんでした。

 ところで、ご質問で気になるのが「前提となるテスト観点」という言い回しです。この「前提」とは、どういう意味でしょうか。もしこれが、回帰テストのように、Aというテスト観点から導出されるテストスクリプトを実施した後でBというテスト観点から導出されるテストスクリプトを実施する、という実施順序しか意味していないのであれば、その関連Xをテスト要求モデルに記述すべきではありません。その関連Xはテスト要求を満たすことに何も寄与しないからです。例えば、Bのテスト観点の必要性がAのテスト結果によって変化する(Aのテスト結果によってはBのテストをしなくてもよくなる、など)のであれば、テスト要求モデルに記述すべきです。もし、実施順序をそう定めることで実施効率を向上したいという意図があるのであれば、テストアーキテクチャ設計モデルに記述すべきです。これは記法の問題ではなく、モデリング技術の問題ですね。

 NGTの説明を聞くと記法に気を取られてしまいがちですが、モデリング技術も重要です。NGTはステレオタイプなど自由度の高い記法を指向していますので、皆さんがモデリングしたい構造を把握していればきちんと記述できます。ですので記法の限界を気にするよりも、記述しようとしている構造はどういう意味でどういう位置づけなのか、を考えることに時間を割くようにして下さい。そうすれば実り多いテスト開発が可能になると思います。頑張ってくださいね。

未分類

VSTePのテスト3です。

未分類

VSTePのテスト2です。
ほげほげ
ほげ
ほげほげほげ。

未分類

WordPress へようこそ。これは最初の投稿です。編集もしくは削除してブログを始めてください !