Upgrade to Pro — share decks privately, control downloads, hide ads and more …

可視化により内部品質をあげるAIドキュメントリバース/20240910 Hiromitsu A...

SHIFT EVOLVE
September 11, 2024

可視化により内部品質をあげるAIドキュメントリバース/20240910 Hiromitsu Akiba

2024/09/10 AI無しでは語れないテストツール最前線 (AI Test Lab vol.2)
https://shiftevolve.connpass.com/event/328179/
株式会社SHIFT サービス&テクノロジー本部 ITソリューション部 グループ長 秋葉 啓充

SHIFT EVOLVE

September 11, 2024
Tweet

More Decks by SHIFT EVOLVE

Other Decks in Technology

Transcript

  1. 2 自己紹介 秋葉 啓充 (あきば ひろみつ) #心理的安全性 #開発と運用のポテンヒットをなくしたい #クラウド海峡横断部#RPA #ローコード

    #自動化 #CI/CD #哲学 #ポストモダン #2男児の父 #人間は9タイプ #フットサル #IoT アジャイル推進部 副部長 入社:2020年4月 ▪経歴▪ 大阪府出身 日本IBMと日本製鉄の合弁会社(現NSSOL)に入社し、 エンジニアとしてキャリアスタート。システム企画コンサルや全社生産計画 システム開発のPMを歴任。 DX・アジャイル開発を経験したく、友人のベンチャー企業で2年ほど勤めた後 に2020年にSHIFTに入社。 コンサル、スクラムマスター、インフラアーキテクト、自動化PM、 エンジニアリングマネージャーを経験し、2024年9月から現職。 【登壇歴】 ・2024/9 SHIFT EVOLVE 『AI無しでは語れない、テストツール最前線 (AI Test Lab vol.2)』 ・2024/3 SHIFT テクシェア 『マルチエージェントAIによる開発デモ』 ・2023/8 SHIFT EVOLVE 『ChatGPT と ふるまい駆動』 ・2023/7 SHIFT 89祭り 『テスト自動化の世界的トレンド ~Tricentis社と共に~』 ・2023/7 SHIFT EVOLVE 『社員クラウド資格取得推進のために部活作ってみたので話しま すの会』 ・2023/4 SHIFT EVOLVE 『リモートワークにおけるファシリテーションの方法論』と 『問いかけ の作法』 ・2022/6 JaSST'22 Kansai 『「やめられないExcel方眼紙 Excelを活用した自動テスト」』 ・2021/7 SHIFT EVOLVE 『マイクロサービスのログ可視化』 NEW!!
  2. 3 Copyright SHIFT INC, All Rights Reserved. 本日のアジェンダ • AIドキュメントリバース

    • サービスの概要 • 出力サンプル • 事例/CASE STUDY • AIドキュメントリバースの裏側
  3. 5 Copyright SHIFT INC, All Rights Reserved. AIドキュメントリバースサービスとは 生成AIによるSHIFT独自のリバースエンジニアリングツールを用いた、マイグレーション支援サービスです。 お客様から受領するソースコードを読み込み、さまざまな形式のドキュメントを自然な日本語で生成します。

    レガシー環境や開発現場に見られるさまざまな課題を解決、 DXの促進、レガシーシステムからの脱却を実現します! さまざまな形式のドキュメントを 自然な日本語で生成 INPUT OUTPUT ソースコードのみ etc… プログラミング言語 31言語 に対応 クラス図 シーケンス図 CRUD図 フローチャート 文/A SHIFT AIドキュメント リバースサービス
  4. 6 Copyright SHIFT INC, All Rights Reserved. AIドキュメントリバースサービスが解決する課題① 01 ブラックボックス化した

    プログラムを可視化 ◼担当者の退職で現状を把握できない ◼レガシーシステムのドキュメントがなく、DXどころで はない ◼現行の改修をしたいが仕様を文書化できていない よくある課題 02 プログラムの問題を特定 ◼カスタマイズの多いプログラムで不安、パフォーマンス がでない ◼現行・新システムの機能反映不足・漏れが心配 ◼品質が悪く障害が多発している よくある課題 / 03 品質担保の懸念を払拭 ◼有識者不在のため、テスト網羅性に懸念がある ◼現行システムと同レベルの非機能要求を満たせるか不 安 04 生産性の向上で 開発コストを削減 ◼新規事業の創出ではないため、コストがかけられな い ◼ブラックボックス化した既存のプログラムでは、正 確な見積りができない よくある課題 よくある課題 生成AIにより、エンジニアの知見や技術力に左右されないコード解析が可能、 限られたリソースでも高い生産性を実現します!
  5. 8 Copyright SHIFT INC, All Rights Reserved. ソースコード受領 NDA締結 ドキュメント納品

    SHIFT AIドキュメント リバースサービス サービスの詳細 NDA締結が前提でソースコー ドを受領、必要ドキュメント のイメージの擦り合わせを行 いサンプルを作成します。 セキュリティを重視した保護され た環境下で生成AIを利用。 ソースコードと比較しながらドキュメント閲 覧ができるVisual Studio Codeのextension 形式、ドキュメント( PDF、HTML)での納 品が可能です。 詳細設計 DB設計 クラスドキュメント クラス図 関連図 フローチャート シーケンス図 処理機能記述 ER図 CRUD図 AIドキュメントリバース ツール カスタマイズ設定 ドキュメント生成AI Closed Cloud サンプル作成 お見積もり 正式発注
  6. 9 Copyright SHIFT INC, All Rights Reserved. 選ばれる理由 1 日本語に特化した

    ドキュメント生成 2 多様なプログラミング 言語に対応 3 プログラムをクラス図 やシーケンス図などに 再現 ソースコードの保護 文/A HTML Ruby Python 4 5 サンプル対応
  7. 10 Copyright SHIFT INC, All Rights Reserved. 選ばれる理由 ① 日本語に特化したドキュメント生成

    ワードタイプのドキュメントでも、図形式のドキュメントでも、読みやすい日本語出力が可能(英語の出力も可能)です。ドキュメント化す る対象だけではなく、ほかのソースコードの内容も理解したうえでドキュメント生成を行うため、ソースコードの処理に合った自然な日本語 でドキュメント生成を行います。 ワードタイプの ドキュメントに対応 ※英語の出力も可能 図形式(フローチャートやシーケンス図) のドキュメントに対応 ほかのソースコードの内容も 理解したうえでドキュメントを生成 ※人間による手直しがまったくない状態 でこの記述が生成AIだけで作成できる public class Account { private String accountNumber; private double balance; public Account(String accountNumber) { this.accountNumber = accountNumber; this.balance = 0.0; } public void deposit(double amount) { if (amount > 0) { balance += amount; System.out.println(amount + "が預金されました。"); } else { System.out.println("正の金額を入力してください。"); } } public void withdraw(double amount) { if (amount > 0 && balance >= amount) { balance -= amount; System.out.println(amount + "が引き出されました。"); } else { System.out.println("引き出し額が不正か、残高不足です。"); } } public void displayBalance() { System.out.println("口座番号: " + accountNumber + " の残高: " + balance); } } 処理に関連する ソースコード 前後の処理を把握し、 自然な日本語で ドキュメントを生成
  8. 11 Copyright SHIFT INC, All Rights Reserved. Ada C Delphi

    Java PHP SQL ASM​ C# Go Java Script PL/I PL/SQL Apex C++ GOSU JCL Python SQLJ ABAP COBOL​ HTML Kotlin RPG VB(VB6) bash CSS K shell Ruby VisualForce .Net(VB.Net) Rust 選ばれる理由②多様なプログラミング言語に対応 AIドキュメントリバースサービスは、幅広く多数のプログラミング言語に対応することが可能です。 多くのレガシーシステムで利用されている歴史の古い言語や、一般的に利用されているさまざまな言語に対応しています。 ※続々とサポート言語を増やしていますので、記載のない言語でも対応可能な場合があります。 ぜひご相談ください。 ※ メールやSMSのテンプレートも対応可能 31 プログラミング 言語に対応
  9. 12 Copyright SHIFT INC, All Rights Reserved. 選ばれる理由③プログラムをクラス図やシーケンス図などに再現 既存のツールや人の手では困難だった図の作成を生成AIで可能にしました。 クラス図、シーケンス図、フローチャートやCRUD図、ER図など、複雑な図形式のドキュメントの生成が可能です。

    言語に対応 見える化されたソースコードによる開発で、生産性や品質の向上が見込めます! import java.util.HashMap; import java.util.Map; public class Bank { private Map<String, Account> accounts; public Bank() { accounts = new HashMap<>(); } public void createAccount(String accountNumber) { if (!accounts.containsKey(accountNumber)) { Account newAccount = new Account(accountNumber); accounts.put(accountNumber, newAccount); System.out.println("口座 " + accountNumber + " が作成されました。"); } else { System.out.println("この口座番号は既に存在します。"); } } public class Account { private String accountNumber; private double balance; public Account(String accountNumber) { this.accountNumber = accountNumber; this.balance = 0.0; } public class Main { public static void main(String[] args) { Bank bank = new Bank(); bank.createAccount("12345"); bank.depositToAccount("12345", 1000); bank.withdrawFromAccount("12345", 500); bank.showBalance("12345"); } } ① ② ③
  10. 13 Copyright SHIFT INC, All Rights Reserved. SHIFT 社外/第三者 お客様

    選ばれる理由④ ソースコードの保護 お預かりするソースコードは、お客様の大切な知的財産として厳格に管理させていただきます。受領したソースコードは、ネットワークや ユーザなどのアクセス制限により保護された専用クラウド内で、生成AIを利用します。このため、ソースコードおよび、生成するドキュメント も情報漏洩の心配がなく、安全にサービスをご利用いただくことが可能です。 AIドキュメントリバースはクラウド上で構築されている サービスですが、閉じられた環境下で生成AIが利用される ため、社外や第三者からアクセスされることはありません。 社員B 限られたメンバーのみアクセ ス可能。厳密な管理でソース コードを保護します。 ソースコード / NDA締結 保護領域 社員A AIドキュメントリバースツール カスタマイズ設定 ドキュメント生成AI ソースコードを学習しない ため、流用や流出すること はありません。 Internet NDAを結び責任をもっ て大切なソースコード をお預かりします。 Closed Cloud 限られたメンバー
  11. 14 Copyright SHIFT INC, All Rights Reserved. 選ばれる理由⑤サンプル対応 本サービスの納品ドキュメントがお客様のご要望を満たすか、サンプル対応やフィッティング対応等のドキュメントのPOCで事前に確認が可能です。 サンプル対応は業務処理等を行うプログラムのソースコード[3個程度以内/1ソースコードは500step程度]など、システム毎のソースコードの分量に応じ、事前にAI

    で作成するドキュメントの内容を把握するためにご利用ください。また、サンプル対応は弊社サービス標準の出力内容でのご提示になりますが、お客様の希望する 出力ご要望に合わせるために、フィッティング対応にて出力内容カスタマイズする事が可能です。 フィッティング対応 フィッティング効果(sample) お客様毎に異なるドキュメントへ記載すべき 内容に合わせて、AIをフィッティング。事前 にサンプル対応を行い、お客様が必要なド キュメントをAIが出力する事が可能か確認し ます。 5 新製品開発プロジェクトの進捗と市場調査の結果 このセクションでは、新製品開発プロジェクトの進捗状況と最近実施した市場調査の結果について説明します。 具体的には、開発中の製品の現状、今後のスケジュール、および市場調査から得られた消費者のニーズや競合 他社の動向について詳しく解説します。以下に、これらの情報を詳細に述べます。 市場調査のロジック 市場調査を行うためのロジックは以下の通りです。まず、ターゲット市場を明確に定義し、対象となる消費者 層を特定します。次に、オンラインアンケートやインタビューを通じて、消費者の嗜好や購買行動に関する データを収集します。アンケート結果の集計には以下のような計算式を使用します。 [ ¥text{平均値} = ¥frac{¥sum_{i=1}^{n} x_i}{n} ] ここで、( x_i ) は各回答のスコア、( n ) は回答数です。 消費者ニーズの確認ロジック 消費者ニーズを確認するためのロジックは以下のステップで構成されます。まず、消費者の購買履歴や行動 データを収集し、消費者のプロファイルを作成します。次に、フォーカスグループやデプスインタビューを実 施し、消費者の具体的なニーズや課題を深掘りします。 [ ¥text{重み付けスコア} = ¥text{出現頻度} ¥times ¥text{感情スコア} ] フィッティング前のサンプル対応 フィッティング後(計算式等、より詳細に記載する等の対応が可能)
  12. public class Account { private String accountNumber; private double balance;

    public Account(String accountNumber) { this.accountNumber = accountNumber; this.balance = 0.0; } public void deposit(double amount) { if (amount > 0) { balance += amount; System.out.println(amount + "が預金されました。"); } else { System.out.println("正の金額を入力してください。"); } } public void withdraw(double amount) { if (amount > 0 && balance >= amount) { balance -= amount; System.out.println(amount + "が引き出されました。"); } else { System.out.println("引き出し額が不正か、残高不足です。 "); } } public void displayBalance() { System.out.println("口座番号: " + accountNumber + " の残高: " + balance); } } import java.util.HashMap; import java.util.Map; public class Bank { private Map<String, Account> accounts; public Bank() { accounts = new HashMap<>(); } public void createAccount(String accountNumber) { if (!accounts.containsKey(accountNumber)) { Account newAccount = new Account(accountNumber); accounts.put(accountNumber, newAccount); System.out.println("口座 " + accountNumber + " が作成されました。"); } else { System.out.println("この口座番号は既に存在します。"); } } public void depositToAccount(String accountNumber, double amount) { Account account = accounts.get(accountNumber); if (account != null) { account.deposit(amount); } else { System.out.println("指定された口座が見つかりません。"); } } public void withdrawFromAccount(String accountNumber, double amount) { Account account = accounts.get(accountNumber); if (account != null) { account.withdraw(amount); } else { System.out.println("指定された口座が見つかりません。"); } } public void showBalance(String accountNumber) { Account account = accounts.get(accountNumber); if (account != null) { account.displayBalance(); } else { System.out.println("指定された口座が見つかりません。"); } } } public class Main { public static void main(String[] args) { Bank bank = new Bank(); bank.createAccount("12345"); bank.depositToAccount("12345", 1000); bank.withdrawFromAccount("12345", 500); bank.showBalance("12345"); } } 21. 【詳細設計】アクティビティ図(フローチャート)
  13. public class Account { private String accountNumber; private double balance;

    public Account(String accountNumber) { this.accountNumber = accountNumber; this.balance = 0.0; } public void deposit(double amount) { if (amount > 0) { balance += amount; System.out.println(amount + "が預金されました。"); } else { System.out.println("正の金額を入力してください。"); } } public void withdraw(double amount) { if (amount > 0 && balance >= amount) { balance -= amount; System.out.println(amount + "が引き出されました。"); } else { System.out.println("引き出し額が不正か、残高不足です。 "); } } public void displayBalance() { System.out.println("口座番号: " + accountNumber + " の残高: " + balance); } } import java.util.HashMap; import java.util.Map; public class Bank { private Map<String, Account> accounts; public Bank() { accounts = new HashMap<>(); } public void createAccount(String accountNumber) { if (!accounts.containsKey(accountNumber)) { Account newAccount = new Account(accountNumber); accounts.put(accountNumber, newAccount); System.out.println("口座 " + accountNumber + " が作成されました。"); } else { System.out.println("この口座番号は既に存在します。"); } } public void depositToAccount(String accountNumber, double amount) { Account account = accounts.get(accountNumber); if (account != null) { account.deposit(amount); } else { System.out.println("指定された口座が見つかりません。"); } } public void withdrawFromAccount(String accountNumber, double amount) { Account account = accounts.get(accountNumber); if (account != null) { account.withdraw(amount); } else { System.out.println("指定された口座が見つかりません。"); } } public void showBalance(String accountNumber) { Account account = accounts.get(accountNumber); if (account != null) { account.displayBalance(); } else { System.out.println("指定された口座が見つかりません。"); } } } public class Main { public static void main(String[] args) { Bank bank = new Bank(); bank.createAccount("12345"); bank.depositToAccount("12345", 1000); bank.withdrawFromAccount("12345", 500); bank.showBalance("12345"); } } 23. 【詳細設計】シーケンス図
  14. import java.util.HashMap; import java.util.Map; public class Bank { private Map<String,

    Account> accounts; public Bank() { accounts = new HashMap<>(); } public void createAccount(String accountNumber) { if (!accounts.containsKey(accountNumber)) { Account newAccount = new Account(accountNumber); accounts.put(accountNumber, newAccount); System.out.println("口座 " + accountNumber + " が作成されました。"); } else { System.out.println("この口座番号は既に存在します。"); } } public void depositToAccount(String accountNumber, double amount) { Account account = accounts.get(accountNumber); if (account != null) { account.deposit(amount); } else { System.out.println("指定された口座が見つかりません。"); } } public void withdrawFromAccount(String accountNumber, double amount) { Account account = accounts.get(accountNumber); if (account != null) { account.withdraw(amount); } else { System.out.println("指定された口座が見つかりません。"); } } public void showBalance(String accountNumber) { Account account = accounts.get(accountNumber); if (account != null) { account.displayBalance(); } else { System.out.println("指定された口座が見つかりません。"); } } } public class Account { private String accountNumber; private double balance; public Account(String accountNumber) { this.accountNumber = accountNumber; this.balance = 0.0; } public void deposit(double amount) { if (amount > 0) { balance += amount; System.out.println(amount + "が預金されました。"); } else { System.out.println("正の金額を入力してください。"); } } public void withdraw(double amount) { if (amount > 0 && balance >= amount) { balance -= amount; System.out.println(amount + "が引き出されました。"); } else { System.out.println("引き出し額が不正か、残高不足です。"); } } public void displayBalance() { System.out.println("口座番号: " + accountNumber + " の残高: " + balance); } } public class Main { public static void main(String[] args) { Bank bank = new Bank(); bank.createAccount("12345"); bank.depositToAccount("12345", 1000); bank.withdrawFromAccount("12345", 500); bank.showBalance("12345"); } } 23. 【詳細設計】処理機能記述
  15. 20 Copyright SHIFT INC, All Rights Reserved. ① 案件初期 SHIFT人力対応

    処理機能記述(java)のドキュメントを作成するための工数 導入事例:AIドキュメントリバースの活用で大幅な工数削減 ⚫既存SaaSで展開中のサービスを移管したいが、既存ドキュメント陳腐化で実施困難 • 画面一覧 • 帳票一覧 • バッチ処理一覧 ※1. 各ドキュメント1人/月程度で 人力対応できる分量 AIドキュメントリバース サービスリリース 業種 情報系 対象 流通向けSaaSサービス 提供システム名 AIドキュメントリバース(開発現場)/(納品物向け) 倉庫管理向けソリューション(ラベル発行やピッキング指示等が出来るサービス)をSaaS上で展開していたが、環境を乗せているクラウドの移行が必要になった。しかし、既存環境の ドキュメントがメンテナンスされておらず、プログラムの内容を把握することや、ベンダーなどへ共有することが困難な状態に。このため新クラウド環境へ移行するにあたり、ドキュメントの 最新化が必須だった。 課題 ◼ドキュメントの陳腐化により最新状況を把握しにくい状況だった ◼40万ステップ以上のプログラムで人力対応は品質や期間が非現実的だった ◼人力でドキュメントリバースを検討していたが、コストが想像以上に 膨らんでいた 導入効果 ◼人力での工数と比較し90%以上のコスト削減を実現 ◼ヒューマンエラー(抜け漏れや単純なミス)がなく、ドキュメントごとの 品質やレベル感が均一にできる ⚫導入の概要 本案件は人力で対応していくことを前提にしていたが、案件の最中にAIドキュメントリバースサービスのリリースが行われた。特定のドキュメント対象のみソースコードのステップ数が大量で、 コストが問題となっており本サービスを利用することになった。 お客様の基本情報 お客様の声 AIなのでドキュメントの完全性や正確性が不安だったが、 サンプルで事前に確認できるので不安を払しょくできました。 • アクティビティ図 • CRUD図 • ファイル一覧 ② AI活用開始 •シーケンス図(java) •処理機能記述(java) AIドキュメントリバース対応 ※2. 本ドキュメントのみ大幅な工数増加が 見込まれたため、AI活用を検討 ※2 ※1 大幅な 工数削減の実現 人力での当初計画工数 (参照するソースコードが増えれば、工数増加が発生) AIドキュメントリバースを 利用した際の総工数 20人/月 以上のコスト 1.5人/月 以上のコスト 90% 以上のコスト圧縮 に成功 プログラムの見える化で、開発者が現場でソースコードの 中身の確認、処理の把握をしたり、開発・修正・機能追加 などに向けた利用では最適だと思いました。
  16. 21 Copyright SHIFT INC, All Rights Reserved. CASE 02 定期的にドキュメント改修が行えない、

    進むブラックボックス化 開発をベンダーに任せたが、 任せっきりで問題が山積み! CASE STUDY 課題 導入効果 ◼障害箇所の特定や解決策の検討に時間がかかる。 ◼新たなメンバーのひとり立ちに時間がかかりすぎる。 ◼機能追加のたびにリバース対応するため時間がかかり、コードの品質や一貫性 が保てない。 ◼変更の影響範囲の考慮が不足し予期せぬ不具合が発生する。 ◼ソースコードの見える化で障害や問題の特定が容易。 ◼処理の概要がまとまったドキュメント(処理機能記述)で容易に概要の把握が 可能。 ◼ドキュメントを見ながら開発対応を行うため生産性の向上が可能。 ◼シーケンス図やCRUD図でデータやプログラムの関連性を把握し影響範囲を考慮 した開発が可能。 課題 導入効果 ◼10年以上前にベンダーへ開発依頼したが、ベンダーが事業撤退。ドキュメントも 残っておらず運用もままならない。 ◼改修をベンダーに依頼しても、プログラム等の受け入れるために必要な既存 ドキュメントがなく、問題の有無を判断できない ◼長年利用し、何度も改修を行い品質が低くなっているが、ドキュメントがなく ブラックボックス化が止められない。 ◼リプレースしたいがドキュメントが最新化されていないため仕様が開示できない。 リプレースプロジェクトが進まない。 ◼ソースコードからドキュメントを作成することが可能。ソースコードの見える化 で運用業務改善が期待できる。 ◼ドキュメントを用意することで、新旧対比を行い受け入れ対応が可能。 ◼最新のソースコードをドキュメント化することでブラックボックス化の解消を 実現。大規模な変更の都度、ドキュメント生成を実施することにより、最新の ドキュメントを利用し続けることが可能。 ◼サービスを通じて最新化しておくことで、仕様を開示するドキュメントとして 利用が可能。 ドキュメントがある状態の生産性について SHIFTの社内開発者へのアンケートで、ドキュメントがある場合の 機能追加と、ドキュメントがない場合の機能追加でどの程度の生産性 が上がるかアンケートを行いました。ソースコードの読み込みが削減 される分3人/日の減少が見込めるとアンケートの回答を得ています。 60% 程度の生産性向上 の見込み CASE 01 ブラックボックス化したプログラムの維持保守 メンテナンスは問題が山積み 維持保守運用現場で品質や 生産性が低い!
  17. 23 システム構成図 SHIFT 社内ネットワーク(VPN接続) Azure 日本国内 API サーバ IP制限+公開鍵認証 アメリカ国内

    Azure内専用回線 +閉域ネット接続 Azure OpenAI Service VNET Gitレポジトリ バッチ サービス 外部接続不可 外部接続不可 VM
  18. 24 Copyright SHIFT INC, All Rights Reserved. AIが嘘をつかないようにするための工夫(一部) AIが「わからない」と言ってもいい環境にする 不確実な情報の場合「わかりません」と言ってもいいことを最初に許可します。シンプルなテクニックですが、

    AIが勝手に推測したドキュメントを作成することを防いでいます。 直接的にサンプルを渡して事実を根拠づける 長いプログラムを読ませる場合は、タスク実行前にまずサンプルを読み込んで理解するように依頼をします。 そうすることで実際のソースに根拠づけられ、推測が入る余地を防ぎます。 段階的な思考を検証する 最終的なドキュメントを確定する前に、AIに段階的にドキュメントの内容を説明してもらいます。 これにより、誤った論理や仮定を明らかにすることができます。 反復的に改善していく AIが出力したドキュメントを入力として使用することで、前の回答の確からしさ・矛盾点を検証します。 出典:Anthropic公式より筆者が抜粋・翻訳 https://docs.anthropic.com/en/docs/test-and-evaluate/strengthen-guardrails/reduce-hallucinations
  19. 26 SWE-agent: Agent-Computer Interfaces Enable Automated Software Engineering SWE Agentとは、GPT-4などの大規模言語モデルを利用したソフトウェアエンジニアリングエー

    ジェント。 オープンソースのAIプログラマー:GitHubの問題解決の自動化において重要な進歩を表して おり、AIを利用してソフトウェアの修正を支援する。 プリンストン大学のNLPグループによって開発:この技術は、プリンストン大学の自然言語処 理(NLP)チームによって開発されています。 急速な人気の獲得:SWE Agentは、わずか24時間以内にGitHub上で1,000以上のスターを獲得 し、人気を集めた。 GPT-4の活用:GPT-4のような大規模モデルを活用し、GitHub上のエラーや問題を自動的に 修正する機能により、世界中の開発者から注目されています。 マシンにはマシンのインターフェース:AIプログラミングの分野で重要な進展を果たしており、 エージェントコンピュータインターフェース(ACI)の導入によって、機能をさらに向上させ るための役割を果たしています。 出典: https://arxiv.org/abs/2405.15793
  20. 28 RepoUnderstander:How to Understand Whole Software Repository? ソフトウェアリポジトリ全体の理解が、オートマティックソフトウェアエンジニアリング (ASE)における重要な課題となっている。 既存の手法は主にコードのローカル情報(クラスや関数など)に焦点を当てているため、

    システム全体のコンテキストや依存関係を十分に捉えることができません。 この問題に対応する手法「RepoUnderstander」は、リポジトリの知識グラフを構築し、 モンテカルロ木探索(MCTS)を使用してリポジトリの全体的な知識を理解させる手法です。 この方法により、エージェントが効果的にリポジトリを探索し、問題の修正パッチを生成でき るようにします。 実験結果では、この手法がSWE-agentよりも18.5%高い性能を示しました。 要点: 1.ソフトウェアリポジトリ全体の理解がASEの鍵であると強調。 2.リポジトリの知識を効率的に管理するために、トップダウン型の知識グラフを提案。 3.MCTSに基づくリポジトリ探索戦略を採用し、問題解決を支援。 出典:https://arxiv.org/abs/2406.01422v1
  21. 30 AutoCodeRover: Autonomous Program Improvement ソフトウェアの改善を自動化するための手法「AutoCodeRover」は、GitHubの問題を 解決するために、LLM(大規模言語モデル)と高度なコード検索機能を組み合わせて プログラムを修正します。 このシステムは、抽象構文木(AST)を用いてリポジトリ全体をコード構造として理解し、 反復的に検索を行うことで、問題解決に必要なコンテキストを集めます。さらに、

    スペクトラムベースのフォルトローカライゼーションを使用して、より正確なバグ箇所の 特定をサポートします。 実験結果では、AutoCodeRoverが19%のタスク解決率を達成し、従来のSwe-agentよりも高い 効果を示しています。 要点: 1.プログラム修正の自動化 - AutoCodeRoverは、LLMとコード検索APIを組み合わせて、問題 に関連するコードコンテキストを自動的に収集・分析し、パッチを生成します。 2.ASTを利用したコード理解 - プロジェクト全体をファイルの集まりとして見るのではなく、 ASTを用いたプログラムの構造的理解を重視しています。 3.実世界のGitHub問題解決の成功率 - SWE-bench liteで19%のタスクを解決し、問題修正に 平均4分という効率的な結果を示しました。 出典:https://arxiv.org/abs/2404.05427v3