ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

単体テストにおける「正常系」と「異常系」の混乱

2018-03-27 09:26:16 | Weblog
テストは、「正常系」と「異常系」に分けることが多々ある。
このほかにも
  「正常系」「異常系」「ワーニング系」とか、
  「正常系」「異常系」「例外系」とか、
  「ブラックボックステスト系」「ホワイトボックステスト系」とか
いろいろあり、「正常系」はまずいいんだけど、異常系は、どこまでが範囲だか、混乱する。

この混乱の理由について
そもそも、単純に分けると、テストというのは、3種類にわかれる。

単体テストのテストケースは(つまり、分岐・条件網羅のみを考えた場合)、
分岐条件がなければ、1つの戻り値しか取れないので、1つの同値ケースとなり、
1個のテストしか、しないでよい(このとき、このケースは正常系)。

ということは、分岐があるから、テストケースが分かれるものと考えられる。

分岐が分かれる理由には、大きく3つある。

(1)分岐チェックする変数の値は、システムが扱うべき値であり、
   扱い方が異なるので、分岐が起きている

    大人と子供で料金が異なるというようなケース。
    同値ケースは別れ、それぞれテストする必要がある

(2)分岐チェックする変数の値は、システムが扱うべき値の範囲外である

   大人が0、子供が1とコード化されているところにー1が入ってきたような場合
   範囲外の値をエラーとし、エラー処理を行う。
   その後、どうなるかは、仕様による

(3)分岐チェックを行いたいが、そもそも、行える状態にない

   大人が1、子供が0というコード体系は、DBから拾ってくるが、そのDBにアクセスできない
   というもの。エラー、ないしは異常終了する
   その後、どうなるかは、仕様による


(1)のケースは正常系である(システムが扱うべき値だから)

(2)は、ワーニング系と呼ばれる
(3)は、例外系と呼ばれる・・・と思う。

なので、正常系は(1)で問題ないのだが、

異常系を(2)、(3)とする場合、
異常系を(3)、ワーニング系を(2)とする場合、
異常系を(2)、例外系を(3)とする場合など、
   
異常系については、いろいろと別れるみたい。




ブラックボックステスト、ホワイトボックステストについていうと、
(1)の分岐は、データに基づいて行われる。なので、入力値を変えることによって、分岐させることができ、
プログラム内部について知らなくてよいので、ブラックボックステストで可能

(2)の分岐は、入力値に異常値を入れることによって、エラーを出すものであれば、
ブラックボックステストで可能

しかし、通常のプログラムではその分岐は通らないが、修正ミスによるバグ混入を防ぐため、
エラーチェックしているようなケースでは、その分岐は通らないので、無理やりデバッガで
通す必要がある→ホワイトボックステスト
(上記例、大人が0.子供が1とのコード設定をDBでしているのではなく、#defineで定義している場合、
 絶対にプログラム上、-1になることはあり得ないが、ここのコードをDBやファイル設定されることをにらんで、
 エラーチェックが入っているようなケース)

(3)の分岐は、例外条件をデバッガないしはスタブ等で起こさないといけない
このため、ホワイトボックステストになる。

網羅率において、(1)は行う。(3)も気づいて行うが、(2)のケースで、
「通常のプログラムではその分岐は通らない」場合、漏れることがある。
(網羅率C0,C1で100%にならない)

なので、ざっくりいうと、
正常系はブラックボックステストが普通出来る
異常系は、ワーニング・エラーメッセージに対しては、ブラックボックステストでいける
     (かならず、その分岐が通るのであれば)
     例外に関しては、ホワイトボックステスト、
     あと、その分岐に行くことが普通はないような場合もホワイトボックステスト
となり、ホワイトボックステストではデバッガ使ったりしてテストする。




ってなかんじ。

  
この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« ARMって、なんの略か、知って... | トップ | NHKとの受信契約、ワンセ... »
最新の画像もっと見る

Weblog」カテゴリの最新記事