おもちゃの国のプログラミング
287
9
章
おもちゃの国のプログラミング
プログラミングとは、構文を使ってアイデアを機械に伝えることです。私たちがプログラムを書くと
きには、プログラムを実行したときに機械にやらせたいアイデアを頭に描いています。そして、プログ
ラミング言語の意味論を知ることで、そのプログラムの小さなパーツが意味することを、機械が理解し
ようとしていると確信できます。
ところが、複雑なコンピュータプログラムというのは、個々の文や式の単なる足し合わせ以上のもの
です。複数の小さなパーツを大きなプログラムに埋め込んだときに、プログラム全体が本来やってほし
いことをやってくれているかどうか、チェックできると便利です。たとえば、プログラムが常に特定の
結果を返すこと、ファイルシステムやネットワークに確実に副作用を与えること、予期せぬ入力によっ
てクラッシュするような明らかなバグを含んでいないこと、といったことを、私たちは知りたいのです。
プログラムに持たせたい性質には、さまざまな種類があります。プログラムの構文をチェックするだ
けで、プログラムにその性質があるかどうかわかると、本当に便利です。ところが残念ながら、ライス
の定理によって、ソースコードからプログラムの振る舞いを予測しても、必ずしも正しい答えは得られ
ないことがわかっています。もちろん、プログラムがやることを調べる最も直接的な方法は、単にプロ
グラムを実行することです。実際には、それで問題ない場合もあるでしょう。多くのソフトウェアテス
トは、