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.
quelle
Antworten:
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 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.
quelle
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 .
quelle
Da sich der Fehler in einer Bibliothek befindet, haben Sie folgende Möglichkeiten:
Machen Sie einen Klon der fehlerhaften Bibliotheksfunktion. In vielen Fällen wird
2
in 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.Beheben Sie den Fehler nur im Klon (und implementieren Sie alle anderen gewünschten Schnittstellenänderungen, während Sie gerade dabei sind).
Deklarieren Sie die ursprüngliche Funktion als veraltet.
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.
quelle
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.)
quelle
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 .
quelle