黒柴的ソフトウェアテスト考 #15
生成AIで、テスト項目を作成する(その1)
昨今、生成AIが流行っている。
自社でも、ディープラーニング好きの役員が、「生成AIの利用ガイダンス」みたいな社内打ち合わせを、出席必須で行っている。
「使え」と言われても、業務自体はSIer、またはメーカーの下請けとしてのソフトウェア開発であるため、一歩間違えれば自社ではなくカスタマーの秘匿情報が生成AI側に流出してしまう。
そういう意味での「使い方ガイドライン」を提示してくれるのならまだしも、ただ「使え、使え」と言われてもなぁと、少々辟易している。
ちなみに、「生成AI」がより高度になっていくことで、失われる仕事の中に「プログラミング」も含まれているのだが、黒柴は20世紀のころにCASEツールに触れてから、「将来はこういうものを使いながら仕様からプログラムを生成していくのだろうなぁ」と漠然と考えていたので、プログラミングというアクティビティが生成AIよって失われると言われても、「そういうものだろう」と思っている。
ただ、システムを使いたい、提供したいと思っているカスタマーが考えている要望を、要件として整理し、仕様として設計することで、ようやく生成AIは、その要望を満足させるプログラムを生成することができると思っている。
そのため、要件や仕様を整理する設計に関する能力は、依然として人間の側に残るので、近い将来に「システムエンジニア」という職種がすべて生成AIにとって代わることは無いだろう。
話しが長く成ったが、今回はソフトウェアテストのテストケースを生成AIがきちんと生成できるのか、またきちんと生成させるためには、どのような仕様を提示すればよいのか、ということを考えていく。
仕様は、ソフトウェアテスト考#12で取り上げた、交代勤務の開始時刻を出力する機能のテストケースである。
とりあえず、日付がまたがることを意識させるために、仕様を以下のように定義した。
これを、ChatGPT、Gemini、Copilotに質問し、生成されたテストケースを確認していこうと思う。
最初は、ChatGPTである。ChatGPT自身に質問すると、バージョンは「GPT-4」となっている。
仕様を質問して回答は、以下の通りである。
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"}
]
テストケースとしては、各勤務帯の境界値の他に、日付のまたがりに対するテストケースが付与されているので、まあ良いのではないかと思う。
ソフトウェアテスト考#12を取り上げていただいたブロッコリーさんのブログに、より詳細なテストケースの設計についての考え方が整理されているが、この生成AIの出力をベースに確認することは有効だと考える。
ちなみに、ソフトウェアテスト考#12で記述したように、勤務帯の開始時刻だけに着目して、以下のような仕様を入力してみる。
結果は以下のようになった。
test_cases = [
# Test cases for First Shift (07:30 - 15:30)
{"input": "2024-06-03 08:00", "expected": "07:30"},
{"input": "2024-06-03 15:29", "expected": "07:30"},
# Test cases for Second Shift (15:30 - 23:30)
{"input": "2024-06-03 15:30", "expected": "15:30"},
{"input": "2024-06-03 23:29", "expected": "15:30"},
# Test cases for Third Shift (23:30 - 07:30)
{"input": "2024-06-03 23:30", "expected": "23:30"},
{"input": "2024-06-04 07:29", "expected": "23:30"},
# Edge cases for shift boundaries
{"input": "2024-06-03 07:30", "expected": "07:30"},
{"input": "2024-06-03 15:30", "expected": "15:30"},
{"input": "2024-06-03 23:30", "expected": "23:30"},
{"input": "2024-06-04 07:30", "expected": "07:30"},
# Test case for transitioning from one day to the next
{"input": "2024-06-04 00:00", "expected": "23:30"},
{"input": "2024-06-04 23:00", "expected": "15:30"},
# Test cases for midnight transitions
{"input": "2024-06-04 00:01", "expected": "23:30"},
{"input": "2024-06-04 23:59", "expected": "15:30"}
]
期待値が日時ではなく時刻となっただけで、入力値の考え方は日時を確認するテストケースと変わっていない。
ただ、これは日時を確認するテストケースと連続して作業させてしまったため、一つ前の入力に影響されてしまったことも考えられる。
長く成ったので、Gemini、Copilotについては次回確認していく。
この記事が気に入ったらサポートをしてみませんか?