プログラミングと開発における AI の 7 つのユースケース (& AI が失敗するケース 4)

公開: 2023-09-13

プログラミングと開発における AI の使用例

オークリッジ国立研究所の 4 人の研究者は、2040 年になっても人類はまだコードを書いているのかどうかを考察する論文を半年前に発表しました。この疑問は今、ほとんどの普通のプログラマーの頭の中にあります。 質問に対する答えが何を意味するかについては、不安と期待があります。

研究者らは質問に対して否定的な答えを出した。コードの大部分は機械が生成するが、人間が関与するとしても、主に機械生成コードの改良に限定されるだろう。

AIの分野での急速な進歩により、予測がより早く実現するようになりました。 現在、単なる説明やスケッチから機能コードを生成できるさまざまな AI システムが存在します。 これには、期待と同時に落とし穴も伴います。 AI は、単純で単調なタスクを引き受けることで生産性を向上させ、人間の潜在能力と創造性を解き放ち、新しい機会を切り開くことができます。 ただし、人間の監視がなくなることで偏見が永続し、責任が軽減され、致命的なエラーが発生するリスクが高まる可能性もあります。

そこで、ここではプログラミングとソフトウェア開発における AI の 7 つのユースケースを検討し、AI が失敗するケースも評価します。

プログラミングにおける AI の一般的な使用例

AI は、実際、特にプログラミングやソフトウェア開発を含む、仕事のあらゆる側面に影響を与えています。 ある調査によると、組織の 31% がコードの記述に AI を使用しています。 現在問われているのは、AI がソフトウェア開発に影響を与えるかどうかではなく、どのように、どの程度影響するかということです。

プログラミングは、AI が生産性と効率の向上に大きく貢献している分野の 1 つです。 仕事の未来に関する LinkedIn のレポートでは、ソフトウェア開発タスクの 96% が AI によって強化される可能性があると予測されています。 AI を利用したツールは、基本的なタスクからある程度複雑なタスクまで、さまざまなタスクにわたって使用されています。

  1. コードスニペットを生成する

GitHub や StackOverflow などの公的に利用可能なリポジトリからの数百万行のコードでトレーニングされた AI ツールは、人間が同じコードを記述するのにかかる時間の数分の 1 でコードのスニペットを生成できます。 彼らは複数の言語に堪能であり、自然言語からコードを生成できます。

これは初心者だけでなく、AI に必要な単純なコードを書かせることができる熟練のプログラマーにとっても役立ちます。 その後、それを微調整または改良して、プログラムに実装できます。

AI はコード テンプレートの生成に特に優れています。 GitHub Copilot などの AI ツールに一連のパラメーターを提供すると、AI がコード テンプレートを生成します。 これは、定型文や繰り返しのコード行を作成する場合に役立ちます。 AI は、テキストのオートコンプリートと同様に、次に続く可能性が最も高いものを提案することでコード補完を支援することもできます。 不完全なコードを AI コーディング アシスタントに貼り付けて、コードを完成させることもできます。

AIが生成したコード

  1. デバッグコード

バグはすべてのプログラマーにとって悩みの種です。 これらは時間を浪費する可能性がありますが (たとえば、コードが実行されない理由を理解するのに何時間も費やしてから、セミコロンの欠落が原因であることが判明するなど)、重大なセキュリティ リスクをもたらし、ユーザー エクスペリエンスを損なうこともあります。 AI はこれらの一部を軽減できます。 それだけではありません。AI はバグをより正確かつ迅速に特定できます。

AI はコードを分析し、一般的にエラーにつながる不一致やパターンを特定することでバグを検出できます。 バグを引き起こすことが多いコード構造を認識し、潜在的な問題について開発者に警告します。 AI は回帰テストにも役立ち、新しい変更によってコードベースにバグが生じないようにすることもできます。

ただし、デバッグをすべて AI に任せられるわけではありません。 これが意味するのは、人間がデバッグという単調で単調なタスクの一部を AI に委任できるようになり、回避可能な作業に多くの時間を節約し、より生産性の高いタスクに多くの時間を費やすことができるようになるということです。

  1. コードを翻訳する

あるプラットフォームまたは環境から別のプラットフォームまたは環境に移行したい、または新しいコンテキストでコードの既存のロジックと機能を再利用したいとします。 どちらの場合でも、コードを最初から書き直すことなく、AI を使用してコードを翻訳できます。

ただし、コードを翻訳する AI ツールは完全に信頼できるわけではありません。 言語のニュアンスに気づかなかったり、コードのロジックを理解できなかったりする場合があります。 しかし人間も同様です。 翻訳が完全に正確ではない場合でも、ソース コードを最初から手動で翻訳するよりも作業がはるかに簡単になります。 それは人間の翻訳者と協力するようなものでもあります。 翻訳されたコードはレビューされ、エラーがある場合は修正されます。

  1. 自然言語でコードを説明する

AI は平易な英語 (さらに言えば任意の言語) でコードを説明できます。 これは、新しい言語を学習している場合や、何をするのかわからないランダムなコード行に遭遇した場合に役立ちます。

同様に、AI は正規表現を解読し、その動作を自然言語で説明できます。

コードの不明瞭な行を説明できるだけでなく、コードの説明にも役立ちます。 AI は、コードの目的、機能、使用法を正確に説明する包括的なコード ドキュメントを作成できます。 AI は、コード提出のレビューと文書化にも役立ち、プル リクエストやコミットで行われた変更の説明を生成することもできます。

  1. テストケースの生成

プログラムが意図したとおりに動作することを確認するには、コードを徹底的にテストすることが重要です。 しかし、テスト ケースの作成とコードのテストは退屈で時間のかかるプロセスであるため、見落とされがちです。 ありがたいことに、AI がこのタスクを支援できます。

AI を使用すると、コードベースを分析し、テストの潜在的なシナリオを特定することで、テスト ケースを作成できます。 コード内のさまざまなパス、分岐、条件を識別し、それらのシナリオをカバーするテスト ケースを作成できます。

Tabnine などの AI アシスタントは、単体テストを自動的に生成し、人間の介入を最小限に抑えてテスト自体を実行できます。 次に、失敗したテスト ケースにフラグを付けて報告し、テストの概要を提供します。 検査効率の向上と人的負担の軽減に貢献します。

[出典-https://www.tabnine.com/blog/wp-content/uploads/2023/02/unittestgen.gif]

  1. コードのリファクタリング

コードのリファクタリングも、AI が支援できる時間のかかる単調なタスクです。 AI により、デバッグとリファクタリングにかかる​​時間を約半分に短縮できます。

AI は、変数やメソッドの名前変更、コードの関数への抽出、コード構造の再編成、コードの複雑さの軽減と拡張性の強化などのリファクタリング タスクを自動化できます。

コードのリファクタリングに AI を使用すると、時間と労力が削減されるだけでなく、コードの匂いを特定し、開発プロセスの早い段階で潜在的な問題を修正するのにも役立ちます。 これにより、バグや技術的負債のリスクが軽減されます。

  1. 合成データの生成

合成データは、実際のデータが利用できない場合、または機密情報が含まれているために使用できない場合に役立ちます。 合成データには個人情報が含まれていないため、規制データまたは機密データの使用に伴う制約が排除されます。

AI を使用すると、現実世界の例によく似たあらゆる種類の合成データを生成できます。 AI は、実際のデータでは再現が難しい、まれなシナリオや極端なシナリオ用の合成データを作成することもできます。 これは、異常な条件下でのソフトウェアの回復力をテストするために使用できます。

AI は、実際のデータセットを強化し、クラス分布のバランスをとり、バリエーションを導入するために使用できる合成データの生成にも役立ちます。

ただし、AIは魔法の薬ではありません

AI は、特にここ数年でコーディング能力において目覚ましい進歩を遂げました。 AI アシスタントは、日常的な単純作業の自動化には熟達していますが、批判的思考が必要な作業ではつまずきます。 彼らはソフトウェアの基礎となる原理や概念を理解できません。 新しいフレームワークやパラダイムについていくのが苦手です。 そして現実のシナリオを完全に把握することができません。

ここでは、AI アシスタントが信頼できない 4 つのケースと、それによってプロジェクトにアプリ開発者を雇う必要がある理由を説明します。

  • 複雑なソフトウェア システムの設計

AI システムには、複雑なプロセスの設計と実装に必要な理解レベルが不足しています。 十分に複雑な関数を単独で作成することはできますが、それらを統合して他のコードからの依存関係を考慮する必要がある場合には、たどたどしくなります。

  • 直感的なユーザーニーズの理解

ユーザーのニーズや好みを理解し、概念化するには、人間の行動や感情に対する共感、コンテキスト、認識が必要ですが、これは AI ツールにはない資質です。 AI システムは、感情的な背景、主観性、直感的なユーザー ニーズの微妙な側面を理解する際にこの限界があるため、人間の専門家と比較して AI システムの能力が低くなります。

  • レガシーコードベースの処理

AI ツールは、古くて時代遅れになることが多いレガシー コードベースに完全に対処するのに苦労しています。 このようなコードベースには通常、十分なテスト カバレッジとドキュメントが不足しており、AI ツールの有効性が妨げられます。

  • 新しいフレームワークとパラダイムを扱う

データは AI モデルの基礎です。 比較的新しいフレームワークやパラダイムでは、AI システムをトレーニングするために十分なデータが利用できません。 これにより、それらは信頼性が低くなり、さらには危険になります。 なぜなら、彼らは無知を認める代わりに、高い自信を持って間違った答えをするからです。 この幻覚傾向は、最も用心深い人でも簡単に誤解を招く可能性があります。

関連記事:日付入力プロセスを強化するために AI と ML を使用する理由

最終的なポイント

AI はここ数年でプログラミングとソフトウェア開発の分野で大きな進歩を遂げました。 AI システムにより、プログラミングがより効率的かつ合理化されました。 これらはソフトウェア開発の他のさまざまな側面にも影響を与えています。 しかし、それらは単なるツールであることに変わりはありません。 AI には、その操作を指示および監督し、その結果の品質を判断する人間が必要です。

彼らが得意とするタスクであっても、人間の監督が必要です。 また、他の人にとっては、単に失敗してしまうこともあります。 ソフトウェア開発には依然として人間の意見と専門知識が不可欠であり、これが Web アプリ開発会社が引き続き重要な役割を果たしている理由です。