Unit-Tests während der Codeüberprüfung sind ein schlechter Ersatz für Unit-Tests während der Entwicklung.
Was Sie vorschlagen, ist intuitiv sehr sinnvoll. Wofür ist die Rezension? Um zu überprüfen, ob der Code gut ist. Wofür sind Tests? Um zu überprüfen, ob der Code gut ist. Warum also nicht beides kombinieren?
Hier ist der Grund.
Das Testen von Code ist harte Arbeit. Das Schreiben von Code, der nur bei der einen Sache funktioniert, die er tun soll, ist eine Sache; Ein weiterer Grund ist das Schreiben von Code, der effektiv und effizient getestet werden kann. Allein die Tatsache, dass der Code jetzt in zwei Szenarien ausgeführt wird - "echte Arbeit" und "Test" - erfordert eine viel größere Flexibilität und erfordert, dass dieser Code in der Lage ist, auf sinnvolle Weise für sich selbst zu stehen.
Den Code so zu schreiben, dass er prüfbar ist, erfordert zusätzliche Arbeit und Geschicklichkeit. Es kann eine große Aufgabe sein, den Code eines anderen für die Testbarkeit umzugestalten, wenn dies nicht im Hinblick auf die Testbarkeit geschrieben wurde.
Sie duplizieren den Aufwand zwischen dem Entwickler und dem Prüfer. Vermutlich reicht Ihr Entwickler seinen Code nicht zur Überprüfung ein, ohne zumindest ein gewisses Maß an Sicherheit zu haben, dass er funktioniert. Er muss den Code bereits testen. Jetzt gibt es verschiedene Teststufen und -bereiche. QA testet den Code nach dem Entwickler und dem Prüfer. Aber was auch immer Umfang Sie denken , ist für den Entwickler und Reviewer, macht es keinen Sinn für den Entwickler, um herauszufinden , wie Sie den Code zu testen , um dieses Niveau einmal , sondern macht seine Tests Wegwerf und schwer zu reproduzieren, und dann brachte in dem Rezensenten zu Test erneut entwickelnDiesmal solche, die automatisiert und reproduzierbar sind. Sie müssen nur beide Zeit investieren, um dieselben Tests zu schreiben - einmal schlecht, einmal gut.
Sie verwandeln die Überprüfung in einen viel längeren und mühsameren Schritt. Wenn das Testen einen großen Teil des Überprüfungsprozesses ausmacht, was passiert, wenn einige Tests fehlschlagen ? Ist die Prüferin dafür verantwortlich, dass alle Tests ausgeführt werden, sodass sie auch den Code debuggen muss? Oder wird es ein Ping-Pong sein, der eine schreibt Tests, der andere bringt sie zum Bestehen?
Manchmal können Sie eine ganze Reihe von Tests schreiben, die alle orthogonal zueinander sind, sodass Sie kein Ping-Pong benötigen. Der Prüfer schreibt ein Dutzend Tests, von denen die Hälfte fehlschlägt, der Entwickler behebt die Fehler und alle Tests bleiben gültig und bestehen. Aber ... oft haben Sie Blocker-Bugs oder Bugs, die ein Redesign und API-Änderungen erfordern, oder so weiter. Wenn Sie die Verantwortung für das Hin- und Herschieben von Tests zwischen Prüfer und Entwickler übernehmen, befinden Sie sich nicht in der Prüfungsphase. Du entwickelst dich noch.
Das Schreiben von Tests ist kein Anreiz für eine gründlichere Überprüfung. Im Grunde bedeutet dies, dass je tiefer Sie gehen, desto mehr Tests müssen Sie schreiben, und wahrscheinlich handelt es sich dabei um harte Tests, die tief in das System eindringen müssen.
Vergleichen Sie dies mit dem Entwickler, der die Tests erstellt, wo sein Anreiz lautet: Wenn ich keine wichtigen Tests schreibe, weist der Prüfer in der Überprüfung darauf hin.
Sogar der Prüfer hat ein viel besseres Verständnis des Systems, wenn er den Code gründlich testen muss, und wenn er selbst entscheiden muss, wann er aufhören kann, einen Deep-Digging-Test zu schreiben, und die Code-Überprüfung einfach in Ordnung bringen muss.
Wenn der Entwickler keine Komponententests schreibt, wird der Prüfer dies auch nicht tun. Es gibt viele Hindernisse für die Annahme von Tests als gängige Praxis. Vielleicht stehen Sie unter zu viel Druck und Ihre Codebasis ist schwer zu testen. Vielleicht sind Sie nicht so erfahren im Testen und haben das Gefühl, dass Sie sich die Lernkurve nicht leisten können. Vielleicht haben Sie einen Axtmörder, der Leuten, die Tests schreiben, Drohnotizen schickt. Ich weiß es nicht!
Aber was auch immer die Ursache ist, es ist sicher zu wetten, dass es gleichermaßen für den Rezensenten und für den Entwickler gilt. Wenn das Team gestresst ist, hat der Prüfer nicht mehr Zeit als der Entwickler (wenn dies der Fall ist, verteilen Sie die Arbeit neu, damit die Leute nicht so gestresst sind ). Wenn niemand weiß, wie man Komponententests gut schreibt, tut dies die Prüferin wahrscheinlich auch nicht (wenn dies der Fall ist, sollte sie sich hinsetzen und ihre Teamkollegen unterrichten ).
Dieser Vorschlag klingt wie der Versuch, das Geld von einem Kollegen an einen anderen weiterzugeben. Und ich sehe einfach keine Möglichkeit, dass das gut funktioniert, vor allem, weil es wirklich schwierig (und ungesund) ist, eine Situation zu schaffen, in der nur eine Person testen kann und eine andere Person nicht irgendwelche Tests überhaupt.
Was funktioniert , ist, dass die Überprüfung auch die Tests abdeckt. Wenn der Entwickler bereits zehn Tests geschrieben hat, ist es viel wahrscheinlicher, dass der Prüfer weitere zehn vorschlagen kann, als wenn der Entwickler keine geschrieben hätte.
Und wenn das Testen von Eckfällen eine wichtige Aufgabe ist, ist es möglicherweise sinnvoll, dies auf das gesamte Team zu verteilen. ** Wenn der Code erst einmal getestet werden kann, wird das Schreiben weiterer Tests viel einfacher. **
Überprüfung ist eine gute Zeit, um Eckfälle zu erkennen . Und wenn die Rezensentin einspringen und einen Test für Eckfälle schreiben kann, die sie findet, dann hey - umso besser! Aber im Allgemeinen unter der Annahme, dass der Prüfer Tests schreiben kann, bei denen der Entwickler nicht nach einer sehr schlechten Idee klang.