Wie kann die Wirksamkeit eines Codeüberprüfungsprozesses ermittelt werden?

14

Wir haben in unserer Organisation einen Codeüberprüfungsprozess eingeführt, der anscheinend gut funktioniert. Ich möchte jedoch in der Lage sein, die Effektivität des Prozesses im Laufe der Zeit zu messen, dh finden wir keine Fehler, weil der Code sauber ist, oder werden Fehler nur nicht erkannt?

Derzeit haben wir keinen effektiven vollautomatisierten Testprozess. Wir verwenden hauptsächlich manuelle Tests, daher können wir uns nicht auf die in dieser Phase festgestellten Fehler verlassen, um sicherzustellen, dass der Codeüberprüfungsprozess funktioniert.

Ist jemand auf dieses Problem gestoßen oder hat er irgendwelche Gedanken darüber, was beim Messen von Codeüberprüfungen gut funktioniert?

Johnv2020
quelle
7
Das Auffinden von Fehlern ist nicht der einzige Zweck der Codeüberprüfung. Sie sind auch nützlich, um Codierungsstandards zu verstärken, Schulungen
Jason
Vielen Dank, Jason & Verstanden. In diesem Fall versuche ich jedoch herauszufinden, wie sichergestellt werden kann, dass der Prozess sein Kernziel der
@ Johnv2020 Das ist aber nicht das Kernziel ... Du verpasst den Punkt einer Codeüberprüfung komplett. Dies wäre so, als würde eine Flotte von Düsenflugzeugen eine großartige neue Sicherheitsfunktion erhalten und dann versucht, ihre Wirksamkeit anhand der Anzahl der Abstürze zu beurteilen. Es gibt zu viele Variablen und andere Faktoren, um genau zu behaupten, dass das Sicherheitsmerkmal die Wahrscheinlichkeit eines nicht auftretenden Unfalls verbessert.
maple_shaft
@maple_shaft: Schwache Analogie. Der Versuch, die Fehlerrate zu messen, ähnelt eher dem Versuch, die Anzahl der Särge zu messen, die bei Abstürzen für Tote verwendet wurden.
S.Lott
1
In allen Code-Reviews, an denen ich teilgenommen habe, wurden viele Fehler bereits in Tests auf Einheiten- und höheren Ebenen behoben. Das heißt, Code kann nicht überprüft werden, nur weil er kompiliert wird.
Pete Wilson

Antworten:

7

Es gibt eine Reihe von Metriken, die aus Codeüberprüfungen gewonnen werden können, von denen sich einige sogar über den gesamten Lebenszyklus des Projekts erstrecken.

Die erste Metrik, die ich zur Erfassung empfehlen würde, ist die Effektivität der Fehlerbeseitigung (DRE) . Für jeden Fehler geben Sie an, in welcher Phase der Fehler eingeführt und in welcher Phase behoben wurde. Die verschiedenen von Ihnen verwendeten Fehlererkennungstechniken werden alle gleichzeitig bewertet, sodass sie für Anforderungsüberprüfungen, Entwurfsüberprüfungen, Codeüberprüfungen und Komponententests gleichermaßen gelten , und so weiter. Sie wären besonders an der Anzahl der in der Codephase festgestellten Fehler interessiert, da dies wahrscheinlich sowohl Ihre Komponententests als auch Codeüberprüfungen umfassen würde. Wenn viele Fehler aus der Codephase in die Integrationstestphase oder sogar in das Feld gelangen, sollten Sie die Post-Coding-Praktiken bewerten.

Verschiedene Meeting-Metriken wären ebenfalls relevant. Dazu gehören die Vorbereitungszeit, die Besprechungszeit, die gelesenen Codezeilen, die in der Überprüfung festgestellten Fehler usw. Aus diesen Daten können einige Beobachtungen gemacht werden. Ein Beispiel wäre, wenn Ihre Prüfer viel Zeit damit verbringen, den Code zu lesen, um sich auf die Prüfung vorzubereiten, aber nur sehr wenige Probleme zu finden. In Verbindung mit den DRE-Daten können Sie die Schlussfolgerung ziehen, dass sich Ihr Team auf die Überprüfungstechniken konzentrieren muss, um Probleme zu finden, wenn Fehler in Integrationstests oder im Feld getestet werden. Ein weiterer interessanter Hinweis wäre, dass die Codezeilen (oder andere Größenangaben) in einer Besprechung im Vergleich zur Besprechungszeit gelesen werden. Untersuchungen haben ergeben, dass die Geschwindigkeit einer typischen Codeüberprüfung 150 Codezeilen pro Stunde beträgt.

Bei jeder dieser Metriken ist es dann wichtig, ihre Auswirkungen auf den Prozess zu verstehen. Ursachenanalyse mit Techniken wie Warum- Weil- , Fünf-Warum- oder Ishikawa-Diagrammen kann verwendet werden, um die Gründe zu ermitteln, warum Codeüberprüfungen (oder andere Techniken zur Qualitätsverbesserung) (in) wirksam sind.

Dieser Artikel über Inspektionen von The Ganssle Group und ein Artikel von Capers Jones in Crosstalk über Fehlerpotentiale und DRE könnten Sie auch interessieren .

Thomas Owens
quelle
2

Während weitgehend ist es wahr, dass Code-Überprüfung Probleme abholen würde , die eher latent werden , dass das Testen oder nicht fangen können. Meiner Meinung nach haben Sie möglicherweise einen wirklich stabilen (praktisch fehlerfreien) Code, der jedoch immer noch so geschrieben ist, dass er extrem nicht lesbar oder nicht ganz wartbar ist. Daher kann es sein, dass die Codeüberprüfung KEINE Bugs findet, wenn der Code keine echten Probleme enthält.

Trotzdem würde ich wirklich fragen, warum man eine Codeüberprüfung machen möchte. Der einfache Grund, warum es wichtig ist, dass der Code verbessert werden sollte, um lesbarer, wartbarer und entwickelbarer zu werden. Viele Menschen sollten in der Lage sein, saubereren Code zu lesen und daraus einen Sinn zu ziehen. In diesem Sinne besteht das einfachste Ziel des Codeüberprüfungsprozesses darin, sauberen Code zu erzeugen. Das Maß für die Effektivität ist also, wie viel sauberer der Code jetzt ist.

Wie Sie eine messbare Wirksamkeit haben wollten - hier ist, was ich vorschlagen würde:

  1. Metrik in Bezug auf den Umfang der Nacharbeit - Die Häufigkeit, mit der die Nacharbeit in einem bestimmten Modul / Objekt / Arbeitselement durchgeführt wird, ist ein Maß dafür, wie schlecht dieser Code in Bezug auf die Wartbarkeit ist. Wie oft können wir bei einer effektiven Codeüberprüfung den Nacharbeitsaufwand für dasselbe Modul reduzieren?

  2. Metrik in Bezug auf den Änderungsbetrag, der bei jeder Änderungsanforderung anfällt. Jedes Mal, wenn eine Änderungsanforderung auftritt, ist bei einem Code mit unzureichendem Faktor immer eine größere Anzahl von Modulen betroffen. Eine Maßnahme würde wahrscheinlich zeigen , dass nach einem Code - Review - eine war , dass jede Verringerung dieser Ausbreitung des Wandels für eine ähnliche Änderungsanforderung in der Vergangenheit?

  3. Metrik in Bezug auf die Durchschnittsgeschwindigkeit, mit der eine Änderungsanforderung beantwortet werden kann. Wenn der Code sauberer ist - schneller und besser -, muss auf erforderliche Änderungen reagiert werden. Nachdem der Code im Überprüfungsprozess bereinigt wurde, können wir die ähnliche Größenanforderung schneller beantworten.

Ich stelle keine exakten Maßeinheiten auf - mit diesem Ansatz können Sie wahrscheinlich genauere Maßeinheiten erstellen. Es kann mehr Erweiterungsformalismus in den obigen Ansätzen dazu geben.

Im Grunde geht es darum, dass der Codeüberprüfungsprozess nicht die Anzahl der Fehler überprüft, sondern diese ermittelt. Wir sollten die Wirksamkeit dahingehend messen, ob die Codeüberprüfung dazu geführt hat, dass der Code sauberer, schlanker und pflegeleichter wird. Daher können wir diese Wirksamkeit messen, wenn wir feststellen, dass ähnliche Änderungsanforderungen in Zukunft effizienter zu beantworten sind.

Dipan Mehta
quelle
1
Obwohl dies kein "Bug" ist, ist eine mangelnde Lesbarkeit, Wartbarkeit oder Entwickelbarkeit ein Fehler im Code und sollte als solcher behandelt werden. Es gibt keinen Grund, warum diese nicht in einem Fehlerverfolger verfolgt werden können, genau wie tatsächliche Fehler in der Funktionalität. Auf diese Weise können Sie auch eine Reihe anderer fehlerbezogener Metriken in der Codierungsphase verfolgen.
Thomas Owens
1
Als Entwickler sehe ich gerne sauberen Code. Codeüberprüfungen sind jedoch sehr kostspielig. Als Manager, der ein Projekt finanziert, ist Clean Code kein zwingender Grund, mein Entwicklungsbudget um 5 bis 10% zu verlängern. Vor allem, wenn (als Manager) mein Bonus / Review an die termingerechte / budgetgerechte Fertigstellung des aktuellen Projekts gebunden ist. Ihre Meinung, dass der Hauptgrund für Codeüberprüfungen darin besteht, sauberen Code zu erhalten, lässt jeden guten Manager sagen, dass der ROI es nicht wert ist. Sie können über langfristige Renditen streiten, aber bis dahin ist der Manager, der pünktlich / budgetgerecht liefert, von diesem Problem abgesetzt worden
Dunk,
...Problem. Der Manager, der die Codeüberprüfungen beworben hat, wird zwar erfolgreiche Wartungsprojekte haben, wurde jedoch dafür aufgewertet, dass das ursprüngliche Projekt nicht pünktlich / budgetgerecht abgeschlossen wurde, wie der Manager, der dies nicht getan hat. OTOH, wenn die Codeüberprüfungen dabei geholfen haben, Fehler zu finden, die durch die mangelnde Überprüfung nicht behoben wurden und die es dem Codeüberprüfungsmanager ermöglichen, sein Projekt pünktlicher / budgetgerechter abzuschließen, ist dies eine andere Geschichte. Das ist die Geschichte, die verkauft werden muss. Dies bedeutet auch, dass sauberer Code nicht der Grund für Codeüberprüfungen sein kann.
Dunk
@Dunk Die Kosten für eine Codeüberprüfung hängen von der Art der Codeüberprüfung ab. Eine formelle Inspektion mit 3-5 Lesern, einem Moderator und der Anwesenheit des Autors (5-7 Personen in einem Raum) ist teuer. Ein Desk Check, der aus einem anderen Entwickler besteht, der 10-15 Minuten lang über den Code blickt, ist ebenfalls eine Codeüberprüfung, aber viel weniger formal und viel billiger. Selbst die Programmierung von Paaren kann als eine Art "Codeüberprüfung" angesehen werden. Die geeignete Technik wird von Faktoren bestimmt, einschließlich (aber nicht beschränkt auf) der Kritikalität des Codes, der gewünschten Fehlerrate und der Menge an Zeit / Geld, die investiert werden soll.
Thomas Owens
@Dunk - Ich denke, Sie haben argumentiert, die Entscheidung "Sollen wir den Code überprüfen" aus den Händen des Projektmanagers zu nehmen und sie in die Hände des Managers zu legen, der langfristig für die Softwareplattform verantwortlich ist. Im Allgemeinen ist es eine lohnende Investition in Bezug auf die Langlebigkeit des zu entwickelnden Systems, 5-10% mehr für die Entwicklung angemessener Code-Überprüfungen auszugeben. Aber wahrscheinlich nicht in Bezug auf das Budget und den Zeitplan des aktuellen Projekts.
Dawood sagt, Monica