Wenn der Bug älter als 5 Jahre ist, ist er dann ein Feature? [geschlossen]

18

Erlauben Sie mir, Details hinzuzufügen: Ich arbeite an einem institutionellen Ort mit vielen Programmierern, Testern, QA-Analysten, Produktbesitzern usw. und hier ist etwas, das mich nervt:

Wir sind seit über einem Jahrzehnt in der Lage, beschissene (wenn auch ziemlich funktionale) Software zu verkaufen. Es hat viele Funktionen und das Produkt ist wettbewerbsfähig, aber es gibt einige schwerwiegende Fehler sowie Tausende von "Papierschnitten" - kleine Ärgernisse, an die sich Kunden gewöhnen müssen.

Es schmerzt mich, einige der Dinge zu betrachten, weil ich fest davon überzeugt bin, dass wir sie nicht benutzen sollten, wenn Computer nicht dazu beitragen, unser Leben zu erleichtern. Ich vertraue meinen Kollegen - sie sind klug, fähig und können Dinge verbessern, wenn der Fokus darauf liegt.

Es kann jedoch schwierig sein, Fehler gegen alte Funktionen zu melden, ohne dass diese geschlossen oder vergessen werden. "So hat es für Äonen geklappt" ist eine typische Antwort. Wenn QA eine Regression durchführt, neigen sie auch dazu, nach etwas zu suchen, das anders ist als alles, was nicht richtig erscheint. Ein Fix für ein altes Problem kann also als Bug geschrieben werden, weil "das schon vor meiner Zeit so war".

Der junge Programmierer in mir denkt: Schreiben Sie dieses verdammte Ding um! Als jemand, der die Möglichkeit hatte, vertriebsnahe Kunden zu sein, möchte ich diesem Ansatz zweifeln lassen.

Ich interessiere mich auch für Ihre Meinung / Erfahrung. Bitte versuchen Sie, das Risiko, das Kosten-Nutzen-Verhältnis und andere nichttechnische Faktoren zu berücksichtigen.

Job
quelle
2
Ich denke du meinst "... hat über Äonen so gearbeitet."
Zwiebelritter
Niemals umschreiben. Wenn es nicht auf sich selbst zusammenbricht (Sie können nicht mehr Dinge hinzufügen, die kaputt gehen), würden Sie mehr Bugs einführen, als es zu beheben, wenn Sie sich entschließen, (und auch die Zeit) neu zu schreiben
Wenn Sie jetzt keine Kunden verlieren, werden Sie es eines Tages tun. Irgendwann wird jemand die Leute davon überzeugen, dass ihre Software einfacher ist als Ihre. Jetzt sollten Sie das wahrscheinlich nicht selbst angehen. Dies ist ein Kulturwandel in Ihrem Unternehmen ... nichts, was Sie allein tun können oder sollten.
Brad

Antworten:

14

Ich fühle deinen Schmerz.

Aber etwas zu reparieren, nur weil es ein Fehler ist, ist kein guter Grund.

Sie müssen sicherstellen, dass Ihr Fix keinen anderen Code beschädigt (nicht nur Ihren, sondern auch den Code Ihres Kunden, der Ihren Code verwendet). Wenn Sie einen Fix herausbringen und dies jedes Kundensystem zerstört, werden Sie einige sehr verärgerte Kunden haben.

Es gibt viele berühmte Beispiele, in denen neuer Code geschrieben wurde, um ein altes System zu ersetzen. Wo sie die Funktionalität eines Fehlers im alten System explizit hinzufügen mussten, weil Benutzer von diesem Fehler abhängig waren (Ich werde keine Namen nennen, aber ich bin sicher, dass Sie es googeln können).

Regressionstests sind im Grunde genommen ein Test dessen, was Ihre Kunden erwarten. Stellen Sie vor dem Entfernen eines Regressionstests sicher, dass er niemanden verletzt (dies ist nahezu unmöglich). Wenn Sie einen Fehler beheben können UND die Regressionstests dadurch nicht unterbrochen werden, handelt es sich um eine echte Fehlerbehebung .

Martin York
quelle
Der Regressionstest-Teil ist wahr, vorausgesetzt, Sie kennen tatsächlich die angemessene Testabdeckung.
Pemdas
Wenn Sie dagegen eine GUI codieren, gibt es weniger Abhängigkeiten. Benutzer entwickeln sich leichter.
Matthieu M.
@ Matthieu M .: Auf jeden Fall. Es ist einfacher, Gewohnheiten zu ändern (solange Sie in das Reparieren von Gewohnheiten investieren), als (viele) automatisierte Systeme zu reparieren (die die meisten Leute im Hinterzimmer vergessen haben).
Martin York
3

Einige Dinge zu beachten, wenn Sie sich entscheiden, einen Fehler zu beheben ... in keiner Weise all-inclusive.

  • Ist es kritisch (das System stürzt ab)? ... klar werden diese behoben
  • Beschweren sich Kunden häufig darüber? Dies kann ein Fehler sein, der im Code enthalten ist, oder es kann sich um einen Anforderungsfehler handeln, beispielsweise, dass die Funktion nicht benutzerfreundlich ist oder anders funktioniert.
  • Ist es aus geschäftlicher Sicht vorteilhafter, den Fehler zu beheben oder eine neue Funktion zu implementieren?
  • Benötigt der Fehler wesentliche Änderungen in der Architektur oder befindet er sich in einem Teil des Systems, auf den andere Subsysteme stark angewiesen sind? Dies könnte sich drastisch auf die Testzeit auswirken und die zur Validierung des Fehlers erforderliche Testabdeckung verkomplizieren. Wenn es wirklich alt ist, ist es manchmal schwer zu verstehen, was sonst noch im System beeinflusst wird, indem der fehlerhafte Codeabschnitt geändert wird.
  • Verlieren Sie potenzielle Kunden aufgrund eines Buggy-Systems?
Pemdas
quelle
Potenzielle Kunden zu verlieren - das ist für mich und sogar für Vertrieb / Marketing schwer zu wissen, aber die Retentionsrate war hoch (obwohl die Kosten für den Wechsel auch hoch sind). Wahrscheinlich können Sie kaum wissen, ob Sie A besser können als B, es sei denn, Sie führen A / B-Tests ordnungsgemäß durch.
Job
1
Ich bin mir nicht sicher, wie dies in Ihrem Fall zutrifft, aber wir haben oft (einmal im Quartal) ein Treffen mit unseren Vertriebsingenieuren, um Fragen auf dem Gebiet zu besprechen, die sie daran gehindert haben, einen Verkauf zu tätigen. Dies könnte fehlende Funktionen beinhalten, oder aus Sicht der Benutzerinteraktion funktioniert etwas schlecht ... ect.
Pemdas
3

Fehler definieren. "Die angegebene Spezifikation ist nach Datum sortiert, aber nach Transaktionsbetrag" ist nicht unbedingt ein Fehler im Code. Es könnte sich um eine undokumentierte Änderung handeln - irgendwann wurde jemand gebeten, die Sortierreihenfolge zu ändern, aber die Spezifikation, die Anforderungen, das Handbuch (auch Schaltflächen und Beschriftungen auf der Benutzeroberfläche) wurden nicht entsprechend geändert, und es stört niemanden. Wenn Sie auftauchen und es auf "Nach Datum" zurücksetzen, wird dies zu Chaos führen, und wenn Sie die Benutzeroberfläche, die Spezifikation, das Handbuch usw. aktualisieren, verschwenden Sie im Grunde Ihre Zeit, mit der möglichen Ausnahme von ein bisschen "Theorie kaputter Fenster" . "

Einige Dinge sind offensichtlich Fehler. Wenn Sie auf diese Schaltfläche klicken, wird sie vergrößert. Oder wenn Sie montags auf diese Schaltfläche klicken, wird sie in die Luft gesprengt. Wenn Ihnen nicht jemand die Aufgabe übertragen hat, Zeit zu investieren, um zu verstehen, warum, können Sie eine Menge Mühe aufwenden, um nachzuforschen. Und wenn Sie einmal herausgefunden haben, warum, kann es sein, dass Sie es nicht ändern können, da dies etwas ruinieren würde, das für die Benutzer oder das Management wichtiger ist.

Wenn Sie "Schlamperei" feststellen - Speicherverluste, Code, der eindeutig einige Optimierungs-, Einrückungs- und Benennungskonventionen benötigt, die nicht mit Ihren übereinstimmen -, ist es sehr verlockend, sie eines Tages zu reparieren, wenn Sie nichts anderes zu tun haben oder in Ihrer Freizeit . Diese "Korrekturen" zerstören jedoch den Verlauf der Quellcodeverwaltung, und zwar zu einem geringen oder gar keinen Vorteil, wie zum Beispiel "Wir kompilieren dieses Modul nie, weil die in der Produktion verwendete Binärdatei aus verlorenem Code erstellt wurde und Sie ihn einfach überschrieben haben "und kann die Leute ernsthaft verärgern, deren" Fehler "Sie" beheben ".

Ich empfehle ein Einzelgespräch mit Ihrem Chef. Erklären Sie, was Sie stört - ist es der Codierungsstil, Dinge, die Benutzer sicher ärgern müssen, ungenaue Zahlen, Inkonsistenzen oder ein bevorstehendes Desaster? Dann nach dem Weg fragen und (das ist der Schlüssel) nehmen.

Kate Gregory
quelle
2

Wenn Sie einen alten Fehler beheben möchten, müssen Sie darauf achten, dass vorhandene Funktionen nicht beschädigt werden. Wenn es Unit-Tests gibt, ist dies einfacher, aber angesichts des implizierten Alters des Unternehmens und der Software existieren sie nicht. Ich würde empfehlen, das Buch Refactoring von Martin Fowler durchzuarbeiten, da es darum geht, wie man Fehler richtig umgestaltet und behebt, während man versucht, Nebenwirkungen zu minimieren. Ich würde auch empfehlen, dafür zu sorgen, dass die Firma in Ordnung ist, wenn Sie während der regulären Zeit alte Fehler durchgehen. Sie lassen Sie dies möglicherweise nur dann tun, wenn Sie dies außerhalb der Geschäftszeiten tun.

Wenn ein Fehler zu einer Funktion geworden ist, dh, er wird von den Clients tatsächlich verwendet, weil er etwas bereitstellt, stellen Sie sicher, dass Sie einen geeigneten Ersatz für das gewünschte Verhalten bereitstellen (oder dokumentieren Sie ihn einfach als Funktion anstelle eines Fehlers).

indyK1ng
quelle