この論文は、CC 4.0 ライセンスに基づいて arxiv で入手できます。
著者:
(1) Xiyu Zhou、武漢大学コンピューターサイエンス学部、中国武漢。
(2) Peng Liang 氏、武漢大学コンピューターサイエンス学部、中国武漢市。
(3) 中国、武漢の華中師範大学コンピューターサイエンス学部、Zengyang Li 氏。
(4) Aakash Ahmad、ランカスター大学ライプツィヒ、コンピューティングおよびコミュニケーション学部、ライプツィヒ、ドイツ。
(4) Mojtaba Shahin、RMIT 大学コンピューティング技術学部、メルボルン、オーストラリア。
(4) ムハマド・ワシーム氏、フィンランド、ユヴァスキュラのユヴァスキュラ大学情報技術学部。
このセクションでは、3 つの RQ の研究結果を報告し、主要な結果の分析を提供します。セクション III-A では問題の種類を示し、セクション III-B とセクション III-C では、それぞれ対応する問題の原因の種類と解決策を示します。問題タイプの結果は、カテゴリ (提案内容の問題など) とタイプ (効果の低い提案など) の 2 つのレベルに分類されます。一方、原因と解決策の結果は、タイプ (例: 適切なバージョンを使用する) としてのみ整理されます。なお、結果は、問題が発生することが判明した原因と、問題を解決できる解決策のみを抽出して提供しています。したがって、すべての問題に対応する原因と解決策があるわけではありません。 「#」記号を使用して例を提供します。これは、提供されたデータセット [13] 内の「GitHub Issue ID」、「GitHub Discussion ID」、または「SO Post ID」を示します。
A. 問題の種類 (RQ1)
図 2 は、データから抽出された問題の分類を示しています。 Copilot ユーザーが直面する問題の大部分を使用法の問題 (56.9%) が占めていることがわかります。さらに、かなりの数のユーザーがユーザー エクスペリエンスと要件に基づいて機能リクエスト (15.3%) を提起しました。また、別の環境で Copilot を使用する際に互換性の問題 (15.3%) が発生したユーザーもいます。その一方で、提案コンテンツの問題 (4.9%)、ユーザー エクスペリエンスの問題 (4.2%)、および著作権とポリシーの問題として特定されたのはそれよりも少ない割合です。 (3.4%)。
• FUNCTIONALITY USAGE ISSUE とは、Copilot が提供するさまざまなコード生成関連機能の異常を指します。コードの提案を提供することに加えて、Copilot は、「前/次の提案」、「すべての提案の表示」、提案を受け入れるためのショートカット キーの構成など、ユーザーとの関わりを高めるためのさまざまな対話型機能を提供します。これらの機能を使用すると、例外が発生する可能性があります。たとえば、あるユーザーは「Copilot が PyCharm で提案をしなくなった」と報告しました (ディスカッション #11199)。
• セットアップ/操作の問題とは、Copilot の初期化または操作中に発生するエラーまたは誤動作を指し、多くの場合、実行時例外が発生します。これらの問題により、Copilot が正しく実行できなくなったり、ユーザーが「VSCode での copilot 開始エラー」に遭遇した場合など、Copilot が予期せずクラッシュしたりする可能性があります (ディスカッション #30996)。
• 認証失敗とは、Copilot 使用時のユーザー ログインおよび認証の問題に関連する問題を指します。 Copilot では、ユーザーはサービスを使用する前に GitHub アカウントにログインする必要があります。 Copilot のコード生成サービスを使用できるのは、アクセス権限 (有料サブスクリプション、学生 ID 認証などを含む) を持つユーザーのみです。認証プロセス中に、ユーザーはそれに関連するさまざまな問題に遭遇し、その結果、Copilot を使用できなくなる可能性があります。たとえば、あるユーザーがディスカッション フォーラムで「アップグレード後にログインできない」と述べました (ディスカッション #18132)。
• アクセス失敗とは、ユーザーが Copilot のサーバーにアクセスできない状況を指します。多くの場合、サーバー接続に関連するエラーが発生します。ユーザーは「GitHub Copilot がサーバーに接続できませんでした」のようなエラー メッセージに遭遇することがあります (ディスカッション #11801)。
• インストールの問題とは、インストール エラー、インストール方法が見つからない、その他の関連問題など、Copilot のインストール プロセス中に発生する問題を指します。たとえば、一部のユーザーは「Copilot のインストール時のエラー」(ディスカッション #17250) などの問題に遭遇する可能性があります。
• バージョン管理の問題とは、Copilot のバージョンをアップグレードできないことや、アップグレード後もアップグレードを求めるプロンプトが表示され続けるなどの異常な問題など、Copilot またはそのランタイム環境 (IDE など) のバージョンを調整するときにユーザーが遭遇する問題を指します。たとえば、あるユーザーは、IntelliJ IDEA で使用しているときに「copilot プラグインの更新に失敗する」と言いました (ディスカッション #17298)。
分析:比較的新しい AI コード製品として、Copilot とのユーザー操作のさまざまな段階で使用上の問題を特定しました。また、ユーザーはこれらの問題を報告し、支援を求める傾向があるため、使用状況の問題が最も一般的な問題のカテゴリとなっています。機能の使用に関する問題 (233)、セットアップ/操作に関する問題 (201)、および認証の失敗 (199) が上位 3 つのタイプです。最初の 2 種類の問題の発生頻度が高いのは、Copilot の機能設計と安定性の問題が原因であると考えられます。これらは、ユーザーの環境と操作にも影響を受けます。 3 番目のタイプは主に、Copilot がユーザーに GitHub アカウントを使用したログインを要求するときに発生する特定の詳細に関連付けられています。
2) 機能リクエスト (15.3%): 機能リクエストとは、ユーザーが Copilot 使用時の経験や実際のニーズに基づいて追加または改善をリクエストする機能を指します。これらの機能リクエストは、Copilot のユーザー エクスペリエンスを向上させるだけでなく、AI コード生成ツールが開発者とより適切に対話できる方法の探求にも貢献します。このカテゴリはさらに以下の 4 つのタイプに分類されます。
• 機能リクエストとは、Copilot の新しい機能を開発するためのリクエストを指します。これらのリクエストは通常、ユーザーの真のニーズやツールの使用中に遭遇する困難から生じます。たとえば、あるユーザーは、「コード説明機能」を追加すると Copilot の有用性が向上する可能性があると提案しました (ディスカッション #7509)。
• INTEGRATION REQUEST は、Copilot を特定のプラットフォームで使用できるようにする、または他のプラグインと統合するためのリクエストのタイプを指します。これは主に、特定の環境で Copilot を使用したいという一部のユーザーの要望によるものです。たとえば、あるユーザーは「Intellij 2022.2 EAP ファミリのサポート」を求めました (ディスカッション #17045)。統合のリクエストは、開発者の間での Copilot の人気をある程度反映しています。
• UI REQUEST は、Copilot のユーザー インターフェイス (UI) に対するユーザーによる変更要求を指します。これには、Copilot アイコンの外観の変更、使用方法のプロンプトの調整、およびその他の関連する側面が含まれる場合があります。これらのリクエストは通常、Copilot の視覚効果とユーザー エクスペリエンスを向上させることを目的としています。たとえば、ユーザーは、Copilot の現在の動作ステータスに関する情報を提供するために、「ステータス インジケーター」 (問題 #163) の追加を要求できます。
• 「プロフェッショナル コパイロット バージョン」とは、一部のユーザーからのコパイロットのプロフェッショナル バージョンに対するリクエストを指します。
これらのユーザーは通常、特定の企業の内部チームの開発者であり、実際の業務においてより専門的で信頼性の高いコード生成サービスを受けることを望んでいます。具体的には、チームの認定やその他の側面だけでなく、Copilot のコードの信頼性とセキュリティに対してもより高い要件が求められます。
分析: FUNCTION REQUEST (123) については、ユーザーが一般に、自分の開発習慣により密接に一致するように Copilot を構成する際の柔軟性の向上を望んでいることがわかりました。たとえば、一般的な要求には、Copilot の提案を 1 語ずつ受け入れる機能や、ファイル タイプまたはコード開発範囲に関して Copilot が自動的に動作する場所を指定する機能が含まれます。より革新的な要求には、Copilot X の技術プレビューとしてすでに開始されているコードの説明やチャット機能 [15] などの機能だけでなく、プロジェクト全体に従って提案を提供する Copilot の必要性も含まれます。INTEGRATION REQUEST (75) は、開発者の願いは、使い慣れた環境で Copilot を使用することです。かなりの数の互換性の問題が確認されているため、これにより Copilot チームにはより高い要求が課せられます。
3) 互換性の問題 (15.3%): このカテゴリは、Copilot とそのランタイム環境の間の不一致によって生じる問題を扱います。 Copilot はさまざまな IDE やテキスト エディタ (VSCode や IntelliJ IDEA など) のプラグインとして動作しますが、環境の複雑さや他のプラグインからの干渉により、互換性の問題が増加する可能性があります。これらの問題はさらに 4 つのタイプに分類され、以下で詳しく説明します。
• エディタ/IDE の互換性の問題とは、Copilot とその IDE またはエディタ間の不一致によって生じる問題を指します。これらの問題は通常、特定の IDE またはエディターで Copilot が適切に動作できないという形で発生します。
• プラグインの互換性の問題は、Copilot と他のプラグインがアクティブであり、同じ環境で連携しているときに発生する、ある種の一致の問題を指します。このような問題は、Copilot や他のプラグインの部分的または完全な誤動作を引き起こす可能性があり、通常は Copilot や他のプラグインを無効にするなどのトラブルシューティング方法によって特定されます。たとえば、あるユーザーは、「キーボード ショートカットが Emmet と競合する」(問題 #47) ため、Copilot によって生成されたコード提案を受信できないと報告しました。
• フレームワーク互換性の問題とは、Copilot とそれが動作するフレームワークとの間の一種の互換性問題を指します。一般的な例の 1 つは、Vim 専用に設計された Copilot の公式バージョンである Copilot.vim [16] と Node.js の間の互換性の問題です。
• キーボード互換性の問題とは、一部の一般的ではないキーボード レイアウトで Copilot の機能が使用できない状況を指します。たとえば、ドイツ語のキーボード レイアウトを持つユーザーは、Copilot のコード生成関連機能のほとんどを使用できません。 (ディスカッション #7094)。
分析:互換性の問題は、ユーザーが Copilot を使用する複雑な運用環境と、Copilot 自体の互換性の堅牢性から発生します。エディタ/IDE 互換性の問題 (132) の場合、Copilot の使用に公式に推奨されているプラットフォームである VSCode で、より多くの互換性問題が報告されています。また、Visual Studio、IDEA、PyCharm など、広く使用されている他の IDE でも同様の問題が見つかりました。プラグイン互換性の問題 (72) の発生は予測しにくく、典型的な問題は他のコード補完ツールとの競合に関係します。
4) 提案内容の問題 (4.9%): このカテゴリの問題は、Copilot によって生成されたコードの内容に関連する問題を指します。コード提案の生成は、Copilot のような AI コード生成ツールの中核機能であり、提案の品質がユーザーがそれを採用するかどうかを直接決定します。したがって、生成されたコードの内容は、当然のことながら、ユーザー、研究者、および Copilot チームにとって関心のある領域です。これらの問題はさらに 7 つの特定の状況に分類され、以下で詳しく説明します。
• 低品質の提案とは、Copilot が有用なコードを生成するのに十分なコンテキストを理解できない状況を指します。このようなコード提案には構文エラーがない可能性がありますが、品質が低いため、ユーザーが採用する可能性は低いです。たとえば、Copilot はかつて、ユーザーのコードで指定された要件を満たさずに、return ステートメントのみを含む空のメソッドを生成しました (ディスカッション #6631)。
• 無意味な提案とは、Copilot によって提供される、ユーザーのニーズとまったく無関係であるか、奇妙な出力を生成するコード提案を指します。このような提案はほとんど使用不可能であると考えられており、ユーザーにヒューリスティックな支援はほとんど提供されません。たとえば、ユーザーは Copilot によって生成されたアクセスできない偽の URL を受け取りました (ディスカッション #14212)。
• バグのある提案とは、Copilot がコンテキストに基づいて関連するコードを生成できるが、提案されたコードにいくつかのバグが含まれている状況を指します。その結果、プログラムは実行できるものの、開発者が意図したとおりに動作しなかったり、場合によってはエラーやクラッシュが発生したりすることがあります。たとえば、あるユーザーは、Copilot が「setState(true)」の代わりに「setState(!state)」を使用することを提案したと報告しました (問題 #43)。これにより、コードに論理的なバグが発生しました。
• 理解できない提案とは、Copilot がコードの提案を提供するものの、コード ロジックの複雑さまたは経験不足により、ユーザーが提案されたコードを理解するのが難しく、その正しさを検証するために追加のソースが必要になる状況を指します。たとえば、あるユーザーは、「Github Copilot がオートコンプリートしてくれたので、それに関連する情報を見つけようとしてインターネットを探し回ったのですが、見つかりませんでした」と言いました。 (SO #73075410)
• 無効な構文による提案とは、Copilot によって生成された提案に、プログラムの適切な実行を妨げる構文エラーが含まれている可能性がある状況を指します。 1 つの例は、提案されたコードに右括弧が欠落しており、エディターに構文エラーが表示される場合です (ディスカッション #38941)。
• 効果の低い提案とは、機能的には正しく、ユーザーの要件を満たしているものの、最適ではない実行効率や複雑なロジックが発生し、コード全体の品質に影響を与える可能性がある、Copilot によって生成されたコード提案を指します。
• INSECURE SUGGESTION は、セキュリティの脆弱性をもたらす Copilot によって生成されたコードの提案を指します。たとえば、あるユーザーは、自分に対するコード提案には、読み取られるサイズに対する説明責任が欠けていると指摘しました (ディスカッション #6636)。
分析:コード提案の品質は、実際のコード開発における Copilot の能力を決定する極めて重要な要素です。比較的少量の提案コンテンツの問題が特定されました。これは、ユーザーが使用法関連の問題と比較して、提案されたコードに関連する問題を報告する傾向が低いことを示している可能性があります。これらの問題の中で、「低品質の提案」、「無意味な提案」、「バグのある提案」が最も頻繁に報告される 3 つのタイプであり、「安全でない提案」と「効果の低い提案」はそれほど蔓延していません。この結果は、生成されたコードの品質がユーザーの大きな関心事である一方、セキュリティと有効性はそれほど優先されていないことを示しています。
5) ユーザー エクスペリエンスの問題 (4.2%): このカテゴリでは、Copilot の使用体験に関するユーザー フィードバックが取り上げられます。使用法の問題と比較すると、Copilot は通常、意図したとおりに実行および機能しますが、ユーザー エクスペリエンスは最適とは言えません。ユーザー エクスペリエンスの問題は、特定の使用シナリオが原因で発生したり、さまざまな状況に蔓延したりする可能性があり、Copilot を改善できる領域についての洞察が得られます。ユーザー エクスペリエンスの問題はさらに 4 つのタイプに分類でき、以下で詳しく説明します。
• 機能エクスペリエンスが不十分とは、Copilot のコア コード生成関連機能の使用法が満足できないという、一種のユーザー エクスペリエンスの問題を指します。これらの問題は多くの場合、ユーザーと Copilot 間の調整を妨げ、実際の開発作業の効率を低下させることさえあります。たとえば、あるユーザーは、Copilot によって提供される自動生成された提案が非常に気が散り、コード生成機能を手動でトリガーする必要があると苦情を申し立てました (ディスカッション #13007)。
• 不十分なサブスクリプション エクスペリエンスとは、Copilot サービスのサブスクリプションのプロセス中にユーザーが遭遇する障害を指します。 Copilot はいくつかのサブスクリプション方法 (学生認証、有料サブスクリプションなど) を提供しているため、サブスクリプション プロセス中にユーザーにとっては不便が生じます。たとえば、あるユーザーは、請求を設定した後、次に何をすればよいかわかりませんでした (ディスカッション #19119)。
• パフォーマンスの低下とは、Copilot の実行中に発生するパフォーマンスの問題を指し、通常はユーザー エクスペリエンスに直接影響します。これらの問題には、高い CPU 使用率、長い応答時間、過度に頻繁なサーバー アクセスなどが含まれます。 • 不十分な認証エクスペリエンスとは、Copilot を使用する前にユーザーが ID を認証するときに遭遇する不便さを指します。最も一般的な状況は、Copilot がユーザーに頻繁に再ログインを促すことであり、これが大きなフラストレーションの原因となる可能性があります。
分析:ユーザー エクスペリエンスの問題は、Copilot を改善する方向性についての貴重な洞察を提供します。機能エクスペリエンスが不十分な問題 (25) のうち、最も一般的に報告されている問題には、Copilot のインライン提案がユーザーのコーディング プロセスの中断を引き起こす (5) ことと、提案されたコードの特定の部分を受け入れられないという不便さ (2) が含まれます。これらの懸念事項は、Copilot がコードを生成できる時期や提案されるコードの長さの設定など、機能リクエストでユーザーが言及した要求の一部と一致しています。
6) 著作権とポリシーの問題 (3.4%): Copilot は、オープン ソース コードの大規模なコーパスでトレーニングされ、ユーザーのコード コンテキストに基づいてコードの提案を生成します。一部のユーザーから表明されているように、Copilot の動作方法は潜在的な著作権とポリシーの問題に関する懸念を引き起こします。これらの問題は、以下に示すように 3 つのタイプに分類されます。
• コードの著作権問題とは、Copilot によるモデルのトレーニングのためのオープンソース コードの不正使用に関して、一部のコード作成者によって提起された懸念を指します。 GitHub は現在、最も人気のある Web ベースのコード ホスティング プラットフォームの 1 つであり、Copilot のリリース以来、一部のコード作成者の間で、GitHub でホストされているコードがライセンスを適切に考慮せずにトレーニングに使用されているのではないかという疑惑がありました。
• CODE TELEMETRY ISSUE は、コードを収集して提案を生成するという Copilot のアプローチに関してユーザーが表明した懸念を指し、これにより機密コードの漏洩につながる可能性があります。また、ユーザーによっては、自分のコードだけでなく、Copilot によって生成されたコードが他の目的で収集されることを単純に嫌がる場合もあります。
• マーケットプレイス ポリシーの違反とは、他のプラグインが禁止されているにもかかわらず、提案された API を使用しているにもかかわらず、Copilot が VSCode マーケットプレイスに公開できたとユーザーが報告した特定のケースです。ユーザーは、この行為がマーケットプレイス ポリシーに違反しているのではないかと疑っていました (問題 #3)。
分析:著作権とポリシーの問題の出現により、Copilot の動作方法に対するユーザーの懸念が明らかになりました。 Copilot は多言語のオープンソース コードでトレーニングされており、提案を生成するために操作中にユーザーのコード コンテキストを収集する必要もあります。これら 2 つの事実により、人々は Copilot を使用する際、特に社内開発で著作権と知的財産の問題にもっと注意を払うようになりました。
B. 原因の種類 (RQ2)
2) 分析: Copilot の内部問題は、さまざまなタイプの使用上の問題を引き起こす可能性があり、最も一般的なタイプの原因です。 Copilot はクローズドソース プロジェクトであるため、内部の詳細はユーザーに公開されていません。したがって、Copilot に関連する上流の問題は、内部要因によって引き起こされる言語モデル、機能設計、サーバー側の問題を含む Copilot の内部問題であると考えられます。通常、Copilot の内部問題の特定は、異常な使用エクスペリエンスに関するユーザーのフィードバックに依存します。Copilot チームは、特定の根本的な原因を特定するためにさらに調査する必要があります。さらに、Copilot の内部問題が発生すると、一定期間内に同様の問題を報告するユーザーが集中することがよくあります。たとえば、サーバー側のデプロイメントが不適切な場合、ユーザーのグループが認証エラーに遭遇する可能性があります。
ネットワーク接続の問題は、認証失敗、実行時例外、アクセス失敗などを引き起こす一般的な原因です。ネットワーク関連の問題のほとんどは、ユーザーのネットワーク環境に起因します。一般的な状況は、ユーザーが HTTP プロキシまたは VPN 経由で Copilot にアクセスすることです。これにより、SSL 干渉が発生し、サービスが使用できなくなる可能性があります。しかし、良いニュースは、Copilot が HTTP プロキシ経由のアクセスをサポートするようになり、そのような懸念に対処できるようになったということです [17]。
エディタ/IDE の互換性の問題は、主に異常な機能の使用や Copilot の動作上の問題など、さまざまな使用上の問題の発生につながる可能性があります。
サポートされていないプラットフォームとは、一部のユーザーが特定の IDE またはテキスト エディターで Copilot を効果的に使用できない理由を指します。これは主に使用法と互換性に関連するいくつかの問題につながります。 Copilot はオープンソースではないため、多くのプラットフォームはリリース直後に Copilot を統合できず、その結果、一部のユーザーが Copilot を使用しようとするとさまざまな障害に遭遇することになります。したがって、Copilot が公式にサポートしている IDE を使用することをお勧めします。これにより、より便利で安定したコード生成サービスが提供され、最も一般的な問題の解決に役立つ成熟したディスカッション コミュニティへのアクセスが提供されます。
不適切な構成/設定は、機能の使用と互換性の問題の主な原因の 1 つです。たとえば、Copilot をインストールした後、そのデフォルトの構成と設定により、特定の IDE で誤動作したり、他のプラグインと競合したりする可能性があります。これらの問題の大部分は、構成を調整することで解決できます。
C. ソリューションの種類 (RQ3)
課題タイプとソリューション タイプ間の分布とのマッピングを、各ソリューション タイプを表す略語を使用して表 IV に示します。たとえば、「BFC」は、Copilot によって修正されたバグを表します。このマッピングは、ソリューションの大部分が使用法の問題と互換性の問題を対象としていることを示しています。機能リクエストの主な解決策は、主に正式な機能の実装 (FIC) を待つか、構成または設定の変更 (MCS) を通じて同様の効果を達成することです。ユーザー エクスペリエンスの問題は、ほとんどが Copilot チーム (BFC) によって改善されます。さらに、適切なバージョンの Copilot およびエディタ/IDE (USV) を使用すると、エクスペリエンスが向上します。提案コンテンツの問題を解決することは比較的困難です。入力方法 (MIW) を変更することで対処できる問題はほんのわずかであり、大部分には効果的な解決策がありません。著作権とポリシーの問題についても、解決策は比較的限られています。主な解決策は、Copilot の設定を調整してユーザーのコードのコレクションを制御することです。
2) 分析: Copilot によって修正されたバグは、さまざまな問題、特に特定の使用法と互換性の問題に対処するための主要なソリューションです。 Copilot の内部問題が最も頻繁に発生する原因であるため、これは合理的です。これは、新しいツールとしての Copilot の多くの問題は、ユーザー自身の努力では解決できないことを示しています。 Copilot のクローズドソースの性質により、ユーザーはフィードバックを提供するだけで、Copilot チームからの応答と解決策を待つことができます。
構成/設定の変更は、不適切な構成または設定に関連する問題を解決するための一般的な解決策であり、機能の使用法の問題、プラグインの互換性の問題、および認証の失敗にユーザー自身で対処できます。さらに、一部の機能リクエストについては、コードの提案を受け入れるようにキーボード ショートカットのボンディングを変更するなど、構成を変更するだけで、ユーザーが必要な機能を実現できます。ただし、Copilot 実行環境は複雑であるため、すべての状況に適した推奨構成を提供するのは難しいことがわかりました。したがって、各ケースを個別に分析する必要があります。
適切なバージョンを使用すると、セットアップ/操作の問題、機能の使用方法の問題、インストールの問題、およびエディタ/IDE の互換性の問題に対処する効果的な方法が提供されます。 Copilot は、ユーザーのフィードバックと開発計画に基づいて、多くのバージョンで迅速に反復されました。一方、一部の IDE も、これと互換性のある新しいバージョンをリリースしました。ただし、一部の古いバージョンは最新バージョンに比べて安定している可能性があり、バグや互換性の問題が含まれている可能性があります。したがって、適切なバージョンを使用することは、ユーザーにとって非常に効果的なソリューションです。
Copilot の再インストール/再起動/再認証は、ユーザーが認証の失敗、セットアップ/操作の問題、機能の使用上の問題を自分で簡単に解決できるもう 1 つのソリューションです。その原理は、Copilot の現在の状態をリセットし、以前に存在した可能性のあるエラーや設定を初期状態に戻すことです。
Copilot によって実装された機能は、主にユーザーの機能リクエストに対処する公式アクションとして機能します。 Copilot の新機能の開発速度は比較的速く、Copilot チームは現在 Copilot X の最新機能のいくつかを実験中です [18]。