Verantwortung für die Reproduktion von Fehlern

25

Ich entwickle ein Programm mit einer Bibliothek, die von einem anderen Programmierer erstellt wurde (er arbeitet in derselben Firma). Vor kurzem habe ich ein Leck in der Bibliothek entdeckt, das unter bestimmten Netzwerkbedingungen nach einigen Betriebsstunden auftritt. Ich habe einen Fehler mit einer Beschreibung der Bedingungen gemeldet, unter denen dieses Leck auftreten kann. Dieser Entwickler antwortete, dass "das nicht genug ist", "es nicht seine Verantwortung ist, Fehler zu reproduzieren", und ich muss einen Komponententest erstellen, um diesen Fehler zu reproduzieren, sonst macht er nichts.

  1. Hat er recht
  2. Was kann ich in dieser Situation tun? Das Erstellen eines Komponententests ist nicht möglich, da dies von zufälligen Netzwerkzeiten abhängt.
user626528
quelle
26
Wenn Sie den Komponententest schreiben, können Sie den Fehler genauso gut beheben und das Ganze gutschreiben.
JeffO
3
@ JeffO, er verwaltet diese Bibliothek und akzeptiert keine Bugfixes. Weil "er nicht überzeugt ist, dass der Fehler jemals existiert hat"
user626528
Ist es möglich, dass der Bibliotheksbetreuer einem Team angehört, dessen Richtlinien lauten, dass Fehler ohne automatisierte Tests nicht akzeptiert werden? Ich habe auch gehört, dass der Begriff Komponententest darüber gestritten wurde, wann tatsächlich irgendeine Form von automatisiertem Test erwartet wird, insbesondere für einen Integrationstest.
Joshua Drake

Antworten:

30

Ist er richtig ist wahrscheinlich eine Frage, die nicht wirklich beantwortet werden kann, ohne Ihr Unternehmen zu kennen. Er ist jedoch sicherlich nicht sehr hilfreich.

Ich würde den Fehler bei ihm ansprechen (was Sie getan haben). Wenn er ein Problem mit Ihrem Projekt verursacht, würde ich ihn als Blocker bei Ihrem Projektmanager ansprechen und klarstellen, dass Sie den Fehler mit "angemessen" angesprochen haben Person, aber es wird Ihr Projekt auswirken, wenn es nicht sofort behoben wird.

Ich würde auch mit dem Entwickler sprechen und erklären, warum es unmöglich ist, Komponententests zu erstellen, aber Sie würden ihn gerne auf Ihrem Computer zeigen (vorausgesetzt, das ist möglich?).

Michael
quelle
48

Er hat zu 100% Recht, dass Sie genügend Informationen bereitstellen müssen, um den Fehler reproduzierbar zu machen - andernfalls besteht keine Chance herauszufinden, ob eine von ihm bereitgestellte Korrektur wirklich funktioniert.

Aber - er ist meiner Meinung nach zu 100% falsch, dass dies in Form eines Unit-Tests erfolgen muss. Wenn Sie ein Testszenario so beschreiben können, dass er den Fehler reproduzieren kann (zumindest mit hoher Wahrscheinlichkeit in angemessener Zeit oder durch manuelles Testen), haben Sie den Beweis, dass das Problem vorliegt - was Ihren Kollegen veranlassen sollte in der Verantwortung, es zu beheben. Wenn Sie in der Lage sind, ein Szenario zu erstellen, das den Fehler schneller reproduziert, wäre das natürlich hilfreich für ihn. Im Idealfall würde man daraus einen automatisierten Test machen, und es hängt von Ihrer Organisation ab, wer dafür verantwortlich ist.

Doc Brown
quelle
11
Wenn eine App "ab und zu" ohne erkennbares Muster für den Benutzer abstürzt, muss der Entwickler sie nicht reparieren, da der Benutzer sie nicht auf Befehl reproduzieren kann? Ich bin hier
absolut
20
@Heinzi: Wenn ich einen Fehlerbericht bekomme "App stürzt ab und zu ab", würde ich diesem Problem auch eine sehr niedrige Priorität einräumen, um daran zu arbeiten. Ich erwarte, dass der Benutzer mindestens aufschreibt, wie oft "ab und zu", was er genau mit der Anwendung tat, als die App das letzte Mal abgestürzt ist, und die genaue Fehlermeldung.
Doc Brown
3
@ user626528: IMHO sollte der Bibliotheksbesitzer versuchen, die Schritte zu durchlaufen, die Sie ihm sagen, um den Fehler zu reproduzieren. Er sollte nicht 500 leicht unterschiedliche Szenarien ausprobieren, wenn in Ihrer Beschreibung kein Fehler angezeigt wird.
Doc Brown
6
Der Reporter sollte keine Reproduktionsschritte vorsehen müssen; Häufig hängen wir einfach einen Speicherauszug aus dem abgestürzten Prozess an, insbesondere wenn er während eines automatisierten Laufs auftritt. Es liegt in der Verantwortung des Rechtsnachfolgers, Reproduktionsschritte zu finden, damit der Fix überprüft werden kann.
Avakar
2
(Das bedeutet nicht, dass der Reporter nicht versuchen sollte, hilfreich zu sein und die Schritte bereitzustellen, wenn er sie kennt. Bei sporadischen Abstürzen ist der Reporter jedoch nicht verpflichtet, Zeit für die Suche nach etwas zu investieren, das der Komponentenbesitzer wahrscheinlich schneller herausfinden wird. )
10.
9

Beide Seiten sollten sich anstrengen.

Bibliotheksentwickler sollten auch ohne Unit-Tests zusätzliche Anstrengungen unternehmen, da einige Probleme mit Unit-Tests nicht reproduziert werden können. Manchmal ist es Hardware, manchmal ist es eine bestimmte Abfolge von korrekten Aktionen aus dem Rest des Programms, die dazu führen, dass die Bibliothek schlechte Ergebnisse liefert.

Sie sollten zusätzliche Anstrengungen unternehmen, da dies kein Fehler in der Bibliothek ist, sondern das Ergebnis falscher Aktionen des restlichen Programms ist (z. B. kann ein beschädigter Heap dazu führen, dass sich eine Bibliothek merkwürdig verhält). Daher ist es sinnvoll, den Anteil von Nicht-Bibliotheks-Code an der Fehlerreproduktion so gering wie möglich zu halten. Und Sie werden dies wahrscheinlich schneller und sauberer tun als eine Person, die mit dem Code Ihrer Anwendung nicht vertraut ist.

maxim1000
quelle
5

Wenn der Autor der Bibliothek den Fehler basierend auf Ihrem Bericht nicht reproduzieren kann, ist es nicht zumutbar, dass er viel Zeit damit verbringt, geschweige denn, ihn zu beheben.

Sie haben jedoch auch eine begrenzte Zeit, um an einem Produkt zu arbeiten, das für Sie nicht von Interesse ist. Leider kann dies bedeuten, dass der Fehler weiterhin besteht und keine Arbeit zur Behebung des Fehlers geleistet wird.

Glücklicherweise ist dies nicht unbedingt eine Katastrophe - in einer idealen Welt wäre jede Software fehlerfrei, das ist jedoch nicht der Fall, und wir müssen Prioritäten setzen, basierend auf den Problemen, die sie in den USA verursacht.

Dies bedeutet, dass es in der Tat Ihre Verantwortung ist, einen reproduzierbaren Testfall zu entwickeln, WENN SIE FESTGELEGT WOLLEN. Es ist Ihnen vielleicht egal, ob es behoben wird, und in diesem Fall haben Sie alles getan, was von Ihnen erwartet werden kann und sollte. Möglicherweise möchten Sie, dass es repariert wird, aber nicht genug Zeit aufgewendet wird, um es zu diesem Zeitpunkt reproduzierbar zu machen. Das ist durchaus akzeptabel.

Wenn Sie einen Fehler in der Zeit, in der Sie sich mit ihm befassen müssen, nach besten Kräften melden, ist dies einfach eine gute Staatsbürgerschaft. Sie müssen nicht darüber hinausgehen, es sei denn, dies ist für Ihr Programm erforderlich. Und vielleicht möchten Sie dies auch dann nicht, es gibt möglicherweise eine andere Bibliothek, die Sie verwenden könnten, oder es ist möglich, Ihre eigene in einem angemessenen Zeitraum zu rollen. Grundsätzlich liegt es an Ihnen, zu entscheiden, was und welche Anstrengungen es für Sie wert ist.

jmoreno
quelle
1
Deine Antwort sieht für mich sehr seltsam aus. Ich behebe meine Fehler selbst und warte nicht darauf, dass jemand anstelle von mir Drecksarbeit leistet. Ich würde sagen, es ist die Hauptverantwortung des Codeautors, sein Bestes zu geben, um seinen Code zu reparieren.
user626528
1
Da SIE derjenige sind, der es jetzt reparieren lassen möchte, liegt es in Ihrer Verantwortung, ihn davon zu überzeugen, dass es SEINE Zeit wert ist, es jetzt zu reparieren, anstatt in 10 oder 12 Jahren, wenn er nichts Wichtigeres zu reparieren hat. theregister.co.uk/2013/01/21/kde_bug_quashed . Angesichts eines nicht reproduzierbaren Fehlers mit der Bedeutung X und eines reproduzierbaren Fehlers mit der gleichen Bedeutung werde ich jedes Mal an dem reproduzierbaren Fehler arbeiten.
Jmoreno
zu viel Ego. Er wird dafür bezahlt , an dieser verdammten Bibliothek zu arbeiten.
User626528
1
@ user626528: Es geht nicht um das Ego, es geht um Prioritäten - die Unfähigkeit, einen Bug niedriger zu reproduzieren, ist seine Priorität. Bei zwei EOI-Fehlern (Execute Operator Immediately), einem reproduzierbaren und einem nicht, würde ich an dem Fehler arbeiten, der zuerst reproduziert werden kann, und ich würde jedem anderen Entwickler anweisen, dasselbe zu tun. Und wenn die Bibliothek nicht so häufig genutzt wird, arbeite ich möglicherweise komplett an einem anderen Projekt - auch wenn die darin enthaltenen Fehler nicht so bedeutend sind. Wenn er / nur / dafür bezahlt wird, an dieser Bibliothek zu arbeiten UND es keine ausstehenden Feature Requests oder Bugs außer diesem gibt, dann sollte er es einfach tun.
Jmoreno
2

Ich wäre geneigt, schlafende Hunde vorerst liegen zu lassen - Sie haben das Problem angesprochen und es ist ihm zugewiesen. Vermutlich gibt es Prozesse, um ausstehende Fehler aufzuspüren und diese aufzuspüren?

Wenn Sie dies aktiv vorantreiben möchten, sollten Sie mit Ihrem Vorgesetzten sprechen, um festzustellen, ob Testtools verfügbar sind, mit denen das Problem zuverlässig reproduziert werden kann.

Von Seiten des Entwicklers - es wäre für ihn äußerst träge, nichts zu unternehmen, vorausgesetzt, Sie haben die erforderlichen Informationen bereitgestellt. Es ist jedoch möglich, dass sie eine enorme Arbeitsbelastung haben, sodass sie nicht die erforderliche Zeit verwenden können, um das Problem zu verfolgen.

Robbie Dee
quelle
2

Du hast einen Fehler gefunden, du hast ihn gemeldet und er ist ein Idiot.

Wären Sie beide enge Freunde gewesen, hätte er etwas getan, um zu helfen, aber er würde das Problem lieber zurückschieben.

Sie können mehr tun, indem Sie mehr Details melden und versuchen, Ihre Behauptungen zu untermauern, dass Speicherplatz verloren geht. Trotzdem haben Sie Ihre eigenen Aufgaben und müssen Ihre eigene Arbeit beenden.

Melden Sie so viele Informationen wie möglich im Bug-Tracker an und fahren Sie fort.

Wenn Sie diese Person in Zukunft wiedersehen. Sei freundlich, versuche über gemeinsame Interessen zu sprechen und verstehe, dass gute Beziehungen weitaus effektiver sind, um Dinge zu reparieren, als jede Menge Fakten, die du zur Unterstützung einer Behauptung zur Verfügung stellen kannst.

Reactgular
quelle
Ich habe ein gewisses Mitgefühl mit dem Bibliotheksentwickler. Möglicherweise besteht ihr Standpunkt darin, dass der Anwendungsentwickler versucht, die Bibliothek zu verwenden, und sie mit ihrem Code zum Absturz gebracht hat. Es wird weder in freier Wildbahn noch von anderen Entwicklern gemeldet, daher handelt es sich um einen Fehler mit relativ niedriger Priorität (oder um einen falschen Fehler).
Robbie Dee
@RobbieDee Ja, das war nicht meine beste Antwort. Ich fand es nur seltsam, dass die beiden nicht zusammenarbeiten konnten, da sie für dasselbe Unternehmen arbeiteten. Ich meine, wenn der Geschäftsinhaber hörte, dass ein Angestellter hierher kommen musste, um Unterstützung zu bekommen. Ich frage mich, was er davon halten würde. Es ist nicht so, wie ich möchte, dass etwas an meiner Stelle läuft.
Reactgular
0

In ähnlichen Situationen bin ich oft auf die Annahme gestoßen, dass alle Fehler behoben werden sollten, und obwohl dies bewundernswert ist, ist es auf jeden Fall ein großartiges Ziel (seien wir ehrlich, wir haben uns nie vorgenommen, Fehler zu schreiben!), In dem es letztendlich unrealistisch ist Jedes Projekt mit einer anständigen Größe, um einen Fehler zu beheben, nur weil es ein Fehler ist (wenn Sie ihn finden können!) Deshalb haben wir Projektmanagement- und Codierungsmethoden, -muster und -praktiken usw.

Also, eine Sache, die ich zur Verteidigung des Bibliotheksbesitzers sagen würde (und die der Fall war, als ich an einigen großen Projekten gearbeitet habe), ist, dass Entwicklungszeit Geld kostet und eine begrenzte Ressource ist, so dass die Entscheidung darüber, wie ein Bericht behandelt wird Wer untersucht, welche Tests erstellt / benötigt werden und letztendlich, ob (und wenn ja, wann) eine Korrektur vorgenommen wird, basiert ausschließlich auf den geschäftlichen Auswirkungen. Was bedeutet es, wenn Sie Ihren lang laufenden Prozess von Zeit zu Zeit neu starten, wenn er fehlschlägt, und können Sie dies stattdessen problemlos automatisieren (und sollten Sie dies vielleicht nicht bereits als defensive Programmiermaßnahme tun?)? ?

Betrachten Sie es auch aus ihrer Sicht, einen Fehlerbericht von einem Benutzer über ein unvorhersehbares Problem in einem Teil des Codes, der sehr selten auftritt, nur in Verbindung mit ihrem Code, möglicherweise nur auf einem Computer und nur zu einem bestimmten Zeitpunkt Bedingungen haben einfach keine starke Rechtfertigung dafür, dass ein großer Teil der Entwicklungszeit gefunden und behoben werden muss - wenn es überhaupt möglich ist. Wenn es sich jedoch um ein hinreichend solides Geschäftsmodell handelt, bei dem sich der Benutzer die Zeit nehmen muss, eine gründlichere Untersuchung durchzuführen und einen zuverlässigen Testfall / eine zuverlässige Anwendung oder eine grundlegend detailliertere Problembeschreibung als die ursprüngliche bereitzustellen, kann es sich um ein ganz anderes Spiel handeln .

Dies ist möglicherweise ein Kommunikationsproblem, das der Bibliotheksbesitzer nicht in Betracht gezogen hat und bei dem Sie ein solides Geschäftsmodell haben (z. B. Ihr Code ist kostenintensiv für das Unternehmen, hat gesetzliche Konformitätsanforderungen, Sicherheitslücken oder ähnliches) anderen großen Anstoßeffekt), dann ist es an der Zeit, das Management zu überreden und es herausfordern zu lassen.

James Snell
quelle
1
Ich habe mein Mitgefühl, dass jemand Ihre Antwort (was praktisch möglich ist) für schlecht hält und sie ablehnt. Gleiches ist mit meiner Antwort passiert.
Ist nicht der
-3

Sie haben erwähnt, dass 'ich einen Fehler mit einer Beschreibung der Bedingungen eingereicht habe, unter denen dieses Leck aufgetreten ist.'

Wenn Sie sicher sind, dass die Beschreibung wirklich ausreicht, um den Fehler zu reproduzieren, kennen Sie bereits die genauen Bedingungen. Wenn Sie nach Kenntnis der Bedingungen keinen Komponententest schreiben können, bedeutet dies eindeutig, dass Sie einige der beteiligten Komponenten nicht verspotten können oder einige Teile des Codes zu eng miteinander verbunden sind, um einen praktischen Komponententest zu erstellen.

Sie sollten den Bibliotheksbesitzer bitten, den Code umzugestalten, damit Sie einen Komponententest erstellen können. Sie müssen klar erklären, was in der Bibliothek Sie daran hindert, einen Komponententest zu erstellen. Er muss den Code umgestalten, ansonsten muss er zugeben, dass ein Unit-Test mit dem aktuellen Code nicht möglich ist. In beide Richtungen gewinnen Sie.

Wenn dies nicht funktioniert, haben Sie folgende Möglichkeiten:

  • Sie können Fehler mit mehr Beweisen reproduzieren.
  • Versuchen Sie, höhere Autorität einzubeziehen, und bitten Sie ihn, Ihre Beweise zu bewerten.
  • Versuchen Sie, die Bibliothek in einer Prototypanwendung mit einer Scheinumgebung zu verwenden, die nur zum Reproduzieren des Fehlers codiert werden soll. Auf diese Weise können Sie zumindest nachweisen, dass ein Fehler vorliegt.
isntn
quelle
3
Es liegt nicht in der Verantwortung des OP, den Komponententest für den Bibliotheksverwalter zu erstellen.
Andy
6
Wenn der andere Entwickler Fehlerberichte von jemandem ignoriert, besteht praktisch keine Chance, dass er positiv auf eine Anfrage nach einem größeren Refactoring reagiert. Außerdem sind nicht alle Arten von Problemen über Komponententests leicht reproduzierbar: programmers.stackexchange.com/questions/196105/…
Dan Neely,
1
@DanNeely: Er ignoriert nicht, er behauptet, dass der Reporter etwas mehr tun muss - was für den Reporter nicht möglich ist. Und der Reporter muss sich melden! Ich habe auch vorgeschlagen, Autorität einzubeziehen, da dies möglicherweise darauf ankommt.
nicht der
1
@Andy In einigen Positionen ist es die Unternehmenspolitik, dass Fehler ohne einen automatisierten Test nicht akzeptiert werden.
Joshua Drake
5
Sie scheinen verwirrt über die richtige Verwendung von Abstimmungen zu sein, und es ist unwahrscheinlich, dass dies Ihrem Fall hilft. Downvotes sind die akzeptierte Art und Weise zu sagen "Ich denke, das ist eine schlechte Antwort". Beleidigende Sprache sollte nicht (nur) durch Abwärtsstimmen behandelt werden, sondern indem sie entweder herausgeschnitten oder markiert wird, je nachdem, ob der Rest der Antwort nützlich ist. Eine aus dem Zusammenhang geratene Antwort kann auf jede Weise behandelt werden, je nachdem, wie ungeheuerlich sie ist.
Dan Neely