(邦訳:複数のプログラミング言語に対応するソースコードリエンジニアリングフレームワークに関する研究)
坂本 一憲 国立情報学研究所 アーキテクチャ科学研究系 特任助教 |
[背景]既存ツールがプログラミング言語ごとに開発されている
[問題]複数言語に対応したツールの開発を支援する枠組みがない
[貢献]共通の抽象構文木上でのツール開発を実現
[問題]複数言語に対応したツールの開発を支援する枠組みがない
[貢献]共通の抽象構文木上でのツール開発を実現
プログラムソースコードリエンジニアリングはソフトウェア開発においてソフトウェアの品質を低コストで改善するための重要な技術の1つである.たとえば,テストカバレッジはソフトウェアテストの品質を評価する重要な指標である.テストカバレッジの測定では,製品コードを変形して特殊な命令を埋め込むことで,テスト時の実行履歴を取得できるようにする.ソースコードの変形処理はソースコードリエンジニアリングの一種であり,上述の例以外にも,ソフトウェア工学上での多様な問題を解決するために,さまざまなソースコードリエンジニアリングツールが開発されている.
しかし,既存のリエンジニアリングツールには2つの問題点が存在する.問題1)プログラミング言語が多様化しているため,複数の言語に対応したツールを開発するコストが莫大である.そのため,多くのツールは1言語または少数の言語のみに対応しており,ユーザが利用する言語によってはツールから受ける恩恵が制限される.問題2)多くのツールは特定の言語のみに特化して開発されているため,対応する言語が異なるツール間において相違点が存在している.たとえば,テストカバレッジ測定ツールであるEMMAはJava言語にのみ対応しており,Coverage.pyはPython言語のみに対応している.一方,Microsoftが2012年に公開した新しい言語である,TypeScript言語に対応するツールは存在していない.EMMAは三項演算子(<条件式> ? <trueの時の式> : <falseの時の式>)を2つのステートメントに分解してステートメントカバレッジを測定するが,Coverage.pyはそのような分割は行わない.そのため,JavaとPython言語を用いて開発したWebアプリケーションに対して,これらのツールを用いて正確なステートメントカバレッジの測定を行うことは困難である.以上の問題を解決するため,複数の言語に対応するツールの開発コストを削減して,ツール間の相違点を低減する手法が必要である.
これらの問題を解決するために,本研究では新しいフレームワーク,Open Code Coverage Framework(OCCF)とUnified Code Reengineering Framework(UNICOEN)を提案する.OCCFは複数のプログラミング言語に対応した一貫性と柔軟性のあるテストカバレッジ測定フレームワークである.ソースコードの抽象構文木が言語ごとに異なる木構造を取る一方で,同じ言語機能に該当する部分木の構造は類似しているため,OCCFは類似構造に着目した共通処理を再利用可能なコードとして提供する.UNICOENはOCCFを汎用化する形で開発したリエンジニアリングツール全般の開発を支援するためのフレームワークである.OCCFは言語毎に異なる抽象構文木の構造を提供しているのに対して,UNICOENでは言語共通の抽象構文木の構造を定義して,各抽象構文木を共通の抽象構文木に変換して,その上でリエンジニアリングツールを構築する.UNICOEN上でツールを開発することで,言語の差を極力意識せずにUNICOENが対応する言語すべてに対応するツールを容易に構築できる.
被験者実験を通してOCCFがカバレッジ測定ツールの開発を支援すること,また,UNICOENを利用して複数言語に対応するアスペクト指向プログラミング言語処理系UniAspectとメトリクス測定ツールUniMetricsを開発して,UNICOENが複数言語に対応するリエンジニアリングツールの開発を支援することを確認した.
しかし,既存のリエンジニアリングツールには2つの問題点が存在する.問題1)プログラミング言語が多様化しているため,複数の言語に対応したツールを開発するコストが莫大である.そのため,多くのツールは1言語または少数の言語のみに対応しており,ユーザが利用する言語によってはツールから受ける恩恵が制限される.問題2)多くのツールは特定の言語のみに特化して開発されているため,対応する言語が異なるツール間において相違点が存在している.たとえば,テストカバレッジ測定ツールであるEMMAはJava言語にのみ対応しており,Coverage.pyはPython言語のみに対応している.一方,Microsoftが2012年に公開した新しい言語である,TypeScript言語に対応するツールは存在していない.EMMAは三項演算子(<条件式> ? <trueの時の式> : <falseの時の式>)を2つのステートメントに分解してステートメントカバレッジを測定するが,Coverage.pyはそのような分割は行わない.そのため,JavaとPython言語を用いて開発したWebアプリケーションに対して,これらのツールを用いて正確なステートメントカバレッジの測定を行うことは困難である.以上の問題を解決するため,複数の言語に対応するツールの開発コストを削減して,ツール間の相違点を低減する手法が必要である.
これらの問題を解決するために,本研究では新しいフレームワーク,Open Code Coverage Framework(OCCF)とUnified Code Reengineering Framework(UNICOEN)を提案する.OCCFは複数のプログラミング言語に対応した一貫性と柔軟性のあるテストカバレッジ測定フレームワークである.ソースコードの抽象構文木が言語ごとに異なる木構造を取る一方で,同じ言語機能に該当する部分木の構造は類似しているため,OCCFは類似構造に着目した共通処理を再利用可能なコードとして提供する.UNICOENはOCCFを汎用化する形で開発したリエンジニアリングツール全般の開発を支援するためのフレームワークである.OCCFは言語毎に異なる抽象構文木の構造を提供しているのに対して,UNICOENでは言語共通の抽象構文木の構造を定義して,各抽象構文木を共通の抽象構文木に変換して,その上でリエンジニアリングツールを構築する.UNICOEN上でツールを開発することで,言語の差を極力意識せずにUNICOENが対応する言語すべてに対応するツールを容易に構築できる.
被験者実験を通してOCCFがカバレッジ測定ツールの開発を支援すること,また,UNICOENを利用して複数言語に対応するアスペクト指向プログラミング言語処理系UniAspectとメトリクス測定ツールUniMetricsを開発して,UNICOENが複数言語に対応するリエンジニアリングツールの開発を支援することを確認した.
(2013年6月15日受付)