Wie können Fehler behandelt werden, von denen Benutzer dachten, dass sie ein Feature sind?


15

Frage :

Wie kann ein Fehler behoben werden, von dem ein Endbenutzer dachte, er sei eine Funktion?

Ausarbeitung :

Ich vermute, wenn ein großer Prozentsatz der Benutzer es als Feature erwartet, sollte es "unfixed" oder "fixed" belassen werden, um stabiler zu sein? Was ist jedoch, wenn ein sehr kleiner Prozentsatz der Benutzer erwartet, dass es sich um eine Funktion handelt, z. B. 0,1% oder 1%, und dieser Fehler behoben werden muss?

Da es sich um eine geringfügige Fehlerbehebung handelt, kann sie sich theoretisch als PATCH qualifizieren, was von der semantischen Versionierung berücksichtigt wird: xyZ Da sie jedoch die Abwärtskompatibilität aufhebt (selbst für einige wenige Benutzer), sollte sie sich MAJOR erhöhen: Xyz Richtig? Könnte es sich noch als PATCH qualifizieren (da es nicht als Feature gedacht war), solange es dokumentiert ist?

BEARBEITEN: In diesem speziellen Fall handelt es sich um einen Fehler in einer API einer intern verwendeten Bibliothek, die andere Entwickler verwenden.


8
Sind nicht alle Fehlerfunktionen? ;)
Lawrence Aiello

2
In der neuen Version einen Schalter bereitstellen, der standardmäßig deaktiviert ist. Wenn dieser Schalter aktiviert ist, wird das alte Verhalten emuliert. passiert die ganze Zeit. Keine Neuigkeiten,
mach


Manchmal ist eine Funktion nichts anderes als ein Fehler, wie er von der Marketingabteilung beschrieben wird.
Dan Pichelman

Der ursprüngliche Beitrag wurde aktualisiert, um zu verdeutlichen, dass es sich um einen Fehler in einer intern verwendeten Bibliothek handelt. Ich denke, dies ist ein anderer Fall als ein Fehler in einem Produkt, das an Kunden verkauft wird, da er weder den Workflow noch die Benutzerfreundlichkeit beeinträchtigt.
robodude666

Antworten:


7

Ich vermute, wenn ein großer Prozentsatz der Benutzer es als Feature erwartet, sollte es "unfixed" oder "fixed" belassen werden, um stabiler zu sein?

Hat der Fehler einen Mehrwert? Wenn ja, ist es eher eine Funktion. Manchmal kann ein "Bug" als "Mehrwert-Feature" enden.

Es ist schwer, dies wirklich schlüssig zu beantworten, da jede einzelne Situation anders sein wird.

In diesem speziellen Fall handelt es sich um einen Fehler in einer API einer intern verwendeten Bibliothek, die andere Entwickler verwenden.

In diesem Fall würde ich einen Fix als Teil Ihrer nächsten Änderung in Bezug auf die Abwärtskompatibilität hinzufügen. Sie können nicht wirklich tun gerade dies konsequent in den meisten Umgebungen , und es ist wahrscheinlich ein Zeitplan / Zeitrahmen für diese.

Als Entwickler möchte ich mich zuletzt mit einer API befassen, die ein falsches oder inkonsistentes Verhalten aufweist. Bugs gelten als das.

Erstellen Sie zumindest intern eine Art "bekannter Fehler mit der aktuellen Version" von Dokument / Wiki, damit Sie sicherstellen können, dass alle internen Benutzer wissen, dass die Funktionalität fehlerhaft ist. Hoffentlich haben Sie genug Tests, die die Bereiche abdecken, in denen die Benutzer die Funktion "Bug as a" verwenden, damit Sie sehen, wo / wann etwas kaputt geht, wenn / wenn Sie den Bug beheben.


10

Ich würde empfehlen, es stabiler zu machen. Benutzer sind die kanonische Quelle dessen, was Ihre Software tut. Wenn sie es wollen und sich darauf verlassen, würde ich zweimal darüber nachdenken, es zu reißen.

Ein gutes Beispiel dafür ist der "Ski" -Mechaniker im Videospiel "Tribes". Ursprünglich ein Fehler in der Art, wie die Physik-Engine das Springen auf einem Hügel handhabte, endete es als eine der Kernmechaniken des Spiels. Wenn Sie neugierig sind, können Sie hier mehr darüber lesen .



2
Ein weiteres gutes Beispiel für ein Videospiel ist die Möglichkeit, Züge in anderen Zügen in den alten Versionen von Street Fighter abzubrechen ( en.wikipedia.org/wiki/… ). Ursprünglich ein Fehler, hat es sich zu einem "Feature" entwickelt.
Michael

8

Da sich der Fehler in einer Bibliothek befindet, haben Sie folgende Möglichkeiten:

  1. Machen Sie einen Klon der fehlerhaften Bibliotheksfunktion. In vielen Fällen wird 2in diesen Fällen lediglich ein a an den Funktionsnamen angehängt. Wenn Sie jedoch andere Änderungen an der Schnittstelle dieser Funktion vornehmen möchten, können Sie ihr auch einen völlig anderen Namen geben.

  2. Beheben Sie den Fehler nur im Klon (und implementieren Sie alle anderen gewünschten Schnittstellenänderungen, während Sie gerade dabei sind).

  3. Deklarieren Sie die ursprüngliche Funktion als veraltet.

  4. Entfernen Sie die ursprüngliche Funktion in einigen kommenden Hauptversionen.

Dieser Ansatz ist besonders nützlich für Funktionen, deren Benutzeroberfläche grundlegend fehlerhaft ist: Sie brechen den Benutzercode nicht sofort auf, sondern Sie warnen jeden, der sich auf den fehlerhaften Code verlässt, um zur Verwendung des festen Codes überzugehen. Und selbst wenn die Leute die Warnung nicht beachten, können sie Ihnen nicht wirklich die Schuld geben, wenn Sie die defekte Funktion tatsächlich entfernen.


1
In diesem speziellen Fall kann die "kaputte" Funktion unbegrenzt weiterleben, da sie ein grundlegend anderes (und wertvolles) Verhalten bietet.
RubberDuck

Wie kann dieser Klon mit semantischer Versionierung besser als eine neue Hauptversion sein?
Kat

@ Mike Es verhindert, dass der gesamte Legacy-Code, der sich auf den Fehler stützt, beschädigt wird. Je nachdem, wie viel von diesem Code vorhanden ist, kann dies ein großer Vorteil sein. Wenn Sie den Benutzercode auf eine Weise auflösen, die für die Benutzer schwer zu beheben ist, wird Ihre neue Bibliotheksversion möglicherweise überhaupt nicht verwendet. Alle guten Dinge in Ihrer neuen Version wurden ignoriert, nur weil die Adoptionsschwelle zu hoch ist. Sie haben Ihre Benutzer an die alte Version angekettet. Wenn Sie die "Funktion" weiterhin bereitstellen, können die Benutzer sofort wechseln. Abhängig von Ihrer Mitteilung über die veraltete Version wird auch die veraltete Funktion vermieden.
cmaster

4

In diesem speziellen Fall handelt es sich um einen Fehler in einer API einer intern verwendeten Bibliothek, die andere Entwickler verwenden.

Wenn diese anderen Entwickler das Verhalten für ein Feature hielten, ist es wahrscheinlich, dass sie es verwendet und funktionierende Software darauf erstellt haben. Das Beheben des Fehlers wird wahrscheinlich den vorhandenen Code beschädigen und Sie dafür verantwortlich machen. Dies macht das Beheben des Fehlers zu einem Kompromiss, und Sie müssen darüber nachdenken

  • Ist es wirklich wichtig, den Fehler zu beheben, zum Beispiel, weil ein hohes Risiko besteht, dass Benutzer Ihrer API ihre Anwendungen zum Absturz bringen, falls der Fehler nicht behoben wird? Oder geht es nur um die Konsistenz der API?

  • Oder ist es wichtiger, die vorhandene Software stabil zu halten und Ihre Bibliothek abwärtskompatibel zu machen?

Die Antwort auf die Frage ist nicht immer einfach. Sie müssen die Anzahl der möglichen Benutzer Ihrer API berücksichtigen, den potenziellen Arbeitsaufwand, den sie für die Änderung ihrer Software benötigen, und die Menge der Software, die beim Ändern Ihrer API kaputt geht , sondern auch die Risiken, was passieren könnte, wenn Sie dies nicht tun die API reparieren.

Nur weil Sie die Bugfix-Änderung in einer "Liste der wichtigsten Änderungen in Ihrer nächsten Hauptversion" dokumentieren, sind Ihre Kunden nicht glücklich. Wenn Sie dies tun, sollten Sie zumindest einige Gründe für den Kugelsicherheitsnachweis angeben, warum Sie die API nicht so lassen könnten war vorher. Oft ist es wichtiger, die Abwärtskompatibilität beizubehalten, als einen Fehler zu beheben. Beheben Sie es also nur, wenn Sie die Auswirkungen auf Ihre Benutzerbasis und deren Software abschätzen können und Sie sicher sind, dass Sie keine unangemessenen Anstrengungen für sie unternehmen, wenn sie versuchen, auf Ihre neueste Bibliotheksversion zu aktualisieren. Und wenn Sie nicht über genügend Informationen verfügen, um eine gute Schätzung vorzunehmen, ist es wahrscheinlich besser, das Verhalten nicht zu ändern.

(Und ja, wenn Sie eine API-Änderung vornehmen möchten, die nicht abwärtskompatibel ist, müssen Ihre Versionsnummern dies klar ausdrücken, egal, ob Sie sie als "Bugfix" bezeichnen oder nicht.)


1

Umarme es. Es kann Ihr gesamtes Produkt machen.

GunZ: The Duel (ein Online-Spiel) hatte einen Fehler, den man ausnutzen und ständig missbrauchen konnte, um das gesamte Gameplay zu verändern (K-Style genannt; siehe YouTube). Es machte das ganze Spiel viel schwieriger; Es brauchte Geschick und machte es einfach unglaublich und unterhaltsam. So unterhaltsam, dass sogar die Moderatoren es offen als ihren Hauptspielstil verwendeten.
Das hat das Spiel gemacht.
Ich habe jahrelang nicht gespielt, aber bis heute ist es als Spieler eines meiner Lieblingsspiele aller Zeiten, weil es so fähigkeitsbasiert und einfach so lustig ist und all diese Großartigkeit nur wegen eines Fehlers.

Sie haben es schließlich behoben, aber die Leute hassten das so sehr, dass die Entwickler es ernsthaft zurückgepfiffen haben.

Also ist meine Antwort stabilisieren und pflegen (Refactor, wenn nötig).


Diese schöne Geschichte, die gesagt wird, ich denke nicht, dass die gleiche Antwort für alles gilt, das keinen direkten Vorteil hat. Wenn Ihr Fehler ein Ereignis verursacht, das den Vorteil verursacht, ist es normalerweise klüger, den Fehler zu beheben und einen anderen Weg zu finden, um das zu erreichen, was auch immer möglich ist. Wenn es außerhalb des Gültigkeitsbereichs liegt, sollten Sie es weglassen, um außerhalb des Gültigkeitsbereichs zu sein, oder ein anderes Modul (möglicherweise ein kleines) erstellen, um es einzuführen. Grundsätzlich gilt: Nicht gegen das Prinzip der Einzelverantwortung verstoßen .

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.