No.115: ノーマルケースとワーストケースを分ける

 プロジェクトが目標としているものに対して、条件を考えずにどんな時でも一定の結果を得るということを達成しようとしてしまっていないでしょうか。見積り段階や要件定義段階で、要求されるパフォーマンスを常時実現できると安易に考えてしまう、またはそういった観点が抜け落ちてしまうと、プロジェクトの終結段階になって大混乱に陥ってしまう怖れがあります。

 例えば、Webを通じたECサイトや予約システム等で、何秒以内に応答を返すという性能要件があったとします。ローカルなテスト環境では目標通りに応答が返ってきても、現実のインターネット環境上に構築されたシステム上では、必ずしもその応答時間を達成できるとは限りません。通常では期待通りに応答が返ってきても、アクセスが集中する時に応答が待たされる事態は、私たちの誰もが経験しているのではないでしょうか。

 つまり、要求されるパフォーマンスを、通常の状態を前提として安請け合いしてはいけないということです。しかし、要求する側としても、Webサイトの利用者からのリクエストに対して1分間も待たせる様なシステムを認めるわけにはいきません。そんなに利用者を待たせてしまえば、あきられて離脱されてしまい、ビジネスが成り立ちません。

 ではどうするか。この様な環境のこの様な条件の下で、このパフォーマンスが出せる、というノーマルケースを定め、それ以外の滅多に発生しないワーストケースを区別することです。

 このワーストケースを区別して見積りや要件定義に織り込んでおかないと、いざ成果物を要求した側に引き渡す段階になって、または成果物を使い始めた段階になって、要求通りのパフォーマンスが出ない、という騒ぎになってしまいます。

 もちろんワーストケースを含めたどんな状態であっても、常に安定したパフォーマンスが要求されることもあるでしょう。その場合は、ノーマルケースとワーストケースを区別する場合と比べ、実現するために数倍、数十倍の労力とコストがかかる可能性があることを覚悟しなければなりません。

 身近なところでは、パソコンが良い例です。

 コンピューターが一番時間を費やす動作はデータの移動です。皆さんが入力したリクエストに最速で答えるために、直近にアクセスしたデータ及びその周辺のデータは、近いうちにまたアクセスされる可能性が高いことから、プロセッサのすぐ近くにある高速なキャッシュメモリに一時格納されます。

 多くのケースではこのキャッシュメモリへのアクセスだけでプロセッサが動いていますが、必要なデータがキャッシュメモリにないと(ミスヒット)、その先の大容量だが低速のメモリに、さらにそこにもないとその先のハードディスクやSSDにアクセスすることになります。

 皆さんがパソコンを使っていて、たまに応答が遅くなるのは、いつもノーマルケースで動いているわけではなく、ワーストケース(と呼ぶほどワーストな事態ではありませんが)に遭遇するからです。

 これが、常時ノーマルケースのパフォーマンスを要求することになったら、パソコンのスケールとコストでは太刀打ちできません。スーパーコンピュータ並みの装備が必要になります。

 初めに戻りますと、見積りや要件定義の段階で、要求されるパフォーマンスはどんな前提で実現すべきものなのか、ワーストケースが存在することを見過ごすか見過ごさないかだけで、プロジェクトの行方は大きく異なってしまうのです。

 あなたの組織では、プロジェクトが実現するものの前提条件として、ノーマルケースとワーストケースを区別していますか。運を現場の担当者に任せてしまっていないでしょうか。

関連提言:No.109: できないことをできると言ってないか