第 5 回 : 実践アプリケーション開発チュートリアル 〜設計編〜
〜 Visio によるオブジェクト指向設計入門 〜
5.1 はじめに
第 1 章から第 4 章を通して、Visio の CASE ツールとしての機能と UML の各種ダイアグラムについて説明しました。そこで、第 5 章と第 6 章では、前章までの Visio による UML の技術や知識を利用し、実際に要求分析から開発までの一連の流れを追ってシステム開発をチュートリアル形式で行います。作成するシステムは、データベースを利用したメール送信機能付き住所録です。本章では、システムに対する要求分析からシステム分析・設計までを説明し、次章では、設計に基づいたシステム開発について詳しく説明します。
5.2 要求仕様の決定
要求仕様とは、開発するシステムに対する顧客のニーズのことです。また、顧客の要求仕様を定義した仕様書のことを要求仕様書といいます。要求仕様の決定は、システム開発を行う場合に、最も重要な段階となります。
5.2.1 要求仕様書の必要性
システム開発において発生する様々なリスクを軽減するために、要求仕様書を作成する必要があります。要求仕様書を作成する利点は、大きく分けて 4 つ挙げられます。まず、要求仕様書を作成する最大の利点は、システムの動作環境や機能を明文化することにより、顧客のニーズとのずれを最小限に抑えることができます。次に、口頭によるコミュニケーションでは伝えることが困難な概念や要求を文章化することにより、明示的に伝えることができます。そして、要求仕様書を更新や保管することにより、システムをリリースする場合に必要な仕様書を作成するコストを大幅に削減できます。最後に、新たに人員をプロジェクトに増員する場合、短時間でプロジェクトの内容を伝えることができます。そのため、プロジェクト内の作業分担をより効率的に行うことができます。
5.2.2 システムの要求分析
本項では、開発する住所録の要求分析を行います。要求分析とは、システムの要求仕様を決定する場合に必要となる事柄を抽出することを指します。システムの要求分析を行うためには、顧客のシステムに対する要求をヒアリングする必要があります。ヒアリング項目と住所録の要求仕様を表1に示します。
表 1 住所録の要求仕様
| ヒアリング項目 | 内容例 |
| 開発案件名 | データベースを利用した住所録 |
| 開発目的 |
- データベース内の住所データをグラフィカルに追加、削除と変更を行い、作業の効率化を計る。
- 表示中のアドレスに、リアルタイムにメール送信を行うことによる作業の短縮化及び、送信先アドレスの入力間違いなどのヒューマンエラーを軽減する。
|
| システム公開開始予定時期 | × 月 ○ 日公開開始予定 |
| 入力情報のイメージ |
- Microsoft 社 の Access 形式の住所データベース (ID 《主キー》、氏名、住所、電話番号、E メールアドレス)
- 1 つのユーザインタフェース内でレコードを表示し、表示中のレコードに対してメールの送信を行う。
|
| 出力情報のイメージ |
- 住所データベースから ID、氏名、住所、電話番号、E メールアドレスをユーザインタフェースに表示する。
| | 開発システムの機能一覧 |
- 表示中のアドレスを変更する。
- データベースに新規アドレスを追加する。
- 氏名で目的のアドレスを検索する。
- データベースの情報を一覧表示する。
- 表示中のアドレスを削除する。
- 表示中のアドレスにメールを送信する。
- アドレスの最初もしくは最後に移動する。
- アドレスを 1 つずつ移動する。
|
| 開発・設計手法の規定や制約 |
- Visual C# を使用して開発を行う。
- Microsoft 社の Visio を使用して UML 図を記述する。
- データベースは Microsoft 社の Access を使用する。
|
| システム動作環境 |
- OS は、Windows 2000 もしくは、WindowsXP を対象とする。
- CPU は、Celeron 800 Mhz 以上を対象とする。
- メモリは、128 MB 以上を対象とする。
|
また、システムの要求分析を行う上で顧客と開発者間の認識のずれをなくすためにユースケース図を記述します。要求分析の段階で作成するユースケース図は、顧客との意思疎通を図る場合に利用されるため、ユースケースを分りやすく記述する必要があります。住所録についての要求仕様を表現したユースケース図を図 1 に示します。

図 1 住所録のユースケース図
5.3 システムの分析・設計
システム分析・設計段階とは、要求分析段階で把握した顧客のニーズを実現するために、システムに必要な技術を分析し、分析結果に従ってシステムの構成を設計する段階のことです。システムの構成の設計には、Visio の UML モデル図テンプレートを使用し、システムを開発する上で最低限必要なユースケース図、シーケンス図とクラス図を記述します。
5.3.1 システム分析
システム分析とは、要求分析によって得られた顧客のシステムに対するニーズについて、「システム化する範囲の決定」や「システム化による効果」を分析することです。システム分析を行うことにより、システム化に必要な技術やシステムが所有する機能、システム化に必要なクラスを把握できます。本項では、住所録に必要な技術について説明します。今回作成する住所録は、Visual C# .NET を使用して開発します。まず、データベースから住所を読み込む必要があります。そこで、Visual Studio .NET の 1 つの機能である ADO というデータベースと連携するための機能について調査を行います。次に、指定したメールアドレスにメールを送信する機能を実現する必要があります。そこで、メールを送信するクラスについて調査を行います。
5.3.2 プロジェクト管理計画
システムの複雑化に伴い、個人の所有する経験や直感だけではプロジェクトを成功させることが困難になってきました。また、システム開発の規模が巨大化し、システム開発におけるリスクが高くなってきました。それに加えて、最近では、システムに対するニーズが高まり、システム開発のサイクルが加速されました。そのため、システム開発期間が短縮され、納期遵守が非常に困難な状況になってきました。そこで、システム開発業界において、システム開発におけるプロジェクト管理に対する注目が集まってきました。プロジェクト管理とは、決められた期日までに、限られた予算枠で、限られた人員を管理し、顧客のニーズに対応したシステムを提供することです。Visio には、プロジェクト管理を支援する機能が用意されています。Visio のプロジェクト管理機能を利用することにより、プロジェクト管理がスムーズになります。次項からは、Visio に用意されたプロジェクト管理の機能について説明します。
5.3.3 タスクの決定
タスクとは、システム開発に必要な作業項目です。まず、タスクの決定を行うためにタスクの割り出しを行います。タスクの割り出しは、まず、システム開発に必要な工程をブレーンストーミング的に列挙します。その後、列挙したシステムの開発工程を精査することにより行います。Visio には、タスク及びスケジュール管理行うためのテンプレートとしてガントチャートテンプレートが用意されています。ガントチャートテンプレートの起動方法は、メニューから 【ファイル】 → 【新規作成】 → 【プロジェクト スケジュール】 → 【ガントチャート】 を選択します。詳しくは、メニューから 【ヘルプ】 → 【Microsoft Visio ヘルプ】 により、Microsoft Visio のヘルプを起動し、ツリービューから 【図面の種類】 → 【プロジェクト スケジュール】 → 【ガントチャート】 のカテゴリを参照ください。住所録のタスクを決定したガントチャートを図 2 に示します。

図 2 住所録のタスク
ガントチャートテンプレートでは、タスクの追加や削除、変更を容易に行うことができます。そのため、ブレーンストーミング的にタスクを列挙し、その後、各タスクの順番や適切性等を検討することができます。
5.3.4 組織図を用いたタスクの振り分け
プロジェクト管理において、プロジェクトに参加させるヒューマンリソースの選択は、非常に重要な位置を占めます。プロジェクトを成功にさせるには、プロジェクトメンバーのやる気と能力を最大限に引き出すことが重要です。そのためには、プロジェクトリーダが、プロジェクトメンバー一人一人に対して適材適所を実現したタスクの振り分けを行う必要があります。本項では、Visio の組織図テンプレートを使用してタスクを振り分けます。組織図の起動方法は、メニューから 【ファイル】 → 【新規作成】 → 【組織図】 → 【組織図】 を選択します。詳しくは、メニューから Microsoft Visio のヘルプを起動し、ツリービューから 【図面の種類】 → 【組織図】 のカテゴリを参照ください。住所録の組織図を図 3 に示します。また、各タスクの担当を振り分けたガントチャートを図 4 に示します。

図 3 住所録の組織図

図 4 タスクの振り分け
5.3.5 ガントチャートを用いた進捗管理
ガントチャートとは、時間を横軸にとり、各タスクについてのスケジュールと達成率を示した図です。ガントチャートを作成することにより、スケジュールをグラフィカルに表現できるため、現在の進捗状況を的確に把握できます。そのため、プロジェクトリーダおよびメンバーは、工程の確認と管理をより正確に行うことができます。本項では、Visio のガントチャートテンプレートを使用して、住所録作成のガントチャートを作成します。住所録のガントチャートを図 5 に示します。

図 5 住所録のガントチャート
5.3.6 ユースケース図の作成
本項では、顧客がシステムに求める機能についてシステム分析を行います。システム分析では、第 5.2.2 項の要求分析で作成したユースケースをもとにして、システムに必要な機能を表現するためのユースケース図を作成します。システム化するために必要なユースケース図を作成することにより、システムが実装しなければならない機能やアクターが行う内容を明確に表現できます。また、システム分析・設計段階で作成するユースケース図は、よりシステム開発をベースにおいて記述します。本章では、プログラムを作成することを念頭においてユースケース図を記述しているため、各ユースケースを英語で示します。住所録のユースケース図を図 6 に示します。

図 6 住所録のユースケース図
5.3.7 シナリオとクラスの抽出
本項では、第 5.4.2 項で紹介したユースケースをもとにしてシナリオを記述し、クラスの抽出を行った後、クラス図のアウトラインを記述します。シナリオとは、システムを使用してユーザが実際に行う処理の手順を文章化したものです。
まず、住所録のユースケースについて記述したシナリオの例を表 2 に示します。
表 2 住所録のシナリオ
| ユースケース名 | シナリオ例 |
| sendMail | A 君は B 君にメールを送信するため、住所録を起動しました。アプリケーションが起動した後、A 君は B 君のアドレスを探し、表示しました。その後、題名とメールの内容をテキストボックスに書き込み 【送信】 ボタンを押しました。 |
| addNew | A 君は C 君のアドレスをデータベースに追加するため、住所録を起動しました。アプリケーションが起動した後、A 君は 【追加】 ボタンをクリックし、C 君の氏名、住所、電話番号とメールアドレスを入力しました。その後、データベースを更新するため、 【更新】 ボタンをクリックしました。 |
| delete | A 君は D 君のアドレスをデータベースから削除するため、住所録を起動しました。アプリケーションが起動した後、A 君は D 君のアドレスを表示し、 【削除】 ボタンをクリックしました。その後、データベースを更新するため、 【更新】 ボタンをクリックしました。 |
| search | A 君は B 君の住所を知るために住所録を起動しました。アプリケーションが起動した後、A 君は B 君のアドレスを効率的に見つけ出すために、検索窓に氏名を入力し 【検索】 ボタンをクリックしました。その後、テキストボックスに入力した氏名と一致するデータが一覧表示用ボックスに表示されました。 |
| update | A 君は追加や削除、変更等の作業を行った後、住所録の変更をデータベースに適応するために 【更新】 ボタンをクリックしました。その後、データベースの変更箇所を自動的に修正しました。 |
| showAll | A 君は住所録に登録されている全てのデータを確認するため 【一覧表示】 ボタンをクリックしました。その後、一覧表示用ボックスに住所録のデータが一覧表示されました。 |
| moveEnd | A 君は住所録に最後に登録した人のアドレスを調べるため、 【>>】 ボタンをクリックしました。その後、住所録に最後に登録したデータが表示されました。 |
| moveFirst | A 君は住所録に最初に登録した人のアドレスを調べるため、 【<<】 ボタンをクリックしました。その後、住所録に最初に登録したデータが表示されました。 |
| moveForward | A 君は住所録の表示しているアドレスを 1 つずつ移動するために、 【>】 ボタンをクリックしました。その後、住所録に表示されていたアドレスが 1 つ前へ移動しました。 |
| moveBack | A 君は住所録の表示しているアドレスを 1 つずつ移動するために、 【<】 ボタンをクリックしました。その後、住所録に表示されていたアドレスが 1 つ後ろへ移動しました。 |
次に、シナリオからクラスを抽出します。クラスを抽出するには、シナリオからクラスの候補となるオブジェクトを抜き出し、オブジェクトを抽象化したクラスを作成します。クラスの候補は、シナリオから名詞に着目して抜き出します。住所録のシナリオから抽出したオブジェクトを図 7 に示します。

図 7 シナリオから抽出したオブジェクト
抽出したオブジェクトを抽象化し、住所録に必要なクラス候補を作成します。ここでは、追加ボタンやテキストボックスなどユーザインタフェースに関わるオブジェクトとデータベースに関わるオブジェクト、メールに関わるオブジェクトを抽象化したクラス候補を作成します。その後、クラス候補が実際に住所録に必要なクラスであるかを確認し、クラスを作成します。クラスの確認については、第 3 章を参照してください。住所録に必要なクラスを図 8 に示します。
図 8 住所録に必要なクラス
図 8 に示すとおり住所録を作成するには、3 つのクラスを用意します。まず、Form1 クラスはテキストボックスやボタンなどユーザインタフェースに関わる操作や属性を定義します。次に、Address クラスは、データの追加や更新などデータベースとの連携に関わる操作や属性を定義します。最後に Mail クラスは、メールの送信に関わる操作を定義します。
最後に、抽出したクラス間の関係を示す関連、多重度とロールを設定します。関連、多重度とロールを追加したクラス図を 図 9 に示します。

図 9 関連、多重度とロールを追加したクラス図
住所録の関連と多重度は図 9 に示すとおりになります。まず、Mail クラスは、Form1 クラスに表示された内容を使用してメールを送信するため、 Form クラスと Mail クラスを関連付けます。次に、Address クラスはデータベースと連携し、Form1 クラスのイベントに対応して、データベースとのやり取りを行うため、Form1 クラスと Address クラスを関連付けます。また、多重度は、Form1 クラスに対して、Mail クラスと Address クラスは 1 つしか生成されないので、1 を指定します。
5.3.8 シーケンス図とクラス図を記述
本項では、住所録の各機能を実現するための制御フローと相互作用を分析するためにシーケンス図を記述します。「sendMail」と「addNew」、「search」、「moveFirst」のシーケンス図をそれぞれ図 11〜14 に示します。また、「delete」シーケンス図と「update」シーケンス図は図 10、「showAll」シーケンス図は図 12、「moveEnd」シーケンス図、「moveForward」シーケンス図と「moveBack」シーケンス図は図 13 とほぼ同様の処理を行うため省略します。

図 10 「sendMail」シーケンス図

図 11 「addNew」シーケンス図

図 12 「search」シーケンス図

図 13 「moveFirst」シーケンス図
住所録の機能および静的な関係をグラフィカルに表現するために、図 9 で紹介したクラス図に、操作と属性を追加した図を図 14 に示します。

図 14 住所録のクラス図
5.4 まとめ
本章で説明した通り、Visio には、プロジェクト管理を支援する CASE ツールの機能が豊富に用意されています。Visio をプロジェクト管理に導入することにより、従来、開発者の頭を悩ませていた、スケジュール管理や設計図作成をシームレスにかつ的確に行うことができます。そのため、進捗の遅れや提供する機能の未実装などの危機的な状況を未然に回避することができます。
また、システム開発に要求分析フェーズやシステム分析フェーズを組み込むことにより、従来の勘や経験に頼っていたシステム開発から、より管理された計画にもとづくシステム開発を行うことができます。そのため、システム開発における様々な危険性を最小限に抑えることができます。次章では、本章で作成した住所録の仕様書をもとに、Visual C# を利用して実際に住所録を作成します。
著者紹介
田中 成典 (たなか しげのり)
| 1986年 | 関西大学工学部土木工学科卒業 |
| 1988年 | 関西大学大学院工学研究科 土木工学専攻博士課程前期課程修了 |
| 1996年 | 博士 (工学) 授与,関西大学 |
| 1997年 | 関西大学総合情報学部助教授 (現在に至る) |
| 主な著書: | やさしいCのはじめかた,オーム社,1993年 |
| | 建設技術者のための知識情報処理の実践,関西大学出版部,1999年 |
| | DirectX8,工学社,2001年 |
| | ステップアップXML,工学社,2002年 |
| | Linuxアプリケーション入門,森北出版,2002年 ほか |
中山 浩太郎 (なかやま こうたろう)
| 2001年3月 | 関西大学総合情報学部卒業 |
| 2001年4月 | 関西大学大学院総合情報学研究科入学 (現在に至る) |
| 2002年4月 | 同志社女子大学非常勤講師 (現在に至る) |
| 主な著書: | Web工房シリーズ Perlの達人,森北出版,1999年 |
| | DirectX8,工学社,2001年 |
| | Linuxアプリケーション入門,森北出版,2002年 ほか |
石井 健一 (いしい けんいち)
| 1999年4月 | 関西大学総合情報学部総合情報学科入学 (現在に至る) |
| 主な著書: | ステップアップXML活用法,工学社,2002年 |
野中 一希 (のなか かずき)
| 1999年4月 | 関西大学総合情報学部総合情報学科入学 (現在に至る) |
| 2002年1月 | 株式会社関西総合情報研究所入社 (現在に至る) |
中村 健二 (なかむら けんじ)
| 2000年4月 | 関西大学総合情報学部総合情報学科入学 (現在に至る) |
| 2002年4月 | 株式会社関西総合情報研究所入社 (現在に至る) |
|