Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

GitHub Copilotと快適なユニットテストコード作成生活

bun
May 23, 2024

GitHub Copilotと快適なユニットテストコード作成生活

こちらで登壇させていただいた資料です。

https://trident-qa.connpass.com/event/314818/

※ こちらは2024/05/23 時点の私の考えとなります。更新の予定はございませんのでご了承ください

bun

May 23, 2024
Tweet

More Decks by bun

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 名前: bun (今泉⼤樹) 所属: クラスメソッド株式会社 経歴 ~ 2018年 地⽅公務員

    ~ 2022年 開発系のエンジニア(アドテク) ~ 現在: AWSを基盤としてお客様の開発内製 化⽀援など 認定試験 AWS認定試験12種 JSTQB(ソフトウェアテスト技術者の試 験) Foundation Level Advanced Level Test Manager / Test Analyst / Technical Test Analyst 最近多⽤しているAIに渡すプロンプト 「この資料で発表した後も堂々と⽣きてい けるかな?」 Japan AWS Top Engineer(Service)
  2. 公式ブログによる「コメント」のTIPS 公式ブログでは、「ファイルのトップレベルにコメントを書くことで GitHub Copilot が今から作ろう としていることの全体感を理解しやすい」といったことが書かれています fetchData のような関数命名ではなく fetchAirPorts というような意味のある命名にすること

    ファイルのトップレベルだけではなく、適宜「単⼀、具体的、短い」コメントがよりよいと記載されて います その他、 import ⽂を先に書いておくなどのTIPSも書いてありますので是⾮ご覧ください Using GitHub Copilot in your IDE: Tips, tricks, and best practices より引⽤
  3. この関数のテスト設計をするときに考えそうなこと 当然ながら 0.0 ~ 100.1 の値をすべてテストするようなことはあまり現実的ではないですよね 参考: JSTQB ソフトウェアテストの7原則 「全数テストは不可能」

    であれば、「同じふるまいになる」値に関しては何度も同じテストをしたくない 同値分割法 / 同値クラス と呼ばれるテスト技法 得てして「同値クラス」の境界となるあたりによくバグが潜む 境界値分析 と呼ばれるテスト技法 → じゃあこんな値をテストケースに盛り込んでいきたいな! 0.0 はエラー、0.1 は 単価400円 ‧‧‧ 、100.0は単価350円、100.1 はエラー ⾮常に重要な技法となりますが、今回は詳細を割愛します
  4. ここまでのまとめ GitHub Copilot Chat で開いているファイルの説明、ドキュメント作成、ユニットテスト作成などを依 頼できる Chat UI で ワークスペース全体の情報を加味した質問への回答をもらうことも可能

    VSCode⾃体の質問などもできる 「既存コードが何をやっているかわからないからテストを書けない」とか「ビジネス的に重要な部分 からテストを書いていきたい」というときに全体像を把握するのにも使えると思います
  5. なぜ GitHub Copilotにユニットテストを まるっと投げることができないのか? 公式で書かれている ⾝も蓋もないですが However, it is important

    to note that generated test cases may not cover all possible scenarios, and manual testing and code review are still necessary to ensure the quality of the code. About GitHub Copilot Chat in your IDE - GitHub Docs より ⽣成されるコードの精度 既存のコードを参考に⽣成 されるテストが本当に有⽤ なテストになっているの か? 正常系っぽいテスト 明らかな異常ケースだけ 通っているだけとか あまり学習されにくい領域 のコードの提案は苦⼿なの では? コンテキストに含まれて いない重要な情報 ユーザーストーリーや受け ⼊れ基準、その他デザイン ドキュメントなど 機能を実装する背景は? ユースケースは? 「期待する(あってはなら ない)振る舞い」を与えた りとか
  6. GitHub Copilot はユニットテストを楽に するのか? 楽になると思います(なりました) 同じようなテストコードを何回も書かずに、⼟台を書いてもらえる。時短がすごくできてます。 既存システムにテストコードもドキュメントもない場合に全体像を把握したり Web API のテストなどは「既存のテストコード」「テスト対象のコード」「振る舞いに対する指⽰」

    を与えれば良い感じに提案してくれます(体感) テストのタイトル「user_idがない場合はレコード作成失敗し、HTTP Status Code を返却す る」と書くと結構良い感じにテストや前処理を書いてくれたり ⼀⽅で、「限られた時間で」「複雑なコードに⽴ち向かう」ための知識は未だに必要だと思います 有⽤なテストを書く技術 テストも書きやすい設計技術 → 全部丸っとお任せではなくコパイロットしてもらいながらテストコードを書くと良いと思います。 Copilot Chat なども使いながら、重要なドメインのテストから書き始めるのも良いと思います ちなみに、今後はプランによっても結構差が出るかもしれない
  7. 全体のまとめ GitHub Copilot に対してコンテキストを提供する⽅法について タブを開く コメントで指⽰を出す など GitHub Copilot Chat

    で対話ベースで細かい作業を依頼することが可能 コードの説明、「この処理はどこにあるか」といった問い合わせ、テストコードの⽣成 (個⼈的に)ユニットテストを GitHub Copilot などのAIに丸投げは難しい(今はそう思います) 要件や要求を理解したうえで、少ない時間で有⽤なテストを書けるように学習は必要 理解したうえでツールの使い⽅を覚えて、効率的にテストコード作成を依頼、提案されたコードの 評価をできるようになりたい