7

これまでいくつかのプロジェクトを行ってきましたが、私は例外処理なしで完全に記述したすべてのことを気付きました。それらすべてを扱う。すべての例外を処理するのに適切な時間

それは正しいですか?私はテストしている間に何千もの例外を覚えています(私はすぐに修正します)。もし私がそれを処理したなら、どこにブレークポイントを使用していないか、どこにでも表示すると正確にはわかりませんが、だから私は例外をチェックすることで問題を解決し、最後にエスケープされた可能性のあるものについても処理します。

あなたはどうですか?あなたはいつ例外を処理しますか?

+1

制限のない質問はコミュニティウィキであるべきです。また、言語を念頭に置いているかどうかを明確に指定する必要があります。それ以外の場合は、言語には依存しません。 –

答えて

3

個人的には、私は常に、アプリケーションタイプに応じたグローバルな未処理の例外マネージャを定義し、そのログと電子メールの例外を私の開発チームに持っています。 QAの実行中に、予測可能な(および回復可能な)問題があるルーチンに特定の例外管理を追加し始めます。可能なすべてのケースで、防御プログラミングコードを追加して、例外がまったく起こらないようにします。 (失敗する可能性があるコードを試す前にテストできるのであれば例外をトラップする必要はありません)

私のアプリは多くの防御コード(最初から組み込む必要があります)例外処理。

+0

私はプログラミングの際にそれと同じようにしていました。私が間違っているかどうか教えてください。外部ソースから何らかのデータを受け取ったときに、それが使用される前に空であるかどうかをテストし、その後、望ましい予防措置を使用することは防御コードの例ですか? – Marcelo

+0

正確には、Marcelo。メソッドなどを呼び出す前にオブジェクトのnullがないかどうかを確認してください。 –

1

私はこれが後方にある(しかし、一般的です)と言います。

あなたがテスト駆動開発に見てみたい、と最初の設計に

ヒントをテストすることがあります、それをテストアプリケーションに追加するコードを記述し、行動を考えます。

2

私はテスト駆動開発を好む。予想されるエラー条件がある場合は、それをテストします。予期しないエラーが発生した場合は、テストを行い、修正してください。

1

私はとなるでしょう。は、各インターフェイスとモジュールを開発する際に例外が発生すると考えています。

このようにして、確実にスローされていることをテストできます(期待していないときとそうでないときとでは違います)。これらのコンポーネントを消費するコンポーネントは、これらの例外を認識して処理するように記述することができます。

開発しているコンポーネントの機能を無視しているようです。私はできるだけ早くできるだけ多くのシナリオをカバーするため、事実上常に正しい機能と例外的な状況の両方をテストします。

+0

同意します。可能であれば、メソッドによってスローされる例外を(XMLコメントで)文書化することをお勧めします。 – TrueWill

0

この回答は非常に明確です。

具体的な状況を確認する必要があります。例外がスローされる結果となる「例外的」な状況を回復または処理することが可能なコードの特定の部分に例外がスローされていますか?その場合、はい、例外をキャッチし、そのレベルでそれを処理します。

一方、回復不能なエラーについてお聞きしますか?それでは、もっとグローバルなレベルで捕まえるか、まったくそうでないかもしれません(例外について何もできないのなら、なぜそれをキャッチしていますか?)

+0

あなたは責任を持ってクラッシュしようとするように "キャッチする"ことができます。もし可能であれば、もちろんアプリケーションはあまりに混沌とした状態で試してみることもあります。 – Dereleased

+0

"責任を負う"能力があるなら、例外的な状況を扱うことができる状況に分類します。 しかし、メモリ例外のようなものは確実に処理することはできません(処理コードは同じ問題が再び発生する可能性があります)。そのため、私は「回復不能な」エラーと考えています。 –

0

例外をキャッチする場所は通常:どこでもあなたが意味深くそれらを扱うことができる場所です。

0

場合によっては、テクノロジまたはターゲットプラットフォームによって異なります。私は通常、すべての例外を処理する例外処理層を好みます。各コードブロックはtry catchブロック内にあります。

重要な点は、OSやプログラムやコードの外部にある他のエンティティによってキャッチされるべきではないということです。

0

例外の美しさは、APIからエラーコードを返すということは、コード内のすべてのレイヤーで例外をチェックする必要がないということです。特定の例外を捕捉して、特定のエラー条件を判断したり、おそらくエラーを処理したり、より適切な例外を再起動したりすることができます。処理されない例外を避けるためには、アプリケーションの上位レベルで例外をキャッチする必要もあります。

注目すべき点は、一般的に例外のユーザが開発者であり、エンドユーザーではないということです。後者は通常、例外の技術的詳細を理解していません。

0

私が見てきた最も一般的なことは、開発者が例外を処理するレベルを意識して選択し、投げられるようにすることです。通常、ワーカースレッドのレベル、または高いレベルのビジネスロジックになります。例外が発生するのを許可し、それらを処理/ロギングしてユーザーを保護するブランケットの方法を使用します。

タイミングは、一般的に起こるものとあなたが行うものの唯一の違いです。最初からあなたのアプリケーションでそれを計画し、高いレベルで例外処理を行います。

特定の例外を修正することは、問題が発生したときに修正する方法を使用して行われます。私が使用するライブラリでは、情報を伝達するために例外を不必要に使用することがあります。そのライブラリへのすべての呼び出しについて特殊な例外処理を追加します。しばしば私は、アプリケーションの残りの部分から実装と例外処理を隠すラッパークラスでこれを行います。

関連する問題