ソフトウェア エンジニアリングに AI を導入しますか?知っておくべきことはすべてここにあります
機会とリスクがはびこる旅の中で、開発者はどうすれば AI 固有の予測不可能性を自信を持って乗り越えることができるでしょうか?当社のリソース ガイドでは、次の AI 強化プログラミング プロジェクトを有利にスタートするためのヒントとツールを提供します。
ソフトウェア開発者は確実性を重視して成功します。プログラムに一連の入力を与えると、常に同じ出力が得られます。ソフトウェアの歴史のほとんどにおいて、ソフトウェアは完全に決定論的ロジックに基づいて構築されてきました。何が入るかによって何が出るかが決まります。
それを表す「トップダウン プログラミング」という用語もあります。すべてのアルゴリズムはパスに従い、分岐も予想されるロジックに基づいています。コードをデバッグするときは、同じ道を何度も繰り返し実行し、動作が予想から逸脱している箇所を見つけて、問題を解決して軌道に戻します。
確実性と決定論的なロジックは、多くのソフトウェアで機能します。しかし、現実の世界はそのようには機能しません。対照的に、AI は確率論的です。答えは決して正確ではありません。代わりに、AI はモデルを使用して動作を予測し、その動作を生成します。
おそらくこれを説明するのに最も適切な方法は、従来のソフトウェアが AI に対してどのように更新されるかということです。従来のソフトウェアにはアップデートとパッチが適用されます。 AI は学習し、自ら進化し、手動介入なしでユーザーのフィードバックを理解して吸収します。これにより、従来のソフトウェアはより正確になりますが、AI はより柔軟になります。
ソフトウェア エンジニアリングに AI を導入することで、ソフトウェアの正確さと柔軟性の両方の長所を得ることができます。この記事では、その合併と、それが開発者やエンジニア、そしてその作品のユーザーにとって何を意味するのかを探ります。
AI とソフトウェア エンジニアリングの融合
今日の開発者は、コーディング プロセスの一部として AI を使用する機会を得ています。 AI を活用した新しいツールは、コードの作成、バグの発見、テスト スイートのセットアップ、テスト データとサンプル データの生成に役立ちます。ある意味、AI は開発者の生産性を向上させ、反復的なタスクに費やす時間を削減し、欠陥に焦点を当て、経験の浅い開発者であっても経験があるかのようにコードを作成できるようにするのに役立ちます。
しかし、欠点もあります。AI は信頼性が低いことで有名です。その動作を確認できる必要があります。現在の AI は、たとえ結果が正しくない場合でも、その結果が正しいように見えるように見えるレベルの自信を持って動作します。したがって、取り組んでもらいたいトピックに関するスキル、知識、経験がなければ、それがいつ間違っているかを判断することはできません。
とはいえ、AI はコードの開発、保守、テストのプロセスに非常に役立ちます。すべてが恩恵を受けるわけではありませんが、プロセス中には AI が介入し、必要な作業量を数時間、場合によっては数日間短縮できる可能性があるポイントがあります。
しかし、コードを作成することがすべてではありません。それは生成されたコードにも関係します。 AI とソフトウェア エンジニアリングの融合により、開発者はよりインテリジェントでユーザー中心のアプリケーションを作成できるようになり、 ソフトウェアユーザーのエクスペリエンスは、従来の手作業でコーディングされたアプリケーションよりも柔軟でダイナミックなものになります。
時間の経過とともに、一部のアプリケーションはリアルタイムのユーザー フィードバックに基づいてその場で進化し、一部のソフトウェアはバグや非互換性をユーザーが遭遇する前に事前に解決するようになるでしょう。それが完璧になることは決してありませんが、ソフトウェアをより良くするのに間違いなく役立ちます。
日常的なソフトウェアタスクにおける AI: 本当のメリットは何でしょうか?
それはすべて良いことだと思いませんか?しかし、結論を言えば、ソフトウェア エンジニアリングにおける AI について、開発者がドクター フーを見たり、犬と遊んだり、あるいは -- これは不合理に聞こえるかもしれませんが -- 睡眠のための追加の数時間を与えることができるのはなぜでしょうか?思い当たる5つの分野を見てみましょう。
反復的なタスクの自動化
開発者のスキルを必要とする非常に退屈で平凡なタスクが山ほどありますが、決して楽しいものではありません。 1 つの例は、反復的なコード ブロックの作成を支援することです。
プログラマーは長い間、マクロであるかのようにコード ブロックを埋めるように IDE をセットアップできましたが、AI はコード ブロックのパターンと意図を学習し、プログラマーまたは組織のスタイルを使用してコード ブロックを生成するのに役立ちます。 -それらをプログラミングする。 「以前にそのようなコードを書いているのを見たことがあります。私がそれを構築してみませんか?」と提案することもできます。
これは、開発者がより創造的な作業に集中するのに役立ちますが、開発者が制限的なパターンにコードを当てはめる必要がなく、コード全体に一貫性をもたらすこともできます。
予測分析とソフトウェアの信頼性の向上
ここで、AI はパターンと傾向に基づいてコードの動作を予測できます。 AI ツールを使用すると、システムの過負荷を予測し、ユーザーの行動を予測し、場合によってはユーザー エクスペリエンスを最適化し、改善が必要な領域の予防的なメンテナンスを実行できます。もう 1 つの大きな利点は、実行されるプラットフォームの変更や更新に応じて、最小要件を満たすようにコードを更新できることです。
プログラミング時間を節約するだけでなく、ソフトウェアの信頼性と回復力をほぼ単独で高めることができます。
開発/テストサイクルの高速化
コードは常にテストする必要があります。典型的なサイクルには、少しのコーディング、少しのテスト、少しの修正…すすぎ、洗浄、繰り返しが含まれます。ただし、AI はソフトウェアの動作を予測できる可能性があるため、テストを開始する前にエラーにフラグを立てる可能性があります。
開発環境は長い間、言語構造の知識を必要とする構文エラーや型変換エラーにフラグを立てることができました。しかし、開発環境がロジック エラーにフラグを立て始めることができれば、コードの配信を高速化し、特定のプロジェクトに必要な修正段階の数を減らすのに大いに役立つ可能性があります。
ソフトウェアの保守コストの削減
ほとんどのソフトウェア プロジェクトは、完了後、発見されたバグ、プラットフォームの変更、パフォーマンスの問題に対応するために、ほぼ一定レベルのメンテナンスを必要とします。私は非営利の寄付を促進するソフトウェアを作成しましたが、少なくとも時間の 80% は、ユーザーのリクエストに応答したり、新しい機能を追加したりするのではなく、常に変化する要件に合わせてコードを書き直すことに費やしています。支払いゲートウェイ。この感謝のない退屈なメンテナンスを少しでも減らすことができれば、ユーザーにさらに多くの価値を提供できるでしょう。
人間的な要素を維持する
開発環境に AI が追加されたにもかかわらず、当面はほとんどのソフトウェアがプログラマー (本物の人間のプログラマー) によって作成されることは明らかです。
時間と退屈の量を削減することは、開発者が鋭敏さを保つのに確かに役立ちますが、AI はチーム全体のパフォーマンスを監視することもでき、チーム メンバーが過剰に活用されたり、過度に長時間使用されたり、燃え尽き症候群に陥ったりした場合にマネージャーに通知します。また、各メンバーが自分の強みを発揮できるようにチームの割り当てを再割り当てしたり、計画やリソースの割り当てを支援したりすることもできます。
ソフトウェアエンジニアリングにおけるAIの課題と限界
技術の複雑さの増加と同様に、問題も発生します。このセクションでは、3 つの懸念事項について説明します。
複雑さとメンテナンスの課題の増加
ソフトウェア エンジニアリングにおける AI に関する私の最大の懸念は次のとおりです。AI をより多くのコードに使用するにつれて、AI がすべてどのように機能するかについての理解がますます薄れていくでしょう。他の人からプロジェクトを継承したことがある場合、特にその組織や開発者に相談できない場合は、私の言いたいことがわかるでしょう。
AI によって生成されたものは、あなたやあなたのチームがコードを書いたものよりもはるかにブラック ボックスになり、一度生成されると人間が維持するのがはるかに困難になるというリスクがあります。 AI が独自のソフトウェアを保守することを期待するという罠にはまらないようにしてください。 AI のコードが壊れた場合、何が問題だったのかを特定して修正するのは、あなたとあなたのチームの責任になります。
データの依存関係
AI はモデルを作成するために膨大な量のデータに依存します。公開モデルを使用していない場合、たとえば、会社独自の専門知識に取り組んでいる場合、AI をトレーニングするために利用できるデータの総セットでは十分ではない可能性があります。
さらに、AI システムは広範なデータセットに基づいてトレーニングしますが、そのすべてが、実行しようとしている作業に必要な品質レベルであるとは限りません。
ソフトウェア エンジニアリング プロジェクトに AI を導入することは、才能のある夏期学生を大量に雇用するようなものであることを、私は人々に常に思い出させています。彼らは聡明で素早いかもしれませんが、時々ボールを外すこともあり、彼らが去った後は片付けが大変になります。 AI が去ってしまうことはありませんが、AI では解決できない問題が残ります。
倫理的懸念
「 ソフトウェア エンジニアリングにおける AI は「オッペンハイマーの瞬間」に達していますか?」では、AI がソフトウェア開発者にもたらす倫理的問題について説明しました。プログラマーは倫理的な問題に対処するための訓練を受けていないことに注意してください。実際、私はコンピュータ サイエンスの専攻の隣に倫理と政治哲学の副専攻を履修していましたが、当時、それを副専攻として取得しているコンピュータ サイエンスの専攻は私だけでした。 (完全な開示:私が未成年としてそれを選んだのは、好きな女の子が哲学の授業を受けていたからです。つまり、私の倫理副専攻でさえ完全には倫理的ではありませんでした。)
プログラマーは確かな技術者になるよう訓練を受けていますが、社会への影響はほとんどのコンピューター サイエンスのカリキュラムには含まれていません。独学のプログラマーや開発者は、倫理のトレーニングからさらに遠ざかる可能性があります。したがって、才能のある技術者の軍隊が歴史的な倫理的考察を見て、その最前線に立つことを期待するのは非現実的です。
AI を使用する企業は、技術チームのトレーニングを社会的影響のある問題に拡大するか、開発者がこの人的要因というまったく未知の領域に足を踏み入れる際にアドバイスと指導を支援するコンサルティング専門家を導入することを期待する必要があります。
AI 主導のソフトウェア エンジニアリングのためのツールとプラットフォーム
幸いなことに、開発者や組織は、すべてのツールを独自に構築して AI の旅に乗り出す必要はありません。基礎研究と、ライセンスを取得してプロジェクトに組み込むことができる実用的なツールやライブラリの作成に多額の投資が行われてきました。
このリソース ガイド セクションでは、使用する可能性が高い 5 つのカテゴリのツールに関する簡単な調査を示し、各分野の主要なリーダーを数人指摘します。これにより、次のプロジェクトの具体的な実践的な開始点が得られます。
汎用機械学習フレームワーク
このカテゴリのツールは、機械学習モデルの設計、トレーニング、デプロイのための基本的な構造と機能を提供します。
- Google TensorFlow: 機械学習用に設計されたエンドツーエンドのオープンソース プラットフォームで、ML モデルの構築とデプロイを容易にします。
- Facebook PyTorch: 深層学習モデルの構築に柔軟性を提供する動的計算グラフベースのプラットフォーム。
- Keras: Python で書かれ、TensorFlow、PyTorch などの上で実行できる高レベルのニューラル ネットワーク API。
クラウドベースのAI開発プラットフォーム
これらのプラットフォームは、機械学習モデルを大規模に開発、トレーニング、展開するためのクラウド インフラストラクチャを提供し、多くの場合、他のクラウド サービスと統合されます。
- Google Vertex AI: Google Cloud 上の統合プラットフォームで、さまざまなデータセットにわたる AI および機械学習モデルを構築、デプロイ、スケーリングするための包括的なツールとサービスを提供します。
- Amazon AWS SageMaker: 開発者による機械学習モデルの構築、トレーニング、デプロイを支援するフルマネージド サービス。
- Microsoft Azure Machine Learning: 機械学習ツールを使用してモデルをより迅速にトレーニングおよびデプロイする一連のクラウド サービス。これをサービスとしての機械学習と考えてください。
コードとソフトウェア開発のための AI
このセクションのツールは、提案、オートコンプリート、AI に基づく自動コード分析を提供して、開発者のコーディング プロセスを支援します。
- OpenAI Codex: このツールは、GitHub Copilot などのアプリケーションを強化し、開発者が AI を利用した提案でより迅速にコードを作成できるようにします。
- Github Copilot: AI を活用したコード アシスタントで、開発者が入力するときにコードの行全体またはブロック全体を提案し、コーディング プロセスのスピードアップとベスト プラクティスの確保に役立ちます。
- Snyk Code: 膨大なオープンソース プロジェクトを分析することにより、開発者に自動化されたコード分析、セキュリティ脆弱性の検出、修正の推奨事項を提供します。
これらのサービスに混乱しないでください。 GitHub Copilot は OpenAI Codex を利用しています。 OpenAI Codex は、さまざまなコーディング タスク用の汎用 AI ツールとして機能し、さまざまなプラットフォームに統合できますが、GitHub Copilot は、Visual Studio Code 環境内でのリアルタイムのコード補完と支援に特化したツールです。
Snyk Code は、膨大なオープンソース プロジェクトを分析することにより、コードの自動分析とセキュリティ脆弱性の検出に重点を置いています。
事前トレーニングされたモデルとプラットフォーム
これらのツールは、膨大な量のデータで事前トレーニングされたモデルを提供するため、開発者は最初から開始することなく、特定のタスクに合わせてモデルを微調整できます。
- Hugging Face の Transformers: トランスフォーマー アーキテクチャに重点を置き、主に自然言語処理タスク用の事前トレーニング済みモデルを提供するライブラリです。
- spaCy: Python による高度な自然言語処理のためのオープンソース ソフトウェア ライブラリで、その速度と効率性で知られています。
ニューラルアーキテクチャ検索ツール
最後に、このカテゴリのツールは、特定のデータセットまたはタスクに最適なニューラル ネットワーク アーキテクチャを見つけるプロセスを自動化します。 (注: このカテゴリのツールは、NAS と略されることがよくあります。この NAS は、ネットワーク接続ストレージを指す NAS とは大きく異なります。)
- AutoKeras: 機械学習を自動化し、データセットに適切なモデルを見つけるのに役立つオープンソース ソフトウェア ライブラリ。
- Google の AutoML: 指定されたデータセットに基づいて機械学習モデルの設計と調整を自動化するクラウド ソリューションを提供します。
ソフトウェア エンジニアリングにおける AI 主導のツールとプラットフォームの状況を「広大」と呼ぶのは、非常に控えめな表現でしょう。生成 AI、および AI 一般はテクノロジーの最もホットなトレンドとなっており、勢いが衰える気配はありません。開発要件が増大するにつれて、開発者はプロジェクトを完了するために最も適切なツールを探します。ここで紹介したのは、利用可能なリソースのほんの一部です。
これは非常に流動的な環境であることに留意してください。このリストを作成する際に、かつては(昨年のように)かなり人気のあるリソースだったが、買収されたり、他のプロジェクトに統合されたり、オープンソースとして単に閉鎖されたりしたツールが多数見つかりました。開発者は、より長期的な可能性をもたらす有料ギグに新たな機会を見出しました。
使用するツールを使用してスキルを開発することが重要であるだけではありません。企業やプログラマーは、猛烈なスピードで革新する市場や一連のテクノロジーに適応できるように、絶え間ない変化の理解をスキルセットに組み込む必要もあります。
将来を見据えて: ソフトウェア エンジニアリングにおける AI の未来
人工知能と従来のソフトウェア エンジニアリングの融合は一時的な傾向ではありません。それは無視するにはあまりにも多くの「簡単な価値」を提供しますが、新しい効率を提供すると同時に、 この記事と特集全体で説明した多くの課題も解決します。
将来に目を向けると、いくつかの重要な傾向と予測が明らかになります。
- 機械学習をプロジェクトの中心に据えた AI ファーストの開発
- ユーザーのニーズに基づいてリアルタイムに進化する自己適応ソフトウェア
- 開発者と連携し、コンテキストとチームのダイナミクスを理解する協調型 AI
- 透明性と公平性を重視した倫理的で責任あるAIに焦点を当てる
- 脅威をプロアクティブに検出して対処する AI を活用したサイバーセキュリティ
- 特定のニーズに応え、AI の利点を民主化するカスタム AI モデル
- AI の進化する性質を考慮して、開発者向けの継続的な学習に重点を置く
- 人間の開発者には不透明な、主に AI によって書かれたコードとソリューション
AI がソフトウェア エンジニアリングに与える影響について考えるのは、刺激的でもあり、少し心配でもあります。あらゆる技術の進歩と同様に、課題も発生します。しかし、昨年が何らかの指標となったとすれば、ソフトウェア エンジニアリングへの AI の統合は、ソフトウェアが達成できることの限界を再定義する機会に満ちた旅であるということです。
ソーシャルメディアで私の日々のプロジェクトの最新情報をフォローしてください。 Substack で毎週更新されるニュースレターを購読し、Twitter (@DavidGewirtz)、Facebook (Facebook.com/DavidGewirtz)、Instagram (Instagram.com/DavidGewirtz)、YouTube (YouTube.com/DavidGewirtzTV) をフォローしてください。
