静的解析・単体テストツールと生成AIの連携でなにができるのか?

ChatGPTの登場以来AIの業務利用は拡大しており、様々な分野での活用が試みられています。開発現場でも同様にAIの利用が広がっており、コーディングアシストやテストツールへ適用が進んでいます。もちろん、Parasoft社製のテストツールでも追随をはじめています。
ここではParasoft Jtest, dotTESTの最新バージョンに追加された静的解析、単体テストのOpenAI連携機能をご紹介します。

静的解析のOpenAI連携

静的解析はソースコードレビューの負荷低減や品質向上、セキュリティ対策など様々な目的で利用されています。その一方で、運用にはノウハウが必要です。
その中でもここでは「静的解析の違反を修正したいがどうやって修正すれば良いのかわからない」という課題に対するAIを使った解決方法をご紹介します。

静的解析の違反を修正したいがどうやって修正すれば良いのかわからない

静的解析ツールはコーディングの間違いやバグを検出しますが、どうやって修正するべきか具体的な方法は提示しません。そのため開発者が自身で修正方法を見つける必要があります。もちろん、ヘルプなどを見ると一般的な修正方法はわかりますが、自分たちのソースコードに合わせた修正方法を検討する必要があります。また、開発者のスキルレベルによっては検出された違反がなぜ悪いコーディングなのか理解が難しい場合があります。

そこで、Jtest、dotTESTでは検出した違反の修正方法をOpenAIへ問い合わせることで違反の解説や修正案を提案します。
以下のスクリーンショットはdotTESTがNullReferenceExceptionを検出した例です。上段に違反が検出されたソースコード、下段がdotTESTが検出したNullReferenceExceptionが発生する実行パスです。アプリケーションを実行した時に検出された実行パス通りにプログラムが実行されるとNullReferenceExceptionが発生します。

検出した違反を解説します。
① toStringAgeメソッドがageInputの引数で呼び出されています。
② toStringAgeメソッド内の処理で、もし引数のageが0だった場合にnullが返却されます
③ ifでtoStringAgeメソッドの戻り値を格納した変数strのnullチェックを行っています。しかし、その後にifの外でstrのメソッドを呼び出しいているため、strがnullだった場合にの箇所でNullReferenceExceptionが発生します。

これに対してdotTESTのOpenAI連携機能で検出された違反の修正案を問い合わせた結果です。

この違反は戻り値のnullチェックが正しく行われていない事が原因で発生しています。修正案を見ると、それが正しく修正されているのがわかります。これをコピーし貼り付けることで、NullReferenceExceptionを防止できます。

この例は単純なコーディングミスですが、さらに複雑な違反や特定のメソッドの間違った使用法などなぜいけないのか、どうするべきなのかを実際のコードを使って解説するため、違反を防ぐだけでなく開発者の理解を助け技術力の向上にも繋がります。

単体テストのOpenAI連携

単体テストはソフトウェアの品質を確保するうえで重要なテストです。Javaの場合、通常単体テストはJUnitなどのテストフレームワークを使ってテストコードをコーディングして行います。単体テストのメリットは多くありますが、テストコードをコーディングする必要があり、テストのスキルも求められます。そのため単体テストを導入したいがスキルにばらつきがあり導入できない、工数が掛かり思ったほど効果が出ないなど運用で苦労する事も多いと思います。Jtestでは単体テストアシスタント(UTA)と呼ばれる単体テストを効率的に行うための機能が備わっています。UTAは単体テストのテンプレートやモックの自動生成を行う機能です。詳細は過去の記事をご参照ください。なお、UTAや単体テストのOpenAI連携はJtestのみの機能です。dotTESTにはありません。

実行時解析でユニットテストをもっと効率的に

モックとアサーションを含むJavaユニットテストを自動化する方法

UTAで生成した単体テストケースをOpenAIとの連携により改善する

単体テストを作成するテスト対象は以下のメソッドです。第一引数strの文字列が第二引数matchの文字列で開始しているかをチェックします。matchで始まっている場合はtrueを、違う場合はfalseを返します。まずはこのメソッドに対してJtestのUTAを使ってテストケースのテンプレートを作成します。

テストケースのテンプレートを作成しました。テンプレートの作成はボタン一つで実行できます。

このテストケースを基にOpenAIにテストケースの改善を依頼します。今回は「エッジケースおよびエラーケースの追加」を選んで生成しました。改善タイプはいくつか選択することができます。また、プロンプトの修正や独自のプロンプトを使って単体テストケースの改善を行うことも可能です。

以下の様に、nullや空文字、文字列の長さなど様々なテストケースを提案してくれます。(提示されたコードをEclipse上にコピー&ペーストしたもの)

今回は簡単なメソッドでUTAを使ったテストケーステンプレートからOpenAI連携をご紹介しました。UTAは簡単なテストケーステンプレートだけでなく、Mockの自動生成やSpringのテストフレームワークを使ったテストケースの自動生成など様々な機能を備えています。弊社内で計測したデータではUTAだけでも30%の工数削減が見込めました。
ご興味のある方は以下のリンクをご参照ください。
https://www.techmatrix.co.jp/product/jtest/unittest/index.html

まとめ

Jtest、dotTESTのOpenAI連携機能はいかがだったでしょうか?AIを使ったコード生成による品質向上や工数削減を期待できたのではないでしょうか?しかし、ご存知の通りAIにすべてを頼るわけには行きません。AIのコードは安全や実行が保証されているわけではありません。内容を理解し、十分にテストしたうえで利用する必要があります。そこで、AIが生成したソースコードをさらにJtest、dotTESTで解析することでより安全で品質の高いソースコードにすることができます。

この記事でご紹介したOpenAI連携機能を搭載したdotTESTは2024年3月下旬頃に日本リリース予定です。Jtestは2024年夏頃リリース予定ですが、現在リリースしているUS版を個別にご提供することも可能です。ご興味のある方は下のバナーリンクのホームページからお問い合わせください。なお、OpenAI連携機能にはOpenAIの利用契約は含まれておりません。利用者が個別に契約する必要があります。

Top