netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2004-05-03 古い日記からの変換データ [長年日記] ▲
_ 読書 ▲
「パズルの国のアリス II」読了.
今度は鏡の国のアリスがベースになった話で,ハンプティ・ダンプティによるパラドクスの話と様相論理を用いたパズルが主体.
こういうパズルが普通に(難易度の高いものは手間がかかるが)解けるようになった時点で,大学とかで受けた一部の講義がそれなりに効果を発揮しているのかもしれない.
_ [論文]モデルと実装の対応 ▲
Rainer Koschke, Daniel Simon:Hierarchical Reflexion Models.Proceedings of 10th Working Conference on Reverse Engineering (WCRE 2003), pp.36-45,13-16 November 2003, Victoria, Canada.
reflexion model というアーキテクチャと実装の対応付けを行う手法をきちんと階層化した構造に対して適用可能にしたもの.
最初に,モデルとして,モデル要素とその依存関係を適当に設定する.次に,ソースコードの各要素からモデル要素へのマッピングを決めて,モデルに含まれていないのにソースコードにある依存関係,モデルには含まれているのにソースコードにはない依存関係がないかどうかを調べる.これらの依存関係が存在する場合はマッピングがおかしい(モデルと実装が食い違っている)のでマッピングを修正していって正しいモデルを得る,ということになる.
Reflexion model 自体は G. C. Murphy らによって提案されたもので,この論文は階層化に関する拡張で階層化された要素間でのマッピングの関係を整理しているところが新規性か.大規模のソースコードに対するケーススタディを行っているあたりがえらい.
最初のモデル構築の部分は人手に頼る部分は大きいが,モデルと実装のギャップを調べるという技術としては有用であるように思える.
_ 論文 ▲
移動中に読んだ論文の整理.
R.M. Hierons, M. Harman, and H. Singh:Automatically Generating information from a Z specification to support the Classification Tree Method.
Z 言語で記述された仕様の事前条件などの predicates から,いわゆる事前条件と,入力の値域の分割とを表現した述語を区別する.この区分ができると,少なくとも事前条件を満たした上で,入力の値域に関する述語それぞれをTRUE/FALSE とするような Calssification Tree が構築でき,テストケースの自動生成につながる,というもの.
アプローチとしては面白い.
_ 論文 ▲
Bixin Li:Analyzing Information-Flow in Java Program Based on Slicing Technique.Software Engineering Notes Vol.27, No.5, pp.98-103, Sep. 2002.
プログラムスライシングを使って,コンポーネント間を流れている情報量や結合度の計算などをやってみよう,というもの.前提として正確なスライシングができることなどが入っていて,また提案している要素の妥当性の説明が弱い気がする.
_ 論文 ▲
Jens Krinke:Evaluating Context-Sensitive Slicing and Chopping.ICSM 2002.
現在のコールスタック状態を意識しながらスライス計算を実行するとき,その call string の長さを定数 k で固定するとどうなるか,というのをk を変化させながら実験している.呼び出し関係のグラフのうちループを1頂点に縮約したFolded Context Slicing 手法ならSummary Edge を使って計算した手法と比べてもそんなに悪くない結果が出ている.
PDG 構築コストが高いので Summary Edge 計算のコストが無視されている,というところが微妙だったりする.
この比較結果は面白いところで,PDG 構築以外の場所でも役立ちそうな気がする.
_ 論文 ▲
Gagan Agrawal, Liang Guo:Evaluating Explicitly Context-Sensitive Program Slicing.PASTE'01, pp.6-12, June 18-19, 2001.
プログラムスライスの計算時に,その時点でのコールスタックの中身がどうなっているかを計算しながら実行することでCall String (コールスタックの中身の表現)ごとに同じ手続きでも異なるスライス結果を持つように設定する.その結果,スライスサイズが減少する.計算時間については,極端に増えるとかいうことはなく,むしろスライスサイズの変化によっては計算時間が減少することもあるらしい.
_ 論文 ▲
Donglin Liang, Mary Jean Harrold:Slicing Objects Using System Dependence Graph.ICSM 1998, pp.358-367.
オブジェクト指向言語のためのスライシングの話.オブジェクトのメンバー構造をツリー状で表現する(メンバーがオブジェクトなら,さらに下も必要に応じて展開する).フィールドはやっぱりパラメータとして渡されて,パラメータがオブジェクトなら,オブジェクトのメンバーへのアクセスはオブジェクト変数からのデータ依存を持つ,という形になる.
インタフェースの解析については参照される変数集合(GREF)と変更される変数集合(GMOD)を解析する手法が次の文献に出ているらしい.W. Landi, B.G. Ryder, and S. Zhang:Interprocedural modification side effect analysiswith pointer aliasing. Proceedings of SIGPLAN'93 Conference on Programming Language Design and Implementation,pp.56-67, June 1993.