JUDE5を使った上流工程(見積編)
しばらく、「JUDE5を使った上流工程」シリーズを書いてみようと思う。大きな目的は以下の3点だが、実は自分がJUDEをとことん使い尽くしてみたいからなのだ。以前レビューのためにざっと使ったのだが、今回は本当にプロジェクトに適用する感覚で使ってみたい。
想定プロジェクト
- 比較的小規模
- Web・バッチ・APIをインターフェースに持つDBアプリ
- 業務・事務系
- 一括契約SI
現在の状況
まだ、プロジェクトは正式に始まっておらず、プロマネであるあなたは見積を行う必要がある。現時点で入手している情報は、
- だいたいの機能要件・非機能要件
- お客さまの作成した画面イメージ
- だいたいの予算感に関する情報
といったところであるとしよう。まずはこれらの情報から、分析を行い、概算の見積を行う必要がある。
機能の把握
まずは、ユースケース図を書いてみよう。入手した提案書には、だいたいのシステムイメージと、機能の概要が書いてあるので、それをベースにユースエース図を書いていく。ゆくゆくはユースケース記述に力点を置くのだが、今の段階ではそれほど詳細化できない。まずは、アクター、機能(ユースケース)、そして何より、エンティティの発見と分析を行いたい。見積に利用できるからだ。
ファンクションポイントの自動算出
扱う業務がそれほど特殊ではないので、ある程度のエンティティ(DBのテーブル)のイメージは湧く。そこでいきなりER図を書いてしまっても良いし、クラス図を使ってモデルを書いても良い。どちらのアプローチもOKなのがJUDE5のうれしいところだ。
ユースケース図には発見したエンティティを追加し、「依存線」を使ってそのエンティティを利用するユースケースと結んでいこう。この依存線が後々ポイントとなる。
私は今回、見積手法としてファンクションポイントを使おうと思っている。ファンクションポイント方の詳細はここでは説明しないが、要はテーブルの項目数とテーブルを利用する機能の数が知りたい。もちろん、ER図でエンティティを書き、属性の数を眼や手で数えてもいいのだが、せっかくだから自動化しよう。
JUDE5を使って作業を自動化する場合、JUDEが提供するAPIを使うのだが、ER図のエンティティはユースケース図上に表示できないため、自ずとエンティティはクラス図として表現することになる。なので、見積を行う段階であれば、ER図でなくクラス図としてエンティティのモデルを検討するのが良いかもしれない。(もちろん、ER図とクラス図は相互変換が可能)
ちなみにJUDE APIを使ってファンクションポイントのDETとFTRを求めるのは以下のような感じ。DETはエンティティの持つ属性の数、FTRは利用するアプリケーションの数なので、それぞれIClass#getAttributeと、IElement#getSupplierDependenciesの返す値を使っている。
INamedElement[] elements = projectmodel.getOwnedElements(); for (INamedElement element : elements) { if (element instanceof IClass && ! (element instanceof IUseCase) && (element.getStereotypes().length == 0 || (!element.getStereotypes()[0].equals("actor")))) { StringBuilder sb = new StringBuilder(element.getName()); sb.append(" DET="); sb.append(((IClass)element).getAttributes().length); sb.append(" FTR="); sb.append(element.getSupplierDependencies().length); System.out.println(sb.toString()); } }
今回APIを初めて使ったのだが、JUDEのもつ「クラス」モデルから、綺麗にアクターを除外するのが面倒で、↑のように少々見苦しいコードとなってしまっている。(そんなんこうすればいいんです。という方法があれば教えてください。m(__)m)
まとめ
今回はJUDEのモデルからファンクションポイント方に必要な一部の値を自動算出してみたが、もちろんこれだけで見積が完全にできるわけでない。ファンクションポイントには、大まかに言って「データ」と「機能」の二つの観点からの見積が必要となる。今回算出したDETはそのうちの「データ」の観点であり、機能の観点からDET見積もる場合は、画面イメージや機能一覧などからさらに分析を進める必要がある。次はその観点からアプローチしてみたい。
※ 追記:RETではなくFTRでした。修正。(05/14)