防御的プログラミング(2) [プログラマー現役続行]
防御的プログラミングに関して、いくつか記事を書いています。
防御的にプログラミングするというのは、公開APIの仕様にその内容を反映するということです。つまり、不正なパラメータが渡された時に、どのように振る舞うか(どのような例外をスローするかとか)を仕様書に記述する訳です。しかし、開発組織として防御的プログラミングの重要性を認識していない場合には、次のようなことが起きています。
※ 検査はしているが単純にリターンしていると、その不正と思われる値が本当に不正なのか、正常値の範囲の一つなのかが不明瞭となります。
防御的にプログラミングするというのは、公開APIの仕様にその内容を反映するということです。つまり、不正なパラメータが渡された時に、どのように振る舞うか(どのような例外をスローするかとか)を仕様書に記述する訳です。しかし、開発組織として防御的プログラミングの重要性を認識していない場合には、次のようなことが起きています。
- 開発者の多くが言葉としての「防御的プログラミング」を聞いたこともない。
- APIの仕様書には正常な場合の処理内容しか書かれておらず、不正なパラメータが渡された場合の振る舞いが何も記述されていない。
- 結果として、APIの実装コードでは不正パラメータの検査されていない。あるいは、検査はしているが例外をスローすることなく、単純にリターンしている。※
※ 検査はしているが単純にリターンしていると、その不正と思われる値が本当に不正なのか、正常値の範囲の一つなのかが不明瞭となります。