Nach einigen gravierenden Qualitätsproblemen im letzten Jahr hat mein Unternehmen kürzlich Code-Reviews eingeführt. Der Codeüberprüfungsprozess wurde schnell ohne Richtlinien oder Checklisten eingeführt.
Ein anderer Entwickler und ich haben uns vorgenommen, alle an den Systemen vorgenommenen Änderungen zu überprüfen, bevor sie in den Stamm integriert werden.
Wir wurden auch als "Technical Lead" ausgewählt. Dies bedeutet, dass wir für die Codequalität verantwortlich sind, aber keine Berechtigung haben, Änderungen im Prozess vorzunehmen, Entwickler neu zuzuweisen oder Projekte zurückzuhalten.
Technisch gesehen können wir die Fusion ablehnen und der Entwicklung zurückgeben. In Wirklichkeit endet dies fast immer damit, dass unser Chef verlangt, dass es pünktlich verschickt wird.
Unser Manager ist ein MBA, der sich hauptsächlich mit der Erstellung eines Zeitplans für anstehende Projekte befasst. Während er es versucht, hat er fast keine Ahnung, was unsere Software aus geschäftlicher Sicht tut, und es fällt ihm schwer, selbst die grundlegendsten Kundenanforderungen ohne Erklärung eines Entwicklers zu verstehen.
Derzeit wird die Entwicklung in Entwicklungszweigen in SVN durchgeführt. Nachdem der Entwickler glaubt, dass er bereit ist, weist er das Ticket in unserem Ticketsystem unserem Manager zu. Der Manager weist es uns dann zu.
Die Code-Reviews haben zu einigen Spannungen in unserem Team geführt. Besonders einige der älteren Mitglieder hinterfragen die Änderungen (zB "Wir haben es immer so gemacht" oder "Warum sollte die Methode einen vernünftigen Namen haben, ich weiß was sie tut?").
Nach den ersten Wochen begann meine Kollegin die Dinge laufen zu lassen, um keine Probleme mit den Mitarbeitern zu verursachen (sie sagte mir selbst, dass sie nach einem Fehlerbericht, der von einem Kunden eingereicht wurde, von dem Fehler wusste, aber befürchtete, dass die Entwickler wäre sauer auf sie, wenn er darauf hinweist).
Andererseits bin ich jetzt dafür bekannt, ein Esel zu sein, um auf Probleme mit dem festgeschriebenen Code hinzuweisen.
Ich denke nicht, dass meine Standards zu hoch sind.
Meine Checkliste ist im Moment:
- Der Code wird kompiliert.
- Es gibt mindestens eine Möglichkeit, wie der Code funktioniert.
- Der Code funktioniert in den meisten normalen Fällen.
- Der Code funktioniert mit den meisten Randfällen.
- Der Code löst eine angemessene Ausnahme aus, wenn die eingegebenen Daten ungültig sind.
Aber ich übernehme die Verantwortung für die Art und Weise, wie ich Feedback gebe. Ich gebe bereits umsetzbare Punkte an, um zu erklären, warum etwas geändert werden sollte, und manchmal auch nur zu fragen, warum etwas auf eine bestimmte Weise implementiert wurde. Wenn ich es für schlecht halte, weise ich darauf hin, dass ich es auf andere Weise entwickelt hätte.
Was mir fehlt, ist die Fähigkeit, etwas zu finden, das ich als "gut" bezeichnen kann. Ich habe gelesen, dass man versuchen sollte, schlechte Nachrichten in gute Nachrichten zu stecken.
Aber es fällt mir schwer, etwas Gutes zu finden. "Hey, diesmal hast du wirklich alles begangen, was du getan hast" ist herablassender als nett oder hilfsbereit.
Beispiel Code Review
Hallo Joe,
Ich habe einige Fragen zu Ihren Änderungen in der Library \ ACME \ ExtractOrderMail-Klasse.
Ich habe nicht verstanden, warum Sie "TempFilesToDelete" als statisch markiert haben. Im Moment würde ein zweiter Aufruf von "GetMails" eine Ausnahme auslösen, da Sie Dateien hinzufügen, diese aber niemals entfernen, nachdem Sie sie gelöscht haben. Ich weiß, dass die Funktion nur einmal pro Lauf aufgerufen wird, aber in Zukunft könnte sich dies ändern. Könnten Sie es einfach zu einer Instanzvariablen machen, dann könnten wir mehrere Objekte parallel haben.
... (Einige andere Punkte, die nicht funktionieren)
Kleinere Punkte:
- Warum nimmt "GetErrorMailBody" eine Ausnahme als Parameter? Habe ich etwas verpasst? Sie lösen die Ausnahme nicht aus, sondern geben sie einfach weiter und rufen "ToString" auf. Warum ist das so?
- SaveAndSend Ist kein guter Name für die Methode. Diese Methode sendet Fehler-Mails, wenn die Verarbeitung einer Mail fehlgeschlagen ist. Könnten Sie es in "SendErrorMail" oder etwas Ähnliches umbenennen?
- Bitte kommentieren Sie alten Code nicht nur, sondern löschen Sie ihn sofort. Wir haben es immer noch in Subversion.