netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2003-05-19 古い日記からの変換データ ▲
_ 国民健康保険 ▲
収入の都合で扶養家族から外れるので,国民健康保険に加入するために市役所まで行ってきた.保険料を計算してみると,けっこう高いことが発覚してちょっとショック.所得税+住民税+保険料+年金で収入の25%ぐらいが持って行かれる予定.
_ DupChecker ▲
TODO は次の通り:・ファイル検査時の進捗表示(ウィンドウのステータスバー or プログレスバーダイアログ).・公開用webページの作成.どうせ大したツールではない(結局4日ほどで書いてしまった)のでソースごと丸投げしてしまうことにする.
_ IE ▲
最近気付いたのだが,IEはURLのリンクをクリックした場合とアドレスバーへ直接入力した場合とで微妙に振る舞いが違うらしい.直接アドレスバーへ入力した場合のみ,ファイルオープンに失敗することがある.サーバ側の Content-Type 情報は無視してる節があるのだが…….
_ Java ▲
重複ファイル検出ツール DupChecker なんてものを作ってみた.
java -jar DupChecker.jar で起動する.ディレクトリ名をリストボックスに Add して,スタートボタンを押すだけでディレクトリ中に存在する重複(内容が同一)ファイルをリストアップするというもの.既存ツールでも別に良いと言えば良いのだけれど,インタフェース的に微妙に不満があり,加えて,Java で GUI を久しぶりに手書きコーディングしてみたかったので自作してみた.
結果のツリービューから,ファイル名を選択してDelete ボタンを押すとファイルが消せる.ファイル単位表示とディレクトリ単位表示とを両方準備してみた.
ちなみにファイル比較は,ファイルサイズとMD5.java.security パッケージの InputDigestStream, MessageDigest クラスを使うと意外と簡単に MD5 計算は実装できた.
2004-05-19 古い日記からの変換データ ▲
2005-05-19 ▲
_ [Java][ツール] Eclipse Visual Editor で GUI デザイン ▲
JavaのGUIが作りたくなったのでつついてみる.インストールはHelp → Software Updates → Find and Install で,Eclipse公式サイトからVE,EMF,GEFをダウンロードするだけと非常に簡単.
パーツをパレットから選んで配置していくだけなので簡単っぽいのだが,privateとはいえ,コンポーネントを作成する getter メソッドがいっぱい生成されるのが気にかかる.実装が簡単にできるからこうなってるのかな?
プロパティセット系のメソッドをコンポーネント生成コード部分に書き込むと,直接画面に反映されて,けっこう面白い.
_ [論文] リファクタリング効果の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 というのを作っている.