netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2005-12-04 ▲
_ [論文]タスク間の依存関係の解析をソフトウェアモジュールに適用 ▲
Neeraj Sangal, Ev Jordan, Vineet Sinha, Daniel Jackson: Using Dependency Models to Manage Complex Software Architecture.
Proceedings of OOPSLA 2005, pp.167-176, San Diego, California, USA, October 2005.
Dependency Structure Matrix (DSM) という,タスク間の依存関係をチェックするための道具をソフトウェアモジュールに適用してみました,というお話.DSM は,コードクローン分析なんかで使ってるプロット図に似ていて,要素を横軸と縦軸に並べておき,縦軸の要素から横軸の要素へ依存関係があるときに,そこにチェックを付ける.通常,タスクは作業順序をあらわすので,すべての依存関係が対角線より下側に来るように,タスクを並べ替えたり,相互依存したタスクを1つにまとめたりするらしい.
それをモジュール間の依存関係に適用すると,うまく階層化されたシステムなら相互依存関係がないので,対角線より下側にモジュールが整列してくれる.
相互依存した複数のタスクをまとめるアルゴリズムを使って,相互依存したモジュールをグループ化したり,パッケージ単位などで「View パッケージは Model パッケージに依存する」といった設計ルール(A can use B, A cannot use B)を記述したりして,ソフトウェアの依存関係を整理する.
依存関係のパターンを見ることで,うまくインタフェースが整えられたサブシステムであったり,あるいは他のモジュールと相互に依存した問題のある要素なんかを発見できるらしい.
論文自体は,実際にソフトウェアに適用したケーススタディが解説されている.手法自体はシンプルで,モジュール間の依存関係さえ抽出してくれば導入できるので,けっこう便利そう.単なるモジュール間の参照関係の整理以外でも使い道があるかもしれない.
_ [論文] Role の依存関係の明確な定義 ▲
Daniel Chernuchin and Gisbert Dittrich: Dependencies of Roles.
Workshop on Views, Aspects and Roles (VAR 2005) at ECOOP 2005.
静的な Role の活用についての position paper.Role = ロールの名前,属性の集合,メソッドの集合として定義したとき,クラスを Role の集合と,Role 間の依存関係によって定義しようという提案.
Role を一般的な(C++などにおける)クラスとして考えると,この提案でのクラスは多重継承を使って定義されたサブクラスと見ることができる.このとき,複数の Role 間で,常に等しい値を共有する属性を equality 関係としてクラス側に定義する.また,意味的に同じメソッドが存在する場合も,メソッド間の equality を定義する.また,ひとつの Role の属性が変更されたときに,その変更に反応して動作するメソッドを dependent 関係として定義する.
これらを使うと,各処理ではオブジェクトの特定の側面だけを見て処理を実行することができ(るはずで),多重継承なんかよりも Role 間の関係を整理しやすくできるかもしれない.
論文では,これ以外に,継承関係なんかにも言及がある.
_ [ゲーム][OUCC]僧侶&魔法使いでバラモス退治 ▲
戦士・武闘家・商人・遊び人の4人パーティとどちらが楽かという話になって,試みられた結果.
勇者1人でのバラモス退治に比べたら圧倒的に楽と思われる僧侶&魔法使いだが,攻撃が2人に集中し,意外と苦しいことが判明(サル相手の修行が必要なかったという意味では勇者より楽だったが).
僧侶はLv30台後半から力が60程度で成長が止まってしまい,バイキルト+ルカニを使っても与えるダメージは100〜130程度.逆に魔法使いはLv30台からHPとすばやさが伸び始めてかなり強くなるものの,メラゾーマは50%くらいの確率でしか効かないので倒すのは難しい.
結局,魔法使いは1ターン目に僧侶にスカラをかけ,あとはバイキルトを僧侶にかけてからモシャスで僧侶に変身.その間に僧侶はラリホーでバラモスを眠らせ,フバーハ,マホトーン,ピオリム,マヌーサ,ルカニで戦闘準備.
僧侶が攻撃し続けてバラモスの自動回復100をキャンセルし,僧侶に変身した魔法使いはベホマで味方を回復しつつ時々バギクロスで攻撃支援という長期戦でぎりぎり倒せた.とはいえ,マヌーサで攻撃を何度も回避したり,バギクロスが最大ダメージが出たりと,かなり幸運には支えられている.
モシャスを使うと,攻撃力や防御力,使える呪文はコピーするが,装備による魔法・ブレス耐性,スカラなどの魔法による上昇分はコピーされない.また一度死んでもモシャスの変身は解除されない.このあたりの細かい特性のおかげで,スカラとバイキルトを僧侶にかける(スクルトを使わない)といった戦い方になっている.今回は関係なかったが,ドラゴラムを使った場合も,防御力とすばやさが変化するので,スカラの効果などは失われる.マホカンタの効果は,これら変身によって消えることはない様子.
僧侶はゾンビキラー,まほうのよろい,みかがみのたて,てつかぶと,Lv41.魔法使いはどくばり,てんしのローブ,ふしぎなぼうしでLv42.2人ともHPは230程度,MPは220程度.
ちなみに,魔法なしパーティのほうは,防御攻撃のおかげで,Lv30台前半で勝利している.こちらはくさなぎの剣+攻撃だけ.バラモスまで薬草が足りないので(途中のバリアのせい),わざと死んでせかいじゅのはを使うといった小技が必要らしい.