Notion AIを用いて機能仕様書からテストケースを自動で作成した話

はじめに

コミューンでQAをしています金丸です。 最近QA界隈でAIを用いたソフトウェア開発が注目を集めています。

www.kzsuzuki.com

多くはChatGPTを用いたものですがちょうど先月にNotion AIがリリースされたので今回Notion AIがソフトウェア開発のテスト部分に対して有用に使うことができるかについて記事を書いていきたいと思います。

結論から言うと、実用としての運用は未だ難しいがQAの補佐的な位置付けとしては十分な働きをしてくれることがわかりました。

NotionAIとは

NotionAIは、Notion Labs, Inc.によって開発された人工知能モデルです。個人や仕事に関するタスクの作成、整理、管理を支援するために設計された高度な機械学習モデルで、このモデルは自然言語処理技術を使用して、ユーザーの入力を理解しタスクに関する提案や推奨を提供しています。

また、リリースして間もないですが業務内におけるさまざまな使い方が提案されている状況です。

Notion AIを使用する利点としては業務に気軽に導入できることにあると思います。Notionをすでに業務に取り入れている環境であればとくに支障なくスムーズにNotion AIを使用できます。 さらに、今後の機能拡張としてプロジェクト管理やナレッジベースの支援など、ドキュメント以外の適用が挙げられています。ドキュメント以外のAI運用が可能になると他のAIツールに一線を画した位置付けになりそうでとても期待しています。

また、このような機械学習モデルを使用する場合は、機密情報がどう扱われるかについて確認しておく必要があります。たとえば自社の開発コードを機械学習モデルに修正してもらった場合、その情報がデータとして使用されているため他の人の問いかけに対して回答として提示されてる可能性を持っていることになります。

Notion AIの利用規約を確認してみると「顧客データを再学習には利用しない(Notion does not use your Customer Data or permit others to use your Customer Data to train the machine learning models used to provide the Notion AI Writing Suite)」と明記されていますので再学習によるデータ流出の可能性は低いといえます。

機能仕様から同値分割・境界値分析・フローチャートを自動で作成

ソフトウェアのテストにおいて、同値分割・境界値分析は非常に重要なテスト手法です。これらの手法によりテストケースの網羅性を高めることができます。しかし、手動でこれらのテストケースを作成すると非常に時間がかかるため、自動化することが望ましいです。そこで以下の機能仕様からNotion AIに自動で作成して頂きました。


動物園「カナマルランド」では、Webシステム上で入園チケットを購入できます。チケットを事前購入するWebシステム画面には年齢(整数)の入力欄があります。 「カナマルランド」の入園料金は年齢によって下の表となっています。

年齢 入園料金
6歳未満 無料
6歳以上〜13歳未満 500円
13歳以上〜18歳未満 1000円
18歳以上 1500円

この機能を入力としてNotion AIに「これはWebシステムの機能仕様です同値分割を用いてテストケースを作成してください」と問いかけてみました。 返答は以下です。


同値分割テストケース:

テストケース 年齢 期待される結果
1 5 無料
2 6 500円
3 12 500円
4 13 1000円
5 17 1000円
6 18 1500円
7 19 1500円

おお、すごいですね。これが数秒の間で出力されました。 もっと試してみたいと思い以下の補足説明を追加しました。


補足説明:負の数字は入力できますがその後のボタンが押せません


狙いとしては表の外に書いた負の数字の扱いにAIが気づけるか、と言う点です。開発現場でもよくあるミスですが表とは別に補足説明に重要なことが書いてありその説明のテストができるか、という場面を想定しています。補足説明を追記した後に先ほどと同じ質問を投げかけてみました。


同値分割テスト

テストケース 年齢 出力
1 5歳 無料
2 8歳 500円
3 15歳 1000円
4 25歳 1500円
5 -1歳 エラー

補足テストケース

  1. 1. 年齢に数値以外の文字を入力した場合
  2. - 入力値: "abc" - 期待される出力: エラーが発生する
  3. 2. 年齢に半角スペースを入力した場合
  4. - 入力値: " " - 期待される出力: エラーが発生する
  5. 3. 年齢に全角スペースを入力した場合
  6. - 入力値: " " - 期待される出力: エラーが発生する

テストケース5にて入力値が"-1"の場合を考慮しているのでちゃんと補足説明部分について認識しているようですね。 さらに、特筆すべきは補足テストケースを提案してくれました。これは自分から問いかけたわけでもないのでNotion AIが自主的にに提案したものになります。 すごいですね、開発時に見逃しやすい例外のテストを提案してくれたので驚いています。

続けて、同値分割に加えて境界値分析を用いたテストケースを書いてもらいました。


同値分割

テストケース 年齢 出力
1 5歳 無料
2 8歳 500円
3 15歳 1000円
4 25歳 1500円
5 -1歳 エラー

境界値分析

テストケース 年齢 出力
6 6歳 500円
7 13歳 1000円
8 18歳 1500円
9 19歳 1500円

フローチャート

graph TD;
    A(入園チケット購入画面) -->B(年齢入力欄);
    B --> C{年齢が6歳未満か};
    C -- いいえ --> D{年齢が6歳以上13歳未満か};
    D -- いいえ --> E{年齢が13歳以上18歳未満か};
    E -- いいえ --> F(入園料金1500円);
    E -- はい --> G(入園料金1000円);
    D -- はい --> H(入園料金500円);
    C -- はい --> I(入園無料);

境界値分析とフローチャートも良いクオリティで出力することができました。

ただ、境界値分析で0歳、12歳、17歳の場合などのテストケース考慮が欲しかったですね、ここが少し惜しい部分でもあります。 網羅性は確実でないですがこのレベルのテストケースを数秒で返してくれるのでテストケース作成の補足的な側面として利用できそうです。

機能仕様の修正もNotionAIにやっていただいた

Notion AIを扱う中でこちらの記事にコツが纏められていました。

note.com

なるほど、一度AIにテストケースを作成する際に気をつけるべき部分を聞いておきそれを機能仕様に組み込むと良さそうです。

なので機能仕様もNotion AIに修正していただくことにしました。 開発する中で機能仕様書を作り込むことができると内在するバグを軽減できます。しかし、機能仕様を作り込むと工数が嵩んでしまうので、AIがそこを補ってくれるととてもありがたいですね。

先ずはNotion AIにテストケース作成するための必要事項を聞いてみます


Webシステムのテストケースを作成するためには、以下の情報が必要です。

  • 機能の概要
  • 入力
  • 出力
  • 処理
  • 例外処理

機能の概要には、どのような機能をテストするかについての説明が含まれます。入力には、テストに使用するデータや情報が含まれます。出力には、期待される結果が含まれます。処理には、機能がどのように実装されているかについての説明が含まれます。例外処理には、予期しない状況に対する処理が含まれます。

テストケースを作成するには、機能の概要を理解し、入力と出力を考慮し、処理と例外処理を理解する必要があります。これらの情報を使用して、機能のすべての側面をカバーするテストケースを作成できます。


次にWebシステムの機能仕様を準備します。ここではあえて情報を不足して書いています。


Webアプリのログイン機能を実装します。

ログイン時にはメールアドレスとパスワードを入力します。どちらかが間違っていた場合、もしくはどちらも間違っていた場合はログインができません。どちらも正解の場合はログインできます。

メールアドレスの末尾がgmail.comの場合は専用のページに移動します。専用のページではアンケートを実施します。アンケートに断った場合はログインページに戻ります。アンケートをすべて満たした場合はログインできます。

パスワードを10回連続で間違えた場合、そのユーザーアカウントは消去されます。消去されたユーザーアカウントは2度と復元できません。9回連続間違えた時点でその旨をメッセージとしてユーザーに出力します


この仕様書を入力としてNotion AIに「入力と出力と処理と例外処理を追記してください」と問いかけてみました。以下が出力結果です。


機能仕様

ユーザーがアカウントにログインするための機能です。メールアドレスとパスワードを入力し、正しく入力された場合はログインできます。メールアドレスの末尾がgmail.comの場合は、専用のページに移動し、アンケートを実施する必要があります。パスワードを10回連続で間違えた場合は、アカウントが自動的に削除されます。

入力

  • メールアドレス
  • パスワード

処理

  1. 入力されたメールアドレスとパスワードが正しいかどうかを判断する
  2. メールアドレスの末尾がgmail.comかどうかを確認する
  3. Gmail.comの場合、アンケートを実施する必要がある
  4. アンケートを実施し、全ての質問に答えた場合、ログインが可能になる
  5. パスワードを10回間違えた場合、アカウントが削除される

出力

  • ログイン成功
  • ログイン失敗
  • アンケート実施の必要有
  • アカウント削除

例外処理

  • メールアドレスが存在しない場合、ログインできない
  • パスワードが間違っている場合、ログインできない
  • アンケートを実施しなかった場合、ログインできない
  • パスワードを9回間違えた場合、メッセージが表示される

機能仕様書をNotion AIに修正いただきました。項目ごとに纏めれられているのでとても視認性が高いですね。 文章の中から入力と出力を適切に選択しているのでこの時点でとても凄いです。

難点を言うなれば「パスワード9回間違った時」が"処理"ではなく"例外処理"の部分にあるのが気になりますね。 例外処理とも受け取れなくもないですが正常な処理を想定していたので少し認識のズレが生じています、少し正確性に欠けるので今後の進歩に期待です。

ここから最後に仕上げとしてテストケースを作成してもらいます。以下がこの機能仕様からNotion AIが導出したテストケースです。


テストケース テスト内容 入力 出力
1 メールアドレスとパスワードが正しい場合、ログインできることを確認する 正しいメールアドレスとパスワード ログイン成功
2 メールアドレスが存在しない場合、ログインできないことを確認する 存在しないメールアドレスと正しいパスワード ログイン失敗
3 パスワードが間違っている場合、ログインできないことを確認する 正しいメールアドレスと間違ったパスワード ログイン失敗
4 メールアドレスの末尾がgmail.comの場合、専用のページに移動することを確認する gmail.comのメールアドレスと正しいパスワード アンケート実施の必要有
5 アンケートをすべて満たした場合、ログインできることを確認する Gmailアンケートをすべて満たしたメールアドレスと正しいパスワード ログイン成功
6 パスワードを9回連続で間違えた場合、メッセージが表示されることを確認する 正しいメールアドレスと9回間違ったパスワード メッセージ出力
7 パスワードを10回連続で間違えた場合、アカウントが削除されることを確認する 正しいメールアドレスと10回間違ったパスワード アカウント削除の有

テストケースを出力することができました。

自分が事前に作成したテストケースと比較すると

  • アンケートを断った時のケース
  • パスワードを9回連続で間違えた後に10回目でログイン成功するケース

などが不足しているので改善の余地は大いにあります。Notion AIが出力したテストケースを信じすぎるのはよろしくなさそうです。

ただ、これだけのテストケースを作成するためには機能の理解とテスト作成のための知識が必要で人力でやると時間がかかるものを僅か数秒で返してくれるのは流石です。 なので開発でNotion AIを使用するのであれば、テストケース作成の補佐的な役割やレビュワーの1人として活用するのが良さそうです。

終わりに

今回、Notion AIソフトウェア開発のテストケース作成部分を補えるかチャレンジしてみました。 結果としては十分なテストケース作成はできないため未だ実用的でないですが開発のアシストという立ち位置ならば有用であるとわかりました。

Notion AIの使用はあくまでテストケース作成の1つの手段に過ぎず、手動でテストケースを作成することが重要です。 これらを組み合わせることでより網羅的なテストケース作成が実現できる気がしています。

技術の発展は凄まじいもので情報のキャッチを素早く行うことが良い開発につながっています。 私もコミューンQAとして、今後の技術発展をいち早くキャッチアップしながら常に品質を作り込むためには何が最良かを模索し続けたいと考えています。

また、最後になりますが実はこの記事の作成もNotion AIに手伝っていただきました。 主に文章作成、章構成のアイデア出し、曖昧部分修正に尽力を注いでいただいております。これにより普段よりも良い速さでブログを執筆することができました。

少しでもコミューンの開発に興味をもってくださった場合は、まず下記ページからカジュアル面談をお申込いただき、そこで会社の話や興味のある技術の話等ができれば思います。

docs.google.com