JUDE5を使った上流工程(見積編2)

少し前回の補足、というか訂正。
ファンクションポイントでいうところのFTRを求めるためには、以下のように各ユースケースが依存しているエンティティクラスを数えるのがより正しい。(前回は、エンティティに対する依存を数えていて、あまり意味がない)

INamedElement[] elements = projectmodel.getOwnedElements();
for (INamedElement element : elements) {
  if (element instanceof IUseCase) { 
      StringBuilder sb = new StringBuilder(element.getName());
      int ftr = 0;
      IDependency[] dependencies = 
        element.getClientDependencies();
      for (IDependency dependency : dependencies) {
        sb.append("[");
        ITaggedValue[] values = 
          dependency.getSupplier().getTaggedValues();
        for (ITaggedValue value : values) {
          if (value.getKey().equals("No")) {
            sb.append(value.getValue() + " ");
          }
        }
        sb.append(dependency.getSupplier().getName());
        sb.append("]");
        ftr++;
      }         
      sb.append(" FTR=");
      sb.append(ftr);
      
      System.out.println(sb.toString());
  }
}

※ちなみに、ITaggedValue はクラスのプロパティエディタ、「タグ付き値」に設定した値を格納している。(名前に、"No"を、値には、クラスを識別する連番)

JUDE5を使った見積作業手順のまとめ
  1. ユースケース図にて機能を整理・分析する
  2. (課題・質問はマインドマップでまとめると便利)
  3. ユースケース図に書き入れたいエンティティを発見し、それらをER図で書く。(クラス図に変換する。最初からクラス図で書いても良い)
  4. ユースケース図にエンティティクラスをドラッグ&ドロップし、ユースケースからの依存線を描く
  5. 上記作業を繰り返し、モデルを洗練していく。見積用とはいえ、なるだけ粒度細かめの方が良い。(特にユースケースからクラスに対する依存が大事)
  6. JUDE APIを使ってファンクションポイントを自動算出する。(画面の項目数(=機能の観点からのDET)など、この段階でよくわからないものは多めに手動カウントする)
  7. 求めたDET・FTRからファンクションポイントを算出する。

ちなみに、ファンクションポイント法ではファンクションの切り出し(粒度)によってかなりポイントが変動する。例えば、

  • ユースケース単位 or ユースケースに含まれる画面単位のどちらで測定するか。
  • マスタメンテナンス機能で、登録・変更・削除をそれぞれ別のファンクションとするか、まとめてしまうか、

など。そのため、ファンクションポイントから工数を求めるには、同じ粒度で測定した他プロジェクトの実績値が必要となる。

ここまでの要望
  1. ERモデル⇔クラスモデルのマージ(できれば同期)はやっぱり欲しい
  2. ERエンティティモデルから変換したクラスのステレオタイプには自動的にentityが入っていても良いのでは?
  3. JUDE API、簡単にユースケース、クラスを抽出したい。