ChatGPTにJSTQBの問題を解かせてみた
(画像=kunakorn/stock.adobe.com)

はじめまして、QAコンサルタントのアイネイドです。

私はソフトウェア開発と開発プロセスに関する仕事を何十年もしてきました。昨年ソフトウェア品質保証に興味を持ち転職したのですが、その過程で初めて「JSTQB」というソフトウェアテストの資格があることを知りました。
今回のブログでは「JSTQB Foundation Level」の問題を解かせてみる実験を行ってみました。ChatGPTがどれだけ正確に問題を解けるか、興味深い結果が待っていますので最後までお付き合いいただければ幸いです。

目次

  1. 1. ChatGPTに試験を受けさせようと思った理由
  2. 2. JSTQBについて
    1. JSTQBとは何か?
    2. 「JSTQB Foundation Level」の問題について
  3. 3. ChatGPTにJSTQBの問題を解かせてみた
    1. 問題1
    2. 問題2
    3. 問題3
    4. 問題4
    5. 問題5
  4. 4. 問題の正答率とChatGPTの能力
  5. 5. 考察
  6. 6. まとめ

1. ChatGPTに試験を受けさせようと思った理由

近年、米Chicago-Kent College of Lawに所属する研究者らは「ChatGPT-3.5」で米国司法試験(選択式)の7科目を受けさせたところ、平均正答率50%(人間の平均正答率68%)となったとのことです。このニュースを見たクオリティマネージャーの私は、同じ選択式問題である「JSTQB Foundation Level」を解くことができるのかということに興味が沸きました。

仮に合格ラインに達する事になれば、資格保持者と同等の知識レベルということになり、より仕事に活かすことができるのではないかと期待したことがChatGPTに試験を受けさせようと思った理由になります。

2. JSTQBについて

JSTQBとは何か?

JSTQBについてご存じない読者もいらっしゃると思いますので、簡単に説明をします。

JSTQBは日本におけるソフトウェアテスト技術者資格認定の運営組織として2005年4月に認定されました。各国のテスト技術者認定組織が参加しているISTQB(International Software Testing Qualifications Board)の加盟組織の加盟組織の一つになります。

「JSTQB Foundation Level」の問題について

認定試験にはいくつか種類がありますが、初回ということでまず一番基礎的な「JSTQB Foundation Level」の問題に焦点を当てています。

使用する問題は公式サイト(JSTQB認定テスト技術者資格)で公開しているサンプル問題で、問題形式は選択肢4つの選択式問題です。

なお、サンプル問題の問題の正解は選択肢Aとなっていることを覚えておいてください。

3. ChatGPTにJSTQBの問題を解かせてみた

ChatGPTに問題と選択肢を読み込ませ、正解・正解の理由・他選択肢の不正解の理由を出力するように設定し、出力された内容が以下になります。

問題1

テストや操作で見かけるインシデントの一覧がある。「故障」といえるのはどれか。次の選択肢の中から1つ選びなさい。

  • A. ダイアログボックスのオプションを選択した時、製品が異常終了した。
  • B. 間違ったバージョンのソースコードをビルドした。
  • C. 間違った入力変数を使用した計算アルゴリズムを使用した。
  • D. 開発者は計算に関する要件のアルゴリズムを誤った解釈をした。

正解:A

正解の理由:製品が異常終了することは、明らかな故障です。他の選択肢は欠陥やエラーを指摘していますが、故障とは異なります。

不正解の理由
– B、C、Dは欠陥やエラーを指摘していますが、故障とは異なります。

問題2

次の説明においてテストとデバッグの違いを最も適切に説明しているのはどれか。次の選択肢の中から1つ選びなさい。

  • A. テストは欠陥から発生する故障を発見する。デバッグはソフトウェアの故障の原因を発見し、解析し、除去を行う。
  • B. テストは欠陥を正確に指摘する。デバッグは欠陥を解析して、事前に除去できるように提案する。
  • C. テストは欠陥を除去する。デバッグは故障の原因を特定する。
  • D. 動的テストは故障の原因を防ぐ。デバッグは故障を除去する。

正解:A

正解の理由:テストはシステムやソフトウェアの欠陥やエラーを発見するプロセスであり、テストを通じて故障が明らかになります。一方、デバッグは発見された故障の原因を特定し、解析し、除去するプロセスです。

不正解の理由
– Bはテストが欠陥を正確に指摘することを説明していますが、デバッグの特徴ではありません。
– Cはテストが欠陥を除去することを説明していますが、デバッグの特徴ではありません。
– Dは動的テストとデバッグの関係について説明しており、問題文とは異なります。

問題3

ツールによる静的解析の主な利点の説明文として最も適切なものはどれか。次の選択肢の中から1つ選びなさい。

  • A. ツールによる静的解析は、手動によるテスト実行の前に欠陥を検出することができる。
  • B. ツールによる静的解析は、ビジネスアナリストや要求エンジニアが要件と一致しないソフトウェアのモデル(状態遷移図など)を構築することを防ぐ。
  • C. ツールによる静的解析により、ユーザ受け入れテストのテストケースが少なくなり、テスト実行の期間が短くなる。
  • D. ツールを使ってコードの静的解析を行うことで、開発者によるユニットテスト実施のニーズは減少する。

正解:A

正解の理由:ツールによる静的解析は、コードやドキュメントなどのテキストを自動的に解析し、欠陥や問題を発見することができます。これにより、手動テストの前に問題を早期に検出できます。

不正解の理由:
– Bは静的解析が要件と一致しないモデルを防ぐと説明していますが、主な利点ではありません。
– Cはユーザ受け入れテストのテストケースに関する話であり、主な利点ではありません。
– Dは開発者によるユニットテストのニーズに関する話であり、主な利点ではありません。

問題4

客のクレジット信用枠を決定する銀行のアプリケーションがある。このアプリケーションのテストに最も適したブラックボックステスト設計技法を、次の選択肢の中から1つ選びなさい。

  • A. デシジョンテーブルテスト
  • B. 状態遷移テスト
  • C. ユースケーステスト
  • D. 同値分割法

正解:A

正解の理由:クレジット信用枠を決定するアプリケーションは、異なる条件やルールに基づいて判断を行います。デシジョンテーブルテストは、異なる条件に対するテストケースを効果的に設計するための適切な方法です。

不正解の理由
– Bの状態遷移テストは、状態遷移が重要な場合に使用されますが、信用枠決定アプリケーションには必ずしも適しているわけではありません。
– Cのユースケーステストは、システムの機能やユーザの操作に基づいてテストケースを設計する方法であり、信用枠決定アプリケーションには特に適していません。
– Dの同値分割法は、入力値の範囲を区切り、各範囲の代表的な値をテストする方法ですが、信用枠決定アプリケーションにはデシジョンテーブルテストの方が適しています。

問題5

テスト実行ツールの特徴に関する以下の記述のうち、キーワード駆動テスト実行ツールの特徴にもっとも当てはまるものはどれか。次の選択肢の中から1つ選びなさい。

  • A. テスト入力データ、アクションワードや期待結果を含む表が、テスト対象システムの実行を制御する。
  • B. テスト担当者の動作が、何度も繰り返すことができるようにスクリプトに記録される。
  • C. テスト担当者の動作が、様々なテスト入力データによって実行できる。
  • D. テスト結果を記録し、期待結果と比較することができる。

正解:A

正解の理由:キーワード駆動テスト実行ツールは、テストスクリプト内にキーワードやアクションワードを使用してテストケースを設計し、テスト対象システムの実行を制御します。この方法により、テストの再利用性が向上し、テストケースのメンテナンスが容易になります。

不正解の理由:
– Bはテストの録画再生ツールの特徴を説明しており、キーワード駆動テスト実行ツールの特徴ではありません。
– Cはテストデータのバリエーションに関する話であり、キーワード駆動テスト実行ツールの特徴ではありません。
– Dはテスト結果の記録と比較に関する話であり、キーワード駆動テスト実行ツールの特徴ではありません。

4. 問題の正答率とChatGPTの能力

驚くべきことに「JSTQB Foundation Level」の問題に対して、ChatGPTは5問すべての問題に対して正解しました。これにより正答率は100%となり、下手をするとChatGPTは「JSTQB Foundation Level」資格保持者より正確な回答ができたのかもしれません。

※ChatGPTが出力した正解の理由・不正解の理由には一定の信頼性があるとは思いますが正確であるとは断言できないため、サンプル問題に記載された正解の理由・不正解の理由を参照してください。

この結果より、ChatGPTはソフトウェアテストに関わる簡単な文章であれば、推敲や校閲においても力を発揮できるのではとさえ思わせる能力を持っている可能性があるのではないでしょうか。

5. 考察

前章でChatGPTの能力をベタ褒めさせていただきましたが、実は解かせる問題を選択する際に手心を加えています。

例えば問題の一部として「フロー図」がある問題は意識して除いています。図をテキストで表すことができないのかといわれるとある程度可能ですが、人間がやることになるので今回の実験からでは不確定要素と判断しました。

データだけの表であれば、下記のようにカンマ区切りにすることでテキストとして入力できますが、文字の強調やセルの色合いにも意味がある場合はテキスト化が難しい場合があります。

商品名,値段,割引額,売り場
みかん,100円,10%,生鮮食品売り場
シャンプー,300円,5%,日用品売り場
サンダル,1000円,8%,服売り場

ちなみに今回省いたフロー図の問題は以下になりますが、テキスト部分だけを入力すると、毎回のように正解とする選択肢が変わってしまいます。

プロジェクトにおけるカバレッジ目標の一つに、100%デシジョンカバレッジがある。
次の制御フローグラフに示す3つのテストを実行する。

テストA:A,B,D,F,Gのパスをカバーする
テストB:A,C,F,Gのパスをカバーする
テストC:A,C,F,C,F,C,F,Gをカバーする

ChatGPTにJSTQBの問題を解かせてみた

次のデシジョンカバレッジ目標に関する記述のうち、説明文として最も適切なものはどれか。
次の選択肢の中から1つ選びなさい。

A. 判定(デシジョン/以下、判定)Dは完全にテストされていない。
B. 100%デシジョンカバレッジを達成する。
C. 判定Eは完全にテストされていない。
D. 判定Fは完全にテストされていない。

なお、このテキスト化の方法が正しいかどうかは不明ですが「制御フローグラフ」の図を下記のようなテキストに置き換えると正答するようになります。

制御フローグラフ

A→B,Cに分岐
B→Dに遷移
C→Fに遷移
D→E,Fに分岐
E→Gに遷移
F→C,Gに遷移

また、図や表を人間の手でテキスト化した場合以外にも、回答が違ってくることがあります。(不正解の頻度は数回に一度や数十回に一度の場合もあります)

このような現象になる原因の一つに「日本語の曖昧さ」があります。

日本語は主語が省略されていたり、どの単語を修飾しているか判断しづらいことがあります。ただ、今回のJSTQBのサンプル問題には英語の物もあるので、それを使用することで正答率が上がる場合もあると思います。

実は今回の結果に驚いたのは日本語の問題であるのに関わらず正解率100%だったことも原因の一つでした。
まだまだChatGPT使う側の人間が気を使わないといけないことは多そうです。

6. まとめ

ChatGPTのようなOpenAIは今この時も進化を続けており、今回省いた「フロー図」の認識についても、「フロー図」を画像のまま認識するようなプラグインがあれば、今回のような手心は必要なくなる可能性もあり回答の精度もまだまだ上がっていくことでしょう。

筆者としてはそんな(おそらく近い)未来が少し楽しみです。

機会があれば次は更に上のランクの試験に挑戦させてみたり、バージョンアップしたOpenAIにさせてみたりしてみようかと考えております。

本ブログを最後まで読んでいただいてありがとうございました。

【注目コンテンツ】
DX・ESGの具体的な取り組みを紹介!専門家インタビュー
DX人材は社内にあり!リコーに学ぶ技術者リスキリングの重要性
サービタイゼーションによる付加価値の創造と競争力の強化