スキルアップ

マイヤーズの三角形問題を各種LLMはどれぐらい解けるのか?

マイヤーズの三角形問題を各種LLMはどれぐらい解けるのか?

ソフトウェアテストの名著に、G.J.マイヤーズの「ソフトウェアテストの技法」(第二版)があります。本書の序盤に、読者のプログラムに対するテスト観点の網羅度を自己診断できる、通称「マイヤーズの三角形問題」が登場します。

本記事では、現在比較的容易にアクセスできる3種類の主要なLLM(Large language Models)に対して、本書の読者と同じ条件を提示します。そして、本書内で事前に想定されているテスト観点をどれぐらい網羅できるかを採点し、その結果を報告します。なお、全てのLLMの回答は2024年5月1日時点のもの、かつ無償利用が可能なプランによるものです。

プログラムの仕様

まず、テスト観点を考える対象となるSUT(テスト対象)のプログラムの仕様は以下の通りです。

  • このプログラムは、入力ダイアログから3つの整数を読む
  • この3つの値は、それぞれ三角形の3辺の長さを表す
  • プログラムは、三角形が不等辺三角形、二等辺三角形、正三角形のうちのどれであるかを示すメッセージを表示する

記載の通り、3つの整数の引数を取り、3種類の3角形のどれに該当するか、またはしないか、を判定し、出力するプログラムです。

テストケースに期待される仕様

自己診断では、前述のプログラムに対してどのようなテストケースが考えられるかをできるだけ多く検討し、挙げたテストケースが以下のような仕様を満たせるかをチェックします。

この自己診断にて自分自身で考えたテストケースが以下の仕様を満たす場合+1点とし、14点満点となります。書籍では「われわれの経験によると、高度な経験を持つ専門プログラマーの平均点数は、14点満点でたった7.8点である」との記述がありました。

※書籍を参考に作文

1. 定義として適切な不等辺三角形の値を持つテストケースがあるか

2. 定義として適切な正三角形の値を持つテストケースがあるか

3. 定義として適切な二等辺三角形の値を持つテストケースがあるか

4. 定義として適切な二等辺三角形の場合、2つの等辺を含む3つの組み合わせ全てを試すテストケースが少なくとも3つ含まれているか

5. 1つの辺がゼロであるテストケースがあるか

6. 1つの辺が負の値であるテストケースがあるか

7. ゼロより大きい3つの辺のデータのうち、2つのデータの和がそれ以外の1つと等しいテストケースがあるか

8. 第7項において、1つの辺のデータが他の2つの辺の長さに等しいことを少なくとも3種類の順列全てに対して確認するテストケースがあるか

9. ゼロより大きい3つの辺のデータのうち、2つのデータの和がそれ以外の1つより小さくなるテストケースがあるか

10. 第9項において、第8項と同様に3種類の順列全てに対して確認するテストケースがあるか

11. 全ての辺が0であるテストケースがあるか

12. 整数でないテストケース(小数点を含むデータなど)が少なくとも1つはあるか

13. データの個数が誤っているテストケースがあるか

14. それぞれのテストケースに対して、期待動作となる出力が示されているか

LLMに与えるプロンプト:

熟練のソフトウェアテスト設計者として振る舞ってください。

これから、仕様として与えるプログラムの仕様に対して、考えうる限りのテストケースを列挙してください。

なお、不等辺三角形はどの2つの辺も等しくないこと、二等辺三角形は2つの辺が等しいこと、正三角形は3つの辺が等しいこと、を踏まえて検討すること。

仕様:

このプログラムは、入力ダイアログから3つの整数を読む

この3つの値は、それぞれ三角形の3辺の長さを表すものとする

プログラムは、三角形が不等辺三角形、二等辺三角形、正三角形のうちのどれであるかを示すメッセージを表示する

結果

前述のプロンプトに基づいて、テストケースに期待される14種類の仕様を、各LLMがどれぐらい満たせるかをテストしてみました。その結果がこちらです。

GPT4

8点

Gemini

9点

Claude

6点

GPT4は、正常系と簡単な異常系についてはテストケースを確保できているものの、順列全てに対して網羅する、仕様の範囲外の異常系などで得点できませんでした。

Geminiは期待動作が付記されておらず、テスト観点の列挙と入力例にとどまりましたが、全ての辺がゼロであるテストケースを出してきている点は、他のLLMにない特徴でした。また、Geminiのみ、「あくまでも例であり、網羅的なものではない」というただし書きも付与されていました。

Claudeでは、テストケースの方針は示されたものの、入出力の双方において、具体的な値の指定はありませんでした。意外にも他のLLMと比べても網羅性は高くなく、他のLLMが挙げられなくてClaudeのみ挙げられたテストケースもありませんでした。全てのLLMが今回の実験で利用したプロンプトにおいて対応できなかった「テストケースに期待される仕様」は以下の通りです。

4. 定義として適切な二等辺三角形の場合、2つの等辺を含む3つの組み合わせ全てを試すテストケースが少なくとも3つ含まれているか

8. 第7項において、1つの辺のデータが他の2つの辺の長さに等しいことを少なくとも3種類の順列全てに対して確認するテストケースがあるか

10. 第9項において、第8項と同様に3種類の順列全てに対して確認するテストケースがあるか

11. データの個数が誤っているテストケースがあるか

おおむね、テストケースの実装段階において、値、順列を網羅するという方向の生成は苦手であるという結果になりました。また、意外にも人間のテスト設計者であれば早い段階で設計に織り込めそうである、「データの個数が誤っている」パターンは、どのLLMも導出できませんでした。

今回はできるだけ書籍を読んでいる読者に合わせたプロンプトとなるように、制約条件や補足的な指示を入れずに試してみましたが、仕様に合わせた網羅性の基準を与える、引数と順列の考えをあらかじめ教える、などプロンプトの改良によってはより良い成績が出せる可能性があります。

SNSシェア

この記事は面白かったですか?

今後の改善の参考にさせていただきます!

Ranking

ランキング

もっと見る