[修士論文] 前処理命令解析と関数コール解析に基づく機能スイッチ特定

2/1 に小林研M2の森園さんが修士論文の発表を行いました.

論文題目:前処理命令解析と関数コール解析に基づく機能スイッチ特定
論文概要:

複数の環境に対応させるため, また機能の切り替えを可能とするためにソフトウェア中に設定による可変点を設けたものをコンフィギュラブルシステムという. 多くのOSSでは, ソースコード中に対して前処理命令を埋め込むことによりコンフィギュラブルシステムの実現する.このようなソースコードの理解をするためには前処理命令の依存関係を同時に理解する追加の労力が必要となる.設定の変更による振る舞いの変化を理解するためには, 前処理命令で使われる様々なマクロ変数のなかの機能に関する可変点を追跡することが重要である. このため,機能スイッチを特定する必要がある.

本論文では, 前処理命令中に登場するマクロ変数のうち, 機能スイッチとして使われるものを特定する手法を提案する. 本研究では, まず関数コールの関係とマクロ変数による依存関係を表現するグラフモデルを考案する. 提案モデルは3種類のノードとその間の11種類の関係からなる. 機能スイッチを判別するために,このモデルに基づいたグラフ構造に対する7つの判別ルールを定義する.判別ルールの内訳は, 2つが基本検出ルール, 5つが補助ルールであり, 補助ルールは更に2つの追加検出ルールと, 3つのフィルタリングルールにわけられる. 提案手法は,モデルに基づく前処理命令解析によって依存関係をグラフデータベースに格納し, 7種類の判別ルールを組み合わせることにより機能スイッチを特定する.

提案手法を実現するツールを実装し,Linuxカーネルを含む4つの大規模・中規模OSSに対して適用する実験により,提案モデルと7種類のルールによる効果を評価した. その結果, 実用的な時間でグラフ生成が可能であり,2つの基本検出ルールは, 一方がPrecision, もう一方がRecallの面で優れること,補助ルールも有効であることを明らかにした.
また,その結果を元に複数のルールを4通りに組み合わせて,精度の比較を行った. その結果, グラフ上のマクロ変数と関数コールとの間の特徴的な依存関係に基づき検出し, ソースコード中に#defineによって定義されているマクロ変数を除外する手法が, F-measureにおいて精度が高いことを確認した. 本実験の結果より, グラフの構造から機能スイッチを特定する手法は一定の精度が期待できることを明らかとした.