BLOGTIMES
2004/06/26

Aspectのデバックってどうしたらいいんだろう

  aop 
このエントリーをはてなブックマークに追加

AspectJなんかを使ってプログラミングをしていると、Aspect自体のデバッグをどうしたらよいのかわからないことがでてきました。

通常のクラスのテストであれば、すっかり有名になってしまったJUnitを使えば大概のことはおさえられるようになりましたが、現在のところAspectに対応するJUnitのようなツールはないのです。さて、どうしたものかといろいろ考えてみました。

なぜAspectのデバッグなのか

Aspect指向に慣れてくると、より汎用的(抽象的)なAspectを作りたいと思うようになります。このあたりはOO*1の発想と一緒ですね。さらに、ゆくゆくはそれらを集めてライブラリのようなものにしていきたいと思うのが、開発者のサガとしては自然でしょう。

ここでの問題はAspectを汎用にすれば汎用にするほどAspectが織り込まれる対象となるクラスは多くなるということです。つまり、Aspectに変更を加えると広範なクラスに変更を加えたのと同じことになるので、大規模なプロジェクトの場合にはリグレッションテスト *2のコストがとんでもないことになってしまいます。

そもそも、AOPの目的は横断的関心事をモジュール化するためにあるので、テストも横断的関心事のみで行えないと、AOPの意義自体が吹っ飛んでしまいます。でも、これを支援するようなツールはでは存在していないようです*3。まぁ、スライシング云々という手段があるということは知っているのですが、あまりスマートな手段でないような気がします。

テストがされていないプログラムに価値がないのは自明ですが、僕のポリシーとしてはテストできない(やりにくい)プログラムはその時点で価値が半減していると思っているのですが、どうでしょうか。

AOPはまだまだこれからの技術で、AspectJは確かに面白いですが、僕の中ではまだテストしにくいプログラムです。早く実戦投入したいのもやまやまですが、このせいで実戦投入をためらってしまっています。

AspectJを使っている世の中の人はデバックをどうやっているんでしょうか。まだ、Logの取得のようなプログラムに対して差しさわりのないような処理だけを行っているのかな。

Aspectのテストって何だろう

Aspectのテストでやらなきゃいけないことですぐに考えつくはこの2つでしょうか。

 ・織り込まれる先のモジュールに対して、不必要な影響を与えていないか。
 ・Aspect本体(Advice)に書かれた内容が正しく機能しているか

前者については織り込まれる先のモジュールに影響を与えないようなAspectであればテストケースがそのまま使えるので簡単でしょう。でも逆に織り込まれる先のモジュールに対して積極的に影響を与えるようなAspectを考えるとテストケースも変化してしまうのでかなり難しそうです。

後者についてはもっと厄介そう。例えばLogを出力するAspectを考えた場合に、Logがきちんと書かれたかどうかについて調べたいということなんですが、ログを書くという行為は、織り込まれる先のクラスにとってはメタレベルの話になるので、そのクラスはログのことについて知る由もないわけです。つまり、通常ではテストのやりようがない。

ここまで書いて、頭が痛くなってきました。。。。

問題山積ですね

研究室のAspectチームDebug&Testチームはこれについて何かたくらんでいるようです。何か名案がでるのでしょうか。楽しみです。

  • *1: Object Orientedの略で、オブジェクト指向のこと。
  • *2: システムに変更を加えたときに、その変更による予想外の影響が現れていないかどうか確認するテストのこと。詳しくはこちら
  • *3: Aspectの世界ではちょっと有名な後輩のS君談

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/241
Trackbacks
Java AOPとはAspect Oriented Programming(アスペクト指向プログラミング)の略。 アスペクトとは横断的関心事(cross-cutting concerns)である。システム全体に関わる機能であり,システムの様々な場所で必要と...
PukiWiki/TrackBack 0.1 (2004/08/25 10:10)
Local Trackbacks
先日に引き続きは大学でAOPに関するミーティング&ディスカッションに出席。 後輩たちはそろそろ来月の中間発表に向けての仕上げに入っていかなければならないので、今後の予定を決定しました。 * 僕はAOPが...
(2004-09-18)
今日は大学で先週の続きをディスカッション。 結構、盛り上がりました。
(2004-07-03)
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン