ソフトウェア工学
現代社会では様々なところで情報システムが稼働しており、それらシステムを支えているのがソフトウェアであり、我々の生活の基盤となっています。ソフトウェア工学は、ソフトウェアの品質を高めたり、ソフトウェア開発の効率を向上させる技術を研究する学問です。ソフトウェア工学は、開発の上流工程(要求定義?設計)から下流工程(実装?テスト)までの幅広い範囲を対象としていますが、私は特に下流工程に焦点を当てて研究を行っています。具体的には、リファクタリングやファジングなどの技術に関する研究に取り組んでいます。
リポジトリマイニングとは、ソフトウェア開発における開発履歴(リポジトリ)からソフトウェア開発に関する知見を取り出す、ソフトウェア工学におけるデータマイニング手法の一つです。現代のソフトウェアの多くは、Gitに代表されるバージョン管理システムを用いて開発されており、その開発履歴はGitHubなどのリポジトリホスティングサービスに公開されています。リポジトリホスティングサービスには、ソースコード(プログラム)の変更履歴だけでなく、バグやソースコードの変更に関する議論なども含まれており、これらの情報を分析することで、バグの起こりやすい箇所や、開発者のコードレビューの傾向などを知ることができます。
リファクタリングとは、ソフトウェアの外部的な振る舞いを変更することなく、内部の構造を改善する技術を指します。非常にシンプルなものでいうと、プログラム中の関数や変数の名前を、より分かりやすいものに変更することもリファクタリングの一つです。私は奈良先端科学技術大学院大学で博士課程に在籍していた頃からリファクタリングに関する研究に取り組んできました。当時からリポジトリマイニング研究は盛んに行われていたのですが、リファクタリングに着目したリポジトリマイニング研究を行う際に必要な、リファクタリングの実施履歴を取得するための技術が当時は十分でなかったため、ソースコードの変更履歴からリファクタリングの実施履歴を推定する手法を提案しました。その後、このリファクタリング検出技術が発展し、現在はNikolaos Tsantalisらが開発したRefactoringMinerというツールが広く使われるようになり、リファクタリングに関するリポジトリマイニング研究が盛んに行われています。私の近年の研究では、リファクタリング検出技術を用いて取得したリファクタリングの実施履歴を機械学習することで、リファクタリングすべきコードを開発者に自動的に推薦するための技術開発に取り組んでいます。