学位論文要旨



No 124368
著者(漢字) 櫻井,孝平
著者(英字)
著者(カナ) サクライ,コウヘイ
標題(和) コンポーネント固有の関心事のためのアスペクト指向言語機構
標題(洋) Aspect-Oriented Language Mechanisms for Component Specific Concerns
報告番号 124368
報告番号 甲24368
学位授与日 2009.03.23
学位種別 課程博士
学位種類 博士(学術)
学位記番号 博総合第891号
研究科 総合文化研究科
専攻 広域科学専攻
論文審査委員 主査: 東京大学 准教授 増原,英彦
 東京大学 教授 玉井,哲雄
 東京大学 教授 山口,和紀
 東京大学 教授 山口,泰
 東京大学 准教授 田中,哲朗
内容要旨 要旨を表示する

近年のソフトウェア開発はモジュール性を高めることが重要である. モジュール性は開発においてシステムの分割の程度を示す性質である. 近年の計算機システムは大規模化, 複雑化および多様化しており, 開発者がそのようなシステムの開発を管理することが困難になっている. 開発者は適切なモジュール分割によって, そのようなシステムの複雑さを抑え, モジュール性を高めることで, システムの変更, 開発者ごとに独立した開発, およびシステムの理解を容易にする.

適切なモジュール分割とはシステムが関心事単位に分割されることをいうが, 従来の代表的な分割手法である階層的な分割では, 近年のソフトウェア開発において, うまくモジュール化できない関心事が存在することが知られている. そのような関心事は横断的関心事と呼ばれる. 階層的な分割において, 横断的関心事の振舞がシステムの複数のモジュールを横断することでモジュール性が低下する.

横断的関心事をモジュール化するための手法としてアスペクト指向プログラミング(AOP) が提案されている. 開発者はAspectJ に代表される現行のAOP 言語を利用することで, 横断的関心事をアスペクトと呼ぶモジュール単位として定義し, システムのモジュールに適用する. アスペクトには関心事の振舞を記述したアドバイスと, アドバイスを適用する範囲を指定したポイントカットが定義される.

横断的関心事はシステムのソフトウェアアーキテクチャに基づき, 2 種類に分類できる. 横断的関心事はその振る舞いが横断するモジュールの範囲がシステムごとにきまる. この範囲はシステムのアーキテクチャが定義するコンポーネントの範囲に対応し, 横断的関心事はコンポーネント固有のものとそうでないものに分類できる. コンポーネント固有でない関心事は, 振舞が一般的で, 他のコンポーネントに適用できる. このような一般的な関心事はAOP 言語を利用して汎用的な振舞をもつアスペクトして定義できる. 一方, コンポーネント固有の関心事は, 特定のコンポーネントのための振舞をもつため, AOP 言語を利用した場合, アスペクトの定義は他のコンポーネントに修正なしには適用できない.

本研究は, コンポーネント固有の関心事を現行のAOP 言語を利用して記述する際, 高いモジュール性を得ることが困難な問題の解決に取り組む. AspectJ に代表される現行のAOP 言語で, この種の関心事のモジュール化に際し発生する, 以下の問題点を扱う. (1) 複数のオブジェクトの関連を扱う関心事のオブジェクトのグループに対して, 状態を持つ振舞を簡潔に記述することが困難である. (2) 対象のプログラムの変更によって意図せずにアスペクトが動作しなくなる. (3) メソッドの実行履歴に基づいて対象のプログラムの時点を指定することが困難である. 本研究は, これらの問題に対して, 現行のAOP 言語の拡張による解決を目標とする.

本研究では現行のAOP 言語の拡張として2 つの新しい言語機構を提案する. 問題(1) に対しては連想アスペクト(association aspects) を提案し, 問題(2) および(3) に対してはテストに基づくポイントカット(test-based pointcuts) を提案することで解決を図る.

連想アスペクトは, アスペクトのインスタンスをオブジェクトのグループに関連付けることを可能にする機構であり, 状態を持つ横断的な振舞をうまくモデル化し, 簡潔に実装することができる. アドバイスを適用する際に, アスペクトのインスタンスを関連付けたグループの一部のオブジェクトから検索し, 発見したインスタンスの文脈でアドバイスを実行することができる. 本研究では, 連想アスペクトの実現方式として, AspectJのアスペクトを拡張し, 関連づけのためのデータ構造の追加と検索を行うコードを挿入する手法を提案した.

テストに基づくポイントカットは, 単体テストケースを利用して対象の範囲を指定する機構である. 単体テストケースは対象のプログラムのメソッドの動作を検査するためのサンプルプログラムである. テストに基づくポイントカットは, 単体テストケースで利用される決められた変数を通じて, コンポーネント内部の情報に依存せずにメソッドを指定する. 対象コンポーネントの構造や要素の名前が変更された場合でも, 単体テストケースが一貫して決められた変数を利用することで, 意図した指定を続けることができ, 問題(2) を解決する.テストに基づくポイントカットは, 対象のプログラム実行時に, 指定した単体テストケースが検査対象のメソッドの実行を監視し, 検査対象のメソッドが単体テストケースと同様の実行履歴をともなった実行時点を指定することで問題(3) を解決する. 本研究では, テストに基づくポイントカットの実現方式として, AspectJ のポイントカットを拡張する手法を提案した. 提案手法では, 単体テストを選択するポイントカットを定義し, コンパイル時に単体テストを実行することで, 単体テストの選択と実行履歴の記録を行う. そして, 実行時に記録した実行履歴の比較を行うためのコードをテスト対象のメソッドに追加する.

本研究では, これらの言語機構を現行のAspectJ コンパイラを拡張することで実装し, 性能と記述力に関して評価実験を行った. 性能の評価実験では連想アスペクトは約1.2 倍, テストに基づくポイントカットは約2.42 倍の速度低下にとどまり, 実用に耐える範囲にあることを確認した. 連想アスペクトの記述能力の評価実験では, 既存のエディタとビルドシステムを統合した開発環境を構築するためのアスペクトを実際に記述する際に, 連想アスペクトを使うことで現行のAspectJ と比較して60% のコード量削減を確認した. テストに基づくポイントカットの記述能力の評価実験では, オープンソースで開発された既存のバグ追跡システムの, 4 個のバージョンに含まれる2 種類のコンポーネント固有の関心事を, テストに基づくポイントカットを利用して記述した. この結果, 現行のAspectJ と比較して, バージョンの更新によるポイントカットの意図しない指定が実際に削減されることを確認した. また, テストに基づくポイントカットの実行履歴によって実行時点を指定する機構の有用性として, オープンソースで開発されたネットワークファイル交換プログラムの通知機構の追加に関する事例を示した. 以上の実験結果から, 提案した言語機構が本研究で扱う問題を含むコンポーネント固有の横断的関心事の記述に有効であり, 容易に高いモジュール性を得ることができることを示した.

審査要旨 要旨を表示する

本論文は、アスペクト指向プログラミング言語を拡張する2 つの言語機構について述べたものである。アスペクト指向プログラミング(AOP) 言語は、セキュリティや実行記録などのように、従来のプログラミング言語ではプログラムの全体にわたる記述が不可避であった処理をアスペクトと呼ばれるモジュールにまとめられるものとして注目を集めている。しかし現状のAOP 言語は、提供する機能の抽象度が低く原始的であるため、プログラムの表現力や保守性に限界があることが指摘されている。本論文は特に(1) 抽象化機能として(a) データや部品間の「関連」や(b) 実行履歴を表わすためのものが不充分であることと、(2) アスペクトがプログラムの細部の設計に依存することによってプログラムの保守性が低下すること、という問題を解決するための2 つの言語機構を提案したものである。

第一章では、ソフトウェア開発におけるモジュール性が果たす役割と、モジュール化のためのプログラミング手法の1 つであるAOP 言語について述べている。第二章では、AOP 言語の研究開発についての現状を分析し、特に上記(1),(2) の問題がプログラムの表現力および保守性にとって重要となっていることを指摘している。

第三章は、上記(1)(a) の問題に対して「連想アスペクト」と呼ばれる機構を提案している。連想アスペクトは、データや部品間の「関連」を表わす抽象概念を、具体的なアスペクトとして表現するための機構であり、アスペクトのインスタンス化、関連の追加と削除、関連に基づいてアスペクトの動作を制御する「ポイントカット」から成っている。この章ではまた、連想アスペクトの効率的な実現手法を示し、その実行性能を評価している。実験結果からは、連想アスペクトを用いるオーバーヘッドは、それを用いずに低レベルで同等の動作をするプログラムと比べて高々19 パーセントであり、提案機構が充分に実用的な性能を持っていることを示している。さらにこの章では、連想アスペクトを用いて既存のアプリケーションプログラム2 つを密に連携させたアプリケーションプログラムを実現する事例研究を行い、連想アスペクトが実用規模のソフトウェアに利用可能であることと、従来の言語よりも簡潔な記述を達成していることを示している。この連想アスペクトの提案は、それまで抽象度の低い機能だけで構成されていたAOP 言語に対し、より抽象度の高い機構を組み込むことの有効性を言語設計・実現方式・事例研究に渡って示しており、学術的に高い貢献が認められる。実際、この機構を用いた新しい研究や、この機構を改良する提案などの研究も他の研究者によって行われており、国際的にも高い評価が得られている。

第四章は、上記(1)(b) および(2) の問題に対して「テストに基づくポイントカット」機構を提案している。従来のAOP 言語では、アスペクトを動作させるタイミングとして、対象プログラムの詳細な振舞いを指定しなければならず、特に実行履歴を抽象化するような場合にアスペクトの開発や保守を困難にしていた。提案機構は、履歴を含めたタイミングの指定をテストプログラムを通して間接的に行わせるものである。この章では、提案機構の設計と、テストプログラムの実行履歴を記録・比較するコード埋め込み技法を用いた実現方式、実行性能・記述力・プログラム保守性に関する実験について述べている。従来の言語で抽象度の低い記述を行った場合に対する比較では、実行オーバーヘッドは最大でも2.5 倍に抑えられたこと、プログラムの更新に対する頑健性が向上したことが確認されている。また、実際のweb アプリケーションプログラムに対して提案機構が適用できることも示されている。これまでのAOP 言語の研究では頑健性を向上させるためにアスペクトの能力を強く制限するものであったのに対し、本提案ではテストプログラムを通した指定という独創的なアイデアによって、頑健性と表現力の向上が両立できることを示した画期的なものとなっており、今後より高水準のプログラミング言語の設計につながる重要な指針を与えるものと期待ができる。

本論文は、AOP 言語の発展にとって重要となっている2 つの課題それぞれについて独創的な解決策を提案しただけでなく、効率的な処理系の作成方法や、実用規模のアプリケーションプログラムに適用した事例研究を通して高い実用性を示した、完成度の高い研究である。したがって、本審査委員会は博士(学術) の学位を授与するにふさわしいものと認定する。

UTokyo Repositoryリンク