卒業研究のご紹介
2021年版

情報系所属学生

プログラミング支援のためのコード機能推定に基づくソースコード推薦手法

齋藤 愛莉佳神奈川県
大学院情報工学専攻 博士前期課程1年
(情報学部情報工学科2021年3月卒業)
神奈川県 向上高等学校出身

研究の目的

ITを活用したビジネスが増加してきており、プログラミング技術を持つ技術者の需要は高まってきている。一方では、情報技術を活用したビジネスの拡大化に対応できる技術者が圧倒的に足りておらず、月日が経つにつれて不足する技術者数は増加していくという予測がされている。この予測から、「技術者の負担が増加する」、「技術者を育てるために必要となる人材や時間を割けない」等の問題が発生し、拡大していくことが推測できる。このような問題を緩和するためには、ソフトウェア・エンジニアの技能やソフトウェア開発の効率を高める仕組みが必要である。そのために、ソースコード推薦やソースコード自動生成等の研究がされている。
本研究では、プログラミング学習及びソフトウェア開発の支援を目的として、コード機能推定に基づいてプログラム作成者やプログラミング学習者が求めている機能を持つソースコードを推薦する手法を提案した。

研究内容や成果等

■ 提案手法


図1 提案システムの概要図

図2 ロジック・コーパスの生成例

図3 機能推定の手順
本研究では、この課題を解決するために、プログラム作成者等が求める機能を持つソースコード推薦手法を提案する(図1)。提案手法の特徴は、ソースコード手順の文脈を解釈して、処理手順を補完する機能、及び続きとなる機能を持つソースコードの推薦機能を実現する点にある。このために、まずソースコード機能分析により、ソースコード手順を機能ラベルの列として抽出し、ソースコード集合を機能ラベル列集合として表現したコーパス(以降、ロジック・コーパス)を生成する(図2)。ロジック・コーパスの深層学習により、ソースコードの機能を推定・補完するコード機能推定モデルを構築する。コード機能推定モデルは双方向LSTMで構築する。推定モデルに未完成の機能ラベル列を入力し、補完可能と思われる機能をn個推定する。補完対象となる機能の位置より前にあるコンテキストは順方向、後にあるコンテキストは逆方向に並び替えた後に推定モデルに入力する(図3)。

■ 実験

実験では、ロジック・コーパスの学習によりソースコード手順を補完する推薦機能が実現可能であることを確認する。機能ラベル推定にはCode2Vecを用いる。Javaソースコード750件より生成したロジック・コーパス例を表1に示す。このロジック・コーパスを双方向LSTMとLSTMで学習し、コード機能推定モデルを構築した。補完機能の推定対象となる未完成ソースコード5件(表2)を入力したときの評価数の結果を図4に示す。表2で「*」は補完機能の位置を表す。高評価(合致)、中評価(類似)、低評価(合致・類似せず)と評価基準を定めて評価した結果、推定した機能への高評価の数は双方向LSTMが多かった。

表1 ロジック・コーパスの例

表2 推定モデルに入力する機能ラベル列

図 4 評価数の算出結果

■ まとめと今後の展望

実験結果より、提案手法の実現可能性を確認できた。今後、ロジック・コーパス数を増やすとともに、BERTを用いたコード機能推定モデルを構築し、提案手法の有用性を検証していく。 
指導教員からのコメント データベースシステム研究室教授 鷹野 孝典
これまでのソースコード検索・推薦技術は、ソースコードの機能と類似性に着目して、ユーザの目的にあったソースコードを提示する方法が主流である。本研究における齋藤さんのアイディアは、ユーザがプログラミングする手順を「プログラミングの文脈」と捉えて、ユーザが作成中のソースコードの文脈をAIが理解することができれば、より柔軟かつ適切にユーザが必要とするソースコードを提示できるのでは、と考えた点である。齋藤さんは、現在本学大学院に進学して、ソースコードの文脈をAIに学習させるために、ソースコードのより汎用性の高い表現方法に着目した深層学習手法の開発に取り組んでいる。今後さらに、ソフトウェア開発支援のための実用的なソースコード検索・推薦システムとして展開していく予定である。
修士研究学生からの一言 齋藤 愛莉佳
本学では、プログラミング技術はもちろんのこと、画像や音声の処理方法やデータベース管理等の様々な技術について学べる環境とカリキュラムがあるため、しっかりと基礎を築き専門的な技能を身につけることができました。
研究活動では、教授や大学院生、卒業研究生と議論し合ったり、情報を共有したりすることで、大学入学前から行いたいと考えていた研究をしつつ、より多くの技能を身につけることができました。また、他の方の研究を見聞していくうちに、自分の研究についてより理解を深めることができ、新たなアプローチ方法を見出すことができました。