[修士論文] 大規模前処理マクロコーパスによる機能スイッチ特定
- 02 /
-
05 2019
2/5 に小林研M2の北脇さんが修士論文の発表を行いました.
論文題目:大規模前処理マクロコーパスによる機能スイッチ特定
論文概要:
ソフトウェアプログラムには,プログラムそのものを変化させる事が可能なコンフィギュラブルであるものが数多くある.本研究ではコンフィギュレーション手法の一つである C/C++ の前処理命令を対象とする.前処理命令はその変数である前処理マクロ変数による文字列置換で条件分岐を伴うソースコードの変更を行うものである.変化を指定する前処理マクロは,プログラムの振る舞いの変化を指定するために利用される機能スイッチマクロと,実行環境の差異を吸収する環境スイッチマクロに分類できる.プログラムを読解する際には,コンフィギュレーションによる機能変更を把握するために,機能スイッチマクロの指定による変化を把握することが重要である.しかし,環境スイッチマクロと機能スイッチマクロはいずれも変化を指定する前処理マクロ変数である前処理スイッチマクロであり,プログラム中の記述のみからこれらの役割の判別は難しいという問題がある.
本研究の目的はソースコードから機能スイッチマクロを特定する事である.本研究では,まず前処理マクロ変数をインクルードガード,コンパイル時情報マクロ,環境スイッチマクロ,機能スイッチマクロ,定数・関数マクロの 5 種に分類する.また,大規模にソースコードを収集し各前処理マクロ変数のプロジェクト横断的な特徴を取得する前処理マクロコーパスを構築する.この分類と前処理マクロコーパスを利用して,前処理スイッチマクロを抽出する手法と抽出結果を機能スイッチマクロと環境スイッチマクロに分類する手法を提案する.分類では環境スイッチマクロがプロジェクト固有でなく多くのプロジェクトに出現するという予想に基づき,プロジェクト横断的な特徴であるプロジェクト出現数とカテゴリ出現数や,利用頻度を表す複数のプロジェクトでの出現回数と前処理分岐命令中の出現回数などが一定以下のものを機能スイッチマクロであると判定する.
これらの提案手法を FreeBSD の 12,067ports に出現する 629 万種類の前処理マクロ変数を格納する前処理マクロコーパスを用いた実験で評価した.評価実験により,提案手法では前処理スイッチマクロの抽出と環境スイッチマクロと機能スイッチマクロの分類,どちらもが十分に行えないことを明らかにした.