netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2006-12-01 [長年日記] ▲
_ [論文] 開発者は作業中にどんな疑問を持つか ▲
Jonathan Sillito, Gail C. Murphy and Kris De Volder: Questions Programmers Ask During Software Evolution Tasks. [ACM site]
Proceedings of the 14th Symposium on Foundations of Software Engineering (FSE 2006), pp.23-33, Portland, Oregon, USA, November 2006.
開発者がソフトウェアの変更作業中にどんな情報を知りたがるのかを調べてみた,という論文です.
開発者が作業中に抱いた疑問を次のような4カテゴリに分類しています: (1)理解の基点となる場所を見つける,(2)基点を中心に作業に関連してそうなものを見つける,(3)見つけた一連の要素(subgraph)がどんなものかを理解する,(4)それが別の一群の要素とどんな関係にあるかを理解する.
開発者は,自分が持っている高い抽象度の疑問に対して,それをツールが答えられるようないくつかの低い抽象度の質問に分解して,ツールから答えを得て,元の質問に関係ない情報を排除して(必要ならさらに追加の情報集めをして),得られた情報から元の質問に対する答えを割り出す,という一連の作業をしており,ツールは開発者の作業を十分にサポートしているとは言えない,と指摘しています.
ソフトウェア開発支援ツールはどうあるべきか,みたいな話をするときや,提案しようという理解支援系ツールの位置づけを整理するのに良い論文だと思います.
(追記) 文献が参照しやすいように今後はDOIリンクを付けるようにします.
2006-12-02 [長年日記] ▲
_ [お知らせ][hyCalendar] hyCalendar 1.5.0 リリース ▲
変更点は日数をカウントダウンできるようになったこと,期間予定の端の矢印の有無が選択可能になったことです.例によって,アップデートする前には必ずデータのバックアップを取ってください.
β版からは操作などがいくらか変わっています.また,周期予定では「次の○○まであとX日」という表記でしたが,「次の」は取り除きました.
これで,現時点で入れたい機能は一通り入った感があります.
今後の予定として,Google Calendar 等との相互運用性については検討していたりします.ただ,RFCを読んでいると,hyCalendar では扱えない時刻の取り扱いがRFC側では規定されていたり,hyCalendar の周期予定はRFC側の記載では表現が難しかったりするので,落としどころが見つかるまで時間がかかると思います.
2006-12-05 [長年日記] ▲
_ [ツール] インターネットディスクを使ってみることに. ▲
新しいノートPCにしてから,バックアップ用のUSBハードディスクが電力不足らしき症状のため動いてくれないので,ジャストシステムのインターネットディスクをバックアップ用に使うことにしました.
オンラインストレージの比較を見てたら他にも似たようなのはいくらかあるようなんですが,利用規約が読みやすい位置にあって,サービス中断が起きないように努力してる(24時間以上途切れたら料金割引の補償あり)のが分かりやすかったことから選んでみました.
提供されている同期ツールは,単純にPCの特定のディレクトリをサーバ上にミラーするだけのシンプルなもののようです.ただ,手動ツールでアップロードしたファイルについては同期が取れてない扱いに判定されたり,同期ツール側ではディレクトリ内のすべてのファイルの同期を取るかあるいは完全に操作をキャンセルする以外の選択肢はなかったり(特定のファイルだけを個別にダウンロード・アップロードして部分的に同期を取ることができない)と,もうちょっと同期ツールと手動ファイル操作ツールで連携をしてほしい感じはします.
同期できるのが1ディレクトリ以下に限定されるので,作業ディレクトリの配置をどうするかはちょっと見直す必要がありそうですが,更新が頻繁に発生するものを手軽にバックアップするという用途ではそれなりに快適に使えそうです(こちらのネットワークの都合で通信速度があまり出ないので,すごく快適とはさすがに言えません).
2006-12-07 [長年日記] ▲
_ tdiary 2.1.4 に移行してみました ▲
tDiaryの脆弱性に関する報告(2006-11-26)を受けて,2.1.4+修正パッチに更新してみました.
2.1.3 のときと比べると,recent-comment と recent-list のHTML要素が変わってるようなので,スタイルシートも少し調整してます.
2006-12-08 [長年日記] ▲
_ [論文] AOPはモジュール性に問題あり? ▲
Friedrich Steimann: The Paradoxical Success of Aspect-Oriented Programming. [ACM site]
ACM SIGPLAN Notices, Volume 41, Issue 10 (Proceedings of OOPSLA 2006), pp.481-497.
AOPは問題をうまく規定しているけど解決はしてないんじゃないか,というエッセイです.AOPは「横断的関心事をモジュール化する」と言いつつも,今までのモジュールを壊してるから "paradoxical" だとしています.
AOPの特徴である obliviousness と quantification を達成しようとすると,アスペクトが fragile pointcut problem のような問題を抱えてしまい.これでは「モジュールごとに独立して開発できる」というモジュールの意味がない,というのが著者の考えのようです.
アスペクトとしてコードを分離しても,元あった場所から分離したところへのデータ依存がなくなるわけではないし,アスペクトがデータに勝手にアクセスするというのはせっかくのアクセス制御を無視している(データをグローバル変数化してしまう)し,いつアドバイスが実行されるか分からないのは制御フローの予測しやすさを奪っている,といったように,ソフトウェア工学の側面から問題点を指摘しています.
AOPの効果を疑わしく思う立場から書かれていて,AOPのメカニズムやカプセル化破壊のような問題から感じられる(私だけかもしれませんが)「気持ち悪さ」をうまく説明してくれていると思います.
Appendix として,モジュール性を取り戻すために,ということでXPIやOpen Modulesなどの研究が整理されているので,この種の研究を調べるときの開始点としてもよさそうです.
2006-12-11 [長年日記] ▲
_ [論文] メモリアクセス違反を防ぐ ▲
C/C++におけるメモリアクセスに関する耐障害性について,Microsoft Research のBen Zornという人が喋りに来てました.私の研究にはまったく関係ないですが.
プログラムにパッチを当てるというのは管理やテストのコストが高くつくので,できればプログラムがエラーを起こしても自分で回復して実行を継続できるようにしたい,ということで研究をしているそうです.
この手法の対象としては単純にプログラミングエラーだけでなく,ハードウェアエラーによるデータ破壊とか,オンラインゲームのことも引き合いに出していました.特にオンラインゲームについては,キャラクターの所持金やアイテムが現実のお金と交換できるせいで,データ破壊の防止が重要になっていると指摘していました.
基本的なポインタエラーからの保護としては,malloc/free を差し替えて,バッファ領域の前後に余分な空間を持たせ,バッファ群を多重化し,レプリカごとにメモリ配置をランダムに変更する方法を取っていました(多数決でエラーを起こしたレプリカは捨てて,新たに領域を確保しなおすようです).メモリをかなり多めに使うので,適用先はある程度限定されるようですが,プログラムを書き換えずにそのまま実現できるという利点があります.
一方で,重要データの上書きを防止するために,"critical int" のようにソース上で修飾された変数の多重化を行っていました."critical store" という特別な命令によってのみ多重化されたコピー群をまとめて更新できるようにしておき,ポインタの操作ミス(または故意)でのデータ破壊が発生しても,"critical load" 命令によってコピーから値を復帰できるようにしています.
こちらの手法は,重要データの選び方にもよるようですが,実行時オーバーヘッドが10%程度で収まっていて,ランダムなメモリ書き換えが起きるような環境でもデータ破壊を防ぐことができた(最悪でも assertion などで停止した)ようです.
こういった手法は,CPUパワーとメモリを投資するほど安全性が向上するので,「メモリはあればあるだけ使ってしまう」状態が続きそうです.まあ,メモリが余ってても仕方ないので,余分にメモリを積んでいたら勝手に安全性向上,とかいう形になれば,それなりに嬉しいかもしれません.昔,PC-8801MHを使っていた頃は,PC-98シリーズなど,メモリを640kBも何に使うんだろうとか思ってたんですけどね…….
2006-12-16 [長年日記] ▲
_ [VolumeDeskbar] ログオフ後に設定ダイアログが壊れる ▲
Volume Deskbar の設定ダイアログで「OSの機能呼び出しに失敗」と表示されるのは,どうやら,ログオフ時にダイアログが破棄されてしまうのに対し,親のデスクバー自身はその後のログオンで生きたまま再利用されているのが原因という気がしてきました.
次バージョンでは,ダイアログを毎回使う直前に作成し,終わり次第破棄することで対処します.
問題への対処だけでリリースでも良かったんですが,ついでに,「クリックなしでもホイールを有効にする」コードも追加中です.実装はマウスに対するグローバルフックです.フックを仕掛けるのが気持ち悪い人はオプションをオフのままにしておいてもらうということで…….
1〜2月は各種締め切りが待ち構えているので,年内にはリリースするつもりです.
2006-12-19 [長年日記] ▲
_ [論文] 動詞+目的語でコードを検索 ▲
David Shepherd, Zachary P. Fry, Emily Gibson, Lori Pollock, K. Vijay-Shanker: Using Natural Language Program Analysis to Locate and Understand Action-Oriented Concerns. [author's page]
Technical Report No. 2006-334 (U. of Delaware), AOSD 2007, to appear.
ソースコードとコメントから,動詞と目的語のペアからソースコードへの対応を辺としたグラフを作るという話です.On-demand remodularization …というタイトルで AOSD 2006 に出てたネタの発展形です.
基本のクエリとして動詞と目的語と1つずつ与えたら,同義語や co-located word となる動詞を推薦してくれて,選んだ動詞群と目的語群から作られる「動詞+目的語」のペアに対応するソースコードを引っ張り出してくるという手法です.対応関係は,事前に,メソッド宣言のコメントや,メソッド名とオブジェクトの変数名などから抽出しているようです.
結果として提示されるソースコードは,メソッド単位を頂点として,メソッド呼び出し関係やオーバーライド関係を辺としたグラフとしています(ツール上では,そこから実際のソースへ移動できるようです).論文のサンプルでは,かなりしっかり接続されたメソッド群が出てきているので,1つの機能を実装する一群のメソッドは同じような動詞+目的語をメソッド名ないしコメント内に持ってるみたいです.
普通のIR手法なんかだと大量に該当ソースを発見しておいてランキング上位から見ていく形式ですが,これは動詞や目的語を追加していって少数のコードから徐々に探索範囲を広げていくアプローチを取ってるようです.
適用実験では,困った例として,機能名が動詞としても名詞としても使える単語だった場合にクエリをどうするか悩んだとか,IReportCompiler という名前から "compile report" というペアを取り出すルールがなかったとか書いてました.メソッドなどの命名方法と自然言語のギャップは,英語圏の人たちでも問題なのかもしれません.
しかし,英語圏な人たちなので,ソース中のコメントなんかは普通に自然言語解析で解決できていて,ちょっと羨ましいところです.日本語のコメント入りのコードだと,どう日本語情報とソース情報の対応付けをするのか,というあたりが工夫しどころなのかもしれませんが…….
2006-12-22 [長年日記] ▲
_ [論文] リファクタリングは複雑さを明確にする作業 ▲
Miguel Lopez, Naji Habra: Investigating Refactoring Impact through a Wider View of Software.
Proceedings of QAOOSE 2006, pp.101-108.[Workshop Site]
Document というエンティティの中に含まれていたファイル形式の扱い(PDFとかHTMLとか)を,条件分岐での扱いからクラス多態性での扱いに変更してやったら,プログラムの理解,変更やテストは容易になったのに,依存関係グラフの登場人物数は増えてしまい,辺の数も増えて,設計の複雑度は上がってしまった,という例を出しています.
リファクタリングというのは複雑さを減少させるのではなく,どこかのエンティティに隠れている複雑さを明らかにして,適切なエンティティへ分散させる作業である.そして,複雑さを明確に記述することが保守性に貢献しているのではないか,と指摘しています(保守性への貢献については今後検証が必要だとしています).
……というあたりが,リファクタリング関連で何か書きたいときに使えそうなんで,とりあえずメモしておきます.Proceedings はワークショップのサイトから取れます.
2006-12-23 [長年日記] ▲
_ [お知らせ][VolumeDeskbar] Volume Deskbar 1.0.13 リリース ▲
設定ダイアログが壊れる問題の対策をしばらく手元でテストしてましたが,どうやらうまくいってるようなのでリリースします.
バージョン番号の表示がない,とのご指摘をいただいたので,設定ダイアログの下端,セットアップツールのタイトルバーにそれぞれバージョン番号を追加しました.
また,「クリックなしでホイールを有効にする」オプションを追加しました.通常はかなり快適に動作するはずですが,CPUが高負荷だと(たとえば他のアプリケーションの起動途中など),ホイールの動きを検知した後,音量を変更するまでのメッセージ処理が遅れるようです.反応が遅いからといって,音量を大きくしすぎないよう,ご注意ください.
ついでに,Web ページの構造も少し見直しました.Volume Deskbar のページのトップにダウンロードリンクが置かれてます.
2006-12-25 [長年日記] ▲
_ コメントスパム対策 ▲
CAPTCHAプラグインを導入してみました.それから,1年以上前の古い記事に対するツッコミもスパム認識するようにしてみました.古い記事についてのツッコミは,掲示板とかメールとか別方法を使ってやってください.
_ いしお [スパム対策のCAPTCHAがうまく動いてるかのテストです. ]