プリンシプルプログラミング プログラミング

【POP89】防御的プログラミング

はじめに

この記事は「プリンシプルオブプログラミング 3年目までに身につけたい一生役立つ101の原理原則」を読んだ際に記した議事録です。

著作権の関係により、詳細には書きません。詳しい詳細を知りたい方はぜひ本書を読んでみてください。

プリンシプルオブプログラミングをPOPと訳します。

What : 「かもしれない」プログラミング

「こうなるはずだ」と決めつけずにプログラミングします。maybeプログラミング、略してメイプロです。

もし、関数で不正なデータを受け渡された際に被害を受けないように「防御的なコード」を書いておきます。

Why : ソフトウェアを安全に運転するため

防御的プログラミングによって以下のようにプログラムが安全になります。

  • 開発中の安全運転

不正なデータを見つけるようにすると、デバッグの効率が上がります。不正を直ちに通知して無視できないようにすることで、場所を直ちに把握して調査、修正が容易になります。

逆に不正の発見が遅くなるほど、別の場所で不正として発見され原因の根本を見つけ出す調査に時間を取られてしまいます。

  • 運用中の安全運転

上記のことと同じような意味です。運用中の問題を早く発見し対処することができれば二次災害などの問題の発生を抑制することができます。

エラーの対処が不十分だと別の箇所でエラーが伝搬し、誤データをデータベースに登録してしまうことになるので甚大な被害を被ることになりかねません。

How :バリケード戦略をしよう

バリケードを構築して被害を最小限に封じ込めます。早い段階での正しい対処は自分と仲間を楽にすることができます。

バリケードを張るために特定のインタフェースを「安全地帯への境界線」として使用しましょう。不正なデータには正しい処置をとります。

以下の点を考慮してプログラミングを行います。

  • 外部ソースから入力されたデータの値を確認する

ファイル、UI、ネットワークなど、外部のインタフェースからデータを取得するためにはデータが契約の許容範囲に収まっていることを確認しましょう。例えば数値が有効範囲に含まれていたり、文字列の長さがきていないであることをチェックします。

無効なデータ入力を早い段階で検出して、直ちに適切なエラー処理を行いましょう。

  • 関数の入力引数の値を確認する(想定外エラーの検出)

別の関数から渡された、関数の入力引数の値を確認します。外部ソースの誤データと異なり、無効な入力を検出することはコードのバグであることを意味します。

アサーションにて引数を確認し、不正な値の際は直ちにプログラムを停止させましょう。

終わりに

この記事ではプリンシプルオブプログラミング 3年目までに身につけたい一生役立つ101の原理原則の議事録を自分用に記しています。

この記事ではカバーしきれていない部分も多いので、是非本書を手にとって読んでみてください。

次回、「【POP90】ドッグフーディング 」です。ぜひ、次の記事も読んでみてください。

  • この記事を書いた人
  • 最新記事

ミッチー

小中高と野球漬けの毎日 ▶︎ 大学時に自分が何もできないことに気づき、プログラミング学習開始 ▶︎ PCは疎かったがめげずに継続 ▶︎ 受託で案件を頂きながら、オーダースーツ事業に、通販事業にも参戦 ▶︎ 東証一部Web系自社開発企業にエンジニアとして内定。

-プリンシプルプログラミング, プログラミング

© 2022 オミチャンネル Powered by AFFINGER5