チェックは手をかえ品をかえ
- Error Detection -

夢空間への招待状

結城浩

初めの人が隣の人の耳にささやく。

「ゆうべ徹夜で原稿を書き上げた」

それを聞いた次の人が自分の隣の人に伝える。

「ゆうべ鉄也が原稿を仕上げた」

つぎつぎに伝言が伝わっていき、そのたびごとに文章が変わっていく。しまいには、

「鉄也くんが健康になった」

となってしまう。 ご存知、伝言ゲームである。 伝言ゲームをやると、いかに人間の記憶はあいまいで誤りをおかすかがよくわかる。

伝言ゲームがゲームとして成り立つのは、 伝言が誤って伝わるからである。そして伝言がどんどん変化していくのは、 その内容が正しいかどうかチェックする方法がないからである。ゲームに参加している人は、 自分の聞いた文章が、どれだけスタートの文章からずれているのかわからない。 したがって内容を修正することはできないのだ。

伝言ゲームに参加している人は、自分が聞かされた伝言そのものしか言うことができない。 もし最後に、

「結局、一晩で作品ができたのだ」

という要約をつけ加えることが許されるなら、 伝言の誤りは少なくなるだろう。 もちろん、そんなことをしたらゲームとしてはつまらなくなってしまうわけだが。

要約文をつけ加えると伝言の誤りは少なくなる。それはその要約文を元に、誤りを発見し、 可能ならば修正することができるようになるからだ。

「徹夜」という情報は「一晩で」という情報に支えられて、「鉄也」に化けることはなくなる。 また「原稿」は「作品」という言葉で守られて、「健康」に化けたりしなくなる。

 * * *

データの誤りを発見・修正するためには、データそのものだけではだめだ。 データの正当性をチェックするための追加データが必要である。 伝言ゲームでの要約文の追加はそれにあたるのだ。

 * * *

毎日の生活でも、私たちは自然にデータチェックを行なっている。

例えば買物。

「大根と、人参と、白菜と、玉ねぎ。全部で四品買ってきてね」

と言われたとする。買ってくる品目そのものと、 その品目に抜けがないようにするための合計が言われている。 データそのものとチェック用のデータがちゃんと含まれている。

例えばコピーの指示。

「この書類を二部コピーして、一部は課長に見てもらった後で部長に渡してほしい。 もう一部は企画室内で回覧してからぼくの方に返してくれ。つまり最後にはコピーの一部は部長の手にあり、 ぼくの手元には原本とコピー一部があることになる。」

この指示の中では、相手がどうすべきかという動的な情報と、 最終的にどういう状態になっていてほしいかという静的な情報が含まれている。

 * * *

一般にコンピュータは誤りを起こさないと思われている。計算ミスをおかしたり、 データの読み違いをしたりすることはないと思われている。しかし実際はそうでもない。

例えばパソコン通信を考えてみる。電話をパソコンにつないで、どこかのBBSにアクセスしているとき、 電話線を通してデータが流れる。回線の状態によっては結構データが失われたり、 データの内容が変わったりする。もしもそのまま使っていたら、画面に表示される文字が抜けたり、 化けたりしてしまう。

このような誤りを防ぐために、さまざまな方法が考案されている。例えばパリティチェック、 サムチェック、CRC、などである。

いずれの方法も、データの正当性をチェックするためのデータを追加して通信する。 たとえデータの一部が壊れていても、他の部分によってその誤りを発見し、 可能なら修正する技術なのである。

 * * *

誤りは起きるものである。誤りをゼロにすることは不可能である。 そうだとすると、私たちは何をするべきか。誤りを少なくする努力はもちろん必要だ。 しかしそれだけでは十分ではない。大切なことは、誤りが起きたときにそれを発見し、 正しい方向に修正する方法を考えることである。

(Oh!PC、1991年3月15日)