«前7日分 最新 次7日分» 追記

netail.net

自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.

最近のお知らせ (古いものはこちら)


2004-12-11 古い日記からの変換データ [長年日記]

_ AspectJ 1.5.0M1

J2SE 5 にあわせて AspectJ 5 の開発もがんばっているみたい.

とりあえず最初のステップとして annotation など新構文がサポート.call(@hoge void A.*(..)) とか書けるらしい.宣言的な(Java World の記事で「アトリビュート指向な」と表現されていた)アスペクトの記述が可能になるという意味でけっこう大きいかも.


2004-12-09 古い日記からの変換データ [長年日記]

_ [work]スライシングのテスト

プログラム依存グラフをもとにサマリ情報を生成する処理がほぼ完成.for, while, try, if, などの制御構造+メソッド呼び出し,フィールド参照などのテストデータを与えてサマリを生成してみたら,ほぼ結果は正しいみたい.目視確認なのがいけてないが.

JUnit とかで自動化できればいいのだが…….まだソースコードとの対応関係の取得を実装すればisDataDepends(L1, L2) のようにしてテスト関数を実装できるようになる…かも?


2004-12-08 古い日記からの変換データ [長年日記]

_ [論文]単体テストをアスペクトで記述

Guoqing Xu, Zongyuan Yang, Haitao Huang, Qian Chen, Ling Chen and Fengbin Xu:JAOUT: Automated Generation of Aspect-Oriented Unit Test.Proceedings of APSEC 2004, pp.374-381.

単体テストの記述をアスペクトで書こうというお話.単に AspectJ では書きにくいのでAspectJ に translate されるような言語 AOTDL というのを作っている.基本的には JUnit などで記述されたテストケースと並行して,Temporal Logic などで望ましい性質が成り立っているかどうかをテストするアスペクトを付加する.このときに,無視してよいテストケースの条件も別に記述する.(たとえば,スタックのテストであれば,オーバーフローが起きるかどうかのテストの場合,Temporal な性質のほうは無視して良い)

意味のある/なし判定を,自動生成したテストケースの振り分けに使っているらしく,適当なグループ分けされたテストケースのうち,少数ずつサンプリング→実行して,後から大量のテストケースを投入するときに意味のないテストケースがあまり含まれないようにする,らしい.

_ [論文]実行の差分を使ったデバッグ手法

W. Eric Wong and Yu Qi:An Execution Slice and Inter-Block Data Dependency-based Approach for Fault Localization.Proceedings of APSEC 2004, pp.366-373.

失敗したテストケース1つと成功したテストケース1つ以上が与えられたときを対象としたデバッグ手法.

単純には,失敗したテストケースで実行した文集合から成功したテストケースのどれかで実行した文集合を取り除いてからコードを調べて,原因が見つからなければ成功したテストケースの数を減らして(探索対象コードを増やして)調査を続け,それでも見つからない場合は失敗したテストケースの実行した文集合にデータ依存関係を持っているブロックを探索対象に追加し,それでも見つからない場合は追加されたブロックにデータ依存しているブロックを…というように段階的に探索対象のブロックを増やしていく方法.

これで文集合としては失敗時に実行された文集合の3〜6割程度のサイズに分布するらしい.

スライシングなどで見つけにくい「必要なはずのコードが抜けている」ような場合でも,文集合を段階的に増やしていくときに予期しない文が増えたりすることで気付きやすい,らしい.

_ [論文]インタラクションの分析

Lei Wu, Houari Sahraoui, Petko Valtchev:Automatic Detecting Code Cooperation.Proceedings of APSEC 2004, pp.204-211.

C などのプログラムの実行履歴からシナリオID,呼び出し階層の深さ,メッセージ送信元・送信先のモジュール,関数名を取り出してきて,基準をユーザが組み合わせることで自動的にパターンを分析してくれるらしい.

で,出てきたパターンに対して,どのような Collaboration パターンか(Supplier-Consumer,Director-Manager-Worker など)役割を当てはめてシステムを理解する,らしい.

1個の「パターン」をどこで認識するのか,何かパターン認識のためのツールキットを作ったとはあったが,それ以上は不明.分割の適切さについても不明.

パターン同士が同じものかどうかの比較基準もあいまい.ケーススタディで一言「メッセージの順序は考慮しない」と書いているので,呼び出し回数付きコールグラフともいえる実行ツリーを作る手法(*1)でのツリー比較っぽい.

あとは,発見されたパターン(粒度としては細かそう)に対して,統計ツールなどを使って性質を調べたり,このパターンでは各ルーチンがどのような役割をしているか,というのを調べていくことになるらしい.

いちおうシーケンス図生成などの話の関連研究なのだが,肝心のアルゴリズム的な部分があいまいなので何とも評価しがたい.オブジェクト指向じゃないので適当な方法でもそれなりにうまくいくのかもしれないが.

*1: Wim De Pauw, David Lorenz:Execution Patterns in Object-Oriented Visualization.Proceedings of COOTS 1998.

_ [論文]Concern Graph

Concern Graphs: Finding and Describing ConcernsUsing Structural Program Dependencies.Martin P. Robillard and Gail C. Murphy.Proceedings of ICSE 2002.

ある Concern についての情報をクラス・メソッド・フィールドを頂点とし,declare, call, read, write, check (instanceof/キャスト),create, superclass を関係としたグラフを作ることで,ソフトウェアの変更を容易にしようという試み.

FEAT は Concern Graph の作成を助けるツールで,メソッドから Fan-Out, Transitive Fan-Out を計算したり,クラスへの参照を取ってきたりする.(ICSE2003でツールデモをやってた)

バイトコードからモデルを作っているのだが,ソフトウェアの変更という観点では,コンパイル時にfinal 宣言された定数が展開されたりメソッドがインライン化されたりといった影響が気になる,と述べている.

制約としては,ある Concern に参加する頂点の集合を取り出したとき,頂点間の依存辺を単にすべて取り出してしまうと,別の Concern 用に作られた Call や Read/Write も含んでしまうかもしれない,というところ.手作業でフィルタする必要がある?


2004-12-06 古い日記からの変換データ [長年日記]

_ [Java] Subversion ディレクトリ

Eclipse でソースをコンパイルするとき,Build Path の Exclude の中に **/.svn/* を入れておかないと.svn ディレクトリの構造が丸ごとコピーされて,bin ディレクトリ以下が Subversion 管理下にあるとTortoiseSVN に勘違いされてしまうらしい.

ディレクトリの中身がコピーされるわけではないので直接的に被害が出るというわけではないようだが,一部怪しげな振る舞いになってしまうときがあるらしい.

(追記:比較的新しいバージョンの Eclipse では,svn 関連のデータはちゃんと無視してくれている様子)

_ [Java] 型キャスト

今日のはまり.

equals メソッドを別クラスからコピー&ペーストしたら,インスタンスチェック部分を直し忘れて,if (o instanceof コピー元) { ... }というコードのままにしてしまっていた.this.equals(this) が false になった時点で気づいた.


2004-12-05 古い日記からの変換データ [長年日記]

_ クリスマスマーケット

今年もどうやらやってるらしい.http://www.skybldg.co.jp/event/xmas2004/

時間があればまたグリューワイン飲みに行きたいところ.


2004-12-04 古い日記からの変換データ [長年日記]

_ [OUCC]類似画像判定

定点カメラで撮影した144枚(10分間隔・24時間)の画像の画素間の距離を判定する実験をしてみた.

画像読み込みには libjpeg62-dev パッケージを普通に使ってみた.サンプルコードが落ちていたので,それを拾って改造してみた.

画像間の距離を,ピクセルごとの色空間(RGB/HSV)での距離の総和と定義してみたが,画像の10〜20%程度を落とす程度なら,いちおう直感的に「似ている」と判断できるくらいみたい.


2004-12-03 古い日記からの変換データ [長年日記]

_ [work]OOPなコールグラフ

AspectJ なバイトコードで付加されている情報はorg.aspectj.weaver.AjAttribute クラスを使って読み出せることが分かったので,AspectJ 展開後のコード相手の解析は何とかなりそう.

ただ,Java バイトコードからメソッドのサマリ情報を生成するまではわりと自動化できてきたが,集めたメソッド間の呼び出し関係と所有しているオブジェクト参照の情報とを同時に提示する方法としてはよさそうなものがないことが判明.とりあえずオブジェクト参照とクラスの関係も抽出しておいて,グラフ上に一緒に載せてみることにする.