問題タブ [defensive-programming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1208 参照

c# - 防御的プログラミング手法を組み合わせるには?

私があなたに尋ねたい質問は非常に広いですが、同時に非常に具体的です。まず、.net 環境に適用できる回答に主に関心があると言わざるを得ません。

うーん、自分が作るコードのレベルを上げたい。今では主に TDD と静的コード分析を使用して、コードが正しいことを確認しています。最近、コード コントラクトに関する Dino Esposito のスピーチを聞いたので、他の手法と組み合わせて使用​​したいと考えています。Dino を聴きながら、Debug.Assert()とも思い出しましたTrace.Assert()

具体的には、いくつかの質問をします。

  • コントラクトと単体テストを相互に補完するには、どのように記述すればよいですか?
  • すべてのメソッドでコード コントラクトを使用する必要がありますか?それともパブリック メソッドでのみ使用する必要がありますか?
  • の使用を防止する必要がありDebug.Assert()ますか? それらを使用してもよいのはいつですか?(たとえば、.net の不変条件はパブリック メソッド/プロパティの終了時にのみチェックされることに注意してください。したがって、単純な方法でメソッドの途中でいくつかのチェックを行っても問題ありAssert()ませんか?)
  • 百聞は一見に如かずというわけで、これらすべての手法が適切に使用されているオープン ソース プロジェクトをお勧めしていただけませんか?
0 投票する
7 に答える
238 参照

c - C構文の質問

switchステートメントのデフォルト部分にブレークを入れるのは悪いコーディングと見なされますか?私が読んでいた本はそれがオプションであると言っていましたが、先生はそれを使うことを数えました。

0 投票する
2 に答える
3176 参照

exception-handling - 防御的プログラミングと例外処理

数日前、私は試験で次の理論的な質問を受けました: (a) プログラムの実行中に発生する可能性のある例外的な状況に対処する際の防御的プログラミングとは何を意味するのかを説明してください。クラスで見られる例を参照するか、疑似コードを使用して、たとえばファイルを読み取ろうとするときに特定の状況が発生するのを防ぐために実行される手順を説明できます。[5 点]

(b) Java での例外処理の意味と、これが防御的プログラミングとどのように異なるかを一般的な用語で簡単に説明してください。【5点】

私は常に、防御的プログラミングはプログラミングのパラダイム全体であり、例外処理はその一部であると考えていました。試験中、「防御的プログラミング」では、プログラマーはロジックコードを実行する前に考えられるすべての問題を見つけようとし、後でこの関数からエラー値 (例 0) を返すのに対し、例外処理では潜在的なエラーが発生してキャッチされると書いています。これらのエラーが直接解釈される特別なメカニズムによって。そうですか?正解は何ですか?

0 投票する
3 に答える
5956 参照

java - 回避するための逆シリアル化に関するGSONの脆弱性またはエクスプロイト

gsonのfromJson()メソッドを使用して、ブラウザーからの文字列を解析することを計画しています。それを行うことに関連する潜在的な脆弱性はありますか?私が変換しているデータ型は比較的単純で、リストとブール値です。しかし、gsonはリフレクションを使用しているので、注意すべき点はありますか?

たとえば、古いjvm(6.24より前)では、整数パーサーがハングする整数に対してDOS攻撃が使用されていた可能性があります。

賢いjsonによって、gsonがクラスの読み込みを開始するようにすることはできますか?

0 投票する
5 に答える
581 参照

clojure - Clojure : Maps of Lists of Maps of ... 任意のデータ構造をラングリングする方法

こんにちは: Java では、IDE を使用して複雑なデータ型の深さを「トラバース」した経験があります。

ただし、Clojure では、静的型付けがないため、これは自明ではなくなります。ネストされたデータ構造から発生する可能性のある複合体に対して、どのように「防御」または Clojure を行うのでしょうか?

1) clojure データ構造の深さに対する推奨される「制限」は?

2) 非常に深くネストされたデータ構造を処理するための一般的なイディオム。これにより、リストをマップと間違えたり、変数名の大文字/小文字を正しく区別できないなどのエラーが防止されます。

ここで少しパラダイムから外れているように聞こえたら許してください... REPLで継続的にテストすることで、そのようなエラーが効率的に抑制される場合があります..しかし、確認するための他の方法があるかどうか疑問に思っていました.コンパイル時、そのコードは可能な限り正確です (つまり、単体テスト、IDE / emacs プラグインなど...)

0 投票する
2 に答える
405 参照

defensive-programming - これは防御的なプログラミングですか?

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

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

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

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

0 投票する
3 に答える
1037 参照

c - 入力ファイルの内容を検証する

私はこの防御プログラミングの問題を抱えていますが、解決方法がよくわかりません。

ファイルパスとテーブルのサイズ(行/列数)を引数として取るこの関数があり、入力ファイルを検証するためのより良い方法を探しています。この関数の引数は常に正しいと思います。sizeファイルに保存されているテーブルの「小さい側」を表します。

例えば ​​:

サイズ=2は正しいですが

サイズ=2は正しくありません

このようなファイルも拒否できるようにしたいと思います

サイズ=2(fscanfを介して受け入れられます)

拒否できるようにしたい別の種類のファイルは

サイズ=2

今のところ、私の唯一のセキュリティは、ファイルの要素が本当に数字であるかどうかをチェックすることです。

これが私がこれまでに行ったコードです:

私はどこからどのように始めればよいのかわかりません。Cに精通しておらず、やりたいことを実行するための関数やメカニズムがたくさんあるようですが、それらはすべて非常に複雑に見え、実際にはコードよりも長いものもあります。提供された。

誰かが私を正しい方向に向けることができれば、それは素晴らしいことです。

0 投票する
9 に答える
2144 参照

c# - 例外をスローした場合、到達不能なブレークを残す必要がありますか?

とにかく例外をスローするだけの場合に、到達できない break ステートメントを残すのはばかげていますか? 私の防御的な部分は、ロジックが変更された場合に備えて残しておきたいと考えています。私の別の部分では、他の開発者が自分のコードでコンパイラの警告 (「到達不能なコードが検出されました」) を見ることを望んでいません。

何をすべきか?

アップデート

後日スローを削除するとコンパイラエラーが発生するという回答がいくつかあります。ただし、単にスローを削除 (またはコメント) し、その後に中断を加えないと、ケースがスタックされ、意図しない動作になる可能性があります。私はそれがありそうなシナリオだと言っているわけではありませんが...まあ、ありそうなシナリオだけと戦うことについての防御的なプログラミングですか?

0 投票する
3 に答える
3471 参照

logging - Vala でのロギング

私は Vala プログラミングは初めてで、Java と .NET の経験がありますが、Vala でログを記録する方法について役立つものを見つけることができませんでした。log4j や log4net のような便利なログ機能はありますか、またはエラー、警告、デバッグ、トレースなどのいくつかのログ レベルにスケーリングして Vala にログインするための推奨される方法は何ですか? また、アサーションやコントラクトなどの防御的プログラミングについてはどうでしょうか? 防御的プログラミングを行い、スタック トレースと正確な根本原因を含む最も有用なログを取得するための推奨される方法はありますか? アドバイスをありがとう。

0 投票する
5 に答える
203 参照

.net - 防御的なアンチマルチスレッド クラスの実装

マルチスレッド アプリケーションに対して (いくつかの点で) 安全ではないオブジェクトがあり、重要なメソッドが同時にアクセスされないようにするための内部チェックを提供したいと考えています。

質問

複数のスレッドがクラスにアクセスすることを検出して防止するには、どのような手法を採用する必要がありますか?

消費者が使用するすべてのメソッド、プロパティなどで Thread.ID を追跡するだけで十分ですか?