2

私の経験では、通常、防御的なプログラミングには、予測できない結果に基づくある種の不合理な犠牲が常に含まれているため、防御的なプログラミングは悪であると常に思っていました(そして私は今でもそうしています)。たとえば、多くの人が自分の同僚に対して防御的にコーディングしようとしているのを見てきました。彼らは「万が一に備えて」コードが後で何らかの方法で変更された場合に備えて処理を行います。彼らは何らかの形でパフォーマンスを犠牲にすることになります、あるいは彼らはすべての状況のた​​めにいくつかの銀の弾丸に頼るでしょう。

この特定のコーディング慣行は、防御的なプログラミングとしてカウントされますか?そうでない場合、この慣行は何と呼ばれますか?

ウィキペディアでは、防御プログラミングをソフトウェアの予測できない使用に対するガードとして定義していますが、他のプログラマーに対するコードの整合性のための防御プログラミング戦略を示していないため、それが適用されるかどうか、またこれが何と呼ばれるかはわかりません。

基本的に、私はこれを行う人々と議論し、彼らがしていることが間違っていることを専門的な方法で彼らに伝えることができるようになりたいです。私はこれに対して客観的に反論できるようにしたいと思っています。なぜなら、それは善よりも害をもたらすからです。

4

2 に答える 2

2

「オーバーエンジニアリング」は間違っています。

「防御プログラミング」は良いです。

違いを伝えるには、知恵、経験、そしておそらく頻繁なコードレビューの永続的なポリシーが必要です。

于 2012-02-05T04:33:51.280 に答える
1

それはすべて詳細に依存します。他のプログラマーが再利用できるソフトウェアを開発している場合は、少なくとも少し防御的なプログラミングを行うのが理にかなっています。たとえば、必要なすべての入力に関する要件を文書化できますが、悲惨な動作(データベースの破壊など)を回避するために、入力が実際に要件に準拠していることをテストする必要がある場合があります。これには通常、(些細な)パフォーマンスの低下が伴います。

一方で、防御力はやり過ぎになる可能性があります。おそらくそれがあなたの見解に情報を与えているのです。具体的な例を1つか2つ挙げると、何が起こっているのかを区別するのに役立ちます。

于 2012-02-05T04:31:14.510 に答える