« 年末ブログ:土日のうどん、そば、ラーメン | Main | 年末ブログ:歌音ちゃん »

January 02, 2018

年末ブログ:破綻しないシステム設計

「破綻しないシステム設計にして欲しい」と言うのは、「バグのないシステムを作って欲しい」と同じくらい愚かな物言いであり、そんなことを要望する意味はない。誰だって、破綻するシステムを作ろうとしているわけではないし、故意にバクを見逃そうとしているわけでもない。また、設計にしてもテストにしてもコストがかかることであり、いくら望まれても自ずと限界がある。

単純に「破綻しない」と言っても、そのレベルは様々あるだろう。どんな事態に遭遇してもシステムの設定変更で如何ようにも対応可能、というのが最も望ましいとして、そこから一切の変更はシステム全体の作り直しになる、という最悪の実装までの間には無限のオプションがあり得る。そして当然のことながら、そこにパッケージを使用するか、スクラッチで開発するかという悩ましい問題が合わさってくる。

先に結論を言っておけば、破綻しないシステム設計というのはある種のレトリックでしかあり得ない。そもそも、システムが破綻するかどうかの責任が設計にあるわけがない。もしも破綻しないシステム設計を請け負ったのなら、実際にシステムが破綻した場合にその原因は設計にあるということになり、下手をするとバグ対処せよ!ということになりかねない。しかし、エンドユーザは確信犯的かどうかにかかわらず、往々にしてそういう無茶な要求を出してくるものであり、それを受注したいベンダも調子に乗って引き受けてしまうことがあり得る。

具体的に、システムが破綻するかどうかというのは、スケーラビリティの問題である。当初100名が使用するとしてサイジングしたシステムを、事業拡大によって1000名が使用することになり、性能的にもリソース的にも破綻するということが考えられる。その際に、現在のシステムを止めないで運用したまま利用者の増大に対応できるのが一番だが、そんなことが出来るのは最初からシステムをそのように設計し、そのように作り込み、実際にそれが設計したとおりに動作することをテストして初めて実現する。そして、そのような設計をするのであれば、エンドユーザからそのような要件が出ていて、かつ仕様が規定されなければならない。

しかし、エンドユーザは破綻しないシステムを望むわりに、そもそもシステムが破綻しないとはどういうことなのか、そのためにどうなっていなければならないかまでは考えず、ひたすら破綻しないことだけを願ってやまない。そして、出来上がったシステムを検収する際に、そのシステムが実際に破綻しないよう作られていることを検証する方法も知らない。何年か経ってから何か問題が発生した場合に、破綻しないよう作られているはずだよね?と対応を迫ってくるのだろう。

システム利用者の増大による破綻以外に、コード情報の破綻というのもよくあるものだ。身近な例で言えば、マイナンバーは既に運用前から破綻しているという話を聞く。破綻しないコード設計というのも、わりとありがちなレトリックである。たとえば、コードにおいては通常何種類の状態を表したいかによって、それが100通りなら単純に3桁必要ということになる。しかし、状態は100通りでも1桁目は0、1、2のいずれかにしたいなどのユーザ要件が発生すると、3桁では収まらなくなる可能性が出てくる。そしてこういう要件は、画面や帳票などの設計がある程度固まって社内照会した後に出て来るものだ。ここでユーザ要件と設計をごっちゃにすると、問題が一気にややこしくなる。100通りを3桁にコード化するのは設計かも知れないが、1桁目を特定の値に縛るのは設計でも何でもない。それが当初からの要件にあれば、そもそも3桁には設計しないはずなのだ。逆に言えば、コードが破綻するのは設計するからであって、100通りの状態を表すのにコードを10桁にすれば、そう簡単には破綻しないだろうが、それはもはや設計とは言えない世界だろう。

設計というのは、整然とした要件やそれに基づいた仕様を元に行なうものであり、破綻するのは要件や仕様ということになる。これを勘違いすると確信犯的なエンドユーザの場合に痛い目に遭うだろう。

|

« 年末ブログ:土日のうどん、そば、ラーメン | Main | 年末ブログ:歌音ちゃん »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference 年末ブログ:破綻しないシステム設計:

« 年末ブログ:土日のうどん、そば、ラーメン | Main | 年末ブログ:歌音ちゃん »