エラーについてどのくらいの情報をユーザーに表示する必要がありますか?


38

アプリケーションは常にエラーをスローできます。このようなエラーが発生した場合、ユーザーにアプリケーションに要求したことが成功しなかったため、ユーザーに通知する必要があります。

ただし、ユーザーにはどの程度の情報を提供する必要がありますか?私たちのほとんどは、スタックトレースを表示しないことに同意すると思います(スタックトレースは、ユーザーに表示されるエラーメッセージに含まれるべきですか?)ユーザー。

たとえば、例外をサポートする言語(.net、java)には、共有する例外の種類、例外が発生した場所、および例外に沿った明確なメッセージがあります。これもユーザーに非表示にする必要がありますか?または、とにかくこれを表示する必要がありますか?または、一般的なメッセージを表示する必要がありますか?または、基になる例外が何であるかに基づいて、いくつかのメッセージの1つを表示する必要がありますか?

回答:


34

ユーザーに表示するもの。これもユーザーに非表示にする必要がありますか?

ユーザーに何が実行可能であるかを示します。

たとえば、いくつかのヌルポインタ例外とユーザーエラーよりも多くのバグが原因でエラーが発生した場合は、何も別のことができないため、完全な説明は必要ありません。

または、とにかくこれを表示する必要がありますか?または、一般的なメッセージを表示する必要がありますか?

主なエラーメッセージの内容として例外を表示することは、ほとんどのユーザーにとって無意味です。おそらく、ターゲットユーザーベースが開発者であれば、常に完全なエラーとして情報を表示できます(自動テスト用の内部アプリケーションがあるかもしれません)。しかし、一般的に、ユーザーはその知識があっても他のことはできません。

基になる例外が何であるかに基づいて、いくつかのメッセージの1つを表示する必要がありますか?

最善の戦略は次のことです。

  • ユーザーにとって意味のあるテキストにエラーを解釈します。
    • その一部は、「ユーザーが別の方法でできること」です。
    • 彼らが他に何もできない場合は、「予期しないエラーが発生しました」などのことを言ってください。
  • 「オプション」の詳細なエラーの説明を追加します
  • ユーザーがエラーレポートを送信できるようにします(または、ユーザーベースに応じて自動的にこれを行います)

ここに画像の説明を入力してください

  1. 「ここに何が起こったのか」が表示されます(予期しないエラー)
  2. ユーザーに何をするかを指示します(Mailを再度開きます。これを行うためのショートカットも含まれています)
  3. また、誰かが完全な技術的エラーを見たいと思っている場合は、「詳細を表示」します。
  4. エラーエラーレポートが提出されたことを通知します(以下を参照)

場合によっては、エラーレポートを手動と自動の両方にすることもできます。


20
同意しません。「エラーが発生しました」と出力するアプリケーションほどひどく迷惑なものはありません。画面に移動して終了します。それが起こるたびに、なぜ開発者がそのような情報のないメッセージを出力するほど怠けていたのか、私はいつも疑問に思います。ユーザーに何もできなかったとしても、一般的な意味で何がうまくいかなかったかを理解できるように、ユーザーに何かを説明してください。ベストケースのシナリオでは、エラーメッセージをGoogleで検索して、おそらく他の誰かが説明した解決策を見つけることができます。
ジョンベントレー14年

3
@JonBentleyあなたは、このことを理解したい開発者として見ています。平均的なユーザーは、単に理解する必要があることを心配するだけです。
deworde

12
@dewordeそれどころか、私はそれをユーザーとして考えています。ユーザーとして、専門用語でそれを理解したくありませんが、ソフトウェアを書いた人が無能であると感じないように十分な情報が欲しいです(「エラーが発生しました」は、開発者がt彼らが何をしていたかを知っている)、そして私は答えを検索できるように。すべてのクラッシュで「エラーが発生しました」と表示された場合、Google検索は役に立ちません。各状況に固有のメッセージは、他の誰かが同じ問題を抱えているフォーラムにたどり着く可能性がはるかに高く、おそらく解決されます。
ジョンベントレー14年

3
@JonBentleyが考慮すべき点をいくつか。まず、この回答の第一のポイントは、ユーザーに実用的な情報を提供することです。エラーの場合、解決するために情報を伝える必要があります。これはに分類されYou show the user what is actionable for themます。問題の原因がわかっている場合は、説明でそのことをユーザーに示します。しかし、あなたが一般的ならば知っているエラーの理由をあなたはします知って適切にユーザーに通知するために、問題解決を。
エンダーランド14年

2
第二に、問題を自己解決する平均ユーザー能力を著しく過大評価します。人口の圧倒的多数は、ほとんどの開発者/プログラマー/ Stack Exchangeの人々がコンピューター非識字者と呼ぶものです。これらの人々のほとんどは、率直に言って、問題を診断、トラブルシューティング、解決する能力がありません。開発者にとって完全に理にかなっていることを人々が誤解する可能性があるため、実際には細部が事態を悪化させる可能性があります。プログラマーとハイテクに精通した人々は、ほとんどのアプリケーションのターゲット層ではありません。ほとんどの人が失望しています... :)
enderland 14年

12

それは、ユーザーが誰であるか、そしてその情報で何ができるかによって異なります。

一般的に、自分自身で解決できることに関する有用な情報のみを表示するようにします。上部に正規表現エラーがある40行のスタックトレースはあまり役に立ちません。日付は "yyyy-mm-dd"としてフォーマットする必要があるというメッセージがはるかに良いでしょう。それ以外の場合、ユーザーはエラーへの対応方法を知らない可能性があり、アプリケーションを使用したくない場合があります。トレース)。そして、それはビジネスにとって悪いかもしれません。

他の開発者が使用する内部アプリケーションの場合、ユーザーがスタックトレースの表示を処理でき、おそらくその対処方法を知っているため、スタックトレースの表示については、より便利なものに加えてもう少しリラックスしています。

技術者以外のユーザーの場合、スタックトレースを表示しても問題ないと思われるのは、問題を解決するために必要な重大なエラー状態であり、スタックトレースをコピーして貼り付けて送信するように求められますあなたにとって、それを行うための本当にはるかに良い方法は、ログファイルを送信するように彼らに依頼することですが、さらに良いことに、ファイル共有の許可をユーザーに求めた後、アプリケーションに開発者にログファイルを送信させます。


5
私に尋ねずにどこにでもログを送信するアプリケーションでは大丈夫ではないでしょう。代わりに、エラーメッセージダイアログにエラーを報告するオプションが表示されます。ユーザーは、レポートを送信する前に、スタックトレースを含むすべての情報を確認できる必要があります。
piedar

1
@piedar:それは良い点です。
FrustratedWithFormsDesigner

4
@piedar:エラーダイアログに[詳細を表示]ボタン、またはアプリケーションログファイルへのリンクがあると、その情報を必要とするパワーユーザーにすべての詳細を表示するのにおそらく良い方法です。「デフォルトで詳細を表示」チェックボックスであっても、コーディングの手間をかけたい場合。しかし、すべてのユーザーがそれを見たがるわけではなく、それによって一部のユーザーオフになります。
FrustratedWithFormsDesigner

2
@Paddy:あなたは正しいですが、1)これは一例です。:私の心に、なぜそれの新鮮であるP 2)たぶん私は固定して、このようなコードをクリーンアップしてきた、...
FrustratedWithFormsDesigner

2
@NateKerkhofs「そして、彼が開発者であれば、彼はバグを再現することができます。」-ああ、それが本当だった場合:(
Blorgbeard 14年

1

ユーザーへのメッセージは、スローする新しい例外を作成するのと同じ方法で処理する必要があります。何をすべきかを決定するために必要な情報を提供します。

もちろん、これはアプリケーションとユーザーベースに依存しますが、指針となるはずです。目的は、「呼び出し元」が必要なアクションを実行するために何ができるかを判断するために必要な情報を提供することです。 。ファイルへのアクセスエラーのような単純なものであれば、ファイルパスとアクセスできなかったというメッセージを指定します。nullポインター例外の場合は、一般的なエラーメッセージを提供します。

もちろん、ユーザーが実際に修正できるメッセージよりも「目的のアクションを実行できません」というメッセージが多くなりますが、それは単なる人生です-ほとんどの例外は、ユーザーが環境をセットアップしたためではなく、ミスをしたためです間違って。


1

これは一般的なテーマです。

プログラマー、開発者、テスターなどのより高度なユーザーが使用できる情報を表示すると同時に、知識のない/コンピューターの読み書きができない人をどのように支援できますか。

答えはあなたが両方をすることだと思います!

ただし、順序は重要です。次のことをお勧めします。

  • 何が起こった。
  • 今何をする
  • 技術的な詳細

技術的な詳細は、問題を報告する際の詳細な注文または通常のユーザーのいずれかの情報を含む部分です


0

何を見せたいかは、あなたがどれほど恥ずかしくなっているかによって異なります。

重要なのは、障害の詳細をできるだけ迅速かつスムーズにテクニカルサポートに連絡することです。つまり、終了エラーのスタックトレースを含むログファイルを自動的にホームに送信するか、ユーザーに転送を開始するボタンをクリックするように親切に依頼することを意味する場合があります。インターネットに接続されていない場合は、USBスティックを使用することもできます。


0

私は受け入れられた答えの背後にある理論的根拠が好きですが、少なくとも情報を「実行可能な」ものに限定するという私の解釈に敬意を払わなければなりません。「予期しないエラー」よりも、ユーザーとしてのことを少しだけ知りたいです。

そして、確かに私は少しコンピューターに精通しており、その偏見を持っていますが、これは特に偏見があるとは思いません。というのも、航空などの専門知識がほとんどないドメインにこの考え方を適用することで、その偏見を取り除くために最善を尽くすことができるからです。

航空についてはほとんど知らないが、フライトが遅れたりキャンセルされたりして、スタッフが私に言った唯一のことは、「予期しないエラーが発生しました。次のフライトまで3時間お待ちください。」これらの場合、少なくとも不満を抱いている顧客を見つけることができます。それは、それがいずれにしても私の行動方針に実際には影響を与えないにもかかわらず、私はなぜ私がいるのかについてほんの少しだけ知りたいからです有料の顧客としてこのように不便を感じました。

「乱気流を経験している」、「前のフライトで医療緊急事態が発生した」、または機器の誤作動などがあった場合、それは「予期しないエラー」よりもはるかに同情するのに十分です少し座って、次のフライトを3時間待つコンテンツになります。実は、「予想外のエラー」に頭を悩ませるテクノバブルを好むかもしれません。「大丈夫、口から出てくる言葉は私の耳には聞こえますが、中央処理装置には届かないのです。しかし、そこの問題と私はコーヒーをつかみに行って、そこに座ってください!

例外処理に関しては、例外catchのより技術的な詳細を隠したい場合でも、通常、サイトで何が起こったのかについての基本的な情報は十分にあると思います。

try
{
     load_file(file_name);
}
catch (const exception& ex)
{
     exception_dialog("Failed to load file: '{1}'.", file_name);
}

そして、それは例外に付随する非常に技術的な情報である可能性のあるものを表示することすらありませんが、少なくとも「予期しないエラー」よりもかなり多くを伝えています。「なぜ/どのように」と言わなくても、少なくとも「何/どこで/いつ」というコンテキストを提供します。少なくともこの基本的なレベルの情報に対する欲求は、私のコンピューターに精通していることによって特に偏っていないと思います。

残りは、おそらく顧客や特定のニーズに非常に固有のものです。しかし、私の魅力は、少なくとも「予期しないエラー」よりほんの少しだけ何かのためのものです。


まあ、それ偏った見方です。平均的なユーザーは、自分ができないことをできない理由を気にしません。彼らは問題を解決できるかどうか、どのように解決できるかだけを気にします。
gnasher729

「平均的なユーザーは、自分ができないことをできない理由を気にしません。問題を解決できるかどうか、どのように解決できるかだけを気にします。」平均的なユーザーがファイルやサーバーが何であるかさえ理解していない場合でも、おそらくそれは「実行可能な」ものに結び付く可能性があります。このアプリケーションは、例えば、それはあなたが、問題を検索し、すぐに彼らのためにそれを修正することができるかもしれない、この必要な設定ファイル」、またはこの効果に何かを、見つけることができないと言う
ドラゴンエナジー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.