9章テストとデバッグ
Pythonにはコンパイル時の静的型チェックがありません。インタプリタには実行したときにプログラムがちゃんと働くことを保証するものが何もありません。Pythonは、オプションとして、多くの種類のバグを検出する静的解析に使われる型アノテーションをサポートしています(詳細は「項目90 バグを回避するために静的解析を検討する」参照)。しかし、基本的には動的言語で何でも可能です。Pythonでは、プログラムが呼び出す関数が実行時に定義されているかどうかを、たとえ、ソースコードから定義の存在が確かであっても、知ることができません。この動的振る舞いは祝福であると同時に呪いです。
大多数のPythonプログラマは、結果として得られる簡潔性と単純さとからくる生産性向上を考慮すれば、コンパイル時の静的型チェックがないことは価値があると言います。しかし、Pythonを使っているほとんどの人が、実行時にプログラムがくだらないエラーに遭遇した恐ろしい話を少なくとも1つは耳にしているでしょう。私が聞いた最悪の例は、本番環境で、動的インポートの副作用としてSyntaxErrorが起こったときのことです(「項目88 循環依存を取り除く方法を知る」参照)。私も知っている、この驚くべき出来事に見舞われたプログラマは、その後Pythonの使用をやめました。
しかしながら、なぜ、プログラムが本番環境に使われる前に、コードがテストされなかったのか、不思議でなりません。コンパイル時静的型安全がすべてではありません。どのような言語で書かれているにせよ、コードは常にテストすべきです。しかし、Pythonでは、他の言語よりも妥当性を検証するためにテストを書くことが重要だということを認めざるを得ません。幸いにも、リスクが生じるその同じ動的な性質が、コードに対するテストを書き、不具合プログラムをデバッグするのを非常にやさしくしてくれています。Pythonの動的性質とたやすくオーバーライドできる振る舞いを使ってテストを実装し、プログラムが期待通りに動作することを確認できます。 ...