◆物事には表と裏がある
システムに対する要求仕様の内、ハードウェアに対するものは、データ量や応答時間、利用者数などで、それなりに決まり、CPU能力やメモリ量、DISK容量は数値的に明確化される。ところが、ソフトウェアに対する要求仕様は、とかくあいまいになりがちである。前述の「質の高い仕様書」「分かりやすい表現」を心がけたとしても、いざ、蓋を開けてみると、思ったものと違う動作をするソフトウェアができてきたりする。
特に、想定していなかった事態が発生した時にこういったことが起こりやすい。通常、「要求」というのは、ある条件の場合に、このように処理して欲しいというようなことを考える。例えば、「計算の結果の上限値は、100を超えないようにする。」という要求は、明確に記述されている。ところが、コンピュータは、困ったもので、「100を越えたときには、どうするのか」を決めてやらないと、そこで考え込んでしまうか、仕事を放り出してしまう。そういった場合、画面が応答しなくなったり、突然、真っ黒な画面になったりする。
つまり、コンピュータは、よく言われるようにYES/NOで処理を進めていくので、YESとNOと両方について、どうすれば良いのかを指示してやらなければならない。物事には、必ず表と裏があるものだが、コンピュータは、それを厳密に必要とする。プログラマは、そのことを習慣的に身につけているが、一般には「常に裏も考える」という人は少ない。しかし、あえてシステム構築においては、そこを考えないと、プログラマの判断に任せることになる。その結果は、目に見えている。思ったように動かない!そして、予算と期間の超過である。条件が真と偽だけである場合は、まだいい。これが、「条件A、条件B、条件Cを満足する場合に、ある処理をせよ。」という仕様では、A,B,C全ての条件に対する真/偽の組合せは、以下のようになる。
・A:真 B:真 C:真 ・A:偽 B:真 C:偽
・A:真 B:真 C:偽 ・A:偽 B:真 C:真
・A:真 B:偽 C:偽 ・A:偽 B:偽 C:真
・A:真 B:偽 C:真 ・A:偽 B:偽 C:偽
しかし、先に記述した仕様では、最初の組合せに対する処理だけを記述したに過ぎず、残りの組合せに対する処理は、設計者やプロゲラマの判断に委ねてしまうことになる。そして、彼らは、親切にも確認の質問をしてくれることもあるが、納期と予算のプレッシャの中では、いわゆる彼らの持つ「業務知識」というもので推測して処理を決定してしまう。なぜなら、全ての条件を決定しないと、未設定の条件が発生した場合、コンピュータは言うことを聞かないので、彼らの仕事が終わらないからだ。
コメント