DSM - Dependency Structure Matrix
いつのEAPビルドから出来るようになったか忘れたが,IDEAのDSM分析の使い方がわかってきた。というか,使い方は「DSM Guide(PDF)」に書いてあるんで,ようやっと書いてることが理解できた。というのが正しい。
DSM(Dependency Structure Matrix)ってのは,寡聞にして知らなかったのだが,ソフトウェア(パッケージとかクラスとか)の依存関係を表すマトリックスなんだそうな。実際に見た方がわかりがいいだろう。
こんな感じで,モジュールの一覧が表示され,行からは自身に依存している相手とその依存数,列からは自身が依存している相手とその依存数が読み取れる(循環参照もわかる)。これ,なかなか見やすくて良い。
ちゃんとガイド読んでなかったんで,最近気付いたのが,特定の行を選択し「Limit Scope To Selection」を選ぶと,その対象だけのDSMを描いてくれる。これが,すごく便利で,やっとDSMの使い方に目覚めたというワケだ。
↓
もともとIDEAには,いろんな依存分析方法があるんだけど,どれもイマイチ閲覧性がよろしくなくて使ってなかったけど,DSMは見やすくて良い。まあ,依存分析したからって,何がどうなるワケではないが,リファクタリングするときに判断材料には使えるかな。あとは,人様のコードを分析するときにも,役に立ちそう。
IDEA7のShelve Changesまがいをパッチ生成・適用で試してみた。
かなり誇張したタイトルになってしまったが,要するにSubversionのパッチ生成・パッチ適用をそれぞれの実装系で試してみたって話。自分自身が生成したパッチを正しく戻せるのはもちろんのこと,他の実装系で作ったパッチも適用可能かどうかを確認してみた。
とりあえず,手元にあったのが以下の実装系で試す。
- TortoiseSVN 1.4.1, Build 7992
- IntelliJ IDEA7(#7096)
- NetBeans 6.0M10
- Eclipse 3.3 + Suversive 1.1.4
結果は下表の通り。
1 | 2 | 3 | 4 | |
---|---|---|---|---|
1.TortoiseSVN | ○ | × | × | △ |
2.IDEA7 | ○ | ○ | × | × |
3.NetBeans6.0 | ○ | ○ | × | × |
4.Eclipse3.3 | ○ | ○ | × | × |
横軸がパッチを適用する実装系で,縦軸がそのパッチを作成した実装系。例えば「△」つけた部分は「Eclipseで作ったパッチを,TortoiseSVNで使えた」って読む。
ちなみに,「○」はパッチをそのまま適用できたケース。「△」はパッチをちょっと加工したら適用できたケース。
「×」はダメ(いや,これも加工すりゃ適用できるんで,△は限りなく×に近いと言えよう)。
どうゆうわけか,NetBeans6.0とEclipse3.3(Suversive)は,自分で作ったパッチを自分に適用できなかった。原因とおぼしき部分は,後述する。
それぞれの実装系が生成したパッチのフォーマットを以下に示す。SubversionはUnified Diff形式のパッチが望ましいらしいんだが,どうゆうのが厳密なUnified Diffなのかよーわかってない。:-(
TortoiseSVN 1.4.1, Build 7992で作ったパッチ
これがUnified Diffなのかしらん?
Index: conf/build.properties =================================================================== --- conf/build.properties (リビジョン 2098) +++ conf/build.properties (作業コピー) @@ -1,4 +1,3 @@ :||< <b>IntelliJ IDEA 7(#7096)で作ったパッチ</b> TortoiseSVNのパッチに似てるだけど,'Index:'行がないためTortoiseSVNではパッチとして認識されなかった(そのくせ,TortoiseSVNのパッチは適用できる)。 >|| --- conf/build.properties Tue Jul 31 14:05:32 JST 2007 +++ conf/build.properties (revision 2098) @@ -1,3 +1,4 @@ :
NetBeans 6.0M10で作ったパッチ
TortoiseSVNのそれとは明らかにフォーマットが異なる。しかもフルパスで書いてるし,自分で作ったパッチを適用できないとはどうゆうこっちゃ?
# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: C:?temp?test?conf # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and ?n newlines. # Above lines and this line are ignored by the patching process. Index: buld.properties *** C:?temp?test?conf?build.properties Base (BASE) --- C:?temp?test?conf?build.properties Locally Modified (Based On LOCAL) *************** *** 1,4 **** :
Eclipse 3.3 + Suversive 1.1.4で作ったパッチ
TortoiseSVNのパッチに一番近いんだけど,フルパスで書くなってば。これのせいでパッチ適用に失敗してるとしか思えない。
#TortoiseSVNの「△」は,フルパス部分を加工して相対パスにして適用してみた結果なのだ。
Index: C:/temp/test/conf/build.properties =================================================================== --- C:/temp/test/conf/build.properties (revision 2104) +++ C:/temp/test/conf/build.properties (working copy) @@ -1,4 +1,3 @@ :
うむ,パッチも一筋縄ではいかんのだな。
とりあえず,パッチ作ってあれこれしようと思ったら,TortoiseSVNで作るのが吉ってわけか。
間違って日記消してビビった
Google Readerに救われた.