ユーザーはどのような間違いを犯しますか?また、アプリケーションを更新してそれらを処理するにはどうすればよいですか? [閉まっている
https://softwareengineering.stackexchange.com/questions/1752
-
16-10-2019 - |
質問
実際、この質問は、質の高いユーザーエクスペリエンスを強化し、回避可能なサポートコールを減らすために取られる注意事項についてです。
解決
適切な入力検証の欠如は、プログラマーが実際に処理する必要がある場合、アプリケーションで「悪い」ことをしているユーザーに非常に迅速につながる傾向があるものの1つです。
ユーザーが次のようにトレーニングを受けたレガシーアプリを見てきました。
- 名前にアポストロフィを入力しないでください
- 以外のシンボルを入力しないでください
a-z0-9,
- 入力したテキストの前または後にスペースがないことを確認してください
- 正しくフォーマットされたメールアドレスがに入力されていることを確認してください
email
フィールド、それ以外の場合はそのユーザーへのその後の郵送がフィールド内のものを使用し、失敗します - 確実に "
http://
「Webアドレスの前に置かれます
など
上記の問題はすべて、その問題です したほうがいい アプリケーション開発者によって処理されます。入力検証が本質的に「ユーザーがこのフィールドがどのフォーマットにあるべきかを確認し、入力したものを信頼することは正しいことを確認する」場合、予期しないことはアプリへの道を見つけることになります。明らかなセキュリティへの影響は別として、ユーザーは間違いを犯します。プログラマーとして、私たちはしばしばユーザーが確認するために後ろに曲げて最高の製品を生産します できません どんなに一生懸命頑張っても、それを間違えてください!
他のヒント
アプリが消えたので、私はかつてカスタマーサポートの電話を受けました。彼らはその上に別のアプリを開いたことが判明しました。
...アプリではなく問題を引き起こしたのはユーザーのコンピューターの非識字率であるため、それが二度と起こらないことを保証しないことを決めました。私がそれを修正するためにできたことはすべて、他の人のためのユーザーエクスペリエンスの低下につながるでしょう。
私が書いたほとんどすべてのプログラムは、コマンドラインから厳密に呼び出されます。私はまた、CLIインターフェイスとして始まり、何よりもシェルに急速に成長したいくつかのファンシーなものを書きました。
だから、私は自分が知っていることだけを話すことができます。コマンドラインプログラムに関するいくつかの一般的な問題は次のとおりです。
オプションが多すぎます
コンパイラまたはラインエディターを書いている場合を除き、80x25フレームバッファーの1つの画面にオプションを制限しておくようにしてください。 --help
また /?
合格。それよりも多くのオプションがあることはまったく問題ありませんが、それらをサブカテゴリに分割します。例えば
foo --help
foo --help option_name
長いオプションはありません
覚えやすいです foo --attach_to [argument] --volatile --verbose
覚えておくよりも foo -a [arg] -v +V
. 。これは常に可能ではありませんが、ほとんどの場合、そうです。
入力検証なし
ほぼすべてのプラットフォームには、引数の解析と検証に関して、試行、テスト、および真実の複数のライブラリがあります。ほぼすべてのプラットフォームには、CLIからの入力を検証する試行、テスト、真のレクサーがあります。一方、もう一方、またはその両方を使用します。ユーザーが提供したもののためにプログラムがゼロであるか、ゼロで分割されている場合、それはただ恥ずかしいことです。
レクサーのような複雑なものは必要ないかもしれません。おそらく、特定の場所で特定の順序で何かを期待している場合は、文字列をトークン化することができます。
私は実際に整数が予想され、誰かがタイプした場所でバグレポートを受け取りました f*** my life
引用符。私はそのプログラムを書いていませんでした、私はそれを継承するという不幸を持っていました。
「冗長」ノブはありません
経験豊富なユーザーが、ほとんどの人が許容するよりも多くのノイズをプログラムから簡単に獲得する方法を簡単に発見できるようにしますが、デフォルトでは深刻で重要なもののみを印刷します。何回起動しなければならなかったかわかりません strace
nullファイルストリームで動作したために何かが断続的になったことを理解するためだけです。
また、NDEBUGまたは他の手段を介してそれらをオフにすることで、ユーザーが見つけるために印刷またはログに記録されるように、アサーションをラップすることもできます。
ログファイルといえば、あなたがそれらの中に置くものはすべて、あなた以外の誰かに(少なくとも少し)意味があることを確認してみてください。すべてのエントリの開始がUNIXエポックの日付である場合、バグを再現するのを本当に助けたい人にフラストレーションを複雑にすることになります。
デバッグモードでは「バグバディ」はありません
多くのプログラムでは、プログラムで何が起こっているのかについての追加のおしゃべりを提供する「デバッグ」スイッチを提供していますが、以下を提供するものはほとんどありません。
- http/httpsを介してレポートを自動的に送信し、何らかのサービスリファレンス番号を取得する方法
- 有用な情報をファイルにダンプする方法 たぶん......だろう サポートリクエストへの添付ファイルとして送信されます
または、おそらくあなたは人々が電話で以下を読むのを聞くのが好きです:
それはゼロエフで予期しない条件を言っていますOH 4ゼロOH .... OKレムはあなたにそれを読みます...
過度に複雑な構成ファイル
多くの構文砂糖に話題を得るための言い訳として構成を解析する必要性を正当化しないでください。解析時に追加の作業を意味する場合でも、人々が実際に知っている形式を使用してみてください。可能な限り、INIスタイル形式を使用しようとしています。単純なキー - >値辞書でやり遂げることができるものに驚くでしょう。
構成ファイルはありません
どちらのタスクのツールであることを意図していない限り、プログラムを使用するためだけにシェルスクリプトやバッチファイルを作成させないでください。私の通常のオプションを含むファイルを指す手段を教えて、いくつかの追加の引数を提供してください。
「濡れた床」の標識はありません
いくつかの機能がユーザーをトラブルに導くことができる場合(おそらく上級ユーザーのためにそこにある)、明らかにそれをマークしてください。さらに、誰かが脂肪を指で入力したり、何かを忘れたりした場合、オンラインドキュメントへの非常にフレンドリーなリンクをプログラムしてもらいます。 KVMを介してプログラムを使用していて、カットして貼り付けることができない人を扱っている可能性があります。
可能な場合、(これは入力検証と一致します)Google Apporachを使用します。
あなたはfoo -bar filenmeを意味しましたか、あなたはfoo -barのみと入力しました
破壊的な指示から抜け出す方法を提供します
目標は、ユーザーにそれが機能しなかった理由を伝え、さらに数回試してもらうことですが、ユーザーが実際にそれを望んでいるように見える限り、潜在的に破壊的なことをしないようにすることです。たとえば、「ナグ」をオフにするスイッチを許可します -Y
また /Y
しかし、それ以外の場合は、単に「太っている指」を持っている人のために抜け道を許可します。
私はおそらくいくつかのポインターを忘れています。私はこれを頻繁に扱います。これは、ほとんどの人が間違いを避けるのに十分な直感的なもののために「低レベル」のインターフェースを作ることは非常に難しいからです。
特定のブレーク/修正例を取得することは、これを実現するのと同じくらい重要ではないと感じています。
- ユーザーはあなたのマニュアルを読んだり、チュートリアルを見たりしません。彼らは探索を通じてあなたのソフトウェアを学びます。
その探検を通して彼らが何かを壊した場合、プログラマーとしての仕事はあなたの仕事であり、彼らに危険を警告するか、そもそもそれが起こらないようにします。今どこで見たのか思い出せませんが、心の奥ではいつも私はいつもしようとしています」正しいことを簡単にしてください「私のソフトウェアのユーザー向け。
あなたが例を主張するなら:
- ユーザーは、入力検証を実行して統合コード /修正を壊した小文字名を入力できました
- ユーザーは、正しいボタンのみを表示することで、アクション /固定を実行した後、間違ったボタンをクリックできました。
- ユーザーは、Xを誤って /修正することができました。
これがどこに向かっているのかわかりますか? :)
これが私が今週聞いたものです。ユーザーは、「イベントが発生したときに通知を送ってください」という機能を求めます。十分にシンプルで、開発者は先に進み、それを実装します。確かに、最初の質問は「この通知によって何に対処しようとしているのか」でした。私はそれに行きません。数日後、ユーザーは開発者に立ち寄り、「この通知を受け取りました。私はそれをどうするべきですか?」と尋ねます。
私はこのDilbert Comicを思い出し、開発者に「アプリを書いて、ユーザーがその通知で何をすべきかを把握する」と提案しました。
Mpetersonが言ったように、ユーザーは専門分野で非常に競争力があります。彼らは、ソフトウェア開発者やデザイナーのようには考えていません。
ユーザーは愚かだとは思わない。彼らはあなたやプログラムをまったく使いたくありません。彼らが望んでいるのは、彼らのことを成し遂げることだけです。彼らを助け、途中で彼らに危害が起こらないようにしてください。
優れたユーザーインターフェイスを持ち、適切な学習エクスペリエンスを提供することは、ユーザーが悪いことをしないようにするのに大いに役立ちます。
優れたユーザーインターフェイスは摩擦のないものでなければなりません。
ダイアログボックス(高価な操作、およびユーザーがしばらく無視する操作)を投げる代わりに、削除を確認し、削除を実行し、元に戻す方法を提供します。
優れたユーザーインターフェイスは発見可能です。
Microsoft Officeのリボンは、古いユーザーにWordの方法を変更するように強制するため、多くのFlakを取得しますが、リボンはインターフェイスを発見可能にする方法の輝かしい例です(つまり、簡単に発見できます)。
優れたコードのような優れたユーザーインターフェイスは、自明である必要があります。
誰もマニュアルを読みません。ユーザーに読んだ唯一のマニュアルは、ソフトウェアのステップバイステップのウォークスルーを含むPowerPointプレゼンテーションでした。 Camtasiaのようなビデオツールを使用してこれらを見てきましたが、PowerPointは、手順を簡単に前後に転向させることができるため、PowerPointの方が優れています。
ユーザーは間違いを犯さないでください。ミスは、使用可能なインターフェイスの作成に失敗したプログラマーにあります。
リリースごとにユーザビリティテストを行います!