そうだ、ChatGPTに単体テストを書いてもらおう(ChatGPT部, 大城)
こんばんは、ChatGPT部(チャットGPT部)の大城です。福岡は7月とは思えない連日とんでもない暑さですが、皆様いかがお過ごしでしょうか。
今日は「ChatGPTにFizzBuzz問題のテストコードを書いてもらう」というお話です。なお、Noteableプラグインを今回使っていますが、今流行りのCode Interpreterでも動くと思います。
ことの発端:ところてんさんにゲーム開発のすごいチーム(龍が如くの方々)について教えてもらう
ゲーム分析ならところてんさん、ということで最近少しご相談する機会があったのですが、龍が如くの開発チームがやばい(褒め言葉)、という話を教えてもらいました。
こちらの記事ですね。
他にもこういうPDFも上がってますね。10年くらい前からずっとやられているのか・・
https://jasst.jp/symposium/jasst16tokyo/pdf/E2.pdf
一つ前の記事よりスクショですが、自動テストはかなりノウハウと開発スピードの効率化に寄与してそうです。また、「リリース日延期のリスク」に対するヘッジとしても働くのは心理的にも良さそうですよね。
本日のモチベーション:ChatGPTでテストを支援できないか?
ということで、流石に一朝一夕ではこの10年以上の方々の真似はできませんが、そこをヒントにChatGPT-4の力を借りて、一部のテスト工程におけるテストの自動化に挑戦してみようと思います。
余談ですが、生成AI、画像系などはある側面で「我々が楽しみにしていたクリエイティブ領域の仕事を奪いつつある」という感覚もありますので、なるべくそうではない部分も手伝ってもらえないかなーというのがもう一つのモチベーションでもあります。(面倒な仕事だけお願いしたい・・)
始める前に:ChatGPTに可能かどうか聞いてみる
テスト工程について、支援可能かをChatGPT-4に聞いてみました。彼自身も色々とアイディアは持ってそうですね。
①いざ実験:バグありのFizzBuzzのコード生成
ひとまず、今回はFizzBuzz問題(3の倍数でFizz、5の倍数でBuzz、3と5の倍数でFizzBuzzと出力)するプログラムに「あえてバグを仕込み」、単体テストを設計してもらいました。
(初回はなぜかバグがなかったので、再度入れてもらいました)
(あえて) バグを1個入れてもらう依頼
バグ入りコードの実行結果
5でBuzz、とならないのがおかしいですね。
②テストケースの設計をしてもらう、正常系、異常系、境界値問題
さて、先ほどのようなバグが混入したデータに対して、ユニットテスト(単体テスト)を設計してもらいます。今回は簡易的に、正常系、異常系、境界値のテストをいくつか作ってもらいました。
(境目のテストである境界値は経験則的にもバグが混入しやすいんですよね・・なんとか以下、と未満、のコーディングの違いとか。)
あー、めっちゃありがたい・・。テストケース作成、地味に面倒なんですよね。実際はこれのバリエーションを増やし、さらに関数の数だけ設計したりします。しかも実際の開発では「一文字でも変えたら影響範囲は再度テストしなおし」となるので、そこまで厳密に運用しようと思うとテストは自動化しないとやってられません。
③ユニットテストを実装してもらう
上記のテスト仕様書に基づき、単体テスト(ユニットテスト)を書いてもらったのがこちら。1回目はなぜかエラーを検出できなかったので、2回目の修正版を載せてあります。
(中略)
単体テストの実行結果はこちら。
4つテストケースがあり、最後のテストが引っかかってそうですね。
( 最初の1つ目の方もfizz_buzz(5)があるので引っかかってもよさそうなものだけども・・まぁ一旦進みます )
④バグをレビューして修正してもらう
今回はあえてバグを仕込んでいますが、まぁとりあえずバグ検出箇所を直してもらいます。
まぁ、Buzzという文字列がないので明らかにバグ、というか動いていませんね。
修正してもらった内容を実行してもらいましょう。
ちゃんと5でBuzzとなっていますね・・!
ただ、これで安心してはいけません。コードを1文字でも直したら、影響範囲は原則すべて再テストです。手動だと地獄ですが、今回は自動テストにしてますので、そこも楽々ですね。
⑤修正後のコードに対し、再度ユニットテストを実行
修正後のコードを実行してもらうとこんな感じです。
実行結果はこちら
先ほどは1件出ていたエラーも解消していますね。これにて完了です!
所感:使い方を編み出す人は必要だが、おそらく徐々に広まるはず
このあたり、普段からテストを描き慣れているプログラマーの皆さんだと「ChatGPTにわざわざ相談しなくても自分で書いたほうが早い」ともなりがちですので、まぁなかなか難しいところでもあります。(そして、テストの自動化を知らない人はそもそもそういうアイディアが出ない)
ただ、便利な使い方については徐々にノウハウやTipsが広まりつつあると思いますので、業務適用の方法についても遅かれ早かれ普及するのでは、と思っています。
テスト、という結構地味な割には責任重大なタスクですが、自動化できる部分はどんどん自動化して、我々は面白い企画や次の一手を考える時間を作りたいですね。
ということで今日はChatGPTにシステム開発におけるテストを手伝ってもらう話でした。みなさんもどうぞ良いChatGPTライフを・・!(大城)
この記事が気に入ったらサポートをしてみませんか?