Ich bin in einer Position, in der ich gebeten wurde, einen Code zu überprüfen, der ein Problem behebt, von dem ich nicht glaube, dass es existiert.
Der Fixer, der älter als ich ist, besteht darauf, dass sein Fix notwendig ist, aber es scheint für mich nicht mehr als C ++ Sophistik zu sein. Ein Teil unseres Bereitstellungsprozesses ist eine Codeüberprüfung. Als zweithöchster Ingenieur in einem kleinen Unternehmen werden von mir Änderungen erwartet.
Ich bin der Meinung, dass Prüfer für Codeänderungen genauso verantwortlich sind wie der ursprüngliche Kodierer, und ich bin nicht bereit, die Verantwortung für diese Änderung zu übernehmen. Wie würden Sie vorgehen, um diese Bewertung abzulehnen?
code-reviews
James
quelle
quelle
size > size+1
eine Ganzzahl mit Vorzeichen auf Überlauf überprüft haben, ersetzt der Compiler diesen Ausdruck möglicherweise einfach durchfalse
, da der Überlauf von Ganzzahlen mit Vorzeichen undefiniert ist. Siehe blog.llvm.org/2011/05/…Antworten:
Bitten Sie um einen Testfall, der ohne die Änderung fehlschlägt, die mit der Änderung erfolgreich ist.
Wenn er keinen vorweisen kann, verwenden Sie das als Rechtfertigung.
Wenn er einen vorweisen kann, müssen Sie erklären, warum der Test ungültig ist.
quelle
Gutachter sollten objektiv sein.
Es ist klar, dass Sie sich eine Meinung zu dem fraglichen Code gebildet haben, bevor Sie ihn überhaupt überprüft haben, und es scheint, als hätten Sie und der Fixierer Positionen abgesteckt. Wenn dem so ist, werden Sie eine schwierige Zeit haben, objektiv zu erscheinen, und eine noch schwierigere Zeit , objektiv zu sein. Nichts davon hilft dem Prozess, und es kann sein, dass das Beste und objektivste, was Sie tun können, darin besteht, sich aus dem Grund zu beugen, dass Sie dem Problem zu nahe stehen.
Betrachten Sie einen Teamansatz.
Wenn es nicht möglich ist, sich selbst zu entfernen, können Sie möglicherweise mehrere andere Techniker gleichzeitig den Code überprüfen lassen. Entweder stimmen sie mit Ihnen überein, dass der Code abgelehnt werden sollte, oder sie werden nicht. Wenn sie mit Ihnen übereinstimmen, sind Sie nicht mehr nur Sie selbst im Vergleich zum Fixer, und Sie können einen stärkeren Beweis dafür erbringen, dass das Team den Fix objektiv betrachtet und sich gegen eine Annahme entschieden hat. Auf der anderen Seite wird auch dies eine Teamentscheidung sein, wenn sie sich dazu entschließen, das Update zu akzeptieren. Es sollte selbstverständlich sein, dass Sie so offen wie möglich mitmachen und nicht versuchen sollten, die Meinungen der anderen Teammitglieder durch etwas anderes als rationale Diskussionen zu beeinflussen. Wichtig: Wenn es später zu einem schlechten Ergebnis kommt, werfen Sie das Team nicht unter den Bus, indem Sie sagen: "Nun, ich Ich habe immer gesagt, dass es ein schlechter Code ist, aber ich war den anderen Teammitgliedern unterlegen. "
Ablehnungen sind ein natürlicher Bestandteil des Code-Überprüfungsprozesses.
Der Code-Überprüfungsprozess ist nicht dazu da, Stempel von älteren Leuten zu korrigieren. Es ist dazu da, die Qualität des Codes zu schützen und zu verbessern. Es ist nichts Falsches daran, ein Update abzulehnen, vorausgesetzt, Sie tun dies aus dem richtigen Grund, dh, dass das Update den Code nicht verbessert. Wenn Sie nach einer aufgeschlossenen Überprüfung des Codes immer noch der Ansicht sind, dass die Korrektur das Risiko und / oder die Größe eines nachweisbaren Problems nicht verringert, sollten Sie ihn ablehnen. Es ist nicht persönlich, nur deine ehrliche Meinung. Wenn der Fixierer nicht einverstanden ist, ist das auch in Ordnung, und an diesem Punkt wird es für das Management zu einem Problem, dies herauszufinden. Seien Sie einfach sicher, ehrlich, offen und professionell zu bleiben.
Verantwortung schneidet in beide Richtungen.
Sie sagten, dass Sie nicht für diese Änderung verantwortlich sein möchten, anscheinend, weil Sie nicht glauben, dass es ein Problem gibt. Allerdings müssen Sie erkennen , dass , wenn Sie falsch sind , und es ist ein Problem, dann können Sie den Code verantwortlich am Ende für die Ablehnung, die das Problem vermieden hätte.
Mache Notizen.
Wenn Sie ein schriftliches Protokoll des Überprüfungsprozesses führen, können Sie Ihre Fakten klarstellen. Notieren Sie sich Ihre Gedanken und Bedenken, und überprüfen Sie die Beschreibung und die Ergebnisse aller Tests, die Sie möglicherweise durchführen, um das mutmaßliche Problem und die Behebung usw. zu messen. Wenn das Problem eskaliert, haben Sie Aufzeichnungen darüber, was Sie getan haben, um Ihr Problem zu unterstützen Position. Wenn die Angelegenheit in Zukunft erneut auftaucht (wahrscheinlich, wenn der Fixierer seiner eigenen Ansicht angehängt ist), haben Sie etwas, das Sie in Erinnerung behalten können.
quelle
Notieren Sie die Gründe für die Ablehnung und die Abwehr möglicher Gegenargumente. Besprechen Sie sich dann rational mit dem Fixierer und eskalieren Sie gegebenenfalls zum Management.
Wenn Sie über ausreichende Dokumentation verfügen (einschließlich Codelisten, Testergebnissen und objektiven Argumenten), sind Sie gut abgesichert.
Sie werden einen schlechten Willen mit dem Fixierer verursachen, stellen Sie also sicher, dass sich das Problem lohnt (dh verursacht das Nicht-Fixieren Schaden?)
Wenn der Fixierer in irgendeiner Weise mit den Eigentümern in Beziehung steht, vergessen Sie diese Antwort.
quelle
Kürzlich gab es in den LinkedIn-Nachrichten einen Artikel über Konfliktlösung am Arbeitsplatz und Bescheidenheit, anstatt arrogant zu wirken. Leider kann ich den Link jetzt nicht finden, aber der Kerngedanke bestand darin, Fragen nicht konfrontativ zu formulieren. Bitte nehmen Sie das nicht so, als ob ich impliziere, dass Sie arrogant sind. Es ist nur die Art und Weise, wie der Artikel geschrieben wurde.
Wie auch immer, wenn Sie dem erfahrenen Programmierer sagen, dass er sich in seiner Annahme irrt, wird dies nur dazu führen, dass er einen defensiven Ansatz verfolgt und Sie in seiner Antwort angreift. Wenn Sie jedoch die Frage stellen, warum er glaubt, dass das Problem besteht, ist es wahrscheinlich, dass er / sie offener ist, die Angelegenheit zu erörtern.
Anstatt also zu sagen "Das Problem existiert nicht, also sollte ich es nicht überprüfen müssen", müssen Sie vielleicht etwas fragen wie "Um dies richtig zu überprüfen, muss ich das Problem verstehen. Können Sie es bitte anhand Ihrer erläutern." Perspektive?"
Als Beispiel beschreibt der Artikel einen Test für Kinder, bei dem ein Erwachsener einen Würfel hochhielt, dessen Gesichter alle eine Farbe hatten, mit Ausnahme desjenigen, das dem Erwachsenen zugewandt war. Wenn die Kinder gefragt wurden, welche Gesichtsfarbe der Erwachsene sieht, sagten die unter 5-Jährigen fast immer die Farbe, die sie sehen konnten, da sie nicht verstehen konnten, dass der Erwachsene eine andere Sichtweise als sie selbst haben könnte.
quelle
C / C ++ kann voll von undefinierten Verhalten sein. Einerseits ist es schlecht, da es zu unerwarteten Verhaltensweisen führen kann. Auf der anderen Seite erlaubt es aggressive Optimierungen und wenn Sie C / C ++ verwenden, sind Sie in der Regel an Geschwindigkeit interessiert.
Das Schreiben eines Testfalls, der bricht, kann schwierig sein - es kann eine seltsame Architektur oder einen Compiler beinhalten, der nicht mehr existiert. Auch könnte es wie auf jeder vernünftigen Architektur scheinen, "sollte es keine Probleme verursachen".
Zu irgendeinem Zeitpunkt werden Sie jedoch die Plattform wechseln (z. B. möchten Sie mobil werden, um auf ARM zu portieren, oder Sie möchten die Dinge beschleunigen und die GPU verwenden). An diesem Punkt kann es zu Problemen kommen, und Sie müssen das Debuggen durchführen. Es kann so trivial sein, wie den Compiler auf eine neuere Version zu aktualisieren (und Sie möchten es vielleicht / brauchen es).
Der problematische Code war:
Während der letzten Iteration
d[++k] => d[++15] => d[16]
wird zugegriffen. Da normalerweise das nächste Element der legale Speicher war (in Bezug auf Paging kein C-Speichermodell), haben selbst die trivialen Compiler keine ausführbare Datei mit seltsamem Verhalten erstellt. Die einzige Möglichkeit, den Testfall zu schreiben, bestand darin, eine Plattform mit genau demselben Speichermodell wie C (wahrscheinlich VM) zu finden.Allerdings ist gcc 4.8 vorab zu sehen,
d[++k]
das in jeder Schleife ausgeführt wird. Sok < 16
sonst wäre der Zugang illegal und die Rechtmäßigkeit des Programms Compiler zugeführt ist Teil des Vertrages. Die Schleifenbedingung ist also immer wahr, vorausgesetzt, sie ist eine Endlosschleife. Das mag seltsam klingen, aber es war vollkommen legale Optimierung - Aussendensystem("dd if=/dev/zero of=/dev/sda"); system("format c:")
wäre auch der richtige Ersatz für Schleife. Es gibt subtilere Möglichkeiten, Verhaltensweisen zu zeigen. Zum Beispiel erinnere ich mich, dass der Moderator während eines Vortrags über Transaktionsspeicher mehrmals versucht hat, einen falschen Wert zu erhalten, wenn 2 Threads den gleichen Wert inkrementiert haben.C / C ++ ist jedoch im Gegensatz zu einigen Sprachen standardisiert, so dass ein solcher Streit mit Bezug auf die objektive Quelle geführt werden kann:
Wenn Ihr Team in C / C ++ schreibt, ist es im Allgemeinen nützlich, Standard zur Hand zu haben - selbst Teamexperten können dort gelegentlich etwas Merkwürdiges finden.
quelle
Dies klingt eher nach einem Problem mit Ihrer Teamrichtlinie als mit dieser speziellen Überprüfung. Als ich in einem großen Softwarehaus in einem 9-köpfigen Team arbeitete, hatte ein Prüfer ein Vetorecht über Code, und dies war ein Standard, den wir alle respektierten. Wir waren talentiert und klug genug - nämlich. "ausgereift", aber eher im Sinne von "nicht kindisch" als "erfahren" - dass unser Teamleiter zu Recht davon ausgehen kann, dass wir in einem vernünftigen Zeitraum immer zu einer Einigung kommen, ohne uns auf Auseinandersetzungen einzulassen.
Ich möchte Sie lediglich auf der Grundlage Ihrer Sprache in Ihrem Beitrag warnen, dass es sich so anhört, als würden Sie sich dieser Situation auf eine Art und Weise nähern, die zu einem übergeordneten Streit führen könnte. Vielleicht ist es "intellektuelle Masturbation", aber es gibt wahrscheinlich einen Grund, warum er oder sie es getan hat, und die Last für Sie wird sein, einen einfacheren Weg zu finden, um dieses Problem zu lösen - und wenn es keinen solchen Weg gibt, dokumentieren Sie in Kommentaren, warum Der Masturbationscode war in der Tat notwendig.
quelle
Zeigen Sie dem Absender, dass sein Code das Problem behebt. Wenn er testen und Ihnen Beweise vorlegen kann, dann sind Sie derjenige, der Unrecht hat und sollten einfach aufhören, sich zu beschweren und damit umgehen. Wenn er keine Beweise vorweisen kann, die seine Behauptung stützen, liegt ein Problem vor, und wenn er nachweisen kann, dass sein Patch das Problem behebt, schicke ich ihn zurück an die Ablage.
Natürlich könnte dies zu einer sensiblen internen Politik führen. Aber das ist der Weg, den ich gehen würde (köstlich).
quelle