netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
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-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-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-08 [長年日記] ▲
_ [AspectJ] 特定のクラスに所有されているオブジェクト ▲
特定のクラスに所有されているオブジェクトを他のインスタンスと区別したくなったので,フィールドに対するアノテーションが使えないかどうか調査してみた.しかし,アノテーションはあくまでフィールド宣言に対して情報を付加しているだけなので,そもそも使いようがなかったらしい.アスペクトで,フィールドに格納されたオブジェクトを記憶しておくくらいしか手がないような気がする.
_ [OUCC] mousuper 画像 ▲
テンキー付きマウス mousuper の写真.シリアルポートなところに時代を感じる.
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-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で実装されているようなので,言語拡張とかを実装実験したい人向けの良いサンプルになりそうな予感.
_ 増原 [早速のダウンロード&問題点のご指摘ありがとうございました。スクリプトはすぐに修正しますのでお許し下さい。]
_ 青谷 [お試し頂き, ありがとうございます. 只今修正バージョンをアップロード致しました. どうもすみませんでした. > ..]
_ てぃる [修正していただき,ありがとうございます.Cygwin版スクリプトも配布アーカイブに含めていただいたようで,私のように..]