アスペクト指向開発
平成27年度シラバス
2015年 1月 9日
国立情報学研究所
TOPSEプロジェクト
代表者 本位田 真一
アスペクト指向開発
鷲崎 弘宜、鄭 顕志、高橋 竜一ほか
本講座では、主にエンタープライズシステム分野における産業ソフトウェアを対象として、保守性の高いソフトウェアのオブジェクト指向分析/設計/実装問題を扱う。具体的には、従来のオブジェクト指向開発技術ではモジュール化/局所化が困難であった種々の関心事の分離を開発における上流工程から下流工程まで一貫して保つことで保守性の高いソフトウェアを高い生産性を伴って開発するために、対象問題のオブジェクト指向を発展させたアスペクト指向に基づく抽象化/モジュール化による分析能力、ならびにモジュールの分離/合成による設計/プログラミング能力を修得させることを目的とする。演習を通して、産業としてのソフトウェア開発におけるアスペクト指向に基づく開発プロセスを体験させ、アスペクト指向開発に必要な素養や知識を習得させる。
アスペクト指向プログラミング(Aspect-Oriented Programming: AOP)および支援環境を用いたアスペクト指向実装技術については、従来幾つかの同様な講座が開講されている。しかしそれらの講座にはさまざまな問題点があったため、受講生が習得した内容を速やかに開発現場で適用するための障害となっていた。本講座では、それらの問題点を解消し、本講座受講後に既存あるいは新規の分析/設計を含むアスペクト指向開発(Aspect-Oriented Software Development: AOSD)技術および支援環境を速やかに開発現場で適用できるように配慮している。表 1に、既存の講座の問題点と、本講座における解を示す。
表 1 既存の講座の問題点と、本講座における解
既存の講座の問題点 |
本講座における解 |
実装段階で横断的関心事を分離/合成する様々なAOPがあるが、特性や適用可能領域、有効性が十分にまとめられていない。 |
代表的なAOP処理環境であるAspectJ, JBossAOP, SpringAOPの演習と比較考察を実施し、それらに共通な部分/異なる部分を理解する。AOPを利用せずにオブジェクト指向分析設計およびプログラミングを実施する場合との比較実習によりAOPの長所・短所を理解する。 |
AOP処理系・動作フレームワークを主にブラックボックスなツールとして扱い、AOPが機能する具体的な仕組み・背景理論を把握しにくい。 |
JavaScriptによりAOP動作フレームワークを独自に実装し、AOP処理系やフレームワークに必要な要素技術、および、仕組みを理解する。 |
周辺技術としてオブジェクトコンテナ, DI(Dependency
Injection), アノテーションがあるが、AOPとの関係は明確に整理されていない。 |
DIコンテナを用いる場合の演習と比較考察を実施し、AOPとの関係と併用ノウハウを習得する。アノテーションとの併用についても言及する。 |
上流の分析からAOP実装に結びつけるプロセスはあるが、ノウハウ(標準環境における記述法、)がまとめられていない。完結した「例」がない。 |
ユースケースによるアスペクト指向開発手法(AOSD with Usecases)と AspectJ/SpringAOPの併用により一貫した実用的例題を分析から実装に至るまで演習を実施し、プロセスと適用ノウハウを習得する。 ICONIX とJavaを併用した場合との比較実習によりAOSDの長所・短所を理解する。 |
近年、エンタープライズシステムは大規模化、複雑化が進んでいる。大規模化/複雑化しつつあるエンタープライズシステムでは、高い価値をもたらす機能やサービスを、複数のシステムやモジュールが内部的あるいはネットワーク越しに接続され、相互に連携して動作することで実現する。従来の小規模なシステムの制御ソフトウェア開発に課せられる非機能要求は一般に低く、また、機能要求も小さいものであり、機能もしくはデータ単位のモジュール分割と合成を基調として開発されていた。対して近年のネットワークシステムでは、プラットフォーム/環境変革の速さや企業/利用者ニーズの多様化および変化の速さ、および、価値増大のためのスケーラビリティや性能/可用性の高い要求に応じるため、機能やサービスを高い保守性および信頼性を持って効率よく実現する技術と利用する技術が必要となる。このような文脈において、高品質かつ高生産なソフトウェア開発を実施するために、機能もしくはデータ単位のモジュール組み合わせに代表される従来型の開発方法論は新規開発や保守/拡張に膨大な工数を必要とし、もはや現実的手段ではない。
高い品質が要求される多機能なエンタープライズシステムを制御するソフトウェアの複雑さの例(抜粋)を図1に示す。図1は、ネットワーク越しに顧客がWebクライアントを用いてホテルの部屋を予約し、また、顧客のホテル到着時に管理者がチェックイン処理する機能を、ユーザ認証による高信頼性を伴って実行可能なシステム制御ソフトウェアのオブジェクト指向に基づく要求分析および設計の結果を示す例である。ここで、顧客による部屋の予約要求を従来のオブジェクト指向開発方法論に基づいて分析/設計するならば、ソフトウェアを顧客画面、予約処理、部屋、予約の4つのモジュール(クラス)によって実現する設計結果を得る。一方、他の機能要求として管理者によるチェックイン処理要求について同様に分析/設計すると、管理者画面、チェックイン処理、部屋、予約の4つのクラスによって実現することとなり、部屋および予約のクラス群内部において保持するデータや処理の「もつれ合い」が発生し、また、各機能要求を実現するためのデータや処理の多数のクラスへの「散らばり」が発生する。さらに、高い信頼性を満たすためユーザ認証の仕組みを各機能に伴ってオブジェクト指向により実現するならば、その仕組みを実現するためのデータや処理も複数のクラスに「散らばる」と同時に他のデータや処理と「もつれ合う」結果となる。これらのソフトウェア構造における「もつれ合い」や「散らばり」は、各機能要求/非機能要求の変更に対する変更容易性や将来の拡張に対する拡張性および部分の再利用性の著しい低下につながり、さらには開発における生産性の低下を引き起こす。
上述の分析/設計問題に対する解法として、アスペクト指向開発技術を用いることができる。アスペクト指向開発では、各機能要求/非機能要求をそれぞれ異なり分離された「関心事」として捉えて、各関心事を実現する分析/設計レベルのクラスを分離されたアスペクトもしくはアスペクトを包含するモジュール単位に局所化し、分析/設計/実装/運用の任意の時点において合成する。ここでアスペクトとは、従来のオブジェクト指向開発においてクラス集合からなるソフトウェア構造に「散らばり」、他と「もつれ合う」データや処理を1つにまとめあげて後の合成を可能とする新しいモジュール単位である。アスペクト指向技術の適用により、上流から下流まで一貫した関心事およびその実現結果の分離と追跡可能性の維持を実現し、その実現により高い保守性/再利用性/生産性を達成する。具体的には、上流工程においてユースケースによるアスペクト指向開発手法を代表とするアスペクト指向分析/設計手法を適用し、下流工程においてAspectJやJBossAOPを代表とするアスペクト指向プログラミング技術/環境(フレームワークおよびコンテナ)を適用することができる。また、下流工程においてSpring Frameworkを代表とする依存性注入(Dependency
Injection)の仕組みを併用可能なアスペクト指向プログラミング環境の適用も重要である。
このように高い品質が要求される多機能なエンタープライズシステムを効率よく実現するためには、ソフトウェア開発の上流工程においてアスペクト指向に基づく分析/設計方法論を適用すること、下流工程においてアスペクト指向プログラミングを適用すること、および、それらの適用を支援する適切な開発支援環境を活用していくことが重要となる。実際のソフトウェア開発にこれらの手法/技術を適用していく為には、それぞれの開発方法論/プログラミング技術が前提としている条件を理解し、現在抱えている現実問題の特性に合わせた方法を取捨選択して組み合わせるといった様々なノウハウが必要である。しかし、現在では、実問題に適用する為の実践的ノウハウとして整理されたカリキュラムは少なく、アスペクト指向を一貫して現実に適用していく上での大きな妨げとなっている。
図1 オブジェクト指向によるホテル予約システム分析設計結果における複雑さ
本講座では、エンタープライズシステムを題材として産業ソフトウェアの分析/設計/実装問題を扱い、オブジェクト指向技術の限界と、アスペクト指向技術の必要性を学ばせる。アスペクト指向分析/設計技術、アスペクト指向プログラミング技術、および、それらを一貫して扱うためのアスペクト指向開発方法論について学ばせ、品質の高い多機能ソフトウェアを開発するために有用な素養と知識を身に付けさせる。さらに、エンタープライズシステムのソフトウェア分析/設計/実装問題にアスペクト指向技術を用いた分析/設計/実装演習を実施し、アスペクト指向開発の知識と活用能力を体得させる。
本講座で取り上げる手法およびツールを以下にあげる。
l
手法
Ø
上流から下流まで一貫したユースケースによるアスペクト指向開発手法(AOSD with Usecases)
l
ツール
Ø
アスペクト指向プログラミング環境: AspectJ
Ø
アスペクト指向プログラミング環境: SpringAOP
Ø
アスペクト指向プログラミング環境: JavaScriptに基づくAOP処理フレームワークの独自実装JavaScriptAOP
Ø
DIコンテナツール: Spring Framework
Ø
UMLモデリングツール: astah*
本講座の受講生は、TopSE講座「ソフトウェア工学入門」「基礎理論」「コンポーネントベース開発」の履修等を通じて、以下の項目を習得済みであることが望ましい。
l
集合論
l 論理学
l UML
l オブジェクト指向プログラミング
l オブジェクト指向分析/設計
8. 講義計画
・
概要(予定、変更の可能性あり)
第2回
オブジェクト指向プログラミングの限界
第3回
アスペクト指向プログラミング
第4回 AspectJ・振る舞いへの作用
第5回
AspectJ・振る舞いへの作用の実践
第6回 AspectJ・構造への作用
第7回
アスペクト指向分析/設計とユースケース
第8回
ユースケースによるアスペクト指向開発: ピアユースケース
第9回
ユースケースによるアスペクト指向開発: 拡張ユースケース
第10回 Web開発におけるオブジェクト指向の限界
第11回 DIコンテナとSpring
第12回
SpringAOP
第13回 JavaScriptAOPフレームワークの実装と利用
第14回
事例
第15回
まとめ
・
詳細(予定、変更の可能性あり)
第1回 全体構成
n
はじめに 〜本講座の概要〜
n
アスペクト指向とは?
n
OOPの限界
n
AOPの概念
n
AOP処理系:拡張言語
n
OOADの限界
n
AOSDの概念
n
まとめ
第2回 オブジェクト指向プログラミングの限界
n
オブジェクト指向
n
オブジェクト指向開発プロセス:ICONIX系
n
課題P1:AOP/AOSDによる開発の理解
n
演習S1:ホテル予約システム OOAD+Javaによる実装
n
まとめ
第3回 アスペクト指向プログラミング
n
<解答例>演習S1:ホテル予約システム OOAD+Javaによる実装
n
アスペクト指向プログラミング
n
AOP処理系:ライブラリ
n
AOP処理系:フレームワーク
n
AOP処理系:拡張言語
n
ツール演習:AspectJ/AJDTプラグイン体験
n
まとめ
n AspectJとは
n 振る舞いへの作用
n まとめ
第5回
AspectJ・振る舞いへの作用の実践
n
演習S2:ホテル予約システム AspectJの利用
n
まとめ
第6回
AspectJ・構造への作用
n
構造への作用
n
アスペクトの高度な定義
n
アノテーションの活用
n
演習: AspectJの構造への作用と高度な定義
n
まとめ
第7回 アスペクト指向分析/設計とユースケース
n
ユースケースとは
n
ユースケースとAOP(AspectJ)との親和性
n
ユースケースによるアスペクト指向開発
n
まとめ
第8回 ユースケースによるアスペクト指向開発: ピアユースケース
n ユースケースによるアスペクト指向開発
n AOPの手法によるユースケース記述
n ユースケーススライス
n ピアユースケースの拡張
n ユースケースモジュール
n ユースケースによるアスペクト指向モデリング
n モデリングの道具立て/ツール
n 演習S3:ホテル予約システム AOSD+AspectJによる実装
第9回 ユースケースによるアスペクト指向開発: 拡張ユースケース
n
<解答例>演習S3:ホテル予約システム AOSD+AspectJによる実装
n
演習S3’:ホテル予約システム AOSD+AspectJによる実装(機能追加)
n
まとめ
n
補足資料:ユースケースによるアスペクト指向モデリング〜応用編〜
第10回
Web開発におけるオブジェクト指向の限界
n
<解答例>演習S3’:ホテル予約システム AOSD+AspectJによる実装(機能追加)
n
Webアプリケーション開発
n
Java EE 5
n
Java Servlet
n
Servletの利用例
n
JSP
n
JSPの利用例
n
課題P2:Webアプリ開発へのDI、AOP利用とその理解
n
演習S4:ホテル予約システム(Webアプリケーション) DAOをMockオブジェクト化
n
まとめ
第11回
DIコンテナとSpring
n
<解答例>演習S4:ホテル予約システム(Webアプリケーション) DAOをMockオブジェクト化
n
DI
n
DIとAOPの違い
n
DIコンテナ
n
Spring概要
n
SpringのDIコンテナ
n
演習S5:ホテル予約システム(Webアプリケーション) Spring DIの利用
n
まとめ
第12回
AOPフレームワーク(SpringAOP)
n
<解答例>演習S5:ホテル予約システム(Webアプリケーション)Spring DIの利用
n
AOPの復習
n
AOPフレームワーク
n
AOP処理系
n
SpringAOP
n
SpringAOPの利用例
n
演習S6:ホテル予約システム(Webアプリケーション) Spring AOPの利用
n
まとめ
n JavaScriptの基本
n JavaScriptによるBeforeアドバイスの実現
n 演習:
JavaScriptの基本的な扱い
n 演習:
JavaScriptによるAfter、Aroundアドバイスの実現
n 演習:
ダブルクリック防止等のAOPフレームワークによる追加実装
n まとめ
n オブジェクト指向の問題
n アスペクト指向の効果
n 企業事例
第15回 まとめ
n
全課題を振り返って
n
技術比較
n
ポストオブジェクト指向
n
全体のまとめ
アスペクト指向開発技術を活用した以下のスキルを身につけることができ、複雑および大規模なシステムを効率よく分析/設計/実装/保守できるようになる。
l 上流工程におけるユースケースによるアスペクト指向開発手法(AOSD with Usecases)を代表とするアスペクト指向分析/設計手法の適用能力を習得できる。
l 下流工程におけるAspectJを代表とするアスペクト指向プログラミング技術/環境(フレームワークおよびコンテナ)の適用能力を習得できる。
l 下流工程におけるSpring Frameworkを代表とする依存性注入(Dependency Injection)の仕組みを併用可能なアスペクト指向プログラミング環境の適用能力を取得できる。
l 異なるアスペクト指向プログラミング環境およびDI環境の比較検討能力を習得できる。
以上の知識およびスキルから、エンタープライズシステムのような複雑かつ大規模なソフトウェアシステムの開発に関して、上流から下流まで一貫した関心事およびその実現結果の分離と追跡性が維持された形でソフトウェアをアスペクト指向分析/設計/実装する能力を身に付けることができる。
さらに、AspectJ, Spring Framework(SpringAOP)の2つのアスペクト指向プログラミング/DI環境を使い分けて、ソフトウェア実装の作業を効率的に進めることができるようになる。こうした環境活用のスキルにより、新たなアスペクト指向プログラミング環境の利用が必要になったときに、より迅速かつ的確な環境活用の能力を身に付けることができる。
l アスペクト指向プログラミングAspectJおよびSpringAOP
l アスペクト指向開発手法AOSD with Usecasesによるアスペクト指向分析/設計モデリング
l DIコンテナ/フレームワークSpring Frameworkを活用したオブジェクト指向プログラミング
l
JavaScriptに基づくAOP処理フレームワークの独自実装JavaScriptAOP
個人単位、および、2〜3名程度の少人数で構成されたグループ単位で作業を行う。エンタープライズシステムを題材として産業ソフトウェアの分析/設計/実装問題を扱い、オブジェクト指向技術の限界と、アスペクト指向技術の必要性、アスペクト指向による分析/設計モデリングおよび実装コーディングプロセスを体得する。グループ内で、アスペクト指向技術の適用前後について比較評価を行い、アスペクト指向技術および周辺技術の有用性と適用性を議論する。議論を通してアスペクト指向開発の理解を深めながら、分析/設計/実装プロセスの実用的ノウハウを会得する。
演習課題レポート、プレゼン発表、出席日数を総合して評価する。
l Robert Filman, Tzilla Elrad, Siobhan Clarke and Mehmet Aksit, “Aspect-Oriented Software Development,” Addison-Wesley, 2004.
l 千葉滋, アスペクト指向入門, 技術評論社, 2005.
アスペクト指向開発を構成する基盤技術およびAOPについて述べられており、この講義に最適である。
l 長瀬嘉秀, 天野まさひろ, 鷲崎弘宜, 立堀道昭 著, "AspectJによるアスペクト指向プログラミング入門", ソフトバンクパブリッシング, ISBN 4797326387, 2004.4.
l arton, Seasar2で学ぶ DIとAOP アスペクト指向によるJava開発, 技術評論社, 2006.
l 長谷川裕一, Java・J2EE・オープンソース Spring入門 より良いWebアプリケーションの設計と実装, 技術評論社, 2005.
l Ivar Jacobson, Pan-Wei Ng 著, “Aspect-Oriented Software Development with Use Cases”, Addison-Wesley, 2005. (邦訳)鷲崎弘宜, 太田健一郎, 鹿糠秀行, 立堀道昭 訳, "ユースケースによるアスペクト指向ソフトウェア開発", 翔泳社, ISBN 4798108960, 2006.
アスペクト指向プログラミング技術としてのAspectJ、DI+AOP技術としてのSpring、および、ユースケースによるアスペクト指向開発手法についてそれぞれ詳細に解説されており、各技術・手法の習得に最適である。