「AIで生成されたコードはさらにテストが必要ですか?」

「AIで生成されたコードはさらなるテストが必要ですか?」

AIパワードツール、例えばGitHub Copilotのようなコード作成ツールが、ソフトウェア開発でますます人気を集めています。これらのツールは生産性を向上させることを約束していますが、同時に非プログラマーでもアプリケーションを作成できるようにすることでプログラミングを民主化すると主張する人もいます。

しかし、AIツールによって書かれたコードが目的に適しているかどうかを実際に知るにはどうすればいいのでしょうか?

以下では、「目的に適している」という言葉が実際に何を意味するのか、そしてそれを評価するために使用できるツールについて学ぶことになります。 AIツールはコードの機能的な正確性やセキュリティに関しては何も保証できないことを見ていくでしょう。しかし、このような問いに答えるのをサポートするAIツールも実際に存在することも確認していきます。

一歩戻る

この質問は実は非常に馴染み深いものであるため、少し歴史を遡ってみる価値があります。人間が書いたコードが目的に適しているかどうかを知る方法について、私たちは常に頭を悩ませてきました。ソフトウェアエンジニアリングにおけるこの基本的な問題の解決策を見つけるため、何十年もの間人々は頭を悩ませてきました。

プログラム可能なコンピューターシステムの初期から、エンジニアたちは意図した通りにプログラムが機能しないといった困惑を経験しました。当時、プログラムを正しくするための試行錯誤のサイクルは非常に高額でした。低レベルのコードは手作業で作成し、カードに打ち込む必要がありました。無駄なサイクルを避けるための主な対策はコードレビューでした。コードレビューとは、専門家がコードを読み、どのように動作しているのかを理解し、間違いを見つけて改良の提案をすることです。これは今日でも広く実践されている成功した技術です。しかし、レビューの効果と徹底した実施にかかる労力は、プログラムの規模と複雑さが増えるにつれて劇的に低下していきます。

やがて、プログラムが本当に想定どおりに機能しているかどうかをより厳密に判断する方法が見つかるようになりました。課題は、プログラムが本当に何をやるべきであるかをどう表現するかです。ユーザーが実際に望む動作をマシンに伝える必要があります。これは依然として完全に解決されていない非常に難しい問題です。

この問題は、すべての学問分野に共通のものであり、次のような2つのステップに分割されます。

  1. 正しい製品を作り上げたかどうか
  2. 正しく製品を作り上げたかどうか

検証と検証

正しい製品を作り上げたかどうかを評価することは検証として知られています。最終的にはユーザーが製品が意図した目的を果たしているかどうかを検証します。検証は製品の構築者とユーザーや顧客の間のコミュニケーション手段として機能する要件仕様に基づいて始まります。仕様はユーザー(ドメインエキスパート)とエンジニア(ドメインエキスパートでない場合もある)の両方に理解されることが期待されます。検証は製品の実装が要件仕様に準拠しているかどうかを評価することです。検証は明らかにより困難な問題です。何が「正しい」製品かは非常に主観的で自動化することが困難です。

良いニュースは、検証の部分は完全に自動化できることです。原則としては、計算上および複雑性の理論的な制約まで。実装が要件仕様を満たすことが数学的に証明できます。この学問は形式手法または形式検証として知られ、仕様を書くための論理ベースの形式と証明を行うための自動推論に基づいています。

これは素晴らしい取り組みですが、問題の中心は再び、誰が仕様を書くかという点です。専門的な知識を持つ人物であり、形式的な仕様を書くエキスパートである人物が必要ですが、このような人物を見つけることは困難であり非常に高価です。また、実装を検証できたとしても、問題の検証部分、つまり仕様が実際にユーザーの視点から正しい製品を記述しているかどうかについては考える必要があります。

実際、仕様は実装よりも「間違っている」ということが一般的に指摘されています。形式的な仕様を正確に行うことは非常に困難です。大規模なシステムに対して自動推論を拡張するという巨大な課題が残されています。実践的には、形式的な検証は組み込み制御、暗号化、オペレーティングシステムカーネル、スマートコントラクトなどの比較的小さく、複雑で重要な(安全性、セキュリティ、金融)ソフトウェアに対して適用されています。

別の視点

1970年代には、Nバージョンプログラミングと呼ばれる別のアングルから問題に取り組むという考えがありました。基本的なアイデアは、プログラムやその仕様を正確にするのが非常に困難であるため、複数の独立したチームがシステムを実装し、その結果に対して投票するというものです。基本的な仮定は、異なるチームは異なるミスをする可能性があり、また要件仕様の解釈も異なる可能性があるということです。そのため、全体としては、単一の実装に比べて「より正確」であり、検証および検証の観点からも検証が行われると予想されます。しかし、後の研究でそれは誤った仮定であることがわかりました。独立したチームでも同じミスをすることが示されています。

このアプローチの遺産は、検証が2つのバージョンのプログラミングと見なされることです:要件仕様と実装は同じコインの2つの側面です。異なる形式と視点を使用して、同じシステムを異なる方法で記述します。また、それらはしばしば異なる人々やチームによって書かれます。仕様は実装よりも「正確」という意味ではありませんし、その逆もまた同様です。このような考え方は、実践で達成できることを現実的な視点に導くことができます。

では、なぜ仕様と実装の両方を持つ必要があるのでしょうか?メリットは2つのバージョンのプログラミングから得られます:同じシステムの2つの記述を比較することで、互いに同意する部分で自信を持つことができ、互いに矛盾する部分でバグを見つけることができます。そして最終的に、「より正確な」記述に到達することができます。

テストは検証技術です

さて、一部の読者は言いかけるかもしれません:仕様がないので、それはできません。これは私たちに何を関係させるのでしょうか?堅固な要件仕様は持たないかもしれませんが、ソフトウェアのテストは実際に行うかもしれません。確かに、まだテストについては話していませんでした。では、テストとは実際には何をしているのでしょうか?

テストは検証技術です。テストは実装をチェックし、テスト内のアサーションは – おそらく推測している通り – 仕様です。実装にバグがあるのではなく、テストにバグがあることはよくあることです。これは、テストがただの2つのバージョンプログラミングであるためです。したがって、高レベルの要件に対するエンドツーエンドのテストと低レベルの要件に対する徹底的なユニットテストを持つ良いテスト手法は、正しい製品を提供する自信を高めることになります。また、モデルベースのエンジニアリングはどうでしょうか?はい、同様の特性を持つ2つのバージョンプログラミングです。

では、AIによって書かれたコードはより多くテストする必要があるのでしょうか?

AIツールによって作成されたアプリケーションが実際に目的に適しているかどうかを評価することは、人間によって作成されたコードを評価するのと同じくらい困難です – 唯一の違いは、AIツールによってレビューが必要であるという点です。検証の問題に答えるのが難しい部分は、この評価を行う人物がアプリケーションドメインの専門家である必要があるということです。

自動的にテストを書くためのツールは、このプロセスをサポートします。作成されるテストはコードの振る舞いの入出力ビューを提供します。例えば、私はDiffblue Coverという自動テスト生成ソリューションの共同著者です。このツールは推測を行わず、コードが実際に何をしているのかを率直に伝えてくれるため、検証や検証の問題の評価をサポートします。テストは、ヒューマンやマシンによって書かれたかにかかわらず、コードの変更に対する回帰テストのベースラインとして役立ちます。

非プログラマーであっても、アプリケーションドメインの専門家である人々は、プログラミングアプリケーションのためのAIツールからの恩恵を受ける可能性が非常に高いです。ただし、GitHub Copilotのようなツールによって生成された実装は、構築時に正確性やセキュリティの特性を備えているわけではありません。実際のコードが「正確」なコードでトレーニングされているとはいえ、トレーニングやモデルの評価によってこれらの特性が保持されるわけではありません。

AIによるAIの救援

AIによるツールは、何かを行うアプリケーションを簡単にプログラムすることができます。ただし、アプリケーションコードは人間によって書かれたコードと同じ問題に悩まされる可能性があります。したがって、人間によって書かれたコードに使用されると同じ厳しさでテストとQAを行う必要があります。これらのプロセスへの信頼性を向上させるために、テストを自動的に作成するAIツールを使用することができます。このツールは、作成されるテストがコードの実際の振る舞いを記述していることを保証することができます。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

コンピュータサイエンス

「音声のデコード」

脳-コンピュータインターフェースを介して思考を音声や行動に変換するための作業を行っています

AI研究

天候の変化:AI、高速計算がより速く、効率的な予測を提供することを約束します

2050年までに、極端な天候や気候の頻度と厳しさが増すことにより、ミュンヘン再保険会社によれば、年間100万人の命が失われ、...

AI研究

アップルとEquall AIによる新しいAI研究が、トランスフォーマーアーキテクチャの冗長性を明らかにします:フィードフォワードネットワークの最適化が効率と精度を向上させる方法

最近人気を集めているTransformerデザインは、特に機械翻訳(MT)において、自然言語処理(NLP)の標準手法として広く採用さ...

AIニュース

パーソナライズされたA.I.エージェントがここにあります世界は彼らに対して準備ができていますか?

「自律型AIアシスタントの時代は、大きな影響をもたらす可能性があります」

機械学習

このGoogleとUC BerkeleyのAI論文は、NeRFillerを紹介します:2Dインペインティング拡散モデルを使用して3Dシーン再構築を革新する人工知能アプローチ

3Dキャプチャの欠けた部分を効果的に補完する方法はありますか?Google ResearchとUC Berkeleyの研究論文では、「NeRFiller」...

データサイエンス

ジェネラティブAIを通じた感情分析のマスタリング

イントロダクション センチメント分析は、企業が顧客のフィードバックを理解し対応する方法を革新しました。顧客のセンチメン...