分散開発管理のポイント

1. 分散開発の難しさ | 3. 真っ先にすり合わせるべきこと

2. 拠点間の分担のポイント

分担の仕方には2つのタイプがある

分散開発で難しいのは、設計工程から実装工程までの作業を拠点間でどのように分担するかです。システム設計はA社が担当して、ノードXの開発はB社、ノードYの開発はC社・・・という言い方をしてしまうと一見単純そうですが、実はそれほど簡単な話ではありません。このA社とB社とC社の話を例に取ってみても、実は2つの異なる分担の可能性があるのです。その2つというのは、工程の境界で分担するタイプ(以下、「工程境界分担」とノード(=構成要素)の境界で分担するタイプ(以下、「構成要素境界分担」)です。

これらの分担タイプを説明するにあたり、まずは設計工程の境界がどこにあるのかについて整理しておきましょう。まず、通信・ネットワークシステム開発の設計工程は、システムの階層構造に合わせた多層の構造を持っています。システム全体を設計するシステム設計工程、システムを構成するノードについて設計するノード設計工程、ノードを構成するソフトウェアについて設計するソフトウェア設計工程、ソフトウェアを構成するモジュールについて設計するモジュール設計工程・・・。「簡単な話じゃないか」と思われるかもしれませんが、一つ注意点があります。それは、外部仕様の設計が一つ上の階層の作業だということです。具体的に言うと、ノードの外部仕様設計はシステム設計工程の一部、ソフトウェアの外部仕様設計はノード設計工程の一部、モジュールの外部仕様設計はソフトウェア設計工程の一部・・・となります。なぜこのようになるかというと、外部仕様の設計は一つ上の階層の設計と同時に行わなければならないからです。例えば、ノードの外部仕様設計はノード間のプロトコル設計やノード間シーケンス設計といったシステム設計と同時に行う必要があります。各ノードの外部仕様はノード間のプロトコルやシーケンスに応じて決まりますし、プロトコルやシーケンスの細部を詰めるためには各ノードの外部仕様を詳細に定義する必要があります。両者は本質的には切り離すことができない設計作業なのです。

図1. システムの階層構造と設計工程の境界

これを踏まえて先ほどのA社とB社とC社の分担を考えると、工程境界で分担を線引きするのであればノードXとノードYの外部仕様設計はA社の担当となります。このタイプの分担が、「工程境界分担」です。他方で、「B社はノードX全般の担当ということにして、ノードAの外部仕様設計から任せよう。C社もノードY全般の担当で同様。」という分担の仕方もあり、こちらのタイプの分担が「構成要素境界分担」です。これは、開発をノードごとに分担するときだけの議論ではありません。ノードの開発でソフトウェア(プロセスや共有ライブラリ)ごとに分担を行うとき、ソフトウェアの開発でモジュールごとに分担を行うときなどにも、同じように2つのタイプの分担があることになります。

図2. 工程境界分担と構成要素境界分担

それぞれの分担タイプのコミュニケーション量

分散開発を行う際に工程境界分担を選択するか構成要素境界分担を選択するかは、様々な要因によって決められることになります。一つには、各拠点のリソース量(どれだけの工数を投入するのか)があります。例えば、A社がシステム設計、B社がノードXの開発、C社がノードYの開発を行うケースを考えてみましょう。A社のリソースが豊富でB社とC社のリソースが乏しいという場合には、A社の作業量を増やしてB社とC社の作業量を減らす必要がありますので、工程境界分担が行われることになるでしょう。反対に、A社のリソースが乏しくてB社とC社のリソースは豊富だという場合には、A社の作業量を減らしてB社とC社の作業量を増やす必要がありますので、構成要素境界分担が行われることになります。

図3. 工程境界分担の選択ケースと構成要素境界分担の選択ケース

もう一つ考えておくべき要因として、工程境界分担と構成要素境界分担それぞれにおいて必要となる拠点間のコミュニケーション量の違いがあります。結論から言いますと、工程境界分担の方が構成要素境界分担よりも拠点間のコミュニケーション量は少なく済みます。ところが、これはしばしば誤解されることで、構成要素境界分担の方が拠点間のコミュニケーション量が少なくなると勘違いされていることがあります。その論拠は、次のようなものです。

A社がシステム設計、B社がノードXの開発、C社がノードYの開発を行うケースを考えると、次のようなことが言える。

  1. 工程境界分担を行うと、A社からB社とC社にノードXとノードYの外部仕様を細部にわたり漏れなく伝えなければならないが、完璧なドキュメントを作ることは難しいので、拠点間のコミュニケーションで補わなければならない。
  2. これに対し、構成要素境界分担を行うと、ノードXとノードYの外部仕様はそれぞれ開発を担当するB社とC社で行われることになるので、外部仕様を伝えるためのコミュニケーションは拠点内に閉じる。
  3. そのため、工程境界分担よりも構成要素境界分担の方が必要とされる拠点間のコミュニケーション量は少なくなる。

この主張は、1番目と2番目については正しいでしょう。しかし、結論の3番目は違います。この主張は、外部仕様を伝えるために必要となるコミュニケーションの量に着目したところまでは素晴らしいと言えます。しかし、残念なことにシステム設計を行うために必要となるコミュニケーションの量について考慮が及んでいないのです。思い出して下さい。ノードの外部仕様設計はシステム設計の一部です。ノードの外部仕様設計は、ノード構成設計やノード間インタフェース設計やノード間シーケンス設計と密接に結びついているのです。したがって、正しい議論は次のようになります。

  1. 工程境界分担を行うと、A社からB社とC社にノードXとノードYの外部仕様を細部にわたり漏れなく伝えなければならないが、完璧なドキュメントを作ることは難しいので、拠点間のコミュニケーションで補わなければならない。
  2. これに対し、構成要素境界分担を行うと、ノードXとノードYの外部仕様はそれぞれ開発を担当するB社とC社で行われることになるので、外部仕様を伝えるためのコミュニケーションは拠点内に閉じる。
  3. 一方で、構成要素境界分担を行うと、A社が行うシステム設計(ノード構成設計、ノード間インタフェース設計、ノード間シーケンス設計など)と、B社およびC社が行うノードAとノードBの外部仕様設計との間で、設計すり合わせのためのコミュニケーションが発生する。
  4. それに対し、工程境界分担では各ノードの外部仕様設計も含めたシステム設計工程全体がA社の担当となるため、設計すり合わせのためのコミュニケーションは拠点内に閉じる。
  5. 本質的には一方向の情報伝達である外部仕様を伝えるためのコミュニケーションと、本質的に双方向の情報のやり取りが必要である設計すり合わせのためのコミュニケーションを比べると、前者の方がコミュニケーション量は少なくて済む。よって、構成要素境界分担よりも工程境界分担の方が必要とされる拠点間のコミュニケーション量は少なくなる。

このことから、工程境界分担と構成要素境界分担を任意に選択できる状況にある場合には、工程境界分担を選択した方が開発は上手くいきやすいでしょう。これがしばしば反対に誤解されているのは、外部仕様設計を行うためには必要な設計のすり合わせが軽視されているためだと思います。十分なすり合わせを行わないままに外部仕様設計が行われると、特に異常系やバリエーションケースでの品質の低下や後工程での手戻りによる工数増大につながります。

図3. 工程境界分担と構成要素境界分担それぞれで必要なコミュニケーション量

無料小冊子のお申込みはこちら

株式会社システム計画研究所のオフィシャルサイトはこちら

通信・ネットワークシステム開発に関するご相談はこちら

サーバ監視・ネットワーク監視ツール isNetSentry-S のサイトはこちら

信頼できるITシステムの開発と利用を支援する技術情報提供サイト「信頼のシステム開発.COM」はこちら