2004年08月03日

「インターフェイスのメトリックス」OO百韻

いくつかメトリックスについて簡単にまとめた「 *[生産性]実装(詳細設計)の相対的評価のためのCKメトリックス 」を読んでちょっと触発されてしまった。 この日記の主である呑舟さんはインターフェイス継承メトリックスについて悩んでいるそうである。

一口にインターフェイスといっても意味が広いが、ここではJavaやC++、あるいはUMLなどで言われるところのインターフェイスについて考えてみる。

メトリックスに関してはインターフェイス単位で考えていたのではなかなか難しいのではないかと思う。 それより「インターフェイスとはオペレーションの集合である」とするような抽象的なレベルて割り切ってしまい、 オペレーションメトリックスや、オペレーションの集合をベースにした束構造における元の相互関係でもってインターフェイスメトリックスとしてしまった ほうがいいのではないだろうかと思う。 ちなみに、メトリックスとはあまり関係ないと思うが、このインターフェイスに関するセマンティックス上の割り切りは実はUMLで採られたスタンスでもある。

このような見方をした場合、インターフェイスの実装、あるいはインターフェイス継承はどうなるだろうか。 例えば、仮に今二つのインターフェイスA、Bと、それらを実装するクラスCが一つあるとする。するとこのクラスCは、インターフェイスAのオペレーションの集合とインターフェイスBのオペレーションの集合、そしてもしあればクラスC独自のオペレーションの集合の三つの集合の和集合を、クラスCのオペレーションの集合として持つことになる。 インターフェイスオペレーションの集合であるとする観点からすると、 この和集合は、AやBとかいったように特に名前がついているわけではないが、 これもまたインターフェイスであり、強いていえばクラスC独自の 名前無しインターフェイスということになろう。

インターフェイスAとBが、どちらか一方が他方を、Javaでいうextendしたもの であったり、あるいは、両方ともに共通する別のインターフェイスをextendした ものであった場合はどうなるだろうか?  インターフェイスオペレーションの集合なのだから、 重複する部分については自動的にさっぴかれ、 メトリックスを計算する上では重複しては勘定されないことになる。

以前に知合いと(メトリックスについてではないが)このことを話していて このことについて意見が食い違ったことがあった。 この和集合の部分に引っかかりを感じているために、 このインターフェイスオペレーションの集合という意見に賛成できない 人もいるようだ。 が、インターフェイスとはサービスの仕様を表していて、実装を表している のではないのだから、それはそれで良いのだと思っている。

話をメトリックスに戻すと、インターフェイス継承メトリックスとは、 クラスが実装するオペレーションに基づいたメトリックスということになる。 もっとも単純なものは実装するオペレーションの数ということだろう。 実装するオペレーションが多いと、仕様に追加や変更があって インターフェイスに変更があったときのインパクトも多くなるということか。

単純にオペレーションの数を採用するのでなければどんなものが あるだろうか?  インターフェイスオペレーションの集合とするような見方では、 インターフェイス全体はオペレーションをベースにする構造をもつ。 もっとも単純にはブール束になるであろうが、ある種のオペレーション 同士について制約があったりすると、多少は複雑な構造をもつことに なるかもしれない。であることには違いないだろうが。 この構造に由来する性質がメトリックスに利用できると面白いかもしれない。

しかし、構造は半順序集合であるから、当然、比較不可能な要素がある。 これは、数値化、言い換えると全順序のものさしを当てはめて考えるのは 難しいということを暗示する。 そういう意味ではメトリックにはしずらいのかもしれない。

すぐに思いつく数値化の方法として一つ考えられるのは、 構造中の同じ反鎖集合の元を同一視してしまうなどして、 うまく構造を輪切りにして、 それぞれの輪切りの最大元や最小元までの距離を メトリックスとしてしまうことだろう。 ただ、オペレーション同士の制約があったりして、そのの中の 輪切りがひとつしかなくなってしまったりするとうまくいかない。 もっともそれはそれで輪切りの数がメトリックスになったりするのかも しれないが。

このようにして、それぞれのクラスは、全オペレーションをベースに する構造中のどこに位置するかが特定できるし、そういったデータと 最大元や最小元までの距離でもってメトリックスとすることもできるだろう。

しかし、この机上の空論がどこまで使えるものなのかは全くの未知である。 このトピックについてはおいおいに追及していければと思っている。 そういえば、昔商社に勤めていた頃担当させられたHindSightは いまどうなっているのだろうか…。

この記事のトラックバック用 Ping URL: http://www.mediaware.jp/blog/mt-tb.cgi/46
「インターフェイスのメトリックス」へのコメント  コメントを書く
「インターフェイスのメトリックス」へのトラックバック
コメントを書き込む









メールアドレスを記憶する?


この記事の評価
悪い あんまり 普通 まあまあ 良い





@@@@