吟味できない重要な入力をどのように検証しますか?


8

入力を吟味する実用的な方法がないときに、ユーザーが誤った入力セットを作成するのをどのように防ぐのですか?

シーン

Visual FoxProで書かれた小さなERPパッケージを変更します。パッケージの一部は、トラックのマニフェストとドライバーが配達ルートに送る請求書を印刷することに関係しています。入力として何も入力されない場合、印刷ルーチンはすべてを印刷しようとするため、高速プリンターで無駄になる大量のプリンター用紙が発生します。

私は、GUIインターフェース要素を書き換える立場になく、フレームワーク、ツールキット、またはその他の外部コードをこの状況で使用するように改造することもできません。理由はオフィスの政治に関連しています。既存のERPフレームワークを上書きできるとは言わないでください。これは私には選択肢がないためです。

問題

ユーザーは、圧力が高く、タイムクリティカルな環境にいます。各プロセスは数分または数秒で測定されます。つまり、処理時間をできるだけ最小限に抑える必要があります。この環境と気が散る可能性があるため、ユーザーはダイアログを頻繁に無視し、[Enter]キーを押すと、フォーカスがフォーム内をすばやく移動し、最終的に入力ダイアログのアクションボタンに移動して、自動印刷がトリガーされます。 。

入力は、日付範囲、ルート範囲、および受注範囲で構成されます。

頻繁なバックプリントが必要なため、日付範囲の入力を「今日の日付」に自動設定することはできません。また、エンドユーザーは真夜中に作業を行います。つまり、日付のロールオーバーは、変更を自動検出するルーチンを装備することなくこれを非現実的にします。

ルートの入力はハードコードできません。また、再印刷が必要なため(上記を参照)、すでに出荷されているルートからそれを推定することはできません。

販売注文の入力は、単一の注文または特定の範囲を印刷する場合にのみ意味があります。

したがって、率直に言って、入力を検証する実用的な方法はありません

印刷をトリガーするアクションボタンはブロックできません。ユーザーの前にブロッキングダイアログを配置するという提案は無視されます。これがオプションではない理由については、私は自由に議論することはできません。ただし、この概念はサイトの他の場所で(別の視点から)すでに議論されており、拒否されました。

ソフトウェア機能としてこれに対応する必要があるため、すべての入力が空のときに印刷出力をブロックすることは、設計決定として拒否されました。

ユーザー

ユーザーはこれを繰り返さないよう繰り返し求められています。彼らはしばしばこのアドバイスを無視します。この不幸な出来事を引き起こすことは彼らの職長/マネージャーが対処するものではないので、行動を終わらせる圧力はありません。

組織

関係するワークフローには発言権はなく、そのワークフローによって影響を受ける既存のソフトウェアコンポーネントの変更のみです。

提供事業者

ベンダーは、元のソフトウェアベンダーからカスタムインストールとしてパッケージをセカンドソースします。ベンダーは、コードベースへの統合のために、すべてのコード変更をベンダーに送り返すことを要求しています。アーキテクチャに大幅な変更を加えると、広範なカスタマイズが行われるため、バージョンの移行中に将来のコストが増加します。場合によっては、プログラマーは、そのような大きな変更を完全に無視し、好きなように実行することを私に伝えさえしました。

ソフトウェア

ソフトウェアの選択やインストールについては言うまでもないので、プラットフォームの変更は問題外です。

ソフトウェアの環境に関しては、印刷される各請求書は単一の呼び出しです。バッチ印刷機能はありません。印刷機能がシステムに統合されている方法(および一部の言語の癖)のため、そのAPIの周りにバッチラッパーを作成することはできません。これに加えて、プログラムのこの部分は、請求書印刷を実行する別のプログラムを呼び出し、次に、請求書を1つ印刷するprint-a-report APIを呼び出します。恐ろしいデザインですね。

入力フォームはフォームヘッダーの奇妙な組み合わせで、入力ボックスはありませんが、他のGUI要素を含めることができます。入力ボックスは実行時に定義されます。

目的

ソフトウェアは、ユーザーが誤ってすべての書類を印刷することを防ぎます。

この問題をどのように解決しますか?


5
最初にソフトウェアの使いやすさを徹底的に分析する必要があるようです。使用するのは悪夢のように聞こえます。
バーナード

6
したがって、この正しい印刷すべてが機能である必要があることを理解している場合、少なくとも1つのフィールドにデータがあるまで、すべてを独自のボタンとして印刷できず、既存の印刷ボタンがブロックされるのはなぜですか?
Ryathal 2012年

8
FoxProについて聞いたことがありません。90年代半ばに行き詰まっているようです。余談ですが、あなたはひどくストレスがたまっているように聞こえ、あなたの状況はかなり絶望的なようです。彼らは急流にあなたを投げましたが、あなたの手足をロープで縛りました、もしあなたが溺れないことに集中しているならば、あなたはどのように問題を解決することになっていますか?
maple_shaft

4
私はすべての出力パラメーターをPRINTALLのような特定の何かに変更します。空の
パラメーターを作成して

5
@AveryPayne:新しい仕事が古い仕事より優れているからといって、新しい仕事が苦手というわけではありません。
unholysampler 2012年

回答:


25

これは簡単です。すべてを空白のままにすると、すべてが印刷されることを示すプロンプトが表示されますが、そのプロンプトでのデフォルトの選択はキャンセルする必要があります。

値を入力した場合は、要求したものをすべて印刷します。

このようにして、フォームを誤って燃やしてすべてを印刷することがなくなります。彼らは燃え尽きて何も印刷しません。すべてを印刷するには、一時停止し、プロンプトで選択内容を[キャンセル]から[OK]に変更して印刷する必要があります。


2
これは機能しません-ユーザーがマウスをクリックしてボタン(またはEnterキーを押す前にTabキー)をクリックする必要があることに気づくとすぐに、何も考えずに自動的にそれを開始します。
TehShrike、2012年

7
@TehShrike、いいえ、そうなります。プロンプトはすべてを印刷するときにのみ表示されるためです。したがって、通常のフローを中断し、別のプロンプトを期待して(そして印刷をキャンセルして)Enterキーをもう一度押すか、プロンプトを読んで正しい選択肢を選択するのをやめさせます。
CaffGeek 2012年

これにより、本来の目的である「集中力」(またはその欠如)を打破するという目標を達成しながら、「悪魔の対話(tm)が必要」という問題を解消するという要件が解決されます。[Enter]キーを押すのではなく、トラックでそれらを停止し、一瞬目を覚ますようにします。他のすべての条件では、ワークフローを中断することなく、通常どおりに作業を進めることができます。素晴らしい反応。
Avery Payne

@AveryPayne、お役に立ててうれしいです。
CaffGeek

27

何かを修正する必要があるように思えますが、解決策を提案するたびに(そして、リストにたくさんの優れたアイデアがある場合)、それは打ちのめされます。

これはあなたが押し戻す必要があるポイントです。「これは間違っています。修正してください」という漠然とした考えは必要ありません。必要なのはスペックです。今のところあなたが持っているのは彼ら望んでいないものだけなので、彼らがたいことを正確に修正したい人々に尋ねてください。それくらいは簡単です:ちょうど何もしない、とあなたはしません、彼らはしたくないもののいずれかを行います。変更を加えたい場合は、前向きで具体的なルールを考え出す必要があり、それを実装することを伝えます。


「箱の外」という非常に独創的な考え方(うん、私はその古いフレーズを言っただけですか?)なので、+ 1してください。:)
Avery Payne

3
悲しいことに、「オフィスの政治」が頭の痛い制約の理由であるとき、正気の要件は一般に現場で薄いです。存在するものとしての「オフィスポリティクス」の力または法定による排除は、普遍的に桁違いに量産コードの品質を改善します。
Jason Lewis、

10

より一般的な質問に対する答えを出そうと思います。ユーザーがミスをして災害につながるか、キャンセルまたは取り消しできない何かを回避する方法(ユーザーが予期しない複数のページを印刷して紙を無駄にするなど)印刷)。

元の質問で述べたように:

ユーザーは、圧力が高く、タイムクリティカルな環境にいます。各プロセスは数分または数秒で測定されます。つまり、処理時間をできるだけ最小限に抑える必要があります。

この意味は:

  • ソフトウェア製品は、従業員の生産性を向上させるために最善を尽くす必要があります。1秒ごとが重要な場合、ユーザーエクスペリエンスと生産性は一般的な製品よりもさらに重要です。ユーザーが頻繁に使用しない一部の機能で数秒の損失は許容されます。

  • ユーザーは忙しくてソフトウェア製品に注意を払うことができません。落ち着いた環境で、1年前に前回使用したMicrosoft Wordの機能を使用しているときに、Microsoft Wordが質問をし、自分の選択の結果がどうなるかを説明した場合、1〜2分で読むことができます質問、そしておそらくドキュメントを読むつもりです。あなたの場合、あなたはそれを買う余裕はありません。ユーザーには読む時間がない。

メッセージボックス:いいえ、いいえ、...いいえ!

私の別の回答ですでに説明したよう、メッセージボックスはほとんどの場合、2つの理由で悪です(詳細については、Alan Cooperによる「フェイス3について」を参照してください)。

  • 「狼!」と叫んだ会話 原則として、アプリケーションが同じダイアログを頻繁に表示する場合は、ユーザーに注意を払わずにダイアログを繰り返し閉じるように促します。

  • ダイアログがワークフローを妨害します。ダイアログはこのフォーカスを奪い、ダイアログが閉じるまでアプリケーションとの対話が中断されるため、ユーザーはアプリケーションに集中できません。

これは、UX ボックスの観点から見ると、ダイアログボックスは絶対に悪あることを意味します。ダイアログボックスは無視され、1秒おきにカウントされる環境では生産性が低下します。

他の意味

質問によると:

  • 「入力は、日付範囲、ルート範囲、および受注範囲で構成されています。」

  • 間違った値がない(たとえば、ユーザーが最初のフィールドに前の日付、未来の日付、または今日を入力できる)ことはないため、検証は不可能です。

  • 「入力として何も入力されない場合、印刷ルーチンはすべてを印刷しようとするため、高速プリンターで無駄になる大量のプリンター用紙が発生します。」

  • デフォルトのデータを使用して印刷するよう依頼することは完全に可能です。

より一般的に言えば、次のことを意味します。

  • デフォルト値があり、これは実際には有効である場合があります。

  • ユーザーがデフォルト値を変更するつもりであるにもかかわらず、誤ってデフォルト値を保持して「印刷」ボタンをユーザーに押したくない場合。

ここにあなたが試すことができるいくつかのテクニックがあります:

1.魔法の取り消し

はい、ユーザーはタイムクリティカルな環境にいます。はい、プリンタが印刷を開始すると、停止することはできません。しかし、あなたにできることはまだあります。

タイムクリティカルな環境であっても、たった今印刷しても5秒で印刷しても何も変わらない可能性があります。

ユーザーが[印刷]をクリックすると、GMailが誤ってすべてのメールを削除するように依頼したのと同じように、小さな[元に戻す]ボタンが表示されます。5秒待ちます²。「元に戻す」を非表示にしてから、印刷します。

今、ユーザーは間違いに気づき、危害が実際に行われる前にそれをキャンセルする機会がありますが、ものはわずか5秒の遅延で印刷されます。

2.離散的な「デフォルト値」の背景

デフォルト値が疑わしいですか?³1つの値で、疑わしいことはほとんどありません。3つの場合、ユーザーがデフォルトで3つすべての値を保持しなければならないケースは非常にまれです。

この場合、次のことができます。

  • デフォルト値がある場合は、値を強調表示します。赤ではない:赤は無効な値です。黄色からオレンジに設定し、ユーザーがデフォルト値を変更したときに白に戻します。

  • または、値が変更されるまで「印刷」ボタンを無効にします。近くにチェックボックスを追加します。ユーザーは、チェックボックスをオンにして、デフォルト値で印刷することを確認できます。

3.コントロールのUIを強化する

我々は金曜日、6ある 2012年1月の今日。次の木曜日の日付はいつですか?すばやく、すばやく、プレッシャーにさらされています。答えは1秒しかありません。また、あなたは疲れていて、周りにたくさんのノイズがあります。答えにくいですね。

として記述されて1/8/1012いる場合、人々は日付を簡単に操作できません。Saturday, 7th of January (tomorrow)少し簡単です。グラフィカルビューを示し今日土曜日と日曜日を、強調し、オフセットにも優れています。

「Location:NYC」ほど醜いものはありません。これらの3つの文字は、疲れてストレスの多い環境で作業している場合は意味がありません。間違いは簡単です。代わりに、ニューヨーク市の赤い点が表示された米国のグラフィカルマップの方がはるかに魅力的で、サンフランシスコを選択したいのに、赤い点が間違った場所に表示されているように見えることにユーザーが気づく可能性がはるかに高くなります。 。

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

GPSで38.90403、-77.04878から38.90568、-77.04665に移動し、次に右に曲がって38.90565、-77.04345に移動し、次に90°左に曲がって38.90660、-77.04345に移動する必要があると通知されたら、楽しんでいただけますか?あなたは自分の仕事(道路)に集中できますか?忙しいユーザーに2012年1月8日とニューヨークを表示することは、色の完全なマップの3Dビューの代わりに、未加工の座標をスローするGPSと同じくらい親切です。

より豊富なコントロールと豊富なデータの視覚化を提供することで、ストレスの多い環境でのユーザーのミスのレベルを減らすことができます。


¹ところで、これはダイアログボックスの他のバリアントにも当てはまります。以前に、ボタンがランダムになり、閉じるのが難しくなるダイアログボックスについて質問しました。悲しいことに、そのようなアプローチは役に立ちませんが、害を及ぼすだけです。ユーザーはダイアログの発言を却下しますが、ダイアログを閉じて作業に戻るのに時間を費やします。

²例として5秒と言います。ユーザーが[元に戻す]をクリックする速さを確認するには、数か月間のユーザーのアクティビティを監視する必要があります。1秒未満になる可能性があります。遅延が0.6〜1.8秒であることがわかります。平均1.1秒で、「取り消し」を2秒間表示してから印刷できます。

³お願い、お願い、お願い、ノーと言ってください!もしそうなら、それはあなたのデフォルト値に何か問題があることを意味するからです。たとえば、日付のデフォルト値が今日の場合、75%のケースでは、ユーザーはそれを明日、10%は昨日、10%は翌日に設定する必要がある場合は、デフォルトを設定する必要があります明日への価値。


オプション1は、3つのうち最良のものです。オプション2は、インターフェースのAPI設計が不十分なために可能または不可能です。オプション3は、APIのデザインが悪いため、間違いなく機能しません(テキストボックスとボタンのみが利用可能です)。それでも、建設的な解説をありがとう。:)
Avery Payne

1
いくつかのラベルを追加し、それらの表示をオンまたはオフにすることにより、2番目のオプションを管理できます(まだラベルがありますか?)。3つ目のオプションについては、上司や顧客が、テキストボックスとボタンだけで構築された、質の悪いUIを備えた高品質のソフトウェアを期待するのは、ランボルギーニが木と錆びた古い木片から構築されると期待するのと同じことを理解するまで、忘れてください金属。
Arseni Mourzenko 2012年

Magic Undoは間違いなく美しいものです。
Nick Chammas、2012年

@MainMa、補足として、APIは#2で達成しようとしていることに対してかなり原始的です。4つのボタンを持つダイアログは、ダイアログを描画し、文字列からテキストを生成し、ボタンに単語を自動入力する単一の関数呼び出しです。おわかりのように、7つのパラメータ-「メッセージ」、ボタン数、デフォルトのボタンフォーカス、ボタン文字列1、ボタン文字列2、ボタン文字列3、ボタン文字列4があります。適用できる「レイアウト」や「オブジェクトの再クラス」はありません。しかし、提案に感謝します。そして、私自身のダイアログを書いて代わりにそれを呼び出すことは確かに私の力の範囲内です...
エイブリーペイン

3

印刷する前に何ページ印刷するかを決定したり、他の方法で出力のサイズを測定したりできますか?その場合は、通常の使用での最大サイズを決定し、それよりも大きい場合は、出力サイズを示す確認ダイアログを使用します。これを読まないと閉じられないため、ユーザーは確認のために出力サイズを入力する必要があります。


ページ数の計算を試みることは可能ですが、時間の制限があるため、上記の時間の制約のために設計の決定は拒否されました。それでも、時間が問題にならない場合、これは大きな助けになります。。「問題:」二次ブロッキングダイアログでは、しかし、(で最後の段落に2回目を参照してください上記の私の投稿に反する
エイブリー・ペイン

@AveryPayne印刷が開始されたらキャンセルできますか?代わりに、ユーザーが意図したものではなかった場合にキャンセルするオプションを使用して、ページ数を示す(印刷を開始するのと並行して計算される)非ブロック画面を表示することができます。間違いを悟る。
JGWeissman、2012年

+1。これまでのところ、これが唯一の実用的な答えであるためです。ただし、それでもブロックダイアログの部分を受け入れることはできません。
Avery Payne

できればいいのですが、印刷のフックはせいぜい「脳が損傷」しているだけです。印刷するたびにダイアログが点滅します。これを指摘してくれてありがとう、質問でこれを明確にしようと思います。
Avery Payne

3

この問題をどのように解決しますか?

ユースケースを明確に分けます。無限の出力につながる可能性がある「今すぐ何かを印刷する」ケースがあります。これを修正して、すべての正しいデフォルトを提供します。

入力注意深くチェックできる特別な(非標準の)リクエストである「以前のものを再印刷する」ケースあります。

頻繁なバックプリントが必要なため、日付範囲の入力を「今日の日付」に自動設定することはできません。

いいえ。

入力今日自動設定できるため、頻繁なバックプリント要求にはまったく影響しません。

「今日の日付」に自動設定すると、バックプリントリクエストにどのような影響がありますか?質問でそれらを列挙してください。

ルートの入力はハードコードできません。また、再印刷が必要なため(上記を参照)、すでに出荷されているルートからそれを推定することはできません。

いいえ。

再版および裏刷りは特殊なケースです。それらはデフォルトのフィールドを持つことはなく、例外ではなく、ルールです。


1
「間違った日付の入力を突破する」?どの入力?使用例には、デフォルトの日付とバックデートの2つがあります。どうか明らかにしてください。
S.Lott、2012年

2
@ S.Lottこれはコメントというよりは答えです。
Josh K

3
@PersonalNexus:たぶん。それは仮定に満ちているので、質問は対処するのがかなり難しいです。
S.Lott、2012年

2
@AveryPayne-では、パラメーターなしで印刷する機能を無効にしてみませんか?
SoylentGray 2012年

1
チャットするには拡張ディスカッションを行ってください。
Josh K

2

問題の説明をさせてください。

現状:盲目的に押すEnterと、一連の用紙が印刷されます。

望ましい状態:盲目的に押すEnterと、一連の用紙が印刷されません。

ソリューション:変更ソフトウェア盲目的に押すようにはEnter何か、ない何も紙の連が印刷させる以外に、。

その代わりに、代わりに何をすべきかという問題が残ります。個人的には、オペレーターに何が欲しいか尋ねます。私の推測は、まだ印刷されていない最も緊急の請求書を印刷するようなものです。すべてを印刷する機能はそのままにしますが、印刷するには意識的な決定が必要です。


2

現在のプロセスのデフォルトにより、ユーザーの無駄と時間の浪費が発生している状況があります。

「パラメータのリセット」ボタンにフォーカスを合わせて(必要に応じて1つ作成する)、Enterキーを押すだけの機能を無効にします。ユーザーを支援するために、これらのパラメーターをフォームに自動的に入力するための最も一般的な選択用のある種のホットボタンを作成します。しかし、これはホットボタンがなくても問題を解決するはずです。


入力フィールドは実行時に「動的に」追加されます(設計時のレイアウトはありません)...しかし、ボタンはフォームにコード化されているため、新しいボタンを追加することをお勧めします。
Avery Payne

動的に追加されることは複雑なことをしますが、それを理解することに価値がある場合は、foxproでもそれらを引き続き入力できると思います。
SoylentGray 2012年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.