4. 外部仕様設計のチェックポイント
外部仕様設計の肝は異常系・バリエーション設計
外部仕様設計は、サブシステムやノードといったシステムを構成する要素ごとの、外見えの動作を定義する設計です。外部仕様が定義されないと内部の設計は出来ないはずなのですが、開発作業から漏れてしまうケースが見受けられます。なぜ漏らされてしまうかというと、正常系のみの動作や振る舞いに限れば、プロトコル設計や相互作用設計(シーケンス設計など)を見れば自明であるということが多いためです。
しかし、異常系やバリエーションケースについては必ずしも事情が同じではありません。プロトコル設計や相互作用設計のみで、異常系やバリエーションケースにおける動作の全てを網羅することは困難であることが多いためです。通信・ネットワークシステムにおいては、異常系やバリエーションケースは無数に存在します。システム内の構成要素は独立して動作していますので、期待外のタイミングで他の構成要素からの通信メッセージを受信する可能性は無視することができませんが、そのタイミングは無数に存在します。また、通信メッセージには場合によっては多数のデータが含まれていて、それぞれのデータのバリエーションを組み合わせると膨大の数のパターンが存在することになります。これらのケースにおける動作を漏れなく定義するためには、ノードやサブシステムといった構成要素ごとの外部仕様設計が必要となるでしょう。
異常系・バリエーション設計のチェック方法
外部仕様設計の肝は異常系やバリエーションケースの設計ですので、チェックすべきポイントもそれらであると言えます。異常系やバリエーションケースにおいて動作が未定義な部分が残されていないかということが、システムの品質を左右する重要なポイントです。とはいっても、無数に存在する異常系やバリエーションケースを全て洗い出してチェックするということは現実的ではないでしょう。そこで、開発者が異常系やバリエーションケースの設計を網羅するためにどのような設計手法を用いているかをチェックすることをお勧めします。
一つの考えられうる方法は、設計対象となっている構成要素が取り得る「状態」および構成要素への入力(通信メッセージなど)のバリエーションを全て洗い出し、全てについて動作を設計するという方法です。構成要素の状態も入力のバリエーションも有限ですので、原理的に不可能というわけではありません。しかし、ごく小さな機能しか持たないシステムを開発する場合を除いては、工数や工期の制約から現実的な選択肢ではないでしょう。
そこで、多くの場合には何らかの方法でバリエーションの「縮退」を行うことが求められます。いくつかの共通化できるケースをまとめて一つのケースとして取り扱うことで、設計で検討しなければならないバリエーションの数を抑えるのです。バリエーションを縮退する設計手法の例を次の表に挙げてありますので、参考にしてください。なお、手法の呼称は当サイトが独自に命名したものです。他の開発企業では異なる呼称が使われているはずですので、呼称ではなく設計手法の内容についてご確認ください。
| 縮退手法 | 説明 |
|---|---|
| アンバンドリング | バリエーションの中には、全体的な動作に影響を与えないバリエーションが存在します。たとえば、通信メッセージ中の些細なデータのバリエーションなどは、応答メッセージ中のデータに影響を与えるのみで、どのように振る舞うかといった全体的な動作には影響を与えないことも多いです。このようなバリエーションは、全体の動作設計からは切り離して影響部分のみの設計を行います。(前出の例では、応答メッセージの内容のみに言及する設計を全体的な動作の設計とは別にに用意します) |
| 状態遷移の縮退 | 大きな機能を持つノードやサブシステムの完全な状態遷移設計を行うと、膨大な数の状態を定義しなければならなくなります。そこで、共通的に取り扱うことができる状態をまとめて一つの状態として定義し、設計上の状態の数を大幅に減らすことが行われます。ただし、状態遷移の縮退を行うと、細かな状態ごとのきめ細やかな動作の定義は放棄することになります。きめ細やかな動作の定義と縮退の度合いは、トレードオフの関係にあります。 |
| 入力バリエーションの縮退 | 共通して取り扱うことができる入力のバリエーションをまとめて一つとして取り扱い、設計で検討しなければならない入力バリエーションの数を大幅に減らします。例えば、「期待外のデータを持つメッセージを受信した場合には破棄する」というような設計を行った場合、数多くの入力バリエーションを「期待外のデータを持つメッセージを受信」という一つのケースとしてまとめて取り扱ったことになります。この場合も、細かなバリエーションごとのきめ細やかな動作定義は放棄しており、きめ細やかな動作の定義と縮退の度合いはトレードオフの関係にあることになります。 |
表1. 設計バリエーションの縮退を行う手法の例
