Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AIは変更差分からユニットテスト_結合テスト_システムテストでテストすべきことが出せるのか?

Avatar for Matsu Matsu
August 18, 2025

 AIは変更差分からユニットテスト_結合テスト_システムテストでテストすべきことが出せるのか?

2025/8/19, AI時代におけるユニットテストの現在地 ( https://findy.connpass.com/event/363174/ )での発表です。
AIは適切なテストレベルで適切なテスト観点が出せるのか。
システムテストだけではなく、テストレベルを通したテストのアプローチの最適化ができるのかどうかという実験の話です。

Avatar for Matsu

Matsu

August 18, 2025
Tweet

More Decks by Matsu

Other Decks in Technology

Transcript

  1. 2 名前 : 松⾕峰⽣(まつ) 仕事 : ハードウェアの⼈    & QAエンジニア 社外活動

    • マンガ家 ◦ ベリサーブ様HQWにて⽉刊マンガ連載 ◦ テスターちゃん (最近はお休み中) • ソフトウェアテストシンポジウム九州の共同実⾏委員⻑ • ソフトウェアテスト技術振興協会の教育事業領域担当 ⾃⼰紹介 出典 : C&R研究所 マンガでわか るソフトウェアテスト入門 テスター ちゃん Vol.2 https://www.veriserve.co.jp/helloqualityworld/media/20250808001/
  2. 6   バグの多くは「忘れもの」 要求 要件 仕様 設計 実装 テスト ・実装漏れ ・実装の間違い

    ・設計の間違い ・影響箇所の把握漏れ ・認識の齟齬 実装通り動くかの確 認だけでいい? ・仕様漏れ ・書き間違え ・仕様の更新忘れ ・要件定義漏れ ・認識の齟齬
  3. 8 テストで⾏うこと3選 確認活動 「決めたものが決めた通り動く」 → ユニットテストが典型例 バグの探索 忘れもの(考慮漏れ、決めていない)や「何かおかしいぞ …?」を探して発見する活動  →コードに直接現れにくい問題 妥当性確認

    「顧客が本当に必要だったもの」ができているか  → A/Bテストやユーザーテスト   現実の問題    確認活動に終始してしまい、バグの探索が不十分になりがち
  4. 10 テストレベル3選 (テスト活動をグループ分けしたもの) ユニットテスト (コンポーネントテスト) メソッド単体などテストできる最小単位での確認  → 主にロジックの確認 インテグレーションテスト (結合テスト/コンポーネント統合テスト) メソッド間のやりとり、コンポーネント間のやり取り

     → 主にインターフェイス(接点の部分)に着目して相互処理の確認 システムテスト システムを通してのテスト  → システム全体にしたときに要件を満たしているか確認   現実の問題    なんでもユニットテスト、なんでもシステムテストでやろうとして非効率になりがち
  5. 13 個⼈開発の横シューティングゲームで実験 実験環境 • エディター : Cursor • AIモデル :

    Claude-4-Sonnet • プロジェクト : Unity ◦ 個人開発の横シューティングゲーム • テスト対象 : 新武器「クラスター爆弾」実装 仕様 • 大きい親弾が重力に従って少し下に落 ちる • そこからゴゴゴーと前に加速しながら前 進 • パカっと外装が外れて、子弾が下にば らまかれる • (細かくはもっとあるが略 ) 実装
  6. 15   “ないもの”を⾒つけられるのか? バグを2つ仕込み、 AIがそれを見つけるテスト観点を出せるのか? ダメージ値をコードにベタ書き → インテグレーションテストで見つけたい 他の武器では必ず呼んでいる SetDamage()の呼び忘れ。これにより ItemDataからダメージ値を取ってこ

    ない。よって後々ItemDataをいじってもダメージが反映されないことになる。 親弾のtagの設定忘れ → システムテストで見つけたい 何のオブジェクトにぶつかったかは tagで判定している。親弾に設定を忘れたため、親弾にぶつかっても ダメージ処理が走らない  コードに現れないものを見つけられるのか?
  7. 18   仕込んだバグを⾒つけられるテスト観点を出せた 仕込んだバグを 2つとも見つけられるテスト観点を出せた ! PASS ダメージ値をコードにベタ書き → インテグレーションテストで出している 「弾丸設定読み込みテスト」のテスト観点を出している。このテストを詳細化

    (AIでも人でも)するとおのずと ItemDataからのダメージ値呼び出しは通る 親弾のtagの設定忘れ → インテグレーションテストで出している 「敵ダメージ適用テスト」のテスト観点を出している。出て当然のテスト観点だが、詳細化すればダメージ が適用されるかされないかはおのずと通る 私が仕込んだ 2つのバグを拾える観点を出せたということは、本当の「忘れもの」も見つけられる 可能性が高い
  8. 19   各テストレベルでテストすべきことを出せていそう 各テストレベルでテストすべきことを出せているが、インテグレーションテ ストが曖昧 (私の指示が曖昧 ) おおよそ OK ユニットテスト 各種パラメーターのテストやロジックのテスト、メモリリークのテストなど、ユニットテストの項目はさすが。

    私が考えるよりも詳細であった インテグレーションテスト 相互作用があるテスト観点は全てここに含まれている。コードで見るべきテストもあれば、音響テストのよ うな実プレイで見たほうが良いテストもある。 システムテスト 通常プレイでの武器の実用性、ボス戦に有効か、パフォーマンステストなど、全体を通して見るべき妥当 な項目が出せている
  9. 22 実⽤的な活⽤⽅法 基本戦略 「AIでテスト観点を出し、人間が観点を追加/取捨選択する」 「AIでどのテストレベルで何のテストをするか出し、テストの最適化をする」 ・初期のテストアプローチ生成   ゼロから考える手間の削減 ・大まかなテスト観点の洗い出し   人間が見落としがちな観点導出 ・テストレベルの分類

      どのテストをどこで行うかの提案 AIの役割 ・プロダクト固有のテスト観点追加   プロダクト特有の仕様など ・ハルシネーションの除去   存在しない機能・観点の除去 ・テストの詳細さの調整   自プロダクトの品質目標に合わせる ・優先度の判断   優先すべきテストの判断 人間の役割
  10. 23 まとめ 結論 各テストレベルに適したテスト観点をかなりよく出せるようになっている。 だが人間がサポートをしないと無駄なテスト・出来ないテストが発生する。 「全部」を求める 0か100かの思考ではなく 「ある程度の手間の削減・補完」として活用しよう 期待できること ・テストすべきことの洗い出しの支援

    ・見落としがちなテスト観点の発見 ・テストアプローチのたたき台作成 ・ある程度の手間の削減 期待できないこと ・完璧なテスト観点の生成 ・プロダクト固有の仕様の把握 ・100%正確な情報 ・ちょうどよい粒度のテスト
  11. 24 おまけ : GPT5で実験 HPが0になったら一定時間点滅して周囲を巻 き込んで爆発する敵キャラ追加 https://github.com/jam0824/AIWritesTestPlan/blob/main/bomberFly_test_plan.md 結論 「実装の確認作業」としてのテストであれば GPT5で行うとよい。

    90FPSという全体設定は変更していないファ イルに記載。よって変更していないファイルも 参照している。 (GPT5というより今のCursorの性能か) ハルシネーションがなく 素晴らしい。 ただし良くも悪くも発想もない。 よって「忘れもの」発見は難しい かもしれな い。