Ich glaube, dass Sie Ihre eigene Frage nach den relativen Vor- und Nachteilen weitgehend beantwortet haben.
Codeüberprüfungen können oft recht mühsam und langwierig sein, und alles, was die Zeit für die Überprüfung von Code verlängert, wird es noch schlimmer erscheinen lassen. So wie ich das sehe, möchten Sie Ihren Überprüfungsprozess sehr kurz halten und nicht zu stark über die Feinheiten nachdenken. Der Schlüssel ist also zu entscheiden, was es mit dem Überprüfungsprozess auf sich hat, das Ihrem Team geschäftlichen Nutzen bringt.
Stilfragen sind wahrscheinlich einer der Punkte, die ich als niedrigste Priorität bezeichnen würde. Sicher, wenn Sie den Code sauber und einheitlich formatieren, kann dies das Verständnis erleichtern, aber die Aufregung um den Stil kann auch zu RIESIGEN Ineffizienzen während des Codierungsprozesses führen, da die Entwickler sich Gedanken darüber machen, wie hübsch der Code ist, um die zu lösenden Probleme zu lösen. Wenn Sie immer noch über Stilprobleme besorgt sind, ist die Verwendung eines Tools zur Überprüfung von Stil / Formatierung (z. B. StyleCop für C #) eine gute Möglichkeit, die stilspezifischen Probleme dem letzten Moment zu überlassen und den Entscheidungsprozess in Bezug auf den Stil zu übernehmen aus den Händen der Entwickler, um ihr Denken für die wichtigeren Dinge zu befreien. Wenn Sie kein solches Produkt für die Sprache Ihrer Wahl haben, kann möglicherweise ein einfacher Parser geschrieben werden, um Ihren Code schnell nach solchen Problemen zu durchsuchen.
Speicherlecks und andere leistungsspezifische Probleme sollten niemals dem Überprüfungsprozess überlassen bleiben. Sicher, wenn Sie etwas entdecken, das offensichtlich ein großes Problem verursacht, sollten Sie darauf hinweisen, aber es sollte nicht der Zweck der Codeüberprüfung sein, jedes kleine Speicher- / Leistungsproblem in Ihrem Code aufzuspüren. Dafür ist ein gutes Profiling-Tool gedacht, und sie sind jeden Cent wert, wenn Sie es schaffen, ein sehr gutes für die Sprache zu finden, in der Sie sich entwickeln.
Logikprobleme sind bestenfalls problematisch, und dies sind die Dinge, die beim Überprüfen von Code wirklich viel wertvolle Zeit in Anspruch nehmen können. Anstatt dies alles ganz der Codeüberprüfung zu überlassen, sollten Ihre Unit-Tests dafür verwendet werden. Ja, auch Tests können falsch sein. Wenn Sie jedoch zuerst einen Test entwickeln, sich an die SRP- und DRY-Prinzipien halten, gnadenlos umgestalten und Ihre Komponententests als Mittel zur Validierung Ihrer Spezifikationen definieren, werden Sie feststellen, dass Sie am Ende davon betroffen sind weit weniger logische Probleme. Wenn Sie nach dem Codieren testen, ist es weniger wahrscheinlich, dass Sie sich mit potenziellen Logikproblemen befassen, sobald diese auftreten, und Sie vergessen eher, einen bestimmten Pfad durch Ihren Code zu testen.
Wenn Sie also alles tun, was ich hier vorgeschlagen habe, was müssen Sie dann in der Codeüberprüfung tun? Die einfache Antwort lautet, dass Ihre Codeüberprüfung zu einem relativ einfachen Prozess wird, bei dem der Codierer dem Prüfer erklärt, wie eine bestimmte Anforderung in den Tests erfasst wurde und wie diese Tests auf die gelösten Probleme angewendet wurden. Sie neigen dazu, den Code genauer zu überprüfen und die Tests gründlicher zu analysieren, da hier der größte Geschäftswert gemessen werden kann, insbesondere wenn dieser Code später beibehalten werden muss. Um die Überprüfung des Testcodes noch schmerzloser zu gestalten, kann die Verwendung eines guten verhaltensgesteuerten Testframeworks die Überprüfung erheblich vereinfachen, da die Spezifikationen im Code als fast einfache englische Beschreibung der Testausführung erfasst werden. Detaillierte Überprüfungen werden für jeden Code durchgeführt, der die Tests unterstützt. und wenn Ihr BDD-Framework nette Textberichte erstellt, in denen die Tests in einfachen Textstorys / Feature-Anweisungen aufgeführt sind, wird der Prozess noch einfacher. Dies alles führt zu einem äußerst effizienten Prozess, der genauso wertvoll ist wie eine herkömmliche Codeüberprüfung, aber viel schneller und gezielter durchgeführt werden kann, um zu vermeiden, dass Sie sich in Kleinigkeiten und Doppelprüfungen festsetzen das führt dich oft nirgendwo hin. Dieser schlankere Ansatz bedeutet mehr Zeit für das Testen und Codieren und weniger Zeit für Verwaltungsprozesse. Sie können jedoch viel schneller und zielgerichteter durchgeführt werden, um zu vermeiden, dass Sie sich in Kleinigkeiten und Doppelkontrollen festsetzen, die Sie oft nirgendwohin führen. Dieser schlankere Ansatz bedeutet mehr Zeit für das Testen und Codieren und weniger Zeit für Verwaltungsprozesse. Sie können jedoch viel schneller und zielgerichteter durchgeführt werden, um zu vermeiden, dass Sie sich in Kleinigkeiten und Doppelkontrollen festsetzen, die Sie oft nirgendwohin führen. Dieser schlankere Ansatz bedeutet mehr Zeit für das Testen und Codieren und weniger Zeit für Verwaltungsprozesse.
Was ist dann mit diesen Metriken? Wenn alle Probleme einfach als "Fehler" behandelt werden, müssen Sie sich nur mit der Anzahl der Fehler befassen, die vor und nach der Veröffentlichung im Laufe der Zeit auftreten, und ob die identifizierten Fehler in eine bestimmte Richtung tendieren. Wenn Sie auch nur ein halbwegs anständiges Problemverfolgungssystem verwenden, stehen Ihnen all diese Informationen praktisch zur Verfügung, und Sie müssen sich keine Gedanken darüber machen, ob Ihr Überprüfungsprozess sie identifizieren muss. Letztendlich möchte Ihr Team das tun, was es kann, nämlich Software schreiben, und nicht zu viel Zeit mit administrativen Problemen verbringen, die oft nur 1 oder 2 Personen im Unternehmen von Interesse sind.