In der Tat geht es bei dieser Frage um Vorsichtsmaßnahmen zur Verbesserung der Benutzerfreundlichkeit und zur Reduzierung vermeidbarer Supportanrufe.
In der Tat geht es bei dieser Frage um Vorsichtsmaßnahmen zur Verbesserung der Benutzerfreundlichkeit und zur Reduzierung vermeidbarer Supportanrufe.
Antworten:
Das Fehlen einer ordnungsgemäßen Eingabevalidierung ist eines der Dinge, die dazu führen, dass Benutzer "schlechte" Dinge mit Ihrer Anwendung tun, wenn diese wirklich vom Programmierer behandelt werden sollten.
Ich habe ältere Apps gesehen, für die Benutzer geschult wurden:
a-z0-9,
email
Feld eingegeben wurde. Andernfalls verwenden nachfolgende E-Mail- Nachrichten an diesen Benutzer den Inhalt des Feldes und schlagen fehlhttp://
" vor den Webadressen stehtetc etc
Alle oben genannten Probleme sollten von einem Anwendungsentwickler behoben werden. Wenn Ihre Eingabevalidierung im Wesentlichen lautet: "Vergewissern Sie sich, dass der Benutzer weiß, in welchem Format sich dieses Feld befinden soll, und vertrauen Sie auf die Richtigkeit der eingegebenen Daten." Abgesehen von den offensichtlichen Sicherheitsrisiken machen Benutzer Fehler. Als Programmierer produzieren wir oft unsere besten Produkte, indem wir uns nach hinten beugen, um sicherzustellen, dass der Benutzer nichts falsch machen kann, egal wie sehr er es versucht!
http://
Validierungspunkt. Als Beispiel ASDF
tut dies in einer naiven Art und Weise, und das Ergebnis ist , dass Sie nicht Host - Pakete auf Domänen , die Verwendung https://
.
Ich habe einmal einen Kundendienstanruf erhalten, weil meine App einfach verschwunden ist. Es stellte sich heraus, dass sie eine andere App darauf öffneten.
... Ich habe beschlossen, nicht dafür zu sorgen, dass dies nicht noch einmal passiert, da es der Computer-Analphabetismus des Benutzers war, der das Problem verursachte, nicht die App. Alles, was ich hätte tun können, um es zu beheben, hätte zu einer schlechten Benutzererfahrung für andere geführt.
Fast jedes Programm, das ich schreibe, wird ausschließlich über die Befehlszeile aufgerufen. Ich habe auch einige schickere Dinge geschrieben, die als CLI-Benutzeroberflächen begannen und sich schnell zu einer Art Hülle entwickelten.
Ich kann also nur für das sprechen, was ich weiß. Im Folgenden sind einige häufige Probleme mit Befehlszeilenprogrammen aufgeführt:
Viel zu viele Möglichkeiten
Wenn Sie keinen Compiler oder Zeileneditor schreiben, versuchen Sie, die Optionen auf einen Bildschirm in einem 80 x 25-Bildpuffer zu beschränken, wenn --help
oder übergeben /?
wird. Es ist vollkommen in Ordnung, mehr Optionen zu haben, aber sie in Unterkategorien zu unterteilen. Zum Beispiel
foo --help
foo --help option_name
Keine langen Möglichkeiten
Es ist viel einfacher sich zu erinnern foo --attach_to [argument] --volatile --verbose
als sich zu erinnern foo -a [arg] -v +V
. Dies ist nicht immer möglich, aber in den meisten Fällen auch.
Keine Eingabevalidierung
Fast jede Plattform verfügt über mehrere Bibliotheken, die sich beim Parsen und Validieren von Argumenten bewährt haben. Fast jede Plattform verfügt über einen bewährten und echten Lexer, der Eingaben von einer CLI überprüft. Verwenden Sie eine, die andere oder beide. Wenn Ihr Programm aufgrund eines von einem Benutzer angegebenen Wertes einen Fehler aufweist oder durch Null dividiert, ist dies nur peinlich.
Sie brauchen vielleicht nicht so vielschichtige Dinge wie ein Lexer. Vielleicht können Sie die Zeichenfolge einfach mit einem Token versehen, wenn Sie Dinge in einer bestimmten Reihenfolge mit bestimmten Dingen an bestimmten Stellen erwarten.
Ich habe tatsächlich einmal einen Fehlerbericht erhalten, in dem eine Ganzzahl erwartet und jemand f*** my life
Anführungszeichen eingegeben hat . Ich habe dieses Programm nicht geschrieben, ich hatte das Pech, es geerbt zu haben.
Kein 'Verbocity'-Knopf
Ermöglichen Sie erfahrenen Benutzern, auf einfache Weise herauszufinden, wie Sie mehr Rauschen aus Ihrem Programm herausholen können, als die meisten Menschen tolerieren würden. Standardmäßig werden jedoch nur seriöse und kritische Dokumente gedruckt. Ich kann Ihnen nicht sagen, wie oft ich strace
gezündet haben musste, um zu erkennen, dass ein Fehler aufgetreten ist, weil er mit einem NULL-Dateistream gearbeitet hat.
Sie können Zusicherungen auch so umbrechen, dass das Deaktivieren über NDEBUG oder auf andere Weise immer noch dazu führt, dass der Benutzer etwas findet, das gedruckt oder protokolliert wird.
Wenn Sie von Protokolldateien sprechen, versuchen Sie sicherzustellen, dass alles, was Sie in sie einfügen, für andere als Sie (zumindest ein wenig) Sinn ergibt. Wenn der Beginn eines jeden Eintrags ein Datum der UNIX-Epoche ist, wird dies zu Frustration bei jemandem führen, der Ihnen wirklich helfen möchte, den Fehler zu reproduzieren.
Kein Bug-Buddy im Debug-Modus
Viele Programme bieten eine Art "Debug" -Schalter, der zusätzliches Geschwätz darüber bietet, was mit dem Programm passiert, aber nur sehr wenige bieten Folgendes:
Oder vielleicht hören Sie am Telefon gern, wie Leute Folgendes lesen:
Es heißt unerwarteter Zustand bei null eff oh vier null oh .... OK, lass dir das vorlesen ...
Zu komplexe Konfigurationsdateien
Begründen Sie nicht die Notwendigkeit, eine Konfiguration als Ausrede zu analysieren, um eine Menge syntaktischen Zuckers in den Bann zu ziehen. Versuchen Sie, ein Format zu verwenden, das die Leute tatsächlich kennen, auch wenn es zusätzliche Arbeit beim Parsen bedeutet. Ich versuche, wenn immer möglich, das INI-Format zu verwenden. Sie werden erstaunt sein, was Sie mit einem einfachen Schlüssel-> Wert-Wörterbuch erreichen können.
Keine Konfigurationsdateien
Lassen Sie niemanden Shell-Skripte oder Batch-Dateien schreiben, nur um Ihr Programm zu verwenden, es sei denn, es sollte ein Werkzeug für eine der beiden Aufgaben sein. Geben Sie mir die Möglichkeit, auf eine Datei zu verweisen, die meine üblichen Optionen enthält, und geben Sie nur einige zusätzliche Argumente an.
Keine "nassen Boden" Zeichen
Wenn eine Funktion den Benutzer in Schwierigkeiten bringen könnte (möglicherweise für fortgeschrittene Benutzer), kennzeichnen Sie sie eindeutig als solche. Zusätzlich, wenn jemand dicke Finger eingibt oder etwas vergisst, lassen Sie ein Programm einen sehr freundlichen Link zur Online-Dokumentation drucken. Möglicherweise haben Sie es mit jemandem zu tun, der Ihr Programm über KVM verwendet und nicht ausschneiden und einfügen kann.
Verwenden Sie nach Möglichkeit (dies fällt mit der Eingabevalidierung zusammen) den Google-Ansatz:
Meinten Sie foo --bar FILENME, Sie haben nur foo --bar eingegeben
Bieten Sie einen Ausweg aus destruktiven Anweisungen
Das Ziel ist es, dem Benutzer mitzuteilen, warum es nicht funktioniert hat, und ihn noch einige Male zu veranlassen, während sichergestellt wird, dass Sie nichts potenziell zerstörerisches tun, es sei denn, der Benutzer möchte, dass Sie dies wirklich tun. Lassen Sie einen Schalter zu, der zum Beispiel "Nörgeln" ausschaltet -Y
oder auf /Y
andere Weise einen Ausweg für jemanden zulässt, der einfach "fette Finger" hat.
Ich vergesse wahrscheinlich ein paar Hinweise. Ich beschäftige mich häufig damit, da es sehr, sehr schwierig ist, die "Low Level" -Schnittstelle für etwas so intuitiv zu gestalten, dass die meisten Menschen Fehler vermeiden können.
"Möchten Sie diese Datei / diesen Datensatz wirklich löschen? Ja / Nein". Ja geklickt und dann einen Anruf bekommen, dass es "aus Versehen" auf den roten Löschen-Button geklickt hat und es diese Daten zurück braucht :)
Ich bin nicht der Meinung, dass es so wichtig ist, konkrete Beispiele für Fehlerbehebungen zu erhalten, wie dies zu realisieren:
Wenn sie durch diese Erkundung etwas kaputt machen, ist es Ihre Aufgabe als Programmierer, sie entweder vor der Gefahr zu warnen oder sie von vornherein davon abzuhalten. Ich kann mich nicht erinnern, wo ich es jetzt gesehen habe, aber im Hinterkopf versuche ich immer, es dem Benutzer meiner Software " leicht zu machen, das Richtige zu tun ".
Wenn Sie auf Beispielen bestehen:
Sehen Sie, wohin das führt? :)
Hier ist eine, die ich diese Woche gehört habe. Ein Benutzer fragt nach einer Funktion "Senden Sie mir eine Benachrichtigung, wenn ein Ereignis eintritt". Einfach genug und der Entwickler setzt es um. Klar, die erste Frage hätte lauten sollen: "Was wollen Sie mit dieser Benachrichtigung ansprechen?". Ich werde nicht darauf eingehen. Wenige Tage später hält der Benutzer beim Entwickler an und fragt "Ich habe diese Benachrichtigung erhalten. Was soll ich damit machen?".
Ich erinnerte mich an diesen Dilbert-Comic und schlug dem Entwickler vor, "eine App zu schreiben, um herauszufinden, was der Benutzer mit dieser Benachrichtigung tun sollte".
Wie mpeterson sagte, ist der Benutzer in seinem Fachgebiet sehr wettbewerbsfähig. Sie denken einfach nicht wie ein Softwareentwickler oder Designer.
Ich denke nicht, dass Benutzer dumm sind. Sie wollen Ihr oder irgendein Programm überhaupt nicht benutzen. Alles, was sie wollen, ist, ihre Sachen zu erledigen. Helfen Sie ihnen und verhindern Sie, dass ihnen auf dem Weg etwas passiert.
Eine gute Benutzeroberfläche und eine angemessene Lernerfahrung tragen wesentlich dazu bei, dass Benutzer keine schlechten Dinge tun können.
Gute Benutzeroberflächen sollten reibungslos sein.
Anstatt ein Dialogfeld aufzurufen (ein teurer Vorgang, den Benutzer nach einer Weile ignorieren), um einen Löschvorgang zu bestätigen, führen Sie den Löschvorgang aus und bieten Sie eine Möglichkeit zum Rückgängigmachen an.
Gute Benutzeroberflächen sollten erkennbar sein.
Obwohl das Menüband in Microsoft Office eine Menge Flak bekommt, weil es alte Benutzer von Word dazu zwingt, ihre Methoden zu ändern, ist das Menüband ein hervorragendes Beispiel dafür, wie Sie eine Benutzeroberfläche erkennbar (dh einfach zu erkennen) machen können.
Gute Benutzeroberflächen sollten wie guter Code selbsterklärend sein.
Niemand liest das Handbuch. Das einzige Handbuch, das ich jemals von meinen Benutzern gelesen habe, war eine PowerPoint-Präsentation mit schrittweisen Anleitungen der Software. Ich habe gesehen, dass dies mit Videotools wie Camtasia gemacht wurde, aber PowerPoints sind besser, weil Sie einfach zwischen den Schritten hin- und herschalten können.
Benutzer machen keine Fehler. Die Fehler liegen beim Programmierer, der keine brauchbare Schnittstelle erstellt hat.
Machen Sie also mit jeder Veröffentlichung Usability-Tests!