Beheben Sie Fehler oder warten Sie, bis der Kunde sie gefunden hat?


35

Beheben andere Leute Fehler, wenn sie sie sehen, oder warten sie, bis es zu Abstürzen / Datenverlust / zum Tod kommt, bevor sie sie beheben?

Beispiel 1

 Customer customer = null;
 ...
 customer.Save();

Der Code ist eindeutig falsch und es führt kein Weg daran vorbei - er ruft eine Methode für eine Nullreferenz auf. Es kommt nicht zum Absturz, weil Saveauf keine Instanzdaten zugegriffen wird. Es ist also so, als würde man eine statische Funktion aufrufen. Aber jede kleine Änderung an einem beliebigen Ort kann plötzlich zu einem fehlerhaften Code führen, der nicht abstürzt.

Es ist aber auch nicht unvorstellbar, dass der Code korrigiert wird:

Customer customer = null;
...
customer = new Customer();
try
   ...
   customer.Save();
   ...
finally
   customer.Free();
end;

könnte einen Absturz einführen ; man nicht durch Unit-Tests mit vollständiger Abdeckung und manuelle Benutzertests entdeckt.

Beispiel 2

float speed = 0.5 * ((G * mass1 * mass2) / R) * Pow(time, 2);

Leute, die sich mit Physik auskennen, werden erkennen, dass es sich um R 2 im Nenner handelt.

Der Code ist falsch, es ist absolut falsch. Und wenn Sie die Geschwindigkeit überschätzen, werden die Retro-Raketen zu früh abgefeuert und alle Insassen des Raumfahrzeugs getötet.

Es ist aber auch möglich, dass die Geschwindigkeit überschätzt wird, was ein anderes Problem überdeckt: Die Airbags können nicht ausgelöst werden, während sich das Shuttle zu schnell bewegt. Wenn wir den Code plötzlich reparieren:

float speed = 0.5 * ((G * mass1 * mass2) / Pow(R, 2)) * Pow(time, 2);

Jetzt ist die Geschwindigkeit genau und plötzlich werden Airbags ausgelöst, wenn sie nicht sollten.

Beispiel 3

Hier ist ein Beispiel, das ich kürzlich hatte, um zu überprüfen, ob eine Zeichenfolge ungültige Zeichen enthält:

if (StrPos(Address, "PO BOX") >= 0)
{
   //Do something
}

Was ist, wenn sich herausstellt, dass es einen Fehler in der Do somethingBranche gibt? Behebung des offensichtlich falschen Codes:

if (StrPos("PO BOX", Address) >= 0)
{
   //Do something
}

Behebt den Code, führt aber einen Fehler ein.


Aus meiner Sicht gibt es zwei Möglichkeiten:

  • Korrigieren Sie den Code und lassen Sie sich beschuldigen, ihn gebrochen zu haben
  • Warten Sie, bis der Code abstürzt, und erhalten Sie die Schuld für einen Fehler

Was machst du politisch?


Beispiel 4 - Heutiger Fehler in der realen Welt

Ich konstruiere ein Objekt, rufe aber den falschen Konstruktor auf:

Customer customer = new Customer();

Es stellt sich heraus, dass der "parameterlose" Konstruktor tatsächlich ein parametrisierter Konstruktor von weiter hinten in der Vererbungskette ist:

public Customer(SomeObjectThatNobodyShouldBeUsingDirectly thingy = null)
public Customer(InjectedDependancy depends)

Das Aufrufen ist ein Fehler, da alle nachfolgenden Konstruktoren umgangen werden.

Ich könnte die Herkunft des Objekts ändern, um einen so gefährlichen Konstruktor nicht zu entlarven, aber jetzt muss ich den Code ändern in:

Customer customer = new Customer(depends);

Aber ich kann nicht garantieren, dass diese Änderung nichts kaputt macht. Wie mein Beispiel 1 oben, hängt vielleicht jemand, irgendwo, irgendwie, unter bestimmten esoterischen Bedingungen, davon ab, ob das Konstrukt Customerungültig und voll von Müll ist.

Vielleicht ermöglicht das CustomerObjekt, das jetzt ordnungsgemäß erstellt wurde , das Ausführen von Code, der zuvor noch nie ausgeführt wurde, und jetzt kann es zu einem Absturz kommen.

Ich kann das Leben Ihrer Frau nicht darauf wetten.

Und ich kann es von hier bis Dienstag testen. Ich kann nicht schwören, dass ich keine Regression eingeführt habe.

Mache ich:

  • Den Code reparieren und beschuldigt werden, ihn gebrochen zu haben? oder
  • Den Bug verlassen und beschuldigt werden, wenn der Kunde ihn findet?

33
Wenn Sie nicht bereit sind, etwas zu ändern, weil es etwas kaputt machen könnte, und wenn Sie sich nicht qualifiziert fühlen, zu prüfen, was in anderen Teilen des Codes passieren könnte, was tun Sie hier? Sind Sie an der Tastatur gelähmt, weil die Codezeile, die Sie schreiben möchten, möglicherweise falsch ist?
David Thornley

3
sicherlich eine gut recherchierte Frage
Muhammad Alkarouri

2
"Do Something" ist oft ein Aufruf an andere Funktionen, die Sie geschrieben haben, oder an Funktionen aus Bibliotheken. In beiden Fällen sollte der Code Unit-getestet worden sein. Die Prozedur selbst ist auch Unit-getestet, so dass die Wahrscheinlichkeit besteht, dass neue Fehler eingeführt werden, wenn Sie einen Fehler beheben. Wenn ich eine Brücke baue, würde ich diese zuerst in kleinerem Maßstab testen, anstatt Leute, die über die Brücke laufen, sterben zu lassen . Wenn Sie keine Komponententests durchführen, wenn Sie sich Sorgen über Fehler machen, machen Sie es falsch. In jedem Fall, in dem Sie das Problem beheben, wird Ihnen die Schuld gegeben. Anstatt es zu beheben, können Sie es verhindern und werden nicht dafür verantwortlich gemacht.
Tamara Wijsman

2
Warten Sie, bis die Leute sterben, bevor Sie es reparieren! Heilige Kuh, ich hoffe ernsthaft, es gibt nur eine Antwort auf diese ...
Chris Knight

3
Als Kommentar speziell zu einer Sache, die Sie gesagt haben: Sie wissen nicht, ob irgendwo anders im Code, sie stützen sich auf das esoterische Verhalten: also? Wenn jemand eine eindeutig falsche Regel als Hack in seinem Code missbraucht, ist sein Code FALSCH. Guter OOP hätte diesen Fehler verhindert, aber Sie haben das Problem nicht behoben, weil sie eine schlechte Praxis angewendet haben. Dies verstärkt das Problem, lässt es offen für weiteren Missbrauch und macht das System rundum instabiler. Beheben Sie den Fehler, hoffen Sie, dass das Testen Probleme behebt, und beheben Sie weitere Fehler, wenn dies nicht der Fall ist. Die Langzeitstabilität des Produkts ist eine wichtige Messgröße.
CodexArcanum

Antworten:


34

Dies hängt stark von der Situation, dem Fehler, dem Kunden und dem Unternehmen ab. Es gibt immer einen Kompromiss zwischen der Korrektur der Implementierung und der möglichen Einführung neuer Fehler.

Wenn ich eine allgemeine Richtlinie für die Festlegung der zu treffenden Maßnahmen geben würde, würde dies meiner Meinung nach in etwa so aussehen:

  1. Protokollieren Sie den Fehler im Tracking-System Ihrer Wahl. Besprechen Sie dies bei Bedarf mit der Geschäftsleitung / den Mitarbeitern.
  2. Wenn es sich um einen Defekt mit möglicherweise schwerwiegenden Folgen handelt (z. B. Ihr Beispiel Nr. 2), rennen Sie, schreien Sie, springen Sie auf und ab, bis eine autorisierte Person dies bemerkt, und ermitteln Sie eine geeignete Vorgehensweise, um die mit der Fehlerbehebung verbundenen Risiken zu mindern. Dies kann Ihr Veröffentlichungsdatum zurückschieben, Leben retten, Ihre Fenster waschen usw.
  3. Wenn es sich um einen nicht brechenden Fehler handelt oder eine Problemumgehung vorliegt, prüfen Sie, ob das Risiko einer Behebung den Nutzen der Behebung überwiegt. In manchen Situationen ist es besser, auf den Kunden zu warten, da Sie dann wissen, dass Sie keine Zeit damit verbringen, Dinge zu reparieren oder erneut zu testen, wenn dies nicht zu 100% erforderlich ist.

Dies gilt allerdings nur, wenn Sie kurz vor einer Veröffentlichung stehen. Wenn Sie sich im vollständigen Entwicklungsmodus befinden, protokolliere ich den Fehler einfach, damit er nachverfolgt, behoben und als erledigt bezeichnet werden kann. Wenn das Reparieren und Überprüfen länger als beispielsweise eine halbe Stunde dauert, gehe ich zum Manager / Teamleiter und überprüfe, ob der Fehler in den aktuellen Release-Zyklus passt oder für einen späteren Zeitpunkt geplant ist.


Sehr richtig. Aus diesem Grund haben (einige) Unternehmen technische Manager, Bug-Crawls usw., um Prioritäten zu setzen. Ich sage nicht, keine Initiative zu ergreifen - überhaupt nicht - aber Sie müssen ein gutes Urteilsvermögen verwenden. Die falsche Initiative zur falschen Zeit zu ergreifen heißt "eine lose Kanone sein" und kann eine Firma töten. Auch die Bedeutung eines bestimmten Fehlers variiert von Unternehmen zu Unternehmen. Bei einigen Programmen ist ein Tippfehler in einem Dialogfeld ein kosmetischer Fehler mit niedriger Priorität, der in einer zukünftigen Version behoben werden soll, und bei anderen Programmen handelt es sich um einen Schiffsstoppnotfall.
Bob Murphy

6
+1 für das Protokollieren des Fehlers. Andere Mängel können Priorität haben ...
SHug

35

Kunden werden IMMER Fehler finden . Es gibt keine versteckten Fehler vor Kunden. Am Ende werden die von Ihnen eingeführten Bugs immer wieder auf Sie zurückkommen. Sie nicht zu reparieren ist einfach eine schlechte professionelle Praxis. Profis machen das nicht.

Wenn Kunden Fehler finden, sieht das Unternehmen schlecht aus und kein einzelner Entwickler. Das ist viel schlimmer für das Unternehmen, also ist es Ihre Sache, die Änderung vorzunehmen. Wenn Sie sich wirklich nicht sicher sind, ob Sie diese Änderung vornehmen können, weil Sie andere Fehler befürchten, sprechen Sie mit einem erfahreneren Entwickler, einem technischen Projektleiter oder einem anderen Mitarbeiter, der in der Lage ist, eine Entscheidung über eine solche Änderung zu treffen und anschließend die Konsequenzen zu bewältigen.


2
Das ist eine traurige Wahrheit. Wir mussten ein Projekt liefern, das wir wie verrückt getestet haben, und dennoch gelang es dem Kunden, es innerhalb von 3 Minuten zum Absturz zu bringen.
Oliver Weiler

4
@ Helper-Methode: Vielleicht wäre es besser gewesen, wenn du es wie gesunde Menschen getestet hättest.
Vinko Vrsalovic

@Helper-Methode: Wenn es aber wirklich drei Minuten sind, dann scheinen die Tester nicht zu wissen, was die tatsächlichen Anwendungsfälle sind, die vom Kunden erwartet werden.
Vinko Vrsalovic

8
@ Helper-Methode: Binden Sie den Kunden in das Testen ein (unter der Annahme von customer == client). Entwickler, die Code schreiben und testen, haben Probleme, da Entwickler Software nicht auf die gleiche Weise verwenden. Entwickler sind sanft. Es ist ihre Arbeit - ihre Kunst: Kunden schlagen darauf wie ein Affe auf einem Panio. Wenn möglich, teilen Sie den Testaufwand mit der Verantwortung. Dies passt nicht in jedes Umfeld, aber die Zusammenarbeit mit Kunden als Team und nicht mit Beratern kann zu einer besseren Software führen.
Brian Chandley

Äh, schlechter? (Füller)
Hallo71

24

Beheben Sie den Fehler

Wir sind Profis hier. Wenn Sie im Code einen fehlerhaften Pfad finden, der einen Absturz oder ein falsches Verhalten verursacht, müssen Sie ihn beheben. Abhängig von den Vorgehensweisen Ihres Teams müssen Sie wahrscheinlich einen Defekt einreichen, möglicherweise einen Regressionstest schreiben und den Fix zum richtigen Zeitpunkt des Schiffszyklus einchecken. Wenn es sich um einen Fehler mit niedriger Priorität handelt, ist das Einchecken des Fixes am Anfang eines Meilensteins immer eine gute Zeit, da Sie den Veröffentlichungszyklus des Meilensteins nicht beeinflussen, wenn Sie eine Regression verursachen.

Verwechseln Sie dies nicht mit Umgestaltungen oder Leistungsverbesserungen, die nicht mit einem Leistungsfehler zusammenhängen.

Ein verteiltes Versionsverwaltungssystem, in dem Sie ein separates Repository mit 'kleinen Fehlerkorrekturen' aufbewahren und dann zu Beginn eines Meilensteins problemlos zusammenführen können, ist hier eine große Hilfe.


4
+1. Repariere es. Wenn der Fix etwas anderes kaputt macht, dann war dieser sowieso kaputt - reparieren Sie ihn auch. Wenn Ihre Tests diese Brüche nicht erkennen, sind Ihre Tests auch nicht erfolgreich - beheben Sie dies ebenfalls. Sie können sich nicht davor fürchten, den Code zu ändern, weil Sie befürchten, etwas zu brechen - diese Straße führt nur zum völligen Ruin.
Tom Anderson

21

Was würde der Kunde sagen?

So stelle ich mir das vor:

Kunde: Es stürzt ab, wenn ich x mache.

Programmierer: Oh ja! Ich erinnere mich, dass ich das vor einiger Zeit gesehen habe. Ich dachte, es sei noch keine große Sache, also habe ich es dort gelassen.

Kunde: [greift nach stumpfem Gegenstand]

Ja. Beheben Sie den Fehler. Sie ersparen dem Kunden ein erschwerendes Erlebnis und müssen es beheben, bevor es zum Notfall wird.

Und wenn Sie glauben, dass Ihr Fix tatsächlich zu einem Absturz führen könnte, haben Sie noch keinen Fix gefunden.


8

Alle Beispiele, die Sie angegeben haben, scheinen einen gemeinsamen Thread zu haben. Sie scheinen einen Fehler beheben zu wollen, den Sie nicht vollständig verstehen. Ich sage das, weil Sie die Möglichkeit unbeabsichtigter Konsequenzen für jeden einzelnen zur Kenntnis nehmen.

Ich würde sagen, es ist wahrscheinlich ein großer Fehler, und während Ben Laurie schreibt , behebe keinen Fehler, den du nicht verstehst . In diesem berühmten Beispiel hat das Debian-Team die Verschlüsselung für OpenSSL für Debian und Derivate wie Ubuntu gebrochen, als sie die Ergebnisse eines Analyse-Tools verfolgten.

Wenn Sie glauben, dass ein Fehler vorliegt, überprüfen Sie anhand des Codes, ob Sie den Fehler auf eine Weise reproduzieren können, die der Kunde sehen kann. Wenn Sie nicht in der Lage sind, Ihre Ressourcen für die Reparatur von etwas anderem aufzuwenden, warum nicht?


7

Beginnen Sie, Ihre technischen Schulden so schnell wie möglich abzubauen .

Ihre Beispiele sehen definitiv wie Legacy-Code aus , haben viele technische Schulden und ich spüre, dass es die Angst vor Veränderungen gibt (übrigens, dies ist keine Kritik oder ein Urteil). Ihr gesamtes Team muss anerkennen, dass Sie diese technische Schuld haben (damit Sie nicht allein dafür verantwortlich gemacht werden), und dann können Sie entscheiden, wie Sie damit umgehen.

Wenn in Beispiel 1 Save()nicht auf Instanzdaten zugegriffen wird, welche Kundendaten werden genau gespeichert? Beginnen Sie, das zu beheben und zu testen.

In Beispiel 2 ist es einfach, den Geschwindigkeitsrechner mit Tests zu belegen und sicherzustellen, dass das Ergebnis in allen wichtigen Beispielen korrekt berechnet wird.

In Beispiel 3 besteht die Gefahr, dass toter Code wieder zum Leben erweckt wird. Sollte dieser Code insgesamt beseitigt werden? Was ist die Absicht der Booleschen Bedingung, wenn? Soll sichergestellt werden, dass die Zeichenfolge keine ungültigen Zeichen enthält? Oder um sicherzustellen, dass es "PO BOX" enthält? Je früher Sie beginnen, solche Fragen zu beantworten, desto besser.

Nachdem Sie eine Reihe solcher Probleme behoben haben, führen Sie eine Art Retrospektive / Post-Mortem mit Ihrem Team durch. Es ist wichtig, aus den Erfahrungen zu lernen, damit Sie Ihre Defektinjektionsrate in Zukunft reduzieren können.


5

Sie haben bereits gute Antworten. Ich möchte nur etwas über das Problem hinzufügen, Angst zu haben, dass etwas abstürzt.

Erstens ist die Software im Idealfall modular aufgebaut, richtig aufgebaut und es besteht eine gute Trennung der Anliegen. In diesem Fall werden die von Ihnen vorgenommenen Änderungen höchstwahrscheinlich nichts kaputtmachen, da Sie die Kontrolle über den gesamten zugehörigen Code haben und es keine versteckten Überraschungen gibt.

Leider ist die ideale Situation fiktiv. Unabhängig davon, inwieweit die Kupplung locker ist, kommt es zu einer Kupplung und damit zu einem Bruch von etwas anderem.

Die Lösung hierfür ist zweifach:

  1. Machen Sie den Code so gut wie möglich strukturiert.
  2. Wenn der Code so isoliert ist, dass Sie wissen, dass sonst nichts kaputt geht, beheben Sie ihn.

Um den Code gut zu strukturieren, muss nicht der gesamte Code auf ein neues Architekturdesign umgeschrieben werden. Das von Tests geleitete Refactoring ist hier Ihr Freund. In diesem Schritt ändern Sie die Funktionalität nicht.

Der zweite Schritt ist, dass Sie den Fehler beheben.

Einige Punkte sind relevant:

  1. Versionskontrolle ist für diesen Vorgang unbedingt erforderlich.
  2. Der Refactoring-Schritt und der Bugfixing-Schritt sind besser auf die Versionskontrolle als separate Commits festgelegt, sodass jeder eine genau definierte historische Funktionalität hat.
  3. Fixieren Sie nicht die Möglichkeit, einen weiteren Fehler zu machen, Sie werden nichts erledigen. Denken Sie lieber daran, Ihren Code zu verbessern. Mit anderen Worten, wenn Sie nicht wissen, dass Sie die Anzahl der Fehler erhöhen, anstatt sie zu verringern, sollten Sie dies tun.
  4. Bezogen auf den letzten Punkt: Versuchen Sie nicht, die Zukunft vorherzusagen. Die Menschen sind voreingenommen, wenn sie glauben, dass sie sehr gut in der Vorhersage sind. In Wirklichkeit sind unsere Vorhersagekräfte kurzfristig. Machen Sie sich also keine Sorgen über einen vagen undefinierten zukünftigen Fehler. Dies ist auch das Prinzip von YAGNI .
  5. Das entsprechende Werkzeug zur Versionskontrolle in der Bug-Welt ist der Bug-Tracker . Das wirst du auch brauchen.
  6. Sie müssen Fehler aus zwei Gründen beheben: um den Kunden zufrieden zu stellen; und um in Ihrer Entwicklung voranzukommen. Um Beispiel 3 (das physikalische) zu verwenden: Wenn das Programm den Kunden mit einer solchen fehlerhaften Gleichung zufriedenstellt, gibt es viele andere Teile der Software, die falsch entwickelt wurden, um diesen Fehler zu mindern (zum Beispiel die Airbag-Auslösung). Wenn für diese Software eine Version 2 (oder 1.1) erforderlich ist, wird es immer schwieriger, richtigen Code auf der Grundlage dieses fehlerhaften Codes zu entwickeln. Sie steuern dann entweder zum großen Umschreiben oder zum großen Scheitern. Beides sollten Sie vermeiden.

Das sind schon mehr als ein paar Punkte, also werde ich hier wohl aufhören.


3

Sie müssen zuerst die Definition eines Fehlers berücksichtigen:

  1. Der gelesene Code stimmt nicht mit dem überein, was Sie für richtig halten
  2. Die Software führt ihre Aufgaben nicht ordnungsgemäß aus

Sie scheinen sich auf # 1 zu konzentrieren, wo # 2 der beste Platz zum Sitzen ist. Sicher, wir Programmierer möchten, dass unser Code stimmt (Nr. 1), aber die Leute bezahlen uns dafür, dass er funktioniert (Nr. 2).

Was Sie möglicherweise mit der Codebasis machen oder nicht, das könnte versehentlich neue Fehler hervorrufen, ist für die Ansicht von Nummer 2 der aktuellen Software irrelevant. Die Nummer 1 ist jedoch für Sie selbst oder den nachfolgenden Wartungsprogrammierer von Bedeutung. Es ist manchmal schwierig, sich zu entscheiden, aber wenn es zu Konflikten zwischen # 2 und # 1 kommt, muss man wissen, dass # 2 eindeutig wichtiger ist.


2

Weder. Es gibt einen dritten Weg: Finden Sie einen Weg, um zu beweisen, dass "der problematische Code" tatsächlich Probleme aus geschäftlicher Sicht verursacht. Bestätigen Sie, was Sie mit BA / QA oder mindestens Ihrem Manager finden. Planen Sie dann den Fix, wenn allen das Problem bekannt ist.

In den von Ihnen genannten Fällen gibt es mehr mögliche Szenarien als einen gültigen Fehler:

  1. Der Code, den Sie sehen, ist ein toter Code. Möglicherweise, weil ysolik sagte: Kunden finden immer Fehler. Andernfalls wird der Code möglicherweise nie ausgeführt.
  2. Es gab eine WTF-Situation, in der der offensichtliche Fehler seinen Zweck hatte. (Wir sprechen über Produktionscode, alles hätte passieren können, oder?)
  3. Unternehmen / Kunden wussten bereits über das Problem Bescheid, sehen jedoch keine Notwendigkeit, es zu beheben.
  4. Vielleicht mehr...

Wenn ich ein Manager bin, möchte ich auf keinen Fall, dass ein Entwickler sein Urteilsvermögen einsetzt und den "Fehler" behoben. Das Beheben des Fehlers kann in den meisten Fällen Abhilfe schaffen, aber wenn ein Fehler auftritt, kann dies mehr Probleme verursachen als die guten Absichten.


1
Wenn Sie nur Entwickler einstellen möchten, die nicht nach eigenem Ermessen arbeiten, gibt es viele wirklich mittelmäßige für Sie. Sie werden Schwierigkeiten haben, wirklich gute Leute einzustellen, die ein gewisses Vertrauen in ihre Fähigkeiten haben.
David Thornley

1
@ David: erweitere meine Meinung nicht auf ein unangemessenes Maß. Entwickler brauchen definitiv ihr Urteilsvermögen, aber es sollte eine Grenze geben. In diesem Fall können Entwickler nach eigenem Ermessen einen potenziellen Fehler erkennen und weitere Schritte unternehmen, um diesen zu beheben.
Codism

2

Mache ich:

  • den Code reparieren und beschuldigt werden, ihn gebrochen zu haben? oder
  • den Bug verlassen und beschuldigt werden, wenn der Kunde ihn findet?

Sie beheben den Fehler und starten die Komponententests und checken Ihren Fix ein, wenn sie erfolgreich sind.

(Wenn Ihre Komponententests sehr lange dauern, überprüfen Sie zuerst Ihren Fix und warten dann, ob Ihr CI-Tool Ihnen eine E-Mail sendet, weil Ihr Commit etwas gebrochen hat.)


1
Wenn Sie einen mit einem Gatter versehenen Check-in verwenden, richten Sie diesen ein, damit Sie keinen fehlerhaften Code einchecken.
Adam Lear

3
Es ist keine Entschuldigung, sich lange Zeit zu nehmen, um schlechten Code zu schreiben.
Toby

@Toby: Wer hat über Ausreden gesprochen? Ich arbeite derzeit in einem kleinen Team, nicht einmal ein halbes Dutzend Entwickler. Die Unit-Tests für das Projekt dauern 1 Stunde. Unsere Politik ist es, die Tests auszuführen, die mit dem, was Sie tun, in Zusammenhang zu stehen scheinen, und dann einzuchecken und CI herauszufinden, ob Sie etwas gebrochen haben, das scheinbar nichts mit Ihnen zu tun hat. Das würde in einem großen Team nicht funktionieren, aber in einem kleinen spart es viel Zeit.
sbi

1

Beheben Sie sie, wenn es sich um Absturz- / Datenverlust-Fehler handelt. Das Versenden eines Programms mit einem bekannten Datenverlust-Fehler ist ausgesprochen böswillig und unentschuldbar.

Wenn der Fehler kosmetisch oder nicht kritisch ist (vermieden werden kann), sollte er dokumentiert und eine Problemumgehung bereitgestellt werden. Idealerweise sollte es repariert werden, aber manchmal ist es zu teuer, es für die aktuelle Version zu reparieren.

Beachten Sie, dass jedes größere Softwareprojekt in der ReadMe-Datei den Abschnitt „Bekannte Probleme“ enthält, in dem normalerweise genau Folgendes aufgeführt ist: Bekannte Fehler.

Bugs zu kennen und NICHT mitzuteilen ist meiner Meinung nach nur für wirklich kleinere / kosmetische Bugs akzeptabel.


1

Repariere es und lass es testen. Wenn Sie sich entscheiden, bekannte Fehler beizubehalten, nur weil Sie Angst haben, mehr Fehler zu finden, wird Ihr Programm zu einem Minenfeld von tickenden Zeitbomben, die so schnell sind, dass sie schneller nicht mehr reparabel sind, als Sie denken.

Da Sie der Master und der Code der Untergebene sind, haben Sie möglicherweise keine Angst, ihn zu ändern, wenn Sie sehen, dass er falsch ist. Die Angst vor dem Code ("es könnte sich rächen, wenn es woanders kaputt geht") ist einfach inakzeptabel.


0

Wenn es eindeutig einen Crasher gibt oder etwas nicht stimmt , sollten Sie ihn beheben. Wenn die Spezifikation mehrdeutig ist, dh wenn Sie der Meinung sind, dass "der Kunde dies gut erwartet", wird dies möglicherweise der Fall sein ein Fehler sein“ oder ein Problem in der Spezifikation, wie „wir haben gefragt , dies zu tun aber es ist scheiße "dann musst du herausfinden, was zu tun ist. Es ist schlecht, den Code über die Wand zu werfen und auf Kundenfeedback zu warten. Möglicherweise fragen Sie einen Produktmanager, ob Sie einen haben, oder fragen Sie den Kunden, bevor Sie das Produkt bereitstellen.

Denken Sie daran: "Wir kennen dieses Problem und werden es in einer zukünftigen Version beheben" ist gleichbedeutend mit "Wir kennen dieses Problem, aber kümmern uns nicht genug um Sie, um zu vermeiden, dass Sie sich damit befassen".


0

Die richtige Vorgehensweise besteht weder darin, den Fehler zu ignorieren, noch ihn vor Ort zu "reparieren". aus genau den Gründen, die Sie in Ihrer Frage identifiziert haben.

Ich denke, Sie sollten zuerst versuchen, den Code zu verstehen . Wenn der Code, den Sie sehen, in einem gewissen Alter ist und noch niemand den "Bug" bemerkt hat, gibt es wahrscheinlich einen Grund dafür. Versuchen Sie diesen Grund zu finden. Folgendes möchte ich mir ansehen, bevor ich eine Entscheidung treffe:

  • Verlauf : Beantworten Sie die Fragen mit Ihrer Versionskontrollsoftware: Wer hat den Code berührt? Was haben sie geändert? Und mit welchen Commit-Nachrichten haben sie es eingecheckt? Können Sie einen Grund ableiten, warum der Code so aussieht?

  • Verwendung : Welcher Code verwendet den fehlerhaften Code? Und wie? Ist der Code tot? Gibt es einen anderen Code, der auf dem fehlerhaften Verhalten beruht?

  • Autor : Wenn Sie mit den obigen Informationen nicht schnell zu einer Schlussfolgerung gelangen können, fragen Sie den Autor des Codes (zumindest, wenn dies möglich ist), warum der Code so aussieht, wie er aussieht. Normalerweise bekommst du entweder ein "Oups, das sollte behoben sein!" oder ein "Nein! Verändere es nicht !!! Es wird so gebraucht!" jetzt sofort.

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.