netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2005-08-01 [長年日記] ▲
_ [論文] メソッド呼び出し列によるバグ特定 ▲
Valentin Dallmeier, Christian Lindig and Andreas Zeller: Lightweight Defect Localization for Java.
Proceedings of ECOOP 2005.
あるオブジェクト1つに注目すると,他のオブジェクトに対して行うメソッド呼び出し列が得られる.それを,長さ k の部分列の集合として扱っておいて,成功したテストケースと失敗したテストケースで,どちらかにしか現れないような呼び出し部分列に大きい重みを与え,そのクラスに対する呼び出し部分列の重みの平均値が高いものほど「怪しい振る舞いをするクラス」として調査対象の候補の上位とする.
この方法だと,だいたい上位の数個〜10%程度のクラスを調査すれば高い確率で目的のクラスに当たる,という実験結果を示している.また,オブジェクトごとの呼び出し列を取るだけなので,コストもそれほど高くない.
2005-08-06 [長年日記] ▲
_ [work] 海外渡航の調査 ▲
Gail Murphy のところから来ても大丈夫そうだよという返事が来たので,ごそごそと調査開始.
masanobu nakayama さんの渡航メモやら研究者用のビザ取得方法やらgakushinganbare_linkなんてものを発見.
研究員系の就労の情報とかを見ていると,学振の資格証明+先方からのInvitation Letter+申請書といった組み合わせでビザ申請になる様子で,就労許可証は不要っぽい.
滞在期間的には,学振の事務手続きとかもあるので,4月後半から,とかになる?
_ [ゲーム] 高橋名人の冒険島 ▲
久しぶりにクリア.昔,みんなで2晩ぐらい電源付けっぱなしでやったのに対して,今回は2時間くらい.ゲームは1日1時間どころじゃない,と思う.
忘れてしまうと悔しいので,攻略に必要なことのメモ.基本は,各ステージのアイテム位置,敵の出現位置を記憶すること.
- 画面外少しのところまで斧や火球は飛んでいくが,逆に,それまでは次の弾が撃てない.特に火球は2連射しかできないので,敵や転がってくる岩が2つ重なっている場合には注意が必要.
- 斧を岩や卵に当てていなければ蛇は弾を撃ってこないので,岩の多い場所では斧を無駄に投げない.火球なら安全に岩を壊せる.
- 斧を投げて消える場所には隠し卵(ジャンプで出現).卵ではない場所の場合,そこで一定時間待っているとボーナスステージ.
- 敵の出現ポイントは固定されている.出現ポイントにあらかじめ斧を投げながら移動することも重要.
- 茶色の蛙は,平地か,段差の上から飛び降りてくる場合,走って近づけば下をくぐれるようになっている.倒す場合は,斧を1回当てると1回跳んでくることに注意して倒す(跳んだ結果,相手の反応距離に近づいてしまうことが多い).
- 逆向きの蛙は,追い抜いたら後ろから跳んでくる,という動作をする.急いで逃げず,移動→追いこされる,4回繰り返すほうが安全.4回跳んだ時点で,追いかけてくるのをやめる.
- Bを押しながらだと助走がなくても必ず高くジャンプできる.
- 鍵を取ると,次の落下するはずのリフトが上に上がってボーナスステージ.取った後に死んでしまうと無効.
- Aだけを押すと小さくジャンプできるので,右+Bで走って,一瞬離してAだけで小ジャンプ,右+Bで加速再開する,というので敵の隙間をくぐるのが重要なときがある(7-4, 8-4).
- 氷のステージでは,Bダッシュしないで右+Aだけで高くジャンプしたほうがよい場面がいくつかある(ジャンプ直後に止まれなくて氷柱にぶつかる場合など).
- 落ちるリフトからジャンプするときは,リフトにぎりぎりまで乗るよりも,ちょっと手前で飛んだほうがいい場合もある.
- 8-4では,ほぼ回避不可能なナスビがあるが,すぐ先に隠し卵があり,体力回復のミルクが取れる.出しておいて,ナスビが離れてからすぐに取る.ただし,8-4にはその前にも隠れた卵が1つあり,それを取っていると指輪になってしまう.
- 岩と岩の間にある1キャラ分の隙間や,段差の端に置かれた岩のさらに外側のわずかな地面には,ちゃんと着地できる.
2005-08-08 [長年日記] ▲
_ [hyCalendar]FAQ更新 ▲
文字化けを起こしてしまう,という質問が来たので,フォント設定の確認をお願いしたら,「地域と言語のオプション」で英語を選んでいたらしい.ということで,フォント設定が縦書き・欧文フォントのときに文字化けを起こすというFAQのところに地域と言語のオプションの情報も追記しておいた.
2005-08-09 [長年日記] ▲
_ [work]APSECの締め切りが22日に延長 ▲
APSEC2005のページに"Paper Submission deadline is extended to August 22" と出てたので,ゆっくり内容を詰められそう.Notification of Acceptance が September 14,Camera-readyないしAOSD2006の締め切りがSeptember 30.PCの人たち大変そう….
_ [work]研究紹介用の資料のテンプレート ▲
大学のオープンキャンパスに合わせて作る予定の資料には 情報処理学会の原稿見本の Word スタイルファイルを使って作ることにした.
二段組,タイトル+著者+本文という程度の最低限のスタイルしか設定されていないので,脚注の英語タイトルを置く部分だけ削って使わせていただくことにする.画像を半分くらい占めさせて,そこそこ文字が入るので,軽く読める系の資料になる,と期待.
2005-08-10 [長年日記] ▲
_ [論文] 「同時に変更される」コードの可視化 ▲
James M. Bieman, Anneliese A. Andrews, Helen J. Yang: Understanding Change-proneness in OO Software through Visualization.
Proceedings of IWPC 2003.
輪講で紹介された論文.複数のクラスが同時に変更された,というので1つのデザインパターンに関わるクラスとかが同時に変更されるのではないか,と実験している.
複数のクラスが同時に変更された,という関連の中には,クラス間が持つ関連(継承とか所有とか)には含まれないものが存在する,といった結果が出ている.
性能などの非機能的要求「かもしれない」と言っているだけで実際どんなコードなのかは分からないが,何かのときに引用できるかもしれないのでとりあえずメモしておく.
2005-08-11 [長年日記] ▲
_ [論文]データ依存の強さ ▲
Alessandro Orso, Saurabh Sinha, Mary Jean Harrold: Incremental Slicing Based on Data-Dependences Types.
Proceedings of ICSM 2001, pp.158-167, Florence, Italy, November 2001.
輪講で紹介された論文.
プログラムスライシングを行うときに,データ依存の「強さ」によって強いものと弱いものを区分することで役立つのではないかと言っている論文.強さは,定義→利用の関係において,必ず到達するものは到達しない可能性がある,途中に他の定義で上書きされるようなパスが存在しないかどうか,といったことで決まる.確実に到達する関係が一番強く,「ポインタ経由でデータが上書きされるかもしれない文」をif文などで通過してしまう「かもしれない」文などは弱くなる.
強いもの弱いものの含まれる比率にはばらつきがあるようで,バグ発見という用途では,強いものから徐々に弱いものまで探索範囲に含めていくというのでは,有用かどうかよく分からない.
この辺の話は,プログラムの実行の最適化の話に近いような気がしなくもない.
2005-08-13 [長年日記] ▲
_ 帰省 ▲
お土産に,暑いので生ものが買いにくいなーと思っていたのだが,ミオール神戸のゼリーが常温保存できるらしいと聞いて買ってみた.試食するついでに店の人に聞いてみたら,2ヶ月くらいは大丈夫らしい.
_ [論文] 手続きとアドバイスの使い分け ▲
Gregor Kiczales, Mira Mezini: Separation of Concerns with Procedures, Annotations, Advice and Pointcuts.
Proceedings of ECOOP 2005.
単なるメソッド呼び出しは何回か使われる処理の内容が変更される場合には有効で,アドバイスは呼び出される場所が変わる場合に有効,といった使い分けについて述べた論文.
また,アノテーションはメソッドに共通した性質(しかし共通点がメソッド名などに表現されない場合)を表現する場合に有効である,ポイントカットに名前を付けることで「Shape.setX という Join Point は画面の更新である」といったように意味を付加し,「画面の更新のときはDisplay.updateを実行する」といったルールが分かりやすくなる,といったことが述べられている.
読んでいて素直なガイドラインのような気がしたので,今度,wikiのほうにまとめておくことにする.
2005-08-18 [長年日記] ▲
_ [論文] Dependency Injection のコードをAOPで記述する ▲
Shigeru Chiba, Rei Ishikawa: Aspect-Oriented Programming Beyond Dependency Injection.
Proceedings of ECOOP 2005, pp.121-143.
あまりじっくり読んでる時間がないので軽くメモだけ.
Dependency Injection を使うとコンポーネント間の接続方法をコンポーネント側から分離できるが,接続のためのコードがフレームワーク依存になってしまう.そこで,明示的に接続対象のオブジェクトを指定してコンポーネント間を接続するようなアスペクトを作ることができる言語GluonJを提案している.
AspectJと比較すると,AspectJではperthisとかinter-type declarationとかを使わないとインスタンス間の関係が管理できないところをきちんとサポートしている,というのが違いになる.
_ [論文]単体テストから品質を予測する ▲
Martin Davidsson, Jiang Zheng, Nachiappan Nagappan, Laurie Williams, Mladen Vouk: GERT An Empirical Reliability Estimation and Testing Feedback Tool.
Proceedings of ISSRE 2004.
先週の輪講で紹介された論文.
ソースコードの行数あたりのJUnitのテストケース数やクラスごとのカバレッジといった変数から最終的な品質(受け入れテストの通過率)の値を回帰分析で予測しようというもの.
同じ仕様のソフトウェアを複数のグループで個別に開発して,予測結果を評価しているが,結果自体はあまり芳しくない.過去に作ったプロジェクトのテストケース数などから,用意したテストが十分かどうか,といった警告を出す程度の予測はできるかもしれないが.
JUnitでテストを実行してJCoverageでカバレッジを計測して値をすぐに出す,といったツールの使い勝手は良さそうな印象.
2005-08-19 [長年日記] ▲
_ オープンキャンパス ▲
自由訪問時間(?)で研究室に来た2グループに対してだけ説明.何となく思いついて携帯電話を説明の材料にしてみたが,携帯電話は
- たくさんの機能部品(ボタンやディスプレイ,電話帳,メール,...)を含んでいて部品の利用関係も多く,
- 機種間でコードが似ているからコードクローンもあるだろうし,
- ユーザとのインタラクションではシーケンス図のような時系列表現が便利で,かつボタンの連続操作などによって生成された実行履歴の圧縮などの内容も説明しやすくて,
- 実時間処理や並行処理などの横断的関心事を含んでいて,
- ほとんどの人は携帯電話がどんなものか既に知っていて,
- 実物が手元にあるので見せながら話しやすい
から,一般の人向けに研究室の複数のテーマを同時に説明するときにはかなり便利な題材かもしれない.研究対象が組み込み系だと思われると困ってしまうけど.
2005-08-20 [長年日記] ▲
_ 今度はComic Baton ▲
今度はComic Batonなるものが回ってきていた.でも,今は小栗左多里「ダーリンは外国人」シリーズくらいしか持ってないし,読むには色々読んでいても,あまり思い入れの強い作品も思いつかないのでパス.
2005-08-25 [長年日記] ▲
_ [hyCalendar] バグ発見+仕様変更. ▲
新機能を追加すべく少しいじっていたら,エクスポート時に「休日として設定された周期予定」が出力されない問題を発見.なんと戻り値をセットしていなかったので,今まで不定値で動いてたのかと思うと少しぞっとする(文字列型だったから,たまたま空文字列ンい初期化されてたのかもしれない).
また,「休日なら1日ずらす」ように設定されたユーザ定義の祝日が,今までは他のユーザ定義の祝日を取り扱うことができなかったので,対処.ユーザ定義の祝日には優先度を持たせて,自分自身より優先度の高いユーザ定義の祝日だけの影響を受けるようにしてみた.
まだイベントが多い(旅行,FSE出張など)ので,次のリリースはいつになるやら.
2005-08-26 [長年日記] ▲
_ [AspectJ] 1.5M3 リリース ▲
だいぶ本来のスケジュール(AspectJのホームページの "Developer Resources" の中の "Plans" で公開されている)からは遅れてしまっているが,無事リリースされた様子.
バグ修正と,あとはGenericsのサポートが強化された,らしい.M2→M3の強化なのかどうか分からないが,インタータイプ宣言やdeclare parentsでも型パラメータが使えるようになっている.また,@Aspectといったアノテーションをクラスに付加することでアスペクトの定義が可能となっている.これはAspectWerkzのチームのおかげっぽい.
個人的には,普通のアスペクトと,アノテーションベースのコードと混ぜると怪しいことが色々起きそうな気がする.アノテーション自体を declare で後から追加してアスペクト化できるのかなぁ,とか.アノテーションベースの定義だと,アドバイスがメソッド名を持っているので,アスペクト群を監視するアスペクトとかを定義する,といった使い方も考えられるけど,それにどのくらい意義があるかは不明.
2005-08-27 [長年日記] ▲
_ [ゲーム] 忍者バーガー ▲
Steve Jackson Games のゲームリストを見ていて気になったNinja Burger の公式サイトを見つけた.ゲームそのもののサイトはこっちらしい.
基本は,ハンバーガーのデリバリー(30分以内)を成功させて名誉点をかせいで,他のプレイヤーを出し抜いて支店長になることらしい.日本語訳を公開している方々もいらっしゃるようで,ちょっと読んでて買ってみたくなってしまった.
_ [Wiki、期待アゲ]