«前の日記(2005-05-18) 最新 次の日記(2005-05-20)» 編集

netail.net

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

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


2005-05-19 [長年日記]

_ [Java][ツール] Eclipse Visual Editor で GUI デザイン

JavaのGUIが作りたくなったのでつついてみる.インストールはHelp → Software Updates → Find and Install で,Eclipse公式サイトからVE,EMF,GEFをダウンロードするだけと非常に簡単.

パーツをパレットから選んで配置していくだけなので簡単っぽいのだが,privateとはいえ,コンポーネントを作成する getter メソッドがいっぱい生成されるのが気にかかる.実装が簡単にできるからこうなってるのかな?

プロパティセット系のメソッドをコンポーネント生成コード部分に書き込むと,直接画面に反映されて,けっこう面白い.

_ pukiwikiのプラグイン設定変更

XSS脆弱性とかのニュースを見つけたので,アスペクト指向の情報公開用に使っているpukiwikiのプラグインの設定を変更.

_ [論文] リファクタリング効果のCOCOMO IIでの予測

Robert Leitch, Eleni Stroulia: Assessing the Maintainability Benefits of Design Restructureing Using Dependency Analsyis.

Proceedings of METRICS 2003.

輪講で紹介された論文.

リファクタリングのコストが回収できるかどうかは,実施前後での保守コストの差がどれだけあるかで決まる.保守コスト=回帰テストのコスト=コードを変更したときに影響を受ける平均コード量=各手続きからの影響波及解析を行ったときの行数の平均として見積もっている.

リファクタリングでどのようにコードが変更されるかは与えないといけないので,自動リファクタリングツールとの組み合わせが必要そうで,複雑なリファクタリングに適用することは難しそう.保守コストが回帰テストのコード量に比例するかどうかといった妥当性や,見積もった結果の妥当性については評価を行っていない.ただ,リファクタリングを行った場合か行わなかった場合のどちらかでしか実際には計測できないので,このあたり苦しいところではある.

_ [論文] Fragile Base Class Problem

Leonid Mikhajlov and Emil Sekerinski: A Study of The Fragile Base Class Problems.

Proceedings of ECOOP 98.

親クラスと子クラスがあって,親クラスを変更したら子クラスに影響が及んでしまう問題(Fragile Base Class Problem)について述べた論文.

たとえば,Bag.addAll が Bag.add を内部的に使っていることを想定して,addメソッドで要素数をカウントする CountableBag を作ると,Bag.addAllが addメソッドを使わなくなったとき,CountableBagは正しく機能しなくなる.このような問題を色々分析して,問題を避けるために (1) ベースクラスの変更や,サブクラスは,メソッド依存関係に循環を導入しないこと,(2) 親クラス側を変更するとき,メソッドは,自身のほかのメソッドの振る舞いに余計な仮定を置かないこと.(3) 継承クラス側のメソッドは,親クラスの中で自分自身を呼び出しているとき,それを継承クラス側で受け取ろうとしないこと.(4) 継承クラスから,親クラスの内部状態を触らないこと,を挙げている.

で,上記のような問題がなく,親クラスと子クラスが安全に拡張できるような性質かどうかの判定を行う Flexibility Theorem というのを作っている.

_ [論文] Sublclassing Contract

Clyde D. Ruby: Safely Creating Correct Subclasses without Seeing Superclass Code.

Proceedings of OOPSLA 2000.

OOPSLA2000の2ページのポジションペーパー.サブクラスからスーパークラスへの呼び出しを行っても安全かどうか,オーバーライドしなければならないメソッドがないか,といった情報をクラスの contract の一部に含めようという提案.

お名前:
E-mail:
右の画像に書かれている文字列を入力してください:
コメント: