netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2005-06-01 [長年日記] ▲
_ [論文][ツール] 静的解析でテストケースを生成 ▲
Christoph Csallner, Yannis Smaragdakis: Check 'n' Crash: Combining Static Checking and Testing. Proceedings of International Conference on Software Engineering 2005, pp.422-431, May 2005. 配列の範囲外の値を参照するとか,null参照を使ってしまうとかいった問題が起きる可能性を静的に検出して,そのクラッシュするような条件(CounterExample)をJUitのソースとして生成して,実際に走らせてクラッシュするかどうかをチェックする(クラッシュしなければ false positive)とかいう話らしい.
手続き単位だけで解析し,他のメソッドの返り値の範囲などは気にしないようなので,手軽に使えるツールなのかも……と思ったが,必要だった時間がけっこう長い(5KLOCで1.5分,18KLOCで26分)ので不安.CnCという名前でツール自体は公開されているらしいので,暇があったらつついてみるのもいいかも.
2005-06-02 [長年日記] ▲
_ [Java] XML操作 ▲
XMLファイルを手軽に読み書きする方法を探してたら,XML Data Binding Resourcesというページを発見.ざっと見た限りでは,XMLの好きな要素とJavaクラスのメソッドを任意に対応付けられるCastorがかなりよさそう.XMLの構造がまだ固まってない間でも,マッピングだけ変えたらクラス側が影響を受けないのが嬉しい.
_ [論文] 動的影響波及解析 ▲
Taweesup Apiwattanapong, Alessandro Orso, and Mary Jean Harrold: Efficient and Precise Dynamic Impact Analysis Using Execute-After Sequences.
Proceedings of International Conference of Software Engineering 2005, pp.432-441, May 2005.
輪講で紹介した論文.あるメソッドAが実行された後に実行された(returnで戻った先含む)メソッドすべてはAに影響を受ける,という基準での動的な影響波及解析の方法.各メソッドが最初に実行された時間と最後に実行された時間だけを覚えておくことで,低コストで解析を実現している.
シーケンス図上で影響を受けた部分を図示するといったデバッグ用途では使えそう.
しかし,影響波及と言われて想像する回帰テストの範囲の特定などには使えなさそう.テストしないと計測できないし,テストケースが揃わなかったら取りこぼしが起きる.影響波及解析という名前でなければあまり気にしないのかもしれないが.
_ [論文] クラスとアスペクトを1つにしたclasspects ▲
Hridesh Rajan, Kevin J. Sullivan: Classpects: Unifying Aspect- and Object-Oriented Language Design.
Proceedings of International Conference on Software Engineering 2005, pp.59-68.
クラスとアスペクトという別々のモジュール単位ではなく1個のモジュール単位に統一しようという意欲的だけれど怪しい論文.
ポイントカットに関連付けられるアドバイスをメソッドに限定しているので,クラスが通常のメソッドと,特定のJoin Pointsに反応するイベントハンドラを両方持った形になる.アドバイスの本体はメソッドとして実装されるので,オーバーライドなどは簡単に実現できる. アスペクト自体がインスタンスとして明確に管理されることになるので,アスペクトに貼りつく階層的なアスペクトは定義しやすそう.Java でのイベントリスナのような相互接続の仕組みが不要になるという利点もある.
そのかわり,クラスとアスペクトの区別がないので,new Logging(obj)
といったコンストラクタ呼び出し(=アドバイスの接続)がobj
の機能を変更するかもしれない,ということになるので,開発者の負担は上がりそうな気が.
2005-06-03 [長年日記] ▲
_ [AspectJ][ツール] 部分評価を使った最適化 ▲
SCoPE Compilerをリリースしますと増原先生のannounceが流れていた. partial evaluation して if ポイントカットをコンパイル時にできるだけ解決する(たとえばシグネチャの文字列に対する正規表現マッチなどが静的に解決される)という青谷さんがSPA-SUMMER 2004のときに発表していた研究成果.
現時点(6/3 13時)では,DistributionやExamplesがNot Foundだったけど…….
15時追記: 直ってました. ダウンロードしてさっそく導入してみたものの,Cygwinだと動かない. ClassNotFoundやらInternal Compile Error とか吐かれたりしたので, Program Files の間の空白が気になったのでダブルクォートの適用,パス区切りの ":" と ";","/" と "\" の違いを全部変更してみた.
# 元のバージョン: 実行時に can't find classfile のエラーが起きる # 長いので改行入り REQUIRED_CLASSPATH=${SCOPE_BASE_DIR}/lib/static_if.jar: ${SCOPE_BASE_DIR}/lib/abc_extention.jar: ${SCOPE_BASE_DIR}/lib/abccomplete.jar: ${SCOPE_BASE_DIR}/lib/aspectjrt.jar java -classpath "${REQUIRED_CLASSPATH}" -Dscope_jars="${CLASSIC_CLASSPATH};${CLASSPATH}" -Xmx256M tao.static_if.Main $*
オリジナル版では,
-Dscope_jars
に渡す引数がCLASSPATH
になっているが,ここをREQUIRED_CLASSPATH
にしたら
エラーは出なくなった.Cygwin で動作させたバージョンは次のとおり.
# 動いたバージョン: やはり1行が長いので途中改行入り SCOPE_BASE_DIR="c:\java\scope" CLASSIC_CLASSPATH="C:\Program Files\Java\j2re1.4.2_08\lib\rt.jar" REQUIRED_CLASSPATH="${SCOPE_BASE_DIR}\lib\static_if.jar; ${SCOPE_BASE_DIR}\lib\abc_extention.jar; ${SCOPE_BASE_DIR}\lib\abc-complete.jar; ${SCOPE_BASE_DIR}\lib\aspectjrt.jar" java -classpath "${REQUIRED_CLASSPATH}" -Dscope_jars="${CLASSIC_CLASSPATH}:${REQUIRED_CLASSPATH}" -Xmx256M tao.static_if.Main $*
このツール,Java 1.4 のランタイムとJ2SE5.0が両方必要という謎の仕様だけれど,abcで実装されているようなので,言語拡張とかを実装実験したい人向けの良いサンプルになりそうな予感.
2005-06-06 [長年日記] ▲
_ [ツール] SCoPE の続き ▲
SCoPE の Web ページで紹介されている,メソッド名に正規表現がマッチするかどうかでアドバイスの実行を決定するアスペクトを貼り付けて,次のような感じのコードで時間計測してみた.AspectJのajcコンパイラとの比較で,コンパイル時間は 2.3 sec → 9.3 sec と増加したものの,実行時間は 9.8 sec → 4.2 sec と削減.単に正規表現の評価比率がプログラムの中身に対して大きいせいとはいえ,かなりの効果を見せた.
// サンプル(動かしたものはもうちょっとだけ複雑) for (int i=0; i<100000; ++i) { test(); // 中身は System.out に数字を書き出すだけ }
実行時間の削減よりも,declare warning などに与える式として,静的に入力が決定可能な関数なら何でも使えるようになるのが効果として大きいような気がする.コード解析ツール実行 → 情報をリテラルとして定義したソースを生成 → declare warning としてウィーブするとか.そのうち,楽しい使い方が出てくる,かも?
_ [論文] 実行時にテスト用コードを付けたり外したり ▲
Jonathan Misurda, James A. Clause, Juliya l. Reed, Bruce R. Childers, Mary Lou Soffa: Demand-Driven Structural Testing with Dynamic Instrumentation.
Proceedings of International Coneference on Software Engineering, pp.156-165, May 2005.
テスト実行時には,カバレッジなどの計測用コードを埋め込んでプログラムを実行する.そのとき,必要になってから計測用コードを埋め込んで,不要になったら(たとえば既にカバレッジを満たしたコードからは)計測用コードを取り外す,というテストツールを構築して実験している論文.
通常の計測に比べるとずっと高速であるという結果は出している.付けて外してを繰り返していくと,その時点でどんなプログラムが実行されてるのかよく分からなくなるので怖いけれど,それはアスペクト指向系のプログラミング環境だって似たようなものか.
2005-06-08 [長年日記] ▲
_ [AspectJ] 特定のクラスに所有されているオブジェクト ▲
特定のクラスに所有されているオブジェクトを他のインスタンスと区別したくなったので,フィールドに対するアノテーションが使えないかどうか調査してみた.しかし,アノテーションはあくまでフィールド宣言に対して情報を付加しているだけなので,そもそも使いようがなかったらしい.アスペクトで,フィールドに格納されたオブジェクトを記憶しておくくらいしか手がないような気がする.
_ [OUCC] mousuper 画像 ▲
テンキー付きマウス mousuper の写真.シリアルポートなところに時代を感じる.
2005-06-09 [長年日記] ▲
_ [work] 論文集め ▲
ICSEのワークショップ Modeling and Analysis of Concerns in Software とかいうのが実はAOP関連だったことに気づいた.Proceedings は ACM SIGSOFT の Software Engineering Notesとして出るらしいので,少し待つ必要はありそう.
_ [論文]メンテナンス作業の観測 ▲
Andrew J. Ko, Htet Htet Aung, Brad A. Myers: Eliciting Design Requirements for Maintenance-Oriented IDEs: A Detailed Study of Corrective and Perfective Maintenance Tasks.
Proceedings of International Conference on Software Engineering 2005, pp.126-135, May 2005.
輪講で紹介された論文.ソフトウェアの保守(主にバグ修正)において,開発者がどのように作業を進めているかを小さなソフトウェアに対して実験を行っている.
こんなツールがあったらいいだろう,というので機能の説明なんかを書いてるので,ツール説明の英文書くときの参考にする予定.
2005-06-10 [長年日記] ▲
_ [授業] 3年のゼミ ▲
資料の作り方が,良い人はだいぶ良くなってきた感じ.本文の不要な冗長な表現も適度にカットできていて,初期の頃よりは発表も聞きやすかった.でも,まだ用語の把握が怪しいけど.configuration management をどう説明するかで悩んだが,とりあえずビルド用のファイル構成の管理あたりについて説明.
余った時間は微妙に雑談.Free BSDか何かの上でちょっとしたGUIをJavaで作ろうとしているらしい.X Window とかのことはまったく知らなかったらしいので,標準でGUIライブラリが付いてるJavaに流れたらしい.標準ライブラリの影響は大きいのかもしれない.
_ [論文][work] 実行時の制約検査 ▲
Marcelo d'Amorim, Klaus Havelund: Event-Based Runtime Verification of Java Programs.
Proceedings of of Workshop on Dynamic Analysis (WODA 2005), St. Louis, MO, USA, May 2005.
実行をイベント列としてとらえたとき,それが制約を満たしているかどうかをチェックする.Always ( b.put(o) Eventually ( b.get() == o ) )
といった感じの記述から,それを検査するための監視アスペクトと,状態機械としてイベント発生を記憶するクラスを生成する.JMLのモデル変数などに比べると,イベント列を簡単に書けそうな気はする.
とりあえず表明ネタ用の関連研究として引用リストに入れておく.
2005-06-11 [長年日記] ▲
_ [OUCC] TOEIC ▲
受験する人がちらほらいるようなので,団体受験とか使えるのかと思って公式サイトをチェックしてみた.10人以上からで申し込めるが,公開テストでの団体申し込みは別に安価にもならないし,会場が一緒になるとも限らないみたい.
_ [論文] アサーションの式に出る未定義の値の処理 ▲
Yoonsiki Cheon, Gary T. Leavens: A Contextual Interpretation of Undefinedness for Runtime Assertion Checking.
Proceedings of Sixth International Symposium on Automated and Analysis-Driven Debugging (AADEBUG 2005), to appear.
JMLなどで書いたアサーションの式評価の途中で例外が起きたりすると,式の結果が未定義の値になる.そのときに,assertionの式全体がfalseとなってプログラムが停止するように,undefined の項に true/false の値を適切に割り付ける方法を提案している.
何もない場所ならとりあえず false を割り付ければよいが,その項が negation の中で登場していたら true を割り付けるといったように,その項がどのようなコンテキストで登場したかという情報から処理を行う.
_ [論文] 設計・実装レベルの表明の扱いの統一 ▲
Jing Zhang, Jeff Gray and Yuehua Lin: A Model-Driven Approach to Enforce Crosscutting Assertion Checking.
Proceedings of Workshop on Modeling and Analysis of Concerns in Software (MACS 2005), May 2005.
assertionをモデル記述や実装コードに埋め込むようなコード変換の利用を提案している.著者らのサイトを見た限りでは,似たようなクラス階層がシステムにいくつか含まれているとき,pre/post condition をそれらにまとめて埋め込めることが重要だろうと考えているように見えた.
_ [論文] ラッパーオブジェクトによるアサーションのチェック ▲
Roy Patrick Tan, Stephen H. Edwards: An Assertion Checking Wrapper Design for Java.
Proceedings of SAVCBS 2003.
アサーションのチェックを行う処理だけをラッパーオブジェクトとして生成し,インスタンス生成を,ラッパーオブジェクトへの呼び出しに置き換える.Class Loader レベルなどでこの処理を行えば,コンポーネント側のクラスを変更する必要がない.
主な利点は,再コンパイルが不要になること,アサーションのバイナリの再配布が容易になること,実行時にアサーションの有効・無効が選択できるようになること.アスペクトの織り込みをロード時にしましょうという話と似ている.
2005-06-13 [長年日記] ▲
_ [work] 論文集めとか ▲
ワークショップの存在ごと忘れていた IWPC の論文いくつかをリストに追加した.アサーションまわりの論文については一通り読み終えた気がする.PPL2005発表内容のうち,新規性のある部分というのは限定されたので,原稿の構成なんかは見直す必要がありそう.
_ [論文] コンポーネントに対するアサーション検査 ▲
G. T. Heineman: Integrating Interface Assertion Checkers into Component Models.
Proceedings of Sixth International Component-Based Software Engineering (CBSE) Workshop, Portland, Oregon, May 2003.
ラッパーオブジェクトなどでのアサーション検査では,コンポーネント内部のメソッド呼び出し(protected とか private メンバー)に対してアサーションの検査ができないので,active interface という AspectJ の before/after + call pointcut のような仕組みを使って表明の検査を行おうと主張している.こういう仕組みを使うと,コンポーネント local の性質とアプリケーション定義の global な性質とを両方取り扱える,と述べている.
_ [論文] 時相論理で記述した表明のチェック ▲
Tanton H. Gibbs and Brian A. Malloy: Weaving Aspects into C++ Applications for Validation of Temporal Invariants.
Prooceedings of Conference on Software Maintenance and Reverse Engineering (CSMR 2003), Benevento, Italy, March 2003.
Edward B. Duffy, J. Paul Gibson, Brian A. Malloy: Applying the Decorator Pattern for Profiling Object-Oriented Software.
Proceedings of International Workshop on Program Comprehension (IWPC 2003), Portland, Oregon, May 2003.
時相論理で書いたアサーションを,アスペクトあるいは Decorator パターンを適用するプログラム変換で検証しましたという同じような論文.色々なプログラムに対するテストケースを実行して,パフォーマンスの効率を評価している.また,traditional なアサーションでは発見できないエラーが発見できたことを述べている.前者の論文のほうが,temporal invariants の説明が丁寧だった.
表明の表現力としては,enventually (注目しているクラスのインスタンスが破壊されるときまでに成立すればよい条件)が使えることが大きいと言えそう.
2005-06-14 [長年日記] ▲
_ [読書] C++ in 2005 ▲
Stroustrup: The Design and Evolution of C++のページに置いてあるC++ in 2005(Added to Japanese translation of D&E) を読んでみた.STLが作られたときの話や,Embedded C++のようなsubset規格に対する態度や,C++の標準に取り込みたいと考えているフィーチャーなどの話が書いてあって,けっこう面白かった.本を買う気は別に起きなかったけど.
_ [論文]実行履歴のベクトル類似度に基づくフェイズ認識 ▲
Steven P. Reiss: Dynamic Detection and Visualization of Software Phases.
Proceedings of Workshop on Dynamic Analysis (WODA 2005), St. Louis, MO, USA, May 2005.
ソフトウェアはいくつかのフェイズによって構成されているので,それをプログラム実行中に認識しようという試み.10ミリ秒を1コマとして,各クラスごとに何回メソッドが呼ばれているかでベクトルを作っておいて,過去何コマぶんかを取り出してきて和を取り,絶対値が1になるように正規化してベクトルを作成する.
パラメータを経験的に決定して,実際のプログラムで見つかった6つのフェイズが,それぞれどのような処理だったかを説明している.時間枠で区切られるので,入力待ちなどがフェイズとして出てくるものの,CPU負荷などに応じて検出されるフェイズが変わってしまうのではないかという恐れもある.そのあたりはちょっと怪しい.
2005-06-15 [長年日記] ▲
_ ESEC/FSE,IWPSE ▲
Call for Participation が来ていたのでESEC/FSE 2005のサイトを見てみたら,Registration が open したようです.Early Registration は 7月29日まで.
2005-06-16 [長年日記] ▲
_ [hyCalendar] 基本のウィンドウサイズ ▲
hyCalendar は初回起動時,デフォルトのウィンドウサイズが小さかったせいで,予定を入力しても表示されないんですけど……という質問をいただきました.
次リリースまでに忘れなければ,画面サイズに合わせてもうちょっと良いサイズで出るようにしてみます.いちおう XGA 推奨ということで.
_ [ツール] Python Imaging Library + Cygwin ▲
Python Challenge 用に,Cygwin 上の Python 2.4 で Imaging Library をセットアップしようとしたら,謎のエラー(dll ロード時に gcc が死んだようなメッセージ)が出てしまった.うーむ.
ちょっと検索したくらいでは解決できそうになかったので,素直に Python の Windows インストーラ付きバイナリを使って,Imaging のほうもインストーラ付きを使うことに.
_ [論文] シーケンス図生成向け,静的解析でのインスタンスの区別 ▲
Atanas Rountev, Beth Harkness Connell: Object Naming Analysis for Reverse-Engineered Sequence Diagrams.
Proceedings of International Conference on Software Engineering 2005, St. Louis, Missouri, May 2005.
輪講で紹介された論文.
ある1つのメソッドに注目したシーケンス図を静的解析から作るとき,引数や this として渡されたオブジェクトを,定数伝播の手法を使って各参照変数に伝播させ,同じオブジェクトを参照している部分だけ見つけようというもの.スタート地点を決めて処理を行うので,エイリアスグラフを使った解析より簡単?
1つのオブジェクトが多数のインスタンス変数にコピーされるような状況がそうそうあるとは思えないが,手続き間で,引数として参照を渡していく場合には有効そう.
2005-06-17 [長年日記] ▲
_ [授業] ゼミA ▲
コードレビューを,コード読んで悪いところを直す反省会のようなものだというように説明した人がいて,ちょっと新鮮な印象を受けた(コード品質の向上が主目的としても,教育効果はある?).
アンチパターンでは,コードを書くとか読むという話はプログラミング演習などの影響もあって理解しやすく,わりと活発に話が進む.しかし,どんな技術を開発に採用するかとかいった話は,さすがに実感が湧かない様子で,解説もなかなか難しい.
_ ソフトウェア・アーキテクチャ ▲
アーキテクチャと言われて,特定ソフトウェアの構造を指す場合と,一般的なソフトウェアで取るべき構造(どのような構成要素を使うかといったメタモデル)とがごっちゃになっている気がする.
定義らしきものがあるのかと思って検索してみたら,ソフトウェア・アーキテクチャをみんながどう定義しているかまとめたサイト(英語)を発見.基本的には,ソフトウェアの構成要素と,それらの間の関係を定義したものであると考えてよさそう.
2005-06-20 [長年日記] ▲
_ Musical Baton ▲
こっそり回されていたようなので,明日か明後日には書きます.
_ [hyCalendar] ぼちぼち実装中. ▲
1.1.2 向けの修正事項をいくぶんか消化.オプション画面にさらにタブが1個増えてしまった.そろそろオプション画面も整理が必要.
2005-06-21 [長年日記] ▲
_ Musical Baton ▲
遅くなりましたが書いておきます.
●Total volume of music files on my computer (コンピュータに入ってる音楽ファイルの容量)
6GBくらい.
●Song playing right now (今聞いている曲)
最近は,ニュース系のラジオを流しておくことが多いような.
●The last CD I bought (最後に買った CD)
さくら "Cherry-A-La-Mode −ここにいるよ−".
●Five songs(tunes) I listen to a lot, or that mean a lot to me (よく聞く、または特別な思い入れのある 5 曲)
- The Beatles "Yellow Submarine".
- NAMCO "さいごにサンバ".塊魂エンディングその1.
- 岡本真夜 "Forever".
- 丹下桜 "Little Wing".当時ドラゴンマガジンとの連動企画(?)だったラジオ "ドラゴン探偵局" の縁.
- Falcom Sound Team JDK "誰かがあなたを愛してる".日本ファルコムのアクションRPG「ぽっぷるメイル」のエンディングテーマ.
●Five people to whom I'm passing the baton (バトンを渡す 5 名)
とりあえず挙げてしまうので,もしこれに気づいて,お暇があったら書いてみてください.
- OUCCつながりでre-in-car-na-tionと書いておきます.
- 研究室つながりで,cheep, cheep, cheep...
- 学会関係では,ほげ日記 :-)
- (空き)
- (空き)
そのほかの系統(RPG研関連とか)では,ダイレクトに渡して大丈夫そうな人には既に他のルートで回っているようなのでとりあえず止めときます.
2005-06-23 [長年日記] ▲
_ [論文][ツール][Java]Prospector ▲
あるクラスのオブジェクトから,別のオブジェクトを取得するために必要な経路を探すProspectorというツール.手元にある String から PrintWriter がほしい,というような入力を与えると,途中経路のサンプルコードが出てくる.JDKとEclipseくらいしか検索させてくれないけど,使い道がないこともないかもしれないのでメモしておく.
入力は路線探索みたいなインタフェースだけど,出力はさすがに路線図みたいなのは無理?
イベントハンドラなど,フレームワークからもらってくる(自分で作ってはいけない)オブジェクトについては,どうやったら手に入るかを調べることはできないし,作れないことを知ることも困難.また,多数のクラスに継承されているクラスが登場する場合,どのクラスを使うかによって経路が違うとみなされるので,多数の候補が並列してしまい,他の候補を押しのけてしまう.
元論文は,David Mandelin, Lin Xu, Rastislav Bodik, Doug Kimelman: Jungloid Mining: Helping to Navigate the API Jungle. Proceedings of Programming Language Design and Implementation (PLDI 2005), pp.48-61, Chicago, Illinois, USA, June 2005.
_ [hyCalendar] 1.2 準備 ▲
周期予定で,隔週の予定に対応してみた.そのかわり,ファイル形式が少しだけ拡張されたので,またバージョン番号を 1.1.2 ではなく 1.2 に上げておく.
また,設定ダイアログのページ数が増えてしまったので,ダイアログのサイズを少し横方向に大きくしてみた.またマニュアル修正タスクが発生.設定ダイアログの画像を自動撮影するツールがほしくなってきたので,キーボードマクロツールを調べてみることにする.
2005-06-24 [長年日記] ▲
_ [hyCalendar]キーボードマクロ ▲
reckeyというキーマクロツールを使ってみることにした.ウィンドウの有効化などの操作をウィンドウクラス名で記録してくれたり,一定時間待ちなどの処理も手で書けたりするので,使いやすい.これとクリップボードの画像記録ツールKoClipと合わせて,設定ダイアログの各タブの画像(マニュアル記述用)を一式,png 形式で保存する操作を作ってみた.
2005-06-25 [長年日記] ▲
2005-06-26 [長年日記] ▲
_ [hyCalendar] 1.2.0 リリース ▲
更新が一通り片付いたので,リリース.隔週の予定を扱えるようになって,ファイル形式も少しだけ拡張されたので,バージョンアップになる人はファイルのバックアップを推奨です.
2005-06-27 [長年日記] ▲
_ [OUCC] racc ▲
簡単なトランスレータ(Original → AspectJ)を実験するために racc (Ruby yacc) を使ってみることにしたのだが,まともに使うのは初めてに近いので,部室に転がってた「Rubyを256倍使う本〜無道編」を借りてきた.
今回はあまり複雑な処理をする気もなく,コンパイルエラーのチェックはAspectJにしてもらう予定.
_ [hyCalendar] vector に送付 ▲
毎回バージョンアップのたびに忘れそうになる,vector への最新パッケージの送付を行う.
_ 増原 [早速のダウンロード&問題点のご指摘ありがとうございました。スクリプトはすぐに修正しますのでお許し下さい。]
_ 青谷 [お試し頂き, ありがとうございます. 只今修正バージョンをアップロード致しました. どうもすみませんでした. > ..]
_ てぃる [修正していただき,ありがとうございます.Cygwin版スクリプトも配布アーカイブに含めていただいたようで,私のように..]