要求分析

プログラムを開発する前に、ちょっと立ち止まってみて下さい。あなたは自分が何をしようとしているのかをきちんと把握していますか?

ユースケース分析

「要求を記述しろなんて言われても漠然としすぎていて書けない」という方に お勧めするのが、「ユースケース分析」と呼ばれる手法です。ユースケースと は「使われ方」のことです。このシステムを誰がどんな時にどうやって使うか を列挙するのがユースケース分析のやり方です。

ユースケース分析では、まずそのシステムを使う人の「立場」を列挙します。 例えば「お客さん」「システム管理者」「社長」「バイトの店員」などです。 これらを「アクター」と呼びます。そして、次にその人達がシステムを使って 何をするのかを列挙します。この「すること」を「ユースケース」と呼びます。 そしてそれぞれのユースケースについて制約条件や関連を記述します。

楽曲データベースでは、アクターとして次の人が考えられます。

アクター説明
閲覧者楽曲の表を閲覧する人。不特定多数。
情報提供者データベースに情報を追加する人。特定多数。
管理者システムの利用状況を管理する人。一人。

アクターの説明には「何をしたくてシステムに向かう人か」を記述します。 「何をする人か」は厳密に書く必要はありません。それはこれから明らかにし ていく事ですから。

同じ人が複数の立場を兼ねる事もあります。例えば上の例では「管理者」が 「情報提供者」であることもあります。しかしこの場合でも、使う人は立場を はっきりさせた上でシステムに向かいます。いくらその人に管理者権限があっ ても、その人が情報提供者としてシステムにログインした場合には、管理者と しての機能は提供しなくていいのです。

それができたら、次にそれぞれのアクターについてどんな事をするかを記述し ます。例えば楽曲データベースシステムでは次のような表になります。

アクターユースケース備考
閲覧者楽曲リストを見る年代順、作曲者別など、特定の項目でソートしてすべての楽曲を一覧したい。
閲覧者項目を見る一つの楽曲の詳細情報を見る
情報提供者楽曲を登録するわからない部分は空白のままにしておけるようにし たい。
情報提供者楽曲情報を更新・訂正・削除する他人が書いた情報の間違いも訂正できるようにしたい。
管理者情報提供者リストを管理する情報提供者を追加/更新/削除する
管理者不適切なデータベース操作から復旧するデータベースへの侵入や不測のデータベース破壊から復旧する

このような表を作ってみると、いろいろな疑問点や注文が浮かんでくるはずで す。例えば、「他人が書いた情報の間違いも訂正できるようにしたい」とある が本当にいいのでしょうか?セキュリティの問題と運営ポリシーに関わる問題 です。これをどうするかというのは「後で決めればいいこと」ではなく「今決 めなくてはならない問題」です。なぜならこれをどうしたいかは顧客しだいな ので技術者からは何も言える事はないからです。[1] ここでは、情報提供者は個人的な知り合い同 士であって、もし何かトラブルが起きたら当事者同士で解決することにしてお きます。

このユースケース表ができたら、それぞれの項目について数量や頻度、程度を 追加します。例えば「楽曲のエントリは何項目くらいあるのか」「情報提供者 は何人くらいか」「どのくらいの頻度で情報が更新されるか」といったことで す。数字はだいたいでかまいません。上限の数を書くことができればなお結 構です。

それぞれのアクターについてもコメントが必要です。「情報提供者」のコンピュー タスキルはどうなのか、という情報は、「情報をXMLに書いてメール添付」な んて方法が取れるのかそれとも専用のインターフェースを作らなければいけな いのかといった実現方法に関わってきます。管理者が自分だけなら、データベー スの復旧も特にインターフェースとして持たせる必要はないかもしれません。

この段階ではどんなタイプのシステムなのかは全く考えられていないことに注 意して下さい。楽曲リストを見るのはWeb上なのか、あるいは専用のビューア を使うのか、はたまたFAXで配信するのか、それは今考えるべきことではあり ません。実際のところ、Web上で表示させるのもFAXで配信するのも設計として はたいした違いはありません。それより(上で書いた)セキュリティの問題や運 用ルールなどの方がずっと重要な問題なのです。


  1. ここで「運営ポリシー」と言ったのは、パスワードを使うとか暗号を使うとかいった話ではありません。こうした話は技術者の領分であり、今ここで考える事ではありません。ここで考えるべきなのは「パスワードなどで保護する必要があるか?」ということで、さらに言えばそれを考える基になる「情報提供者とはどういう人たちか?」ということです。 ↩︎