ユニット 1 / 12

コンピュータエンジニアリングにおける人工知能と検証分野の紹介

利益:

  • ソフトウェア開発ライフサイクルにおいて AI が実際のスピードを提供する部分と、決定と責任がエンジニアにある部分を区別する能力
  • コンパイル、テスト、レビューを通じて作成されたすべてのコードと設計を検証する 3 層のエンジニアリング規律を適用する能力。
  • 機密のソース コード、認証情報、顧客データを共有せずに、コンテキストを明確にして AI を活用する習慣を身につけましょう

コンピューター エンジニアの 1 日の状況を見ると、ほとんどのチームで同様のことがわかります。ビジネス リクエストの理解、設計、コードの作成、他の人のコードの読み取り、デバッグ (プログラムが正しく動作しない理由を見つけて修正するプロセス)、テストの作成、ドキュメントの準備、コードのレビュー、会議への出席です。言い換えれば、解決策が正しく、安全で持続可能であるかどうかという、本当の「工学的判断」に費やされる時間は、繰り返しの作業によって潰されてしまうのです。ここで、人工知能 (略して AI、大規模な言語モデルを使用してテキストとコードを処理するソフトウェア) が登場します。 AI があなたの代わりに決定を下すわけではありません。これにより、意思決定の準備が整い、コードのスケルトンが生成され、バグが絞り込まれ、完成したドラフトが目の前に提示されます。このモジュール全体を通じて、AI を「自動プログラマー」としてではなく、出力が毎回コンパイル、テスト、レビューされる規律あるペア プログラミング パートナーとして位置づけます。

この最初の単元では、次の 3 つのことを明らかにします。ソフトウェア開発ライフサイクル (ソフトウェアがアイデアから実稼働までに通過する段階: 分析、設計、コーディング、テスト、展開、メンテナンス) のどの段階で、AI は真の価値を付加しますか。どの決定は厳密にエンジニアに委ねられるべきか。また、これを行う際に遵守しなければならない検証と機密保持の規律は何ですか。この屋根が正しく取り付けられていないと、後続のユニットでのテクニックが危険になる可能性があります。ソフトウェアのエラーが同時に何百万人ものユーザーに影響し、セキュリティ上の脆弱性になる可能性があるためです。

概念: 幻覚: 実際には存在しないメソッド、ライブラリ、API、または動作を AI が説得力を持って捏造すること。コンテキスト: AI に与える入力 (コード、エラー メッセージ、要件、制約)。検証: 独立した方法で出力をチェックします (コンパイル、テスト、文書化)。これら 3 つの概念は、モジュール全体のバックボーンです。

AI Accelerator はどのビジネスに適しており、どのビジネスにリスクがありますか?

ソフトウェアの仕事は、成果に関して 2 つの側面に分かれます。一方の端には、可逆的で低リスクの準備作業があります。その一方で、実稼働環境に入る、返却が困難なタスクがあり、データの損失、セキュリティの脆弱性、または中断を引き起こす可能性があります。 AI の価値は、このスペクトルのどの位置にあるかによって異なります。

業種

AIの貢献

エンジニアの役割

コードのスケルトン/ボイラープレート

繰り返し構造の迅速な生成

ロジックおよびエッジステータス制御

デバッグ

仮説と考えられる原因のリスト

再現性と根本原因の確認

テストを書く

テストドラフトとシナリオ作成

意味のあるアサートとスコープのチェック

リファクタリング

リファクタリング提案

テストによる行動の維持

ドキュメント

初稿と構成

コードに対する正当性チェック

アーキテクチャ/セキュリティの決定

オプションと長所と短所のリスト

最終的な決断と責任

ルールは簡単です。AI 出力のリスクは、その出力がエラーを起こした場合に被る損害と同じです。変数名を誤って提案しても害はありません。不適切な認証 (ユーザーが本当に本人であることの確認) により、システム全体が脆弱になります。したがって、出力を使用する前に尋ねるべき最初の質問は、「これが間違っていた場合はどうなりますか? 誰がいつそれに気づきますか?」ということです。

注意: AI は流暢で自信に満ちたコードを生成します。流暢さは正確さを保証するものではありません。言語モデルは、実際には存在しない関数名、不正なパラメーター シーケンス、さらには安全でないパターンを確実に生成する可能性があります。ソフトウェアでは、これは紙の上に残りません。実稼働環境でコンパイル、実行、展開されます。

エンジニアに任せるべき決定

一部の決定は完全に自動化すべきではありません。技術的、法的、倫理的なリスクを伴います。

  • 実稼働の承認: コードを実稼働環境にリリースし、これに対する責任を負います。
  • セキュリティとアーキテクチャ: 認証、認可、暗号化、データ モデルなどの高価な決定。
  • ライセンスと著作権: 商用製品での生成されたコードの使用可能性とライセンスの準拠。
  • 機密データの取り扱い: 顧客データ、ソース コードの秘密、および ID 情報を扱うトランザクション。
警告: AI が「このコードは安全で本番環境の準備ができている」と言ったとしても、セキュリティ テスト、コード レビュー、実際の負荷の下での検証を行わずにこれを受け入れることは受け入れられません。安全性が重要な作業では、AI の出力が有能なエンジニアの承認に代わることは決してありません。意思決定につながる出力は、実装前に認定エンジニアによって個別に検証および承認される必要があります。

検証規律: 3 層制御

3 つの制御層を適用して、やみくもにではなく上級レビュー担当者のように AI 出力を使用します。これはモジュール全体で繰り返す基本的な反射です。

  1. コンパイルと静的チェック: コードは実際にコンパイル/実行されますか?型エラー、未使用の変数、存在しない API はありますか?静的分析ツール (コードを実行せずに検査するツール) は何を示していますか?
  2. 独立した再現 (テスト): 小規模な既知の入力を使用してコードを実行し、期待どおりの出力が得られるかどうかを確認します。エッジケース (null、ゼロ、負、巨大) を試してください。
  3. ソースの検証: AI が使用するすべての API、ライブラリのバージョン、言語機能は、公式ドキュメントから検証する必要があります。

検証プロンプト (出力の確認が容易になります): 「コードで使用するすべての外部ライブラリ、メソッド、および言語機能をリストします。それぞれについて、どのバージョンで利用できるかを示し、「ドキュメントで検証する必要がある」というラベルを付けます。よくわからない API をでっち上げないでください。よくわからない場合は、明確に「わからない」と書きます。また、対処していないエッジ ケースも別のリストとしてリストします。

自分のコードプロンプトを批評してください: 「あなたを雇った上級エンジニアのように、今書いたコードを批判的に見てください。次の 3 つの見出しの下に具体的な項目を挙げてください: (1) ロジック/エッジ ケース エラー、(2) セキュリティ リスク、(3) パフォーマンスまたは可読性の問題。各項目について、『問題の理由』と『修正案』を書きます。問題がない場合は、『問題が見つかりませんでした』と言ってください。それを美化しようとしないでください。」

弱いプロンプト / 強いプロンプト

WEAK:「ユーザー認証関数を書いてください。」(結果: どの言語、どのルール、どのエラー動作が不明瞭。一般的なコード、多くの場合安全でない、または文脈から外れています。)STRONG:「Python 3.11 用の電子メール検証関数を作成します。入力: 文字列。出力: 有効な場合は True、それ以外の場合は False。ルール: 空の文字列 False。RFC 準拠は必要ありません。基本形式で十分です。外部ライブラリは使用しないでください。関数の下に 5 つのサンプル テストが追加されますブロック: 有効、空、'@' なし、二重 '@'、スペースのみを含む。

違いはコンテキストにあります。強力なプロンプト。これには、言語、バージョン、入出力契約、制約、およびテストの期待値が含まれます。この 1 つの規律により、幻覚や安全でないコードのリスクが大幅に軽減されます。

ミニケース

ケース 1 — 人為的な方法。開発者は AI から、日付ライブラリに date.addBusinessDays(5) というメソッドがあることを聞き、自信を持って説明します。ドキュメントを見ると、そのような方法はなく、正しい方法は手動ループであることがわかりました。幻覚は、本番環境に入る前に 10 分間の検証でキャプチャされます。

ケース 2 — エッジ状態の損失。 AI は「平均を計算する」機能を生成します。 1,000 行のデータでテストすると機能します。ただし、リストが空の場合、ゼロ除算エラーが発生します。エンジニアは空の入力テストを追加したため、公開前にエラーを確認して修正します。単一のエッジ状態テストにより、午前 3 時の生産アラームを防止します。

ケース 3 — プライバシーのリスク。専門家は、実際のデータベース接続文字列と API キーを含むファイルを公開ツールに貼り付けようとしています。教育機関の方針を覚えています。シークレットを <編集済み> に置き換え、コードを代表的な例にまとめて、それを要求します。したがって、彼は5分以内に助けが得られますが、彼の身元情報は明らかになりません。

秘密コードと ID 情報の取り扱いの原則

ソフトウェアの最も機密性の高い部分。ソース コードの秘密、ID 情報 (API キー、パスワード、トークン)、および顧客/個人データ。基本原則: 共有する前に整理し、可能であれば代表的な例を挙げて問題の本質のみを尋ねます。

匿名化されたプロンプト パターン: 「次の関数にエラーがあります。実際のビジネス ロジックと非表示の定数を代表的な値 (API キー、テーブル名、フィールド名汎用) に置き換えました。問題: 入力 X でエラー Y が発生します。この代表的なコードでロジック エラーを見つけて、修正バージョンを説明するだけです。[代表的なコード]」

ヒント: 疑問がある場合は、次のテストを受けてください。「これをフォーラムで公に書いたら、私の組織は問題を起こすでしょうか?」たとえ答えが不明瞭であっても、まずそれをクリアしてください。後でリークを追跡するよりも、リセットする方が常に安く済みます。

よくある間違い

  • コンパイル/テストを行わずに出力を使用します。 「AIが書いた」ということは正当化されません。各コードは実行して検証されます。
  • コンテキストなしでリクエストを行う。言語、バージョン、入出力、および制約が指定されていない場合、コードは汎用的なものになり、多くの場合安全ではありません。
  • 機密情報を何も考えずに共有してしまう。 API キー、パスワード、顧客データは消去せずに公開しないでください。
  • 正確な言葉と正確さを混同する。 AI が自信を持って話すほど、より注意する必要があります。自信に満ちた口調は証拠ではありません。
  • AIに判断を委ねる。本番環境、セキュリティ、アーキテクチャに導入するかどうかの決定はエンジニアに委ねられます。 AIは素材を生成するだけです。

要約すると

AI は、スケルトン コード、テスト ドラフト、バグの絞り込み、ドキュメントなど、ソフトウェア作業の反復的で時間のかかる部分を高速化します。ただし、決定と責任はエンジニアにあります。すべての出力は 3 つの制御層 (コンパイル/静的、テスト、ソース) を通過する必要があります。コンテキストを含むプロンプトを作成することと、隠された情報をクリアすることは、このモジュールの各単元で繰り返す 2 つの重要な習慣です。 AI を規律を持って使用すると、速度が向上します。規律を持たずに使用すると、本番環境にエラーや脆弱性が持ち込まれることになります。

アプリケーションタスク

自分の作品または架空のプロジェクト (検証関数など) から小さなコーディング タスクを選択します。まず弱いプロンプトを作成し、出力を取得します。次に、この単元の強力なプロンプト パターンを適用します。つまり、言語/バージョン、入出力契約、制約、および期待値をテストします。 2 枚のプリントを並べて違いを書きます。次に、堅牢な出力をコンパイルし、少なくとも 3 つのエッジ ケース (ヌル、ゼロ/ネガティブ、予期しない形式) でテストし、どのテストで何が見つかったかをメモします。

チェックリスト

  • [ ] プロンプトに言語、バージョン、入出力コントラクトを追加しました。
  • [ ] 「でっち上げないで、わからない場合は教えてください」とスコープ制約について書きました。
  • [ ] コードをコンパイル/実行し、静的警告をチェックしました。
  • [ ] 少なくとも 3 つのエッジケースでテストしました。
  • [ ] 使用しているAPIを公式ドキュメントから確認しました。
  • [ ] シークレット コード/認証情報をクリアしたか、エンタープライズ ツールを使用しました。
  • [ ] 生産とセキュリティの決定は人間に委ねられていることを確認しました。