Analyzing the History and Lifetime of Case Studies in Software Design Technologies
英語タイトルの意図するのは、ソフトウェア設計に関わる技術の有効性を評価・検証・比較する時に用いられるケーススタディや例題の歴史や寿命を分析しよう、という感じ。
ここでいう、ソフトウェア設計技術ってのは、プログラミング言語であったり、パターンであったり、リファクタリングであったり、その他テクニック(IoC or DI)であったりする。直接設計に影響を与えないようなツール(リファクタリングブラウザ、メトリクス、その他)は、(とりあえず)除く。
で、こういう技術は、簡単なケーススタディとか例題とかを使って評価・検証・比較されることが多い(少なくとも僕が調べた範囲でここ数年の研究だと)。
と同時に、同じ例題が、同じ研究者や異なる研究者に使いまわされることも多い。たとえば、10年前に Sullivan が博士論文で Mediator の例としてあげた例は、今なお使われている。
Sullivan, K.J.,
Mediators: Easing the Design and Evolution of Integrated Systems,
Ph.D. Dissertation, University of Washington Department of Computer Science and Engineering, Technical Report UW-CSE-94-08-01, August, 1994
http://www.cs.virginia.edu/~sullivan/publications/mediators_phd.html
AOP コミュニティでは、(歴史は浅いかもしれないけど)Figure Editor の例が使われまくってる。
Gregor Kiczales, Erik Hilsdale, Jim Hugunin, Mik Kersten, Jeffrey Palm and William G. Griswold
An Overview of AspectJ
ECOOP 2001
他にも、Mixin 関連で見られる graph traversal application なんかも今でも例題として使われてる。
Ian M. Holland.
Specifying reusable components using contracts.
ECOOP'92
そう、なぜ、ケーススタディの寿命、あるいは、歴史を調べ分析する必要があるのか? 単なる趣味なのか?
理由あるいは仮説あるいは疑問は:
・もし、同じ例題が使いまわされる傾向があるのなら、その例題を使って提案された手法・技術は、その例題以外のどこで有効なのか。その他の例題を使って、提案手法はどのくらい有効性が検証される傾向があるのか。
・そもそも、その例題は実践的に遭遇する代表的な例題なのか。その例題はどのようにして作られたのか。提案手法のデモンストレーションのために後から作り出された例題なのか。それとも、実際のコード例から抽出され、問題のエッセンスを表す例題なのか。
・その例題は、当時の問題と現在の問題に今なお一致する代表的な例題なのか。
これらの質問に答えるためには、実際にコードを調査する必要があると思う。幸い、オープンソースとかのおかげで、調査対象として使えるコードはいっぱいある。
「ソースコードの中に、どのくらいに実際に例題が存在するのか」
この質問に答えるのは、技術的に結構難しいかもしれない。たとえば、デザインパターンがどのくらい実際に使われてるのかを調査するための、パターン検出の研究が数年前から行われている。しかし、デザインパターンのように抽象化されており、クラス構造や関連、あるいは、クラス持つロールなのが理解されている対象でも、自動的に検出することは今なお難しいといわれている。
Joseph (Yossi) and Gily Itay Maman
Micro Patterns in Java Code
OOPSLA'05
もちろんデザインパターンの検出と例題の検出は違うかもしれない。
まとめ:
設計技術の検証は、難しい。現実的なプロジェクトに提案技術を導入したり、提案技術を使って一からスクラッチで作って有効性を検証するのはコストと時間がかかるため、多くの場合、簡単な例題やケーススタディを使って提案技術の評価・比較・検証が行われる。
しかし、その例題やケーススタディ自体の現実性というのは、あまり注目されていないように思える(もちろん、多くの研究者は気付いているはずだけど、実際には行動には出ていないきがする)。
例題やケーススタディの寿命や使われ方の歴史を分析することは、色々な疑問を生み出す。「その例題は代表的か」「その例題は今でも有効か」
例題の使用を実際のコードから検出することは、これらの疑問に答える一つの方法だと考えられる。
関連文献:
Zelkowitz,MV, Wallace,DR
Experimental Models for Validating Technology
http://binf.gmu.edu/weller/pages/BINF633_f2005_CourseDescription.htm
IEEE Software 1998
Walter F. Tichy
Should Computer Scientists Experiment More?
http://www.idi.ntnu.no/emner/dif8916/
M.S. Feather, S. Fickas, A. Finkelstein & A. van Lamsweerde
Requirements and Specification Exemplars
Automated Software Engineering; 4(4) pp. 419-438, 1997;
http://eis.jpl.nasa.gov/~mfeather/Publications.html
Susan Elliott Sim
A Theory of Benchmarking with Applications to Software Reverse Engineering
Ph.D. Dissertation, 2003
http://www.ics.uci.edu/~ses/phd/