Principle of Least Surprise

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Das Principle of Least Surprise (dt. Prinzip der geringsten Überraschung), auch unter der Abkürzung POLS bekannt, ist eine goldene Regel in der Software-Ergonomie, Mensch-Computer-Interaktion und dem Interfacedesign. Diese Regel wurde von Geoffrey James in seinem Buch The Tao of Programming als Law of Least Astonishment formuliert (Absatz 4.1). Sie besagt, dass eine Benutzerschnittstelle so ausgelegt werden sollte, dass der Benutzer möglichst wenige Überraschungen erlebt. Allgemein kann man somit folgende Regel formulieren:

„Never surprise the user!“

„Überrasche niemals den Benutzer!“

Anwendung auf Quellcode[Bearbeiten]

Das Principle of Least Surprise wird auch auf den Quellcode von Anwendungen erweitert. Hierbei sollen Objekte wie Variablen, Funktionen, Methoden, Klassen und dergleichen derart benannt werden, dass deren Funktion und mögliche Seiteneffekte klar erkenntlich sind.

Beispiele für Methodenbenennung
Methode Erwartetes Verhalten
Customer GetCustomer(int customerId) Gibt einen Kunden anhand einer eindeutigen Identifikationsnummer zurück. Sollte der Kunde nicht gefunden werden, sowie im Fehlerfall, tritt eine Ausnahme auf. Die Methode besitzt keine Seiteneffekte.
Customer GetCustomerOrNull(int customerId) Gibt einen Kunden anhand einer eindeutigen Identifikationsnummer zurück. Sollte der Kunde nicht gefunden werden, wird der Nullwert zurückgeliefert. Im Fehlerfall tritt eine Ausnahme auf. Die Methode besitzt keine Seiteneffekte.
Customer GetCustomerOrDefault(int customerId) Gibt einen Kunden anhand einer eindeutigen Identifikationsnummer zurück. Sollte der Kunde nicht gefunden werden, wird ein Kundenobjekt mit Standardwerten zurückgeliefert. Im Fehlerfall tritt eine Ausnahme auf. Die Methode besitzt keine Seiteneffekte.
bool TryGetCustomer(int customerId, out Customer customer) Gibt true zurück, falls der Kunde gefunden wurde. Gibt false zurück, falls der Kunde nicht gefunden wurde oder ein Fehler aufgetreten ist. Die Methode liefert zudem den Kunden in der Variable customer zurück, falls der Kunde gefunden wird. Andernfalls wird die Variable customer auf den Nullwert gesetzt. Die Methode besitzt keine Seiteneffekte.
void SaveCustomer(Customer customer) Speichert das Kundenobjekt und weist somit Seiteneffekte auf. Im Fehlerfall tritt eine Ausnahme auf.
async int AddCustomerAndReturnCustomerIdAsync(Customer customer) Speichert das Kundenobjekt und weist somit Seiteneffekte auf. Anschließend wird die Identifikationsnummer des Kundenobjekts in einem Continuation Task zurückgeliefert. Im Fehlerfall tritt eine Ausnahme auf.

Beispiele[Bearbeiten]

  • Software, insbesondere Chat-Software, etwa bei Eintreffen einer neuen Nachricht, sollte nicht ungefragt den Tastaturfokus übernehmen. Der Benutzer könnte gerade dabei sein, sein Kennwort in ein Formular einzugeben und durch blindes Tippen sein Kennwort stattdessen in das just erschienene Chatfenster eingeben und versehentlich an andere Personen schicken.
  • Eine Software, die Tastatureingaben aufzeichnet (Makro-Recorder), sollte auch Tastenkombinationen aufzeichnen können, die gängigerweise zum Beenden von Software verwendet werden, wie Cmd-Q, Ctrl-Q oder Alt-F4. Hierdurch sollte der Makroaufzeichnungsprozess nicht beendet werden und das noch nicht gespeicherte Makro nicht verloren gehen. Die Software sollte stattdessen eine erkennbare Möglichkeit zum Beenden des Aufzeichnungsprozesses anbieten und danach sollten die üblichen Tastenkombinationen wieder aktiv sein.
  • Generell sollte Software niemals Daten entfernen, die möglicherweise noch benötigt werden, etwa Konfigurationsoptionen, die im momentanen Zustand der Anwendung keine Wirksamkeit haben, aber bei anderer Verwendung später wieder relevant werden könnten. Ein Beispiel wären hier Stromsparoptionen für den Akkubetrieb, während ein Notebook am Stromnetz angeschlossen ist, oder Druckeinstellungen eines Dokumentes, auch wenn man den Druckdialog wieder schließt, ohne zu drucken.

Problematik[Bearbeiten]

Die Problematik bei der Anwendung dieser Regel ist, dass der Programmierer oft nicht vorhersagen kann, was den Benutzer überrascht, da er eine systemnähere Denkweise hat und nicht wissen kann, was genau der Benutzer erwartet. Außerdem können verschiedene Benutzer höchst unterschiedliche Erwartungen haben. Oft erscheint auch gerade ein Verhalten, das dem Programmierer konsistent erscheint, einem Benutzer ungewohnt oder merkwürdig. Daher ist es wichtig, schon während der Entstehung einer Software oder der Bedienoberfläche eines Gerätes Rückmeldungen von zukünftigen Benutzern zu bekommen. Siehe dazu auch Extreme Programming.

Gezielte Verstöße[Bearbeiten]

Besonders in der Werbetechnik wird oft gezielt gegen die Regel verstoßen, um den Anwender zu einer Aktion zu bewegen, die er im Normalfall nicht begehen würde. So wird bei Layer Ads häufig die Schaltfläche zum Öffnen der Anzeige mit einem X versehen und in einer oberen Ecke platziert, was der Erwartung des Benutzers widerspricht, da ein X konventionell die Schaltfläche zum Schließen eines Fensters markiert.

Scherzanwendungen basieren häufig auf dem Verstoß gegen diese Vorschriften, indem zwei gegensätzliche Schaltflächen (z. B. "Ja" und "Nein") beim Daraufzeigen mit dem Mauszeiger (hover) ihre Beschriftungen tauschen oder verschwinden, oder indem Schaltflächen, die eigentlich eine Aktion ausführen sollen, einfach gar nichts bewirken.

Weblinks[Bearbeiten]