Slide 1

Slide 1 text

生成AIを活用して、openapi ベースで設計したAPI を効率よくテストする手法を考えてみた 2024/06/07 株式会社ワンキャリア 高根沢光輔

Slide 2

Slide 2 text

ONE CAREER Inc . Copyright © ONE CAREER Inc. All Rights Reserved. 自己紹介 Career 趣味 ひとこと 2 高根沢 光輔 ONE CAREER for Engineer 開発チーム テックリード 14年間のエンジニア活動を経て、 ワンキャリアに新卒入社 個人開発サービスの安定運用(k8s)、コスト最適化 (GCP)プログラミング、ゲーム(MMO/FPS) フルスタックにひたすらコード書く人間です。 *12,641 contributions in 2023(p0x0q)

Slide 3

Slide 3 text

Copyright © ONE CAREER Inc. All Rights Reserved. 目次 3 ● 今回のテーマ ● 何故作ろうと思ったのか?目指すゴール ● 全体構成 ● 結果 ● 課題 ● まとめ

Slide 4

Slide 4 text

Copyright © ONE CAREER Inc. All Rights Reserved. 目次 4 ● 今回のテーマ ● 何故作ろうと思ったのか?目指すゴール ● 全体構成 ● 結果 ● 課題 ● まとめ

Slide 5

Slide 5 text

Copyright © ONE CAREER Inc. All Rights Reserved. 生成AIで IntegrationTestを作ろう! 5

Slide 6

Slide 6 text

Copyright © ONE CAREER Inc. All Rights Reserved. 目次 6 ● 今回のテーマ ● 何故作ろうと思ったのか?目指すゴール ● 全体構成 ● 結果 ● 課題 ● まとめ

Slide 7

Slide 7 text

Copyright © ONE CAREER Inc. All Rights Reserved. 何故作ろうと思ったのか?目指すゴール 7 作成の背景 自社プロダクトにて、Integrationレイ ヤーのテストが不足気味(0ではない) ゴール 新規プロダクトとはいえ、 テストカバレッジをより高いものにする

Slide 8

Slide 8 text

Copyright © ONE CAREER Inc. All Rights Reserved. 目次 8 ● 今回のテーマ ● 何故作ろうと思ったのか?目指すゴール ● 全体構成 ● 結果 ● 課題 ● まとめ

Slide 9

Slide 9 text

Copyright © ONE CAREER Inc. All Rights Reserved. 全体構成 9 全体構成 1. 既存コード、テストコードの読み取り (フィルター処理) 2. プロンプトを構成 3. Geminiに問い合わせ 4. レスポンスを整形して_test.goファイ ルを生成 今回はオレンジ部分について解説

Slide 10

Slide 10 text

Copyright © ONE CAREER Inc. All Rights Reserved. 全体構成 10 2. プロンプトを構成 方針:既存コードをベースに追加の    テストケースを追加してもらう ・参照させるコードはトークン制約の都合で、 「openapi-generatorのreq/resモデル」と 「既存Integrationテストコード」のみに限定 ・token数は276k程度なのでgeminiに投げる  (gpt-4o = 128k limit, gemini= 1M limit)

Slide 11

Slide 11 text

Copyright © ONE CAREER Inc. All Rights Reserved. 全体構成 11 方針:既存コードをベースに追加の    テストケースを追加してもらう ・参照させるコードはトークン制約の都合で、 「openapi-generatorのreq/resモデル」と 「既存Integrationテストコード」のみに限定 ・token数は276k程度なのでgeminiに投げる  (gpt-4o = 128k limit, gemini= 1M limit) 2. プロンプトを構成

Slide 12

Slide 12 text

Copyright © ONE CAREER Inc. All Rights Reserved. 全体構成 12 4. レスポンスを整形して_test.go ファイルを生成 ・gpt-4o、geminiともにJSONレスポンス に対応している。 ・geminiの場合は「Using this JSON schema: xxx Return a …」を使えばJSON 形式が内部的に強制されるよう。 ref: https://ai.google.dev/gemini-api/docs/ api-overview?hl=ja#json

Slide 13

Slide 13 text

Copyright © ONE CAREER Inc. All Rights Reserved. 目次 13 ● 今回のテーマ ● 何故作ろうと思ったのか?目指すゴール ● 全体構成 ● 結果 ● 課題 ● まとめ

Slide 14

Slide 14 text

Copyright © ONE CAREER Inc. All Rights Reserved. 結果 14 簡単なテストなら、ほぼ動くコードが自動生成できた。

Slide 15

Slide 15 text

Copyright © ONE CAREER Inc. All Rights Reserved. 結果 15 簡単なテストなら、ほぼ動くコードが自動生成できた。

Slide 16

Slide 16 text

Copyright © ONE CAREER Inc. All Rights Reserved. 目次 16 ● 今回のテーマ ● 何故作ろうと思ったのか?目指すゴール ● 全体構成 ● 結果 ● 課題 ● まとめ

Slide 17

Slide 17 text

Copyright © ONE CAREER Inc. All Rights Reserved. 課題は3つ 17

Slide 18

Slide 18 text

Copyright © ONE CAREER Inc. All Rights Reserved. 課題①:型エラー 18 期待している型に沿わない形で生成されてしまうことがある。 自動生成:int値、修正後:int32のポインタ型(左:自動生成、右:手動で修正後)

Slide 19

Slide 19 text

Copyright © ONE CAREER Inc. All Rights Reserved. 課題②:生成量 19 長いコードは生成できなさそう 今回は生成できたとしても200〜300行程度(内部では2,500 tokensほど) geminiはoutput tokensが8,192 tokensなので、途中で止まってしまう

Slide 20

Slide 20 text

Copyright © ONE CAREER Inc. All Rights Reserved. 課題③:最適化 20 全てのコードを含めようとすると、2.5M tokensほどになるので省いてい る。無駄が多い&品質が落ちてしまっている※1 今後の展望:Reranking API を使って関連のあるファイルのみフィルター してみる ※1 実際に関連するファイルに絞ったら精度が良くなった(少なくとも型エラーは起きなくなった)

Slide 21

Slide 21 text

Copyright © ONE CAREER Inc. All Rights Reserved. 課題③:最適化 21 企業検索API拡張にRerankingを適用した場合にはどうなる? ➜既存の企業テストコードをプロンプトの一番最初に含めることができるように

Slide 22

Slide 22 text

Copyright © ONE CAREER Inc. All Rights Reserved. 目次 22 ● 今回のテーマ ● 何故作ろうと思ったのか?目指すゴール ● 全体構成 ● 結果 ● 課題 ● まとめ

Slide 23

Slide 23 text

Copyright © ONE CAREER Inc. All Rights Reserved. 生成AIを使ってインテグレーションテストは書ける! 課題はあるけどポテンシャルも高い! 23

Slide 24

Slide 24 text

Copyright © ONE CAREER Inc. All Rights Reserved. ご清聴ありがとうございました! 24