1. 概要
業務分析や要件定義は、システム開発プロジェクトの成功を左右する重要な工程です。これらの過程では、様々な手法が用いられますが、本記事では「その他の手法」として分類される重要なツールについて解説します。具体的には、決定表(デシジョンテーブル)、SysML、状態遷移図、状態遷移表などを取り上げます。これらの手法を理解し適切に活用することで、より正確で効率的な業務分析や要件定義が可能となり、結果としてプロジェクトの成功確率を高めることができます。
2. 詳細説明
2.1. 決定表(デシジョンテーブル)
決定表は、ビジネスルールを明確に整理し、複雑な条件分岐を可視化するためのツールです。特に、複数の条件が絡む複雑なロジックを扱う際に有効です。縦軸には条件を、横軸には取るべきアクションを記載し、条件の組み合わせごとに実行すべきアクションを明確に示します。これにより、条件ごとの処理漏れを防ぎ、システム仕様を簡潔に説明できます。
flowchart TD subgraph 決定表["図1 決定表の例:顧客割引率の決定"] 条件1["条件1: 顧客ランク"] 条件2["条件2: 注文金額"] action["アクション: 割引率"] ルール1["ルール1"] ルール2["ルール2"] ルール3["ルール3"] ルール4["ルール4"] gold["ゴールド会員"] silver["シルバー会員"] amount1["10万円以上"] amount2["10万円未満"] discount1["15%"] discount2["10%"] discount3["5%"] discount4["0%"] 条件1 --- gold 条件1 --- silver 条件2 --- amount1 条件2 --- amount2 action --- discount1 action --- discount2 action --- discount3 action --- discount4 gold --- ルール1 gold --- ルール2 silver --- ルール3 silver --- ルール4 amount1 --- ルール1 amount2 --- ルール2 amount1 --- ルール3 amount2 --- ルール4 ルール1 --- discount1 ルール2 --- discount2 ルール3 --- discount3 ルール4 --- discount4 end
図1 決定表の例
この決定表の例は、顧客割引率を決定するシンプルなビジネスルールを表現しています。図の各要素について説明いたします:
- 条件:
- 条件1: 顧客ランク(ゴールド会員、シルバー会員)
- 条件2: 注文金額(10万円以上、10万円未満)
- アクション:
- 割引率(15%、10%、5%、0%)
- ルール:
- ルール1: ゴールド会員かつ10万円以上の注文 → 15%割引
- ルール2: ゴールド会員かつ10万円未満の注文 → 10%割引
- ルール3: シルバー会員かつ10万円以上の注文 → 5%割引
- ルール4: シルバー会員かつ10万円未満の注文 → 割引なし(0%)
この決定表により、顧客ランクと注文金額の組み合わせに応じて適用される割引率が一目で分かります。例えば、ゴールド会員が10万円以上の注文をした場合は15%の割引が適用されることが明確に示されています。
決定表を使用することで、以下のメリットがあります:
- 複雑な条件分岐を視覚的に整理できる
- 条件の組み合わせによる処理漏れを防ぐことができる
- ビジネスルールを簡潔かつ明確に表現できる
- 仕様変更や新しいルールの追加が容易
この例のような決定表を用いることで、システム開発者はビジネスルールを正確に理解し、効率的にシステムに実装することができます。また、ビジネス側の担当者にとっても、ルールの確認や変更の検討が容易になります。
2.2. SysML(Systems Modeling Language)
SysMLは、ハードウェアとソフトウェアの両方を含む複雑なシステムを設計するためのモデリング言語です。UMLをベースに拡張されたものであり、システムの要件モデリング、分析、設計、検証などに幅広く活用されます。例えば、SysMLは自動運転車のシステム設計において、センサーや制御ユニット、ソフトウェアの相互作用を包括的にモデリングする際に使用されます。
classDiagram class 自動運転車システム { +センサーサブシステム +制御サブシステム +アクチュエーターサブシステム } class センサーサブシステム { +カメラ +LIDAR +GPS +IMU } class 制御サブシステム { +メインECU +AIプロセッサ +セーフティECU } class アクチュエーターサブシステム { +ステアリング制御 +ブレーキ制御 +アクセル制御 } 自動運転車システム *-- センサーサブシステム 自動運転車システム *-- 制御サブシステム 自動運転車システム *-- アクチュエーターサブシステム class カメラ { -解像度: int -フレームレート: int +画像キャプチャ() } class LIDAR { -スキャン範囲: float -点群密度: int +距離測定() } class GPS { -精度: float +位置取得() } class IMU { -加速度計: object -ジャイロスコープ: object +姿勢推定() } センサーサブシステム *-- カメラ センサーサブシステム *-- LIDAR センサーサブシステム *-- GPS センサーサブシステム *-- IMU
図2 SysMLのシステム構成図の例
この図は、自動運転車システムのSysMLによるBlock Definition Diagram(ブロック定義図)の例を示しています。図の各要素について説明いたします:
- 自動運転車システム: 全体のシステムを表すメインブロックです。
- サブシステム:
- センサーサブシステム:環境認識のためのセンサー群
- 制御サブシステム:データ処理と意思決定を行う中枢部
- アクチュエーターサブシステム:車両の動作を制御する部分
- センサーサブシステムの構成要素:
- カメラ:画像キャプチャ機能を持ち、解像度とフレームレートの属性を持つ
- LIDAR:距離測定機能を持ち、スキャン範囲と点群密度の属性を持つ
- GPS:位置取得機能を持ち、精度の属性を持つ
- IMU:姿勢推定機能を持ち、加速度計とジャイロスコープの属性を持つ
- 制御サブシステムの構成要素:
- メインECU
- AIプロセッサ
- セーフティECU
- アクチュエーターサブシステムの構成要素:
- ステアリング制御
- ブレーキ制御
- アクセル制御
この図を使用することで、自動運転車システムの全体構造と各構成要素の関係を視覚的に理解することができます。SysMLを用いることの利点は以下の通りです:
- システム全体の構造を明確に表現できる
- ハードウェアとソフトウェアの両方を同じ図で表現できる
- 各構成要素の属性や機能を詳細に記述できる
- システムの階層構造を表現できる
- 標準化されたノーテーションにより、関係者間でのコミュニケーションが容易になる
このようなSysMLのブロック定義図を用いることで、複雑なシステムの設計や分析を効率的に行うことができます。また、システムの全体像を把握しやすくなるため、開発チーム間の連携や要件の追跡が容易になります。
2.3. 状態遷移図
状態遷移図は、システムの動的な振る舞いを視覚的に表現するツールです。システムが取りうる各状態と、その状態間の遷移を図式で表現することで、システムの振る舞いを直感的に理解することができます。特に、ユーザーインタラクションや外部システムとの連携がある場合に有効です。
stateDiagram-v2 [*] --> 待機中 待機中 --> カード挿入済み : カード挿入 カード挿入済み --> 暗証番号入力中 : 暗証番号入力開始 暗証番号入力中 --> 取引選択中 : 暗証番号確認成功 暗証番号入力中 --> カード挿入済み : 暗証番号入力失敗(3回未満) 暗証番号入力中 --> カード返却中 : 暗証番号入力失敗(3回) 取引選択中 --> 現金引出処理中 : 現金引出選択 取引選択中 --> 残高照会中 : 残高照会選択 取引選択中 --> 振込処理中 : 振込選択 現金引出処理中 --> 現金受取待ち : 現金準備完了 現金受取待ち --> カード返却中 : 現金受取完了 残高照会中 --> 取引選択中 : 確認完了 振込処理中 --> 取引選択中 : 振込完了 カード返却中 --> 待機中 : カード取出し 取引選択中 --> カード返却中 : 終了選択
図3 状態遷移図の例
この図は、ATM(現金自動預払機)の操作フローを表す状態遷移図の例です。図の各要素について説明いたします:
- 状態:
- 待機中
- カード挿入済み
- 暗証番号入力中
- 取引選択中
- 現金引出処理中
- 現金受取待ち
- 残高照会中
- 振込処理中
- カード返却中
- 遷移:
- 矢印は一つの状態から別の状態への遷移を表します。
- 矢印に付けられたラベルは、遷移の契機となるイベントや条件を示しています。
- 初期状態:
- [*]から「待機中」への矢印は、システムの初期状態を示しています。
- 主な遷移の流れ:
- 待機中 → カード挿入済み → 暗証番号入力中 → 取引選択中
- 取引選択中から各種取引(現金引出、残高照会、振込)への分岐
- 取引完了後のカード返却処理
- 例外処理:
- 暗証番号入力失敗時の処理(3回未満の失敗と3回失敗時の処理の違い)
この状態遷移図を使用することで、以下のような利点があります:
- システムの動的な振る舞いを視覚的に理解できる
- 各状態での可能な操作と、その結果生じる状態変化が明確になる
- 例外処理(エラーハンドリング)のフローも含めて表現できる
- ユーザーインタラクションのシーケンスを把握しやすい
- システムの設計や仕様の検討、レビューに活用できる
状態遷移図は、特に以下のような場面で効果的です:
- ユーザーインターフェースの設計
- 複雑なビジネスロジックの表現
- システムの振る舞いの検証
- テストケースの導出
このような状態遷移図を用いることで、システムの動的な振る舞いを関係者間で共有し、設計の漏れや不整合を早期に発見することができます。また、実装段階でも、この図をベースにしてコードの構造を決定することができ、保守性の高いシステム開発につながります。
2.4. 状態遷移表
状態遷移表は、状態遷移図と同じ情報を表形式で整理したものです。縦軸に現在の状態、横軸に発生するイベントを配置し、それに対する遷移先の状態を各セルに記入します。これにより、システムの振る舞いを明確に説明できるため、状態管理が複雑なシステムにおいて有効です。
現在の状態\イベント | カード挿入 | 暗証番号入力開始 | 暗証番号確認成功 | 暗証番号入力失敗(3回未満) | 暗証番号入力失敗(3回) | 現金引出選択 | 残高照会選択 | 振込選択 | 現金準備完了 | 現金受取完了 | 確認完了 | 振込完了 | 終了選択 | カード取出し |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
待機中 | カード挿入済み | – | – | – | – | – | – | – | – | – | – | – | – | – |
カード挿入済み | – | 暗証番号入力中 | – | – | – | – | – | – | – | – | – | – | – | – |
暗証番号入力中 | – | – | 取引選択中 | カード挿入済み | カード返却中 | – | – | – | – | – | – | – | – | – |
取引選択中 | – | – | – | – | – | 現金引出処理中 | 残高照会中 | 振込処理中 | – | – | – | – | カード返却中 | – |
現金引出処理中 | – | – | – | – | – | – | – | – | 現金受取待ち | – | – | – | – | – |
現金受取待ち | – | – | – | – | – | – | – | – | – | カード返却中 | – | – | – | – |
残高照会中 | – | – | – | – | – | – | – | – | – | – | 取引選択中 | – | – | – |
振込処理中 | – | – | – | – | – | – | – | – | – | – | – | 取引選択中 | – | – |
カード返却中 | – | – | – | – | – | – | – | – | – | – | – | – | – | 待機中 |
表1 状態遷移表の例
この状態遷移表は、ATMの操作フローを表形式で表現したものです。表の各要素について説明いたします:
- 縦軸(左列):現在の状態 システムが取りうる各状態を示しています。
- 横軸(上段):イベント システムに対して発生する可能性のあるイベントや操作を示しています。
- セルの内容:遷移先の状態 現在の状態(縦軸)でイベント(横軸)が発生した場合の遷移先の状態を示しています。 “-” は、そのイベントが該当の状態では発生しない、または状態遷移が起こらないことを示しています。
この状態遷移表を使用することで、以下のような利点があります:
- システムの全ての状態とイベントの組み合わせを網羅的に確認できる
- 各状態で許可されるイベントと、その結果の状態変化が一目で分かる
- 状態遷移の漏れや矛盾を発見しやすい
- 表形式のため、プログラムによる処理や自動生成が容易
状態遷移表は、特に以下のような場面で効果的です:
- 複雑なステートマシンの設計と検証
- システムの全状態とイベントの組み合わせの網羅的チェック
- テストケースの導出(各セルが潜在的なテストケースとなる)
- 状態遷移ロジックの実装(プログラムコードへの変換が容易)
この表を用いることで、システム開発者は全ての状態とイベントの組み合わせを漏れなく考慮することができ、堅牢なシステム設計につながります。また、状態遷移図と併用することで、視覚的な理解と詳細な情報の両方を活用でき、より効果的なシステム設計と検証が可能となります。
3. 応用例
3.1. 決定表の応用
決定表は、複雑な条件分岐を含むビジネスロジックの整理に活用されます。例えば、保険の査定システムや製品の在庫管理システムにおいて、顧客の年齢、性別、既往歴などの条件に基づいて保険料を決定する際に役立ちます。決定表を用いることで、処理の曖昧さを排除し、明確な判断基準を提供できます。
3.2. SysMLの応用
SysMLは、航空宇宙や自動車、医療機器など、複雑なシステムの設計に広く用いられます。例えば、自動運転車の設計では、センサー、制御ユニット、アクチュエータなどのハードウェアと、それらを制御するソフトウェアの関係を包括的にモデリングし、システム全体の挙動をシミュレーションするのに役立ちます。
3.3. 状態遷移図・状態遷移表の応用
状態遷移図や状態遷移表は、ATMや自動販売機のようなシステムの設計において有効です。例えば、ATMでは「待機中」「カード挿入」「暗証番号入力中」「取引選択中」といった状態と、それらの状態間の遷移を表現することで、システム全体の動作を可視化し、誤動作の防止に貢献します。
4. 例題
例題1: 決定表の作成
以下の条件に基づいて、商品の配送料を決定する決定表を作成してください。
条件:
- 注文金額が10,000円以上か未満か
- 会員ランクがゴールド、シルバー、一般のいずれか
配送料:
- 0円、500円、1,000円のいずれか
回答例:
(例: 表2 決定表の例を挿入)
条件\ルール | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|
注文金額10,000円以上 | Y | Y | Y | N | N | N |
会員ランク:ゴールド | Y | N | N | Y | N | N |
会員ランク:シルバー | N | Y | N | N | Y | N |
会員ランク:一般 | N | N | Y | N | N | Y |
配送料:0円 | ● | ● | ● | |||
配送料:500円 | ● | ● | ||||
配送料:1,000円 | ● |
例題2: 状態遷移図の作成
自動販売機の基本的な動作を表現する状態遷移図を作成してください。考慮する状態は「待機中」「商品選択中」「支払い待ち」「商品排出中」とし、それぞれの状態間の遷移を示してください。
回答例:
stateDiagram-v2 [*] --> 待機中 待機中 --> 商品選択中 : 硬貨投入 商品選択中 --> 支払い待ち : 商品選択 支払い待ち --> 商品排出中 : 支払い完了 商品排出中 --> 待機中 : 商品取り出し 商品選択中 --> 待機中 : キャンセル 支払い待ち --> 商品選択中 : 追加硬貨投入
この状態遷移図は、例題2で説明した自動販売機の基本的な動作を視覚的に表現しています。図の各要素について説明いたします:
- 初期状態:図の開始点([*])から「待機中」の状態に矢印が向かっています。これは自動販売機の初期状態を示しています。
- 状態:「待機中」「商品選択中」「支払い待ち」「商品排出中」の4つの状態が四角で表現されています。
- 遷移:状態間の矢印は遷移を表しており、矢印に付けられたラベルは遷移の契機となるイベントを示しています。
- 遷移の詳細:
- 待機中から商品選択中への遷移:硬貨投入
- 商品選択中から支払い待ち:商品選択
- 支払い待ち から商品排出中:支払い完了
- 商品排出中から待機中:商品取り出し
- 商品選択中から待機中:キャンセル
- 支払い待ちから商品選択中:追加硬貨投入
この図を使用することで、自動販売機の動作の流れを視覚的に理解しやすくなります。また、システムの設計や要件定義の際に、この図を基に議論を行うことで、漏れのない仕様策定につながります。
5. まとめ
本記事では、業務分析や要件定義に用いられるその他の手法として、決定表(デシジョンテーブル)、SysML、状態遷移図、状態遷移表について解説しました。それぞれの手法の特徴を以下のように整理します:
- 決定表:複雑な条件分岐を整理し、ビジネスルールを明確に可視化する
- SysML:ハードウェアとソフトウェアを含む複雑なシステムの設計をモデリングする
- 状態遷移図:システムの動的な振る舞いを視覚的に表現し、状態間の遷移を明確にする
- 状態遷移表:状態遷移図と同様の情報を表形式で整理し、各イベントごとの状態遷移を明確にする
プロジェクトの成功には、これらの手法を適切に使い分け、システムの要件に応じて組み合わせることが重要です。これにより、業務分析や要件定義の精度が向上し、システム開発プロジェクト全体の成功確率を高めることができます。