それはすべてを結びつけるが、誰も触りたくない。 Legacy code is the dark matter of the software universe. もしあなたがエンタープライズソフトウェアで働いているなら、あなたは戦いを知っています:モノリッチなJavaアプリケーション、500ページのデザインドキュメント(PDF)、そして「スパゲッティコード」は、あなたが間違った呼吸をすると破る。 ほとんどのAIチュートリアルは、どのように構築するかを示します Apps です。 新 But can GenAI actually handle the grit of a 10-year-old legacy system? この実験では、巨大でリアルな図書館管理システム(古いJava標準に基づいて構築)を採用し、ストレステストを行いました。 ソフトウェア開発ライフサイクル(SDLC)全体を通じて、私たちは単に「コードを書く」ことを要求するのではなく、UI仕様、依存管理、複雑なテストケース生成に使用しようとしました。 GPT-4 何が効いたか、何が失敗したか、そしてあなたが古いプロジェクトを近代化するために使用できる正確なワークフローがあります。 The Challenge: The “Bloated Test” 問題 私たちのテーマは、図書館システム(WebiLis/iLiswing)の特定のモジュールでした。 複雑な構成:ソフトウェアはさまざまな環境で動作し、テストパターンの爆発をもたらします。 スキルギャップ:知識をオフショアのグローバル配達センター(GDC)に転送した結果、設計仕様の誤解が生じた。 Review Fatigue: Senior developers were spending hours catching typos instead of fixing logic. 高級開発者は論理を修正する代わりにタイポを捕まえていた。 私たちは、痛みを自動化できるかどうかを確認するために、内部のChatAIウォレッパー(GPT-4)を統合しました。 第1段階: Low-Hanging Fruit (UI & Documentation) コードに触れる前に、デザイン段階を調べてみました.We fed the AI raw requirement lists and asked it to generate. . UI Design Specifications 実験 We deliberately introduced errors into the UI specs. (私たちは故意にUIスペクションにエラーを導入しました。 「図書館」ではなく「学校図書館」です。 「古いシステム」ではなく「古いシステム」 結果 GPT-4 はこれを打ち砕きました。 文脈的な文字列を識別しました。 データ: マニュアルコードレビューを分析したとき、レビューコメントの 87% が単純なフラッジング、タイポス、または明確さの欠如に関連していることが判明しました。 「AIレビュー」ワークフロー:ヒューマンレビューの前にGPT-4を通じて仕様を実行することで、騒音の87%を排除することができます。 Takeaway: 文法に高級エンジニアの時間を無駄にしないでください. 人間が見る前にノイズをきれいにするために文書のための「レベル0」レビューとしてLLMを使用してください。 高級エンジニアの時間を文法に無駄にしないでください.LLMsを文書の「レベル0」レビューとして使用して、人間がそれを見る前に騒音をきれいにします。 Takeaway: 第2段階:生成コード(Java & Maven) その後、私たちはThe 私たちはAIに特定のユーティリティ機能のためのJavaコードを生成するように依頼しました。 PG (Programming) Phase オリジナルタイトル: Boilerplate & Dependencies 私たちは、標準のJavaライブラリを使用して日付を計算するプログラムを求めました。 Prompt: 「数字を入力し、システムの日付から日付X日を計算するJavaプログラムを作成する」 AI Output: import java.time.LocalDate; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("How many days to calculate?"); int days = scanner.nextInt(); LocalDate today = LocalDate.now(); LocalDate futureDate = today.plusDays(days); System.out.println(days + " days later is " + futureDate); } } java.util.Date の代わりに java.time.LocalDate (現代の Java) を正しく使用しました。 しかも、有効に生成された。 図書館のバージョンを確認するように依頼したとき: Maven Dependencies #Xml <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> <!-- AI identified the stable version --> </dependency> タイトル: The “Context Gap” 私たちは2つの独自のJavaソースファイルを供給し、特定の方法を再現するように頼んだ。 結果:失敗 なぜ:AIは、プロジェクトの完全な文脈(「クラスパス」)を持っていないため、私たちのカスタムクラスに存在しなかった方法を幻想化しました。 GPT-4は、標準ライブラリ(JDK、Apache Commons)では素晴らしいが、独自の「Spaghetti Code」では、あなたが提供しない限り、恐ろしい。 依存性の木が速い。 Crucial Finding: 全般 第3段階:コンパイラのための「ターニングテスト」 我々は、AIコードに微妙な構文エラーを供給し、コンパイラよりもそれらをデバッグできるかどうかを確認しました。 テスト: if の代わりに iff (a typo) を使用しました。 コンパイラ: シンタクスエラーを投げます。 AI: iff が有効な Java ではないことを正しく識別したが、 typpo でなければ変数名である可能性があることを示唆した。 The Test: We fed it a logic bug where a condition could never be true. テスト:我々は、条件が決して真実ではないという論理バグを提供しました。 AI:捕まえられなかった。 現実チェック: GenAI はコンパイラではありません. トークンの確率を推測します. なぜエラーが起こっているのかを説明するのに優れていますが、静的分析ツール(SonarQube)のようにコードの正確性を保証することはできません。 GenAIはコンパイラではありません。それはトークンの確率を推測します。エラーが起きる理由を説明するのに優れていますが、静的分析ツール(SonarQube)のようにコードの正確性を保証することはできません。 現実チェック: 現実チェック: ステージ4:テストケース・ジェネレーション(The Danger Zone) これは実験の最も重要な部分であり、AIに生成するよう求めました。 上記の日付計算プログラムについて Test Cases Prompt: 「日付プログラムのテストケースを生成する」 AI Result (Initial):それは一般的なケースを生成しました: 入力:5 入力:10 入力:1 It did not provide the なぜか?なぜなら、出力はLocalDate.now()に依存しているため、AIは今日何があるかを知るためにコードを「実行」することはできませんでした。 The Problem: 予想生産 The Prompt Engineering Fix: 有用なテストケースを得るためには、変数について明確にしなければなりませんでした。 Refined Prompt: "Assume the variable today is '2024-06-15'. Generate 4 test patterns for the variable days. 今日の変数は「2024-06-15」であると仮定します。 「今日の変数が『2024-06-15』であると仮定します。 変数日のための4つのテストパターンを生成します。 リフレッシュスピード: リフレッシュスピード: AI Result (Fixed): Test Case Input (Days) Expected Output (Date) Case 1 1 2025-06-16 Case 2 10 2025-06-25 Case 3 0 2025-06-15 Case 4 -5 2025-06-10 ケース1 1 2019年06-16 ケース2 10 2025年06-25 ケース3 0 2025年06-15 ケース4 -5 2025年06月10日 The Workflow for Modernizing Legacy Systems(レガシーシステムの近代化) 私たちの検証に基づき、AIを古い製品開発に適用するときに採用すべきアーキテクチャです。 結論:「37%ブース」の現実 研究者らは、A Generative AI を使用します. 内部検証はこれをサポートしますが、警告があります。 37% productivity increase 生産性は、AIが完璧な複雑なコードを書くことから来なかった。 . shifting the burden of the mundane レビュー:AIは文法/タイプチェック(問題の87%)を処理し、人々がアーキテクチャに焦点を当てることができました。 Boilerplate: AI は標準の Java インポートとセットアップを処理しました。 テスト:AIはテストケースの構造を生成したが、人間は論理を検証しなければならなかった。 判決: あなたが古いシステムを管理している場合は、GPT-4があなたのコアエンジンを一晩で書き直すことを期待しないでください. Do it use to clean your documentation, generate your test skeletons, and explain those cryptic 10-year-old error messages. 次は何? 次の国境は 500ページのPDFマニュアルをベクターデータベースにインデックスすることにより、AIに第2段階で欠けた「コンテキスト」を与えることを目指し、独自の方法を理解し、標準のJavaを理解することを可能にします。 RAG (Retrieval-Augmented Generation)