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.
Antworten:
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 .
quelle
Einige Dinge zu beachten, wenn Sie sich entscheiden, einen Fehler zu beheben ... in keiner Weise all-inclusive.
quelle
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.
quelle
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).
quelle