netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2004-10-05 古い日記からの変換データ [長年日記] ▲
_ [Java]J2SE 5.0 (JDK1.5) ▲
J2SE 5.0 をインストールしてみた.今までは C:/ 直下にディレクトリを作っていたのに,なんと Program Files 以下にインストールされる.とても大きな進化.
_ [論文]アーキテクチャレベルでの情報可視化 ▲
Mohlalefi Sefika, Aamod Sane and Roy H. Campbell:Architecture-Oriented Visualization.Proceedings of OOPSLA96, pp.389-405, CA, USA.
情報をまとめて抽象化して提示するのが大事ですよと主張する論文.メソッド単位,クラス単位ではなくサブシステム単位などで情報を集計した結果を出すためにInstrument という名前の観測ツールをCompositeパターンで合成して使うらしい.どのクラスがどのサブシステムに対応するかは開発者が与えないといけないので手間はそれなりにかかる.
_ [論文]オブジェクトの探索 ▲
Raimondas Lencevicius, Urs Holzle, Ambuj K. Singh:Query-Based Debugging of Object-Oriented Programs.Proceedings of OOPSLA97, pp.304-317, Atlanta, GA, USA.(注: Holzle の o はウムラウトつき)
デバッグ時にオブジェクトの情報を参照したいけど普通のデバッガだと特定のインスタンスしか見れないのでクエリーにマッチするようなオブジェクトのペア(というかtuple)を取り出してきましょうという話.
クエリーかけるのに a == b かどうかの判定ができないといけないとか,属性(フィールド)の参照に副作用があってはいけないとかいう条件は付くが,(a include b) and (c include b) and (a != c) のようにしてオブジェクト b を共有しているオブジェクト a, c のペアを見つけるとか,何か色々な使い方はできる,ということらしい.筆者たちの実装では,オブジェクト集合から該当オブジェクトを探すパフォーマンスもそれほど悪くない(1秒程度で結果が表示され始める)らしい.
いつクエリーを実行して,どうデバッグに使えるのかというところについての言及はあまりなかったりするが…….条件付ブレークポイントに比べてどのくらい便利なのか?というのがいまいち見えてこなかったりする.「あるクエリーにマッチするオブジェクトのメソッドが呼ばれたなら……」という条件付ブレークポイントなんかを作れば便利?
_ [work]動的解析の高速化 ▲
プロファイル結果→イベント列→集計情報→頂点集約→DOTという段階を踏んで処理を進めていくと,各頂点が集約対象かチェック→頂点に接続した辺を操作という処理が O(V*E): Vは頂点数,Eは辺数となってしまって遅くてたまらないことが判明.(辺のつなぎ替えが集合の操作なので実はさらに遅い…)
除去されることになる頂点については,それぞれ source(V) = {V に到達する依存関係の発生頂点の集合}という集合を記憶しておいて,{除去される頂点 V → 除去されない頂点 v }の依存関係が発生したらsource(V) の各頂点 → v の辺を生成するようにした.
こうすると,ログのサイズ n に比例する時間で処理が進むのでだいぶ高速になった.集合の管理の手間があるので,厳密に O(n) とは限らないが.
とはいえ,AspectJ のコードだと,AspectJ がいっぱい依存関係を追加で生成しているようでデータ依存関係が分かりやすいとは到底いえないみたい.