日時データを扱うテスト設計



こんにちは。システム開発三部 開発推進グループ長の竹中です。

今回は、品質保証の取り組みでテストを取り扱うことが多くある中でも、強く印象に残っている日時データを扱うテストと同値分割法・境界値分析についてです。

同値分割法・境界値分析とは?

テストケースを考えるときに使うテスト技法の代表的なものですね。キホンのキです。
皆さん耳タコだと思いますが、改めてそれぞれの説明です。JSTQB FLのシラバスより。

同値分割法

同値分割法は、同等に処理されると想定したデータすべてを同じパーティション(これを同値クラスとも呼ぶ)に振り分ける技法である(『Kaner 2013』および『Jorgensen 2014』を参照)。有効な値と無効な値の両方に対して同値パーティションがある。

境界値分析

境界値分析(BVA)は同値分割法の拡張であるが、パーティションが数値または順序付け可能な値で構成される場合だけ使用できる。パーティションの最小値および最大値(または最初の値と最後の値)が、境界値である(『Beizer 1990』を参照)。

JSTQB認定テスト技術者資格-シラバス(学習事項)・用語集-

数値だけではなく日時データも連続性のあるものなので、同値分割法・境界値分析を上手く使うと効果的なテストができますね。

前提

※当社のシステム開発で実際に経験したものですが、若干汎化して記載しています。

とあるシステムのデータ登録機能では、登録日時とともにデータが記録されています。
今回、そのデータの登録日時について、任意の日付の期間を指定して検索することができる機能が実装されました。

この検索機能についてテストすることを例に、同値分割法・境界値分析の使い方を考えてみます。

発生したこと

日中の業務を想定して2023/1/20の14時にデータが登録されている状況での検索機能のテストを考えてみます。

まず、検索期間のFrom日(いつからの方。自至の自。)について。From日に設定した日付以降の登録データが検索結果に出てくることが期待されます。
同値分割法・境界値分析を意識していると、2023/1/20と2023/1/21が有効・無効パーティションの境界値になります。そこで、これらの値をインプットとしてテストを実施してみます。From日に2023/1/20を設定して検索すると目的のデータが結果に出てきて、2023/1/21を設定して検索すると結果に出てきません。期待通りの結果が得られました。

次に、検索期間のTo日(いつまでの方。自至の至。)について。To日に設定した日付以前の登録データが検索結果に出てくることが期待されます。
同じく、同値分割法・境界値分析を意識すると、2023/1/19と2023/1/20が有効・無効パーティションの境界値になります。To日に2023/1/19を設定して検索すると目的のデータは結果に出てきません。大丈夫そうです。しかし、2023/1/20を設定して検索しても結果に出てきません。期待を裏切る結果になり、欠陥が検出されました。

ピンときた方もいるかもしれません。ポイントは、登録は「日時」だが、検索は「日付」であることです。登録時には「yyyy/MM/dd hh:mm:ss」でデータを登録するのに対して、検索するときの入力画面では「yyyy/MM/dd」しか指定されません。このとき、プログラムで特に何も制御されていなければ「yyyy/MM/dd 00:00:00」として処理されるでしょう。
なので「2023/1/20 14:00:00」で登録日時を保持しているデータが、To日が「2023/1/20 00:00:00」と設定されている検索条件で引っかからなかったのです。

同値分割法・境界値分析を活用したことによって、きちんと欠陥を検出できました。
日時と日付の差異だけでなく、整数と小数の差異なんかにも効いてきます。*1

さいごに

同値分割法と境界値分析。テスト技法のキホンのキであり、欠陥の温床である境界のテストに活用できます。シンプルな考え方だけど奥深い。定期的に振り返りたいと思います。

 

*1:登録データを14時という日中の時刻で設定していたことも欠陥検出の一助になっています。単体テストだと0時ちょうどとしてしまうかもしれません。結合テストやUATでシナリオテストをして検出となるかもしれません。いかに早い工程で検出できるか、というところがテスト実施者としての腕の見せ所ですね。