その他
    ホーム 技術発信 DoRuby テストデータ作成時の注意点

    テストデータ作成時の注意点

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

    テストデータで決定する数値は無作為に決定していると、予期せぬ矛盾が発生する事がある。

    その注意点を記述する。

     問題点

    例えば商品のテストデータを作成する場合を考える。

    商品の値段は当然自然数である。

    これは税抜価格であっても税込価格であっても当てはまるが、1点異なる部分がある。

    税抜価格は単純に決定された値であり、この値を導いている値はないのに対して、税込価格は税抜価格から導かれて決定する。

    つまり税込価格は税抜価格の関数になっている。

    この関数をfとした場合、f(x)は

    f(x) = floor(1.08x)

    と表現できる。このfはN→Nの写像になっており、下記の様にF(y)を定義すると、Fはfの逆関数になる

    F(y) = ceil(y/1.08)

    テストデータとして、税込価格を決定する場合、ランダムに自然数が発生する様なプログラムでは、例えば1700という値になる可能性がある。これを関数Fによって

    F(1700) = 1575

    と税抜価格を算出したとすると、実際のf(1575)は1701の為、誤差が発生する。

     原因

    この誤差はfの逆関数が存在する事と矛盾する様に見えるが、そうではなく、この写像fがN→Nにおいて全射でない点が問題である。

    このfの定義域はN全体であるが、値域はN全体ではなく、1700というのが値域外の数値である事が原因である。

    (つまり f(x) = 1700 を満足するxは存在しない)

     結論

    テストデータを作成する際は、それを導いている値があるかないかを意識する必要がある。

    導いている値がある場合、その関数の写像において全射であるかを考え、

    全射でない場合は、値域外の数値にならない様、データを工夫する必要がある。