Sollte ein Server "nachsichtig" sein, was er akzeptiert, und "fehlerhafte Eingaben stillschweigend verwerfen"?


27

Ich hatte den Eindruck, dass mittlerweile alle zustimmen, dass diese Maxime ein Fehler war. Aber ich habe kürzlich diese Antwort gesehen, bei der ein Kommentar mit der Überschrift "Sei nachsichtig" 137-mal angehoben wurde (Stand heute).

Meiner Meinung nach war die Milde gegenüber dem, was die Browser akzeptieren, die direkte Ursache für das völlige Durcheinander, das HTML und einige andere Webstandards vor ein paar Jahren angerichtet haben und das sich erst vor kurzem ordnungsgemäß aus diesem Durcheinander herauskristallisiert hat. Die Art und Weise, wie ich es sehe, wird dazu führen , dass Sie nachsichtig mit dem umgehen, was Sie akzeptieren .

Der zweite Teil der Maxime lautet "Fehlerhafte Eingaben stillschweigend verwerfen, ohne eine Fehlermeldung zurückzugeben, sofern dies nicht in der Spezifikation vorgeschrieben ist" , und dies fühlt sich grenzwertig an. Jeder Programmierer, der seinen Kopf an die Wand gestoßen hat, wenn etwas stillschweigend versagt, weiß, was ich meine.

Also, liege ich da völlig falsch? Sollte mein Programm nachsichtig sein, was es akzeptiert und Fehler stillschweigend verschluckt? Oder interpretiere ich falsch, was das bedeuten soll?


Die ursprüngliche Frage lautete "Programm", und ich gehe davon aus, dass dies jedermanns Sache ist. Es kann sinnvoll sein, Programme nachsichtig zu gestalten. Was ich jedoch wirklich gemeint habe, sind APIs: Schnittstellen, die anderen Programmen und nicht Menschen ausgesetzt sind . HTTP ist ein Beispiel. Das Protokoll ist eine Schnittstelle, die nur andere Programme verwenden. Die Daten, die in Überschriften wie "If-Modified-Since" stehen, werden nie direkt angegeben.

Die Frage ist also: Sollte der Server, der einen Standard implementiert, nachsichtig sein und Daten in mehreren anderen Formaten zulassen, zusätzlich zu dem, der vom Standard tatsächlich benötigt wird? Ich bin der Meinung, dass "Nachsicht" eher für diese Situation gelten soll als für menschliche Schnittstellen.

Wenn der Server nachsichtig ist, scheint dies eine allgemeine Verbesserung zu sein, aber in der Praxis führt dies meiner Meinung nach nur dazu, dass Clientimplementierungen auf die Nachsicht angewiesen sind und daher nicht mit einem anderen Server zusammenarbeiten, der auf etwas andere Weise nachsichtig ist.

Sollte ein Server, der eine API zur Verfügung stellt, nachsichtig sein oder ist das eine sehr schlechte Idee?


Nun zum schonenden Umgang mit Benutzereingaben. Betrachten Sie YouTrack (eine Bug-Tracking-Software). Es wird eine Sprache für die Texteingabe verwendet, die an Markdown erinnert. Nur dass es "nachsichtig" ist. Zum Beispiel schreiben

- foo
- bar
- baz

ist keine dokumentierte Methode zum Erstellen einer Liste mit Aufzählungszeichen, und dennoch hat es funktioniert. Folglich wurde es in unserem internen Bugtracker häufig verwendet. Die nächste Version kommt heraus und diese milde Funktion beginnt etwas anders zu funktionieren, was eine Reihe von Listen zerstört, die diese (Nicht-) Funktion (falsch) verwendet haben. Die dokumentierte Möglichkeit, Listen mit Aufzählungszeichen zu erstellen, funktioniert natürlich weiterhin.

Sollte meine Software in Bezug auf die Benutzereingaben, die sie akzeptiert , nachsichtig sein ?


4
In Bezug auf "Fehlerhafte Eingabe stillschweigend verwerfen" würde ich für jeden Fall fragen, was als fehlerhafte Eingabe zu betrachten ist. Wenn Sie einem Benutzer eine Frage stellen und "Ja" oder "Nein" erwarten, ist die Eingabe "JA" fehlerhaft? Wie wäre es mit "y"? Wie wäre es mit "Oui"? Scheuen Sie sich im Allgemeinen nicht, dem Benutzer mitzuteilen, dass seine Eingabe nicht Ihren Erwartungen entspricht. Stellen Sie jedoch sicher, dass Sie so umfassend wie möglich waren - in meinen Augen bedeutet dies "nachsichtig sein".

3
Wenn Sie von Endbenutzereingaben sprechen, die sich auf die Benutzerfreundschaften Ihrer Anwendung beziehen, sollten Sie vorsichtig sein. Für automatisierte maschinengenerierte Eingaben (über eine API) sollten Sie ausführlich (streng) sein.
Burhan Khalid

2
Tatsächlich war die Milde gegenüber HTML der Grund, warum es so beliebt wurde (und die Strenge von XHTML, warum es fallengelassen wurde).
Oliver Weiler

1
Ich denke, der Schlüssel ist, dass, wenn es ein Szenario ist, in dem Sie zulassen können, dass es ordnungsgemäß fehlschlägt, Sie zumindest das Ereignis protokollieren.
Rig

2
@OliverWeiler Ich bin der Meinung, dass das Versagen von XHTML damit zu tun hat, dass es völlig unnötig war. HTML war schon da und irgendwie hat es funktioniert. Auch wenn HTML natürlich sehr beliebt ist, ist es traurig, dass wir diese Technologie als Erfolg bezeichnen. Es befriedigt die Nachfrage, aber es befriedigt ungefähr so ​​gut wie Symbian die Nachfrage nach Smartphones.
Roman Starkov

Antworten:


9

Natürlich hast du vollkommen recht. Programme sollten niemals „mild“ sein, da dies nur dazu dient, Probleme zu maskieren. Probleme sollten hervorgehoben und nicht unter den Teppich gekehrt werden. Eine informative Fehlermeldung ist ein absolutes Muss, damit ein Programm für den Benutzer hilfreich ist.

In den meisten Fällen, in denen falsche / ungültige Daten angegeben wurden, wusste der Anbieter dieser Daten (unabhängig davon, ob es sich um einen Benutzer oder die Ausgabe eines anderen Programms handelt) wahrscheinlich nicht, dass diese ungültig sind. Das Verschlucken des Fehlers wird sie in der Überzeugung halten, dass er gültig ist (oder sein könnte), was ungültige Daten vermehrt.

Die einzige Möglichkeit für die Interoperation von Systemen besteht darin, dass diese Interoperation vollständig und eindeutig definiert ist. Ein Programm, das Daten außerhalb der Spezifikation akzeptiert, akzeptiert diese Daten de facto , auch wenn sie von der Spezifikation ungültig sind. Dies erschwert nicht nur die Kompatibilität, sondern bedeutet auch, dass sie nicht mehr formal definiert sind. Das Programm selbst ist jetzt der De-facto- Standard. Es ist daher unmöglich, milde Programme weiterzuentwickeln oder zu ersetzen, da Sie nicht die kleinste Änderung an der Funktionsweise vornehmen können.


25

Ich denke, dass alles davon abhängt, wer Ihre Zielgruppe ist. Wenn es Programmierer sind, dann absolut nicht. Ihr Programm sollte scheitern und einen blutigen Mord begehen. Wenn Ihre Zielgruppe jedoch keine Programmierer ist, sollte Ihr Programm nachsichtig sein und Ausnahmen angemessen behandeln, andernfalls flüstern Sie einen süßen, blutigen Mord.

Nehmen Sie als Fallstudie den NPAPI Flash Player. Es gibt eine "Release" -Version für diejenigen, denen 99% der auftretenden Fehler egal sind, aber es gibt auch eine "Debug" -Version, die verwendet werden kann, wenn irgendetwas schief geht. Jede Unterstützung spielt offensichtlich Flash-Inhalte ab, zielt jedoch auf zwei völlig unterschiedliche demografische Merkmale ab.

Am Ende denke ich, dass das Wichtigste ist: Was interessiert Ihre Benutzer?


4
Die überwiegende Mehrheit der Unixy-Befehlszeilentools, die behaupten, eine Zielgruppe außerhalb der Programmierer zu haben, ist für Benutzer, die Fehler machen, dennoch nutzlos. Selbst wenn Sie kein Programmierer sind, ist es für ein Programm normalerweise besser, ein Problem zu erklären, als etwas Unsinniges oder Unbeabsichtigtes zu tun.
Timwi

2
@romkyns: Nicht vollständig, ich sage, dass Ihre Anwendung Fehler auf eine Weise behandeln sollte, die für Ihre Zielbenutzer sinnvoll ist.
Demian Brecht

@ Timwi: In diesem Fall sind diese Unixy-Kommandozeilen-Tools schlecht aufgebaut;)
Demian Brecht

3
@romkyns - Ich denke, ein gutes Beispiel wäre: Im Debug-Modus soll ein Programm bei Problemen anhalten und Ihnen mitteilen, was schief gelaufen ist. Im Produktionsmodus soll Ihr Programm so gut wie möglich weiterarbeiten und alle Probleme protokollieren, die es lösen kann. Auf diese Weise können Programmierer erkennen, was sie falsch gemacht haben, und das Problem beheben, aber Benutzer werden nicht mit Dingen belästigt, die sie nicht beheben können. Einige Probleme können offensichtlich nicht behoben werden, aber ein gutes Beispiel sind CSS-Stilregeln, mit denen Sie eine Site auch dann rendern können, wenn Sie eine der Stilregeln nicht verstehen.
Setzen Sie Monica am

1
@ BrendanLongs Kommentar trifft den Nagel auf den Kopf - manchmal ist die Ausgabe wichtiger als die Richtigkeit. Einige Fehler (oder Warnungen) können ohne Benutzereingabe ordnungsgemäß behoben werden. Es liegt an Ihnen, zu entscheiden, was Ihre Anwendung in diesen Fällen tun soll.
Daniel B

7

Es gibt zwei Arten von "Nachsicht": Eine besteht darin, falsche Eingaben zu akzeptieren und einen Sinn daraus zu ziehen, und die andere darin, verschiedene Arten von Eingaben zu akzeptieren.

Im Allgemeinen möchten Sie immer die zweite, wenn es machbar ist. Der erste ist, wenn du schnell und hart stirbst. Ein Beispiel: Termine.

Hier sind einige Beispieleingaben, einschließlich gültiger, ungültiger und mehrdeutiger.

  • 2011-01-02
  • 01/02/2011
  • Jan 2, 2011
  • 2-Jan-2011
  • Green

Es gibt nur eine ungültige Eingabe hier: Green. Versuchen Sie nicht einmal, es als Datum zu akzeptieren. Da Greenes sich offensichtlich nicht um ein Datum handelt, ist dies ein Fall, in dem ein stilles Versagen akzeptabel ist.

01/02/2011ist gültig, aber nicht eindeutig. Sie wissen nicht unbedingt, ob es sich um ein US-Datum handelt (2. Januar) oder nicht (1. Februar). Hier ist es wahrscheinlich am besten, laut zu scheitern und den Benutzer nach einem eindeutigen Datum zu fragen.

2011-01-02wird normalerweise als eindeutig angesehen, daher ist es oft in Ordnung, davon auszugehen, dass es sich um das Format "JJJJ-MM-TT" handelt, und erst später zu einem Fehlschlag zu führen. Bei Benutzereingaben ist dies jedoch eine Art Urteilsvermögen.

Jan 2, 2011und 2-Jan-2011gültig und eindeutig sind, sollten sie akzeptiert werden. Es The Second of January of the year 2011ist jedoch auch gültig und eindeutig, aber der Nachsicht halber so weit zu gehen , ist übertrieben. Mach weiter und versag es leise, genauso wie Green.

Kurz gesagt lautet die Antwort "es kommt darauf an". Sehen Sie sich an, was eingegeben werden kann, und vergewissern Sie sich, dass Sie niemals widersprüchliche Eingaben akzeptieren (z. B. DD/MM/YYYYvs MM/DD/YYYY).

Im Kontext der verknüpften Frage / des verknüpften Kommentars ist das ein Fall von 2011-01-02. Die Eingabe sieht wie JSON aus und wird wie JSON validiert, auch wenn der Mimetyp falsch ist. Fahren Sie fort und versuchen Sie, es zu verwenden, auch wenn es irgendwann später nicht mehr funktioniert.


1
Es gibt eine Sache, die Sie hier nicht berücksichtigen. Wenn der Benutzer diese Zeichenfolge eingibt, sollte ich verschiedene Formate akzeptieren, daran besteht kein Zweifel. Wir sprechen aber von APIs. APIs-Clients sind andere Programme. Wenn es nachsichtig in seinem Datumsformat, jeder zukünftiger Server wird diese API auszusetzen hat in nachsichtig zu genau die gleichen Art und Weise oder Risiko Unverträglichkeit. Die Nachsicht wirkt sich eher nachteilig als hilfreich aus, finden Sie nicht auch?
Roman Starkov

1
@romkyns Ich glaube, du verstehst falsch, wo die Nachsicht liegt. Die API nachsichtig sein sollte , was es akzeptiert (es sollte alle verstehen 2011-01-02, Jan 2, 2011und 2-Jan-2011, wenn es nicht zu schwierig zu implementieren), nicht in dem, was es gibt . Zukünftige Clients für diese API müssen nicht einmal etwas über eine bestimmte API wissen, solange sie eine davon korrekt eingeben. Im Idealfall konvertiert die API-Ebene alle diese Elemente in dieselbe interne Darstellung, die der Code verwendet, bevor er sie weitergibt.
Izkata,

@romkyns Output könnte zum Beispiel immer im 2011-01-02Format vorliegen, und das ist das, was Sie in Ihre Dokumentation aufnehmen würden. Ich sehe überhaupt keine schädlichen Auswirkungen.
Izkata,

4
@ Izkata: Sie missverstanden. Stellen Sie sich vor, es gäbe ein altes Programm, das nur als Binärdatei verfügbar ist. Sie müssen ein neues Programm schreiben , das die gleichen Eingaben wie das alte akzeptiert. Wenn das alte Programm genau definiert war, was es akzeptiert, ist Ihr Job genau definiert. Wenn es nachsichtig ist, ist Ihre Arbeit unmöglich.
Timwi

1
Ein starker Widerspruch. Wenn es sich nicht um eine vom Benutzer eingegebene Eingabe handelt, müssen Sie sowohl bei der Eingabe als auch bei der Ausgabe streng sein. Was passiert, wenn Ihr Service erneut implementiert werden muss? Haben Sie alle möglichen Datumsformate dokumentiert? Sie müssen sie alle implementieren, da alte Clients nicht beschädigt werden sollen. Verwenden Sie ISO 8601 für alle maschinengenerierten Datumsinstanzen und -perioden: Es ist gut spezifiziert und in Bibliotheken allgemein verfügbar. Was bedeutet eigentlich der 02.01.2011? Der Zeitraum von 00:00 am 2. bis 00:00 am 3.? In welcher Zeitzone?
Dibbeke,

6

Stilles Scheitern ist das Schlimmste, was Sie jemals tun konnten. Haben Sie versucht, eine API mit unbeaufsichtigtem Fehler zu debuggen? Es ist unmöglich .

Es gibt "Tun Sie Ihr Bestes, um sich zu erholen, aber senden Sie einen detaillierten Fehler" und es gibt "Stiller Fehler".


3

Mir scheint, dass für einen JSON-Service das Gesetz von Postel besprochen wird: "Sei konservativ in dem, was du tust, sei liberal in dem, was du von anderen akzeptierst." Dies gilt normalerweise für Webdienste und nicht für die Benutzeroberfläche.

Für die Benutzeroberfläche ist konstruktives Benutzerfeedback und das Verhindern von Benutzereingaben die Faustregel, die wir verwenden.


Wenn man sich die Antworten hier ansieht, scheint jeder der Meinung zu sein, dass es nur für Benutzeroberflächen Sinn macht, dh das Gegenteil des ursprünglichen Gesetzes.
Roman

Ich verstehe, was Sie sagen, und bin mit den Plakaten einverstanden, dass ein sauberer, strenger API / Service das Ziel ist, aber zum Guten oder Schlechten weiß ich, dass ich meinen Diensten in der einen oder anderen Form Robustheit verliehen habe. In der Regel eine Wertübersetzung oder zwei an der Grenze. Solange die Bedeutung klar ist, weiß die App, wie die Nachricht verarbeitet wird, und es werden keine Geschäftsregeln verletzt. Wenn Sie dann die Robustheit erhöhen, wird die Interoperabilität verbessert.
MarcLawrence

Bis jemand anderes Ihre Spezifikation ausführt und feststellt, dass die "Robustheit", auf die sich Hunderte von Kunden verlassen, nicht der Spezifikation entspricht und rückentwickelt werden muss ...
Roman Starkov

3

Ich denke, das wird in Kapitel 1, Abschnitt 6 von TAOUP gut behandelt. Insbesondere die Reparaturregel , die besagt, dass ein Programm mit einer Eingabe das tun soll, was es kann, gibt korrekte Daten weiter. Wenn die korrekte Antwort ein Fehler ist, tun Sie dies so schnell wie möglich.

Ein ähnliches Konzept ist die defensive Programmierung . Sie wissen nicht , welche Art von Input Sie erhalten, aber Ihr Programm sollte robust genug sein, um alle Fälle abzudecken . Das heißt , es sollte in Rückforderungsfälle , bekannte Probleme wie verstümmelte Eingang, so programmiert werden , und einen Haken alle Fall handle Unbekannten.

So verwirft leise fehlerhafte Eingabe ist in Ordnung, so lange , wie Sie sind , dass die Eingabe der Handhabung. Sie sollten es niemals einfach so auf den Boden fallen lassen.


Für eine API denke ich, dass es das gleiche ist wie für ein Programm, nachsichtig zu sein. Die Eingabe ist immer noch falsch , aber Sie versuchen, so viel wie möglich zu reparieren. Der Unterschied ist, was als gültige Reparatur angesehen wird . Wie Sie bereits betont haben, kann eine milde API Probleme verursachen, da Benutzer "Funktionen" verwenden, die nicht vorhanden sind.

Natürlich ist eine API nur eine niedrigere Version der Kompositionsregel . Als solches wird es wirklich von der Regel der geringsten Überraschung erfasst , da es sich um eine Schnittstelle handelt.

Vermeiden Sie, wie das Zitat von Spencer feststellt, oberflächliche Ähnlichkeiten, die über "unscharfe" Eingaben diskutiert werden können. Unter diesen Umständen würde ich normalerweise behaupten, dass alles darauf hindeutet , dass das Programm nicht repariert werden kann, da es nicht weiß, was gewünscht wird, und es ist für die Anwenderbasis am wenigsten überraschend.

Sie haben es jedoch mit Daten zu tun , die viele "Standards" haben. Manchmal werden diese sogar in einem einzigen Programm (Kette) gemischt. Da Sie wissen, dass ein Datum erwartet wird, ist der Versuch, das Datum zu erkennen, nur ein gutes Design. Vor allem, wenn das Datum von einem externen Programm stammt und auf dem Weg zu Ihnen eine Sekunde lang unverändert weitergegeben wird.


2

Programme, die die meiste Zeit auf dem Server bereitgestellt werden, müssen jede Minute oder manchmal jede Sekunde Tausende von Anforderungen erfüllen. Wenn ein Serverprogramm fehlerhafte Eingaben von Clients akzeptiert und korrigiert, hat es leider zwei Nachteile:

  1. Verlust wertvoller Serverzeit. Bei mehr als 1000 Anfragen pro Sekunde kann sich die Prüfung auf Fehler in jeder Anfrage in einer langsamen Antwort für jeden Client niederschlagen.
  2. Missbräuchlich gegenüber dem Client / den Client-Programmen, die korrekte Eingaben liefern. Wenn ein serverseitiger Programmierer auf dem Servercode sitzt, muss er sich darüber Gedanken machen, in welchen Fällen fehlerhafte Eingaben vorliegen können. Wer wird das entscheiden?

Serverprogramme sollten keine fehlerhaften Eingaben akzeptieren, aber die Server sollten eine Fehlermeldung an den Client zurückgeben, wenn eine fehlerhafte Eingabe vorliegt.


2

Konzeptionell ist es ideal, das zu tun, was sicher getan werden kann, und gleichzeitig sicherzustellen, dass jemand, der Probleme beheben kann, auf irgendeine Weise darüber informiert wird. In der Praxis ist es natürlich oft unmöglich, die letztgenannte Einschränkung direkt zu erfüllen, und so wird die Frage am besten, um mit zweifelhaften Eingaben umzugehen.

Eine Sache, die beim Entwerfen eines Protokolls, einer Formatierungsspezifikation oder einer "Sprache" sehr hilfreich sein kann, ist die Möglichkeit, vier Kategorien von potenziellen nicht verstandenen Elementen zu unterscheiden:

  1. Dinge, die herausgefiltert werden sollten, wenn sie nicht verstanden werden.
  2. Dinge, die ignoriert werden sollten, wenn sie nicht verstanden werden, aber dennoch beibehalten werden, wenn Daten weitergegeben werden müssen (möglicherweise in einer Art Wrapper, um anzuzeigen, dass sie mindestens eine Phase durchlaufen haben, in der sie nicht verstanden wurden)
  3. Dinge, die eine Warnung erzeugen sollten, wenn sie nicht verstanden werden, aber einen Versuch der Datenwiederherstellung nicht verhindern sollten (z. B. innerhalb einer Webseite, ein Objekt, dessen Typ unbekannt ist, dessen Ende in der Datei jedoch genau definiert ist, wird möglicherweise als rot dargestellt "X" ohne zu verhindern, dass der Rest der Seite gerendert wird.)
  4. Dinge, die darauf hindeuten, dass etwas, das sie nicht versteht, an anderer Stelle schwerwiegende und nicht behebbare Probleme haben kann (z. B. ein Indikator dafür, dass verbleibende Daten komprimiert sind, und alles, was von irgendetwas verstanden wird, das die erforderliche Dekomprimierung durchführen könnte).

Eine genau festgelegte Konvention, mit der Apps, die eine beliebige Version eines Datenformats lesen können, erkennen können, welche Kategorie für etwas geeignet ist, das in Übereinstimmung mit späteren Versionen erstellt wurde, ist ein weitaus besserer Ansatz als der Versuch, Ad-hoc-Kompatibilitätsmaßnahmen zu ergreifen später. Wenn ein Dateiformat beispielsweise Zeilen der Form "Tag: Wert" enthält, kann angegeben werden, dass das erste Zeichen eines Tags die Kategorie angibt, zu der es gehört. Für Tags der Kategorien für unbeaufsichtigtes Ignorieren kann das erste Zeichen auch die Version des Standards angeben, für die das Tag gültig sein soll (wenn also ein Tag für unbeaufsichtigtes Ignorieren in Version 3 von vorhanden sein soll) Standardmäßig würde ein Parser für die Version dies ignorieren, aber ein Parser für die Version 3 oder höher würde quietschen, wenn er es nicht analysieren könnte.

Das Wichtigste ist in jedem Fall, nicht mehrdeutige oder missverstandene Daten in fehlerhafte Daten umzuwandeln. In einigen Fällen ist es möglicherweise besser, die Weitergabe von mehrdeutigen Daten überhaupt nicht zuzulassen, in anderen Fällen ist es möglicherweise besser, sie genau so weiterzugeben, wie sie empfangen wurden, wenn der Empfänger sie als eindeutig ansieht. Was wirklich gefährlich ist, wenn nicht geradezu böse, ist die Konvertierung von Daten mit unterschiedlichen Annahmen, z. B. die Konvertierung einer Liste von Daten wie:

01/12/12
13/12/12
99/12/12

in eine Liste von Daten wie

2012-01-12
2012-12-13
1999-12-12

Selbst wenn man eine Liste mit ein paar falsch eingegebenen Daten hätte, könnte es für einen Menschen möglich sein, anhand einer Liste im Originalformat festzustellen, welches Format korrekt war, und zweifelhafte Werte für die weitere Recherche zu kennzeichnen (Abgleich mit anderen Aufzeichnungen usw.). ) Das Rendern der Daten im letztgenannten Format würde sie jedoch hoffnungslos und unwiederbringlich verfälschen.


Gut gesagt. Mir gefällt, wie Ihre Antwort ein bisschen tiefer geht. Ich bin versucht, dies zu akzeptieren, aber angesichts des allgemeinen Interesses, das diese Frage erhalten hat, denke ich, dass ich dies für eine Weile belassen werde.
Roman

1

Meine Erfahrungen mit der Benutzeroberfläche stammen hauptsächlich von Desktop-Systemen. Websites sind anders, obwohl ich einige Websites gesehen habe, die ein Desktopsystem herausfordern könnten. Aber wofür es sich lohnt:

Ich habe festgestellt, dass Fehlermeldungen der allerletzte Ausweg sein sollten. Ein ideales System hätte sie überhaupt nicht. Das Beste, was Sie tun können, ist, keine schlechten Eingaben zuzulassen: Der Benutzer kann nicht "grün" eingeben, wenn er aus einer Dropdown-Liste von Monaten auswählt. Er kann keinen ausgegrauten Knopf drücken.

Das nächstbeste ist, die schlechten Daten zu akzeptieren. Angenommen, Sie zeigen ein Histogramm der täglichen Verkäufe für einen Monat an. Nach Benutzereingabe deckt das Diagramm ein Jahrhundert ab und der Balken, der ein Jahrhundert nach außen zeigt, ist zehnmal höher als die anderen. Der Benutzer weiß jetzt, dass er etwas falsch gemacht hat, und weiß außerdem viel mehr darüber, was er falsch gemacht hat, als jede Nachricht ihm sagen könnte. Wenn die Eingabe grafisch ist - zum Beispiel durch Ziehen einer Maus -, funktioniert diese Art von Feedback weiterhin und ist von unschätzbarem Wert. Eine Reihe von Eingaben ist möglicherweise ungültig. Mit dieser Methode erhält der Benutzer jedoch sofort ein detailliertes Feedback zu den Ergebnissen der einzelnen Mauspositionen.

Trotzdem muss der Benutzer manchmal wissen, warum die Schaltfläche abgeblendet ist, damit er sie nicht drücken kann. Dann gibt es keine Hilfe für sie (wenn es ist , lassen Sie mich wissen) , aber auf den Knopf ungray und, wenn er darauf klickt, geben Sie ihm eine gute Erklärung, warum die Taste zur Zeit nicht arbeiten.


0

In der Erklärung geht es um das Versenden von Informationen über das Internet. Eins der Dinge, die beim Senden von Informationen über das Internet auftreten, ist, dass diese nicht immer oder nur fragmentiert zum Ziel gelangen.


0

Etwas, das hier vermisst zu werden scheint - was sind die Folgen eines Scheiterns?

Webseite anzeigen? Sie sollten alles tun, um schlechte Eingaben zu tolerieren. Sie können entweder anzeigen, was Sie können, oder einen Fehler auslösen. Der letztere Kurs gibt dem Benutzer nichts und sollte daher nur ein letzter Ausweg sein, da er dem Benutzer ein völlig unbrauchbares Ergebnis liefert. Es wäre ziemlich schwierig, einen Fehler schlechter als diesen zu machen.

Wenn Sie dagegen nach dem Ziel eines Minuteman III fragen, lehnen Sie "Moskau" als Eingabe ab, da es möglicherweise nicht eindeutig ist.


Also, auch wenn Sie ein Programmierer sind und etwas dummen Code geschrieben haben, sollte das System sein Möglichstes tun, um etwas zu zeigen, anstatt nur anzuhalten und zu schreien, "oi, Sie haben es hier vermasselt (Zeilennummer)"? Glauben Sie nicht, dass genau das zu unglaublich schlechtem Code führt?
Roman Starkov

@romkyns: Sie haben Debug-Modi für diese Art von Dingen, bei denen es streng darum geht, über Fehler zu quäken.
Loren Pechtel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.