黒柴的ソフトウェアテスト考 #16
生成AIで、テスト項目を作成する(その2)
ソフトウェアテスト考#15の続きである。
今回は、Geminiに質問し、生成されたテストケースを確認していこうと思う。
Gemini自身に質問すると、バージョンは「Gemini 1.5 Pro」となっている。
このバージョンがどの程度新しいのか不明だが、Geminiの回答によると最新のようだ。
次に、ChatGPTに質問した内容と同じものを質問してみた結果が、以下のようになる。
回答結果としては、Pythonによるテストコードも出力していたのだが、ここではテストケースがMECE(Mutually Exclusive and Collectively Exhaustive)であること(特に不足がない)を確認したいので、テストケースのみを取り上げる。
テストケース:
入力値 期待値 解説
2024-06-05 07:20 2024-06-05 07:30 第一勤務開始時刻より前にテスト
2024-06-05 08:00 2024-06-05 07:30 第一勤務開始時刻
2024-06-05 15:20 2024-06-05 15:30 第二勤務開始時刻より前にテスト
2024-06-05 16:00 2024-06-05 15:30 第二勤務開始時刻
2024-06-05 23:15 2024-06-05 23:30 第三勤務開始時刻より前にテスト
2024-06-05 23:45 2024-06-05 23:30 第三勤務開始時刻
2024-06-06 00:00 2024-06-06 23:30 翌日0時を跨いでいる場合も第三勤務開始時刻
2024-06-06 07:00 2024-06-06 07:30 翌日7時を跨いでいる場合も第一勤務開始時刻
補足:
テストケースは、各勤務帯の開始時刻より前、開始時刻、終了時刻、翌日の開始時刻を含むように
設定しています。
実際のテストでは、より多くのテストケースを追加して、関数の動作を検証することが重要です。
テストケースを実行するには、datetime モジュールをインポートする必要があります。
このテストケースが、ご質問の関数テストに役立つことを願っています。
ChatGPTによるテストケースは、以下のようになっている。
test_cases = [
# Test cases for First Shift (07:30 - 15:30)
{"input": "2024-06-03 08:00", "expected": "2024-06-03 07:30"},
{"input": "2024-06-03 15:29", "expected": "2024-06-03 07:30"},
# Test cases for Second Shift (15:30 - 23:30)
{"input": "2024-06-03 15:30", "expected": "2024-06-03 15:30"},
{"input": "2024-06-03 23:29", "expected": "2024-06-03 15:30"},
# Test cases for Third Shift (23:30 - 07:30)
{"input": "2024-06-03 23:30", "expected": "2024-06-03 23:30"},
{"input": "2024-06-04 07:29", "expected": "2024-06-03 23:30"},
# Edge cases for shift boundaries
{"input": "2024-06-03 07:30", "expected": "2024-06-03 07:30"},
{"input": "2024-06-03 15:30", "expected": "2024-06-03 15:30"},
{"input": "2024-06-03 23:30", "expected": "2024-06-03 23:30"},
{"input": "2024-06-04 07:30", "expected": "2024-06-04 07:30"},
# Test case for transitioning from one day to the next
{"input": "2024-06-04 00:00", "expected": "2024-06-03 23:30"},
{"input": "2024-06-04 23:00", "expected": "2024-06-04 15:30"},
# Test cases for midnight transitions
{"input": "2024-06-04 00:01", "expected": "2024-06-03 23:30"},
{"input": "2024-06-04 23:59", "expected": "2024-06-04 15:30"}
]
比較すると、同値分割としてはどちらも良いと思うが、ChatGPTでは境界値分析を意識できていると思う(各勤務の終了時刻が次の勤務の開始時刻-1minとなっている)。
しかし、Geminiでは、各勤務の終了時刻と思われる時刻が次の勤務の開始時刻-10min(第三勤務に至っては15min)となっているのはなぜなのだろう?
より、同値分割、境界値分析を意識させるように、質問を修正してみた。
結果は、以下のとおりである。
テストケース(同値分割・境界値分析):
区分 入力値 期待値 解説
第一勤務 7:20 7:30 勤務帯開始時刻より前の時間
第一勤務 7:30 7:30 勤務帯開始時刻
第一勤務 8:00 7:30 勤務帯開始時刻
第一勤務 15:20 7:30 勤務帯終了時刻直前
境界値 15:29 7:30 勤務帯境界値(開始時刻側)
境界値 15:30 15:30 勤務帯境界値(終了時刻側)
第二勤務 15:31 15:30 勤務帯開始時刻
第二勤務 16:00 15:30 勤務帯開始時刻
第二勤務 23:15 15:30 勤務帯終了時刻直前
境界値 23:29 15:30 勤務帯境界値(終了時刻側)
境界値 23:30 23:30 勤務帯境界値(開始時刻側)
第三勤務 23:31 23:30 勤務帯開始時刻
第三勤務 0:00 23:30 勤務帯開始時刻
第三勤務 7:00 23:30 勤務帯終了時刻直前
境界値 7:29 23:30 勤務帯境界値(終了時刻側)
境界値 7:30 7:30 勤務帯境界値(開始時刻側)
日付跨ぎ 2024-06-05 23:59 23:30 翌日0時を跨いでも第三勤務開始時刻
日付跨ぎ 2024-06-06 00:01 7:30 翌日0時を跨いだ場合は第一勤務開始時刻
補足:
同値分割と境界値分析に基づいて、各勤務帯の開始時刻、終了時刻、境界値を含むテストケースを
作成しました。
テストケースを実行するには、datetime モジュールをインポートする必要があります。
実際のテストでは、さらに多くのテストケースを追加して、関数の動作を検証することが重要です。
このテストケースが、ご質問の関数テストに役立つことを願っています。
境界値分析を意識するあまり、同値分割が意識できておらず、同一の同値パーティションに含まれるテストケースを作成している(MECEを確認すれば、不足はないが重複がある状態である)。
また、日付を跨ぐ境界値を意識できているが、そこにだけ入力値として日時としてが、それ以外の入力値、期待値ともに日付が無くなっているのは、なぜなのだろう?
特に、期待値から日付が無くなっているのは、ソフトウェアテスト考#12で取り上げたように、日付跨ぎの観点を意識できなくなって不具合を検出できなくなる恐れがある。
黒柴がこれを改善するために、質問を改善するアイディアを出せなかったため、今回はここまでとするが、やはり生成AIを使いこなすはいろいろと難しい。
次回は、Copilotを取り上げたいと思う。
この記事が気に入ったらサポートをしてみませんか?