研究紹介

肥後研究室では「ソフトウェア工学」の研究を行っています.ソフトウェア工学とは,品質の高いソフトウェアを低コストで期限内に開発し,効率良く保守するための技術を扱う学問分野です.

肥後研究室では,大規模ソフトウェアの開発効率向上を目指して,ソフトウェア工学の中でも「プログラム解析」と呼ばれる分野の研究に注力しています.プログラム解析とは,ソフトウェア開発における成果物,すなわちソースコードや設計ドキュメントを解析することによって,複雑なソフトウェアの理解や修正に必要となる情報を抽出する技術です.開発者それぞれが高性能な計算機を使用している現在の状況を踏まえて,開発履歴情報やプログラムの実行時情報,バグ情報データベースや開発者のメーリングリストの情報など,多様な情報を迅速に解析し,開発環境を通じて開発者の作業を支援していく方法を研究しています.

具体的には,開発者が遭遇する次のような疑問に対して,開発者が適切な判断を下すために必要な情報を自動的に収集する手法を研究しています.

研究成果のソフトウェアとしての公開

肥後研究室では,構築した理論や実験の結果を論文として発表するだけでなく,ソフトウェア開発者が実際に適用できるソフトウェアとしても外部に提供しています.これまでに以下のようなものが公表されています.

研究テーマ

肥後研究室の研究テーマは,大きく分けて,次の3つに分類できます.

これら3つのテーマに沿って,肥後研究室では,ソフトウェア開発における成果物からの情報抽出技術,取得できた情報の性質の調査や,その情報を用いた開発者のサポートなど,個別の要素技術の研究を行っています.

既存のソフトウェアを資産として活用する手法

ソフトウェアを一から新しく作成するのではなく,可能な限り過去のソフトウェアを再利用することが,生産性の向上の鍵であると言われています.現在,肥後研究室ではソフトウェア資産の再利用に関する研究プロジェクトに力を入れています.

再利用部品の抽出
再利用にあたり,まず何が再利用できるのかを知る必要がありますが,そのために過去に開発されたソフトウェアのソースコードを「部品」単位に分解して整理し,データベース化する手法が必要です.また,それらの部品の利用規約(ライセンス)などの情報も併せて記録する必要があります.
様々な大規模ソフトウェアが蓄積されている現在,この準備を手作業で実施することは非現実的です.本研究では,ソースコードや付属ドキュメントからこれらの情報を自動的に抽出することを目指しています.
部品の検索
蓄積された部品の中から開発しようとしているソフトウェアに適合した部品を探すのが「部品検索」です.本研究では,部品の利用実績に基づいて「再利用に適しているかどうか」を数値として算出することを目指しています.
コーディングパターンの分析
再利用する部品が決まり,それを実際に開発中のソフトウェアに組み込むには,部品の使い方を調べ,使用手順をソースコードとして記述する必要があります.
コーディングパターンとは,プログラム中に頻出するソースコード片のことです.本研究では,データマイニング技術をソースコードに対して適用し,過去のソフトウェアから部品の典型的な利用例を抽出することを目指しています.
ソフトウェア部品表(SBOM)
ソフトウェア部品を再利用した後には,脆弱性などのセキュリティリスクやライセンス違反などの著作権侵害リスクを継続的に管理する必要があります.ソフトウェア開発で使用した部品を網羅した SBOM を活用してこれを実現する動きが高まっており,SBOM の自動生成や SBOM を用いてソフトウェアエコシステムの分析を行う技術が求められています.本研究では,実態調査や技術開発を通じて SBOM の普及促進を目指しています.

開発中のソフトウェアの現状を分析する手法

ソフトウェアの動作や品質を効果的に調べるには,開発者が注目したい動作,あるいは品質の指標だけをソフトウェアから抽出し,不要な情報を自動的に取り除くことが重要な研究課題となっています.

ソフトウェアメトリクスを用いた品質の測定
ソフトウェアメトリクスとは,ソースコードの規模,複雑さ,保守性など,ソフトウェアの特定の側面を数値化して定量的に示す指標です.
楠本研究室と共同でメトリクス計測プラットフォーム MASU を開発し,様々なソフトウェアメトリクスの計測や性質の評価を行いました.
プログラム理解のための辞書の構築と提供
ソースコードに登場する関数や変数,クラスなどには,その意味を表す名前が付けられます.しかし,識別子の名前の付け方については,ガイドラインは存在するものの,名前の付け方のうちごく一部を指定するにとどまっています.また,実際に付けた名前が適切であるのか,ソースコードの他の部分と一貫した命名規則であるのか,開発チームの他のメンバーにとって理解しやすい名前であるのかといった点を評価する方法は知られていません.そこで,本研究では実際のソースコードから変数や関数の名前を自動的に抽出し,それらの関係を辞書として可視化することで,プログラム理解の補助や,適切な命名を支援することを目指しています.
実行履歴の可視化
多数の機能を持つソフトウェアでも,その利用者が一度に実行する機能の数には限りがあります.実行途中のソフトウェアの動作を記録し,その結果を開発者に図示することで,開発者は,ある特定の機能の実行に関するソフトウェアの動作を効果的に分析することができます.本研究では,ソフトウェアの実行履歴情報を効率よく収集し,どのような機能が実行されたかなど,有用な情報を自動的に抽出することを目指しています.

ソフトウェアの品質の改善方法を提示する手法

大規模なソフトウェアから,設計上,あるいはコーディング上の潜在的な問題を自動的に検出し,開発者へ提供することで,ソフトウェアの品質改善を支援します.

コードクローン検出
コードクローンとは,プログラムのソースコード中に存在する形や構造のよく似た部分のことを言います.コードクローンが多く存在するとソフトウェアの保守作業が難しくなるので,コードクローンを高速に検出し,取り除く手法を研究しています.また,ソースコードの開発履歴やコードクローン情報から得られたメトリクス値を使って,ソフトウェア部品に欠陥が存在する可能性の調査を行う手法を研究しています.
リファクタリング支援
リファクタリングとは,ソフトウェアの機能を保ったまま設計を改善し,ソースコードの可読性,保守性を改善する活動を言います.本研究では,効率の良いリファクタリングを行うために,設計モデルやソースコードからソフトウェアの保守性を悪化させる可能性のある部分を発見する手法の構築を目指しています.
開発者が調査すべきソースコードの抽出
プログラムに欠陥が見つかると,開発者はその欠陥を持った機能に関連するソースコードを調査する必要があります.本研究では,この調査を支援するために,制御フロー解析,データフロー解析などを用いて開発者が調査すべきソースコードの範囲を自動で抽出することを目指しています.