Wie wähle ich den zu überprüfenden Code aus?

14

Ich bin Teil eines Teams von sieben Entwicklern in einem kleinen Softwareunternehmen und versuche, regelmäßige Gruppencode- und Entwurfsprüfungen einzuführen. Wir haben in der Vergangenheit einige Überprüfungen durchgeführt, die jedoch sporadisch waren. Ich würde es gerne regelmäßiger machen.

Ich habe Code Complete und andere ähnliche Ressourcen lesen und sie sprechen über die Mechanik , wie Code - Reviews durchzuführen , aber ich habe es nicht gelungen , alle bewährten Verfahren zu finden , wie zu wählen , was zu überprüfen. Wir haben eine Codebasis, die älter als acht Jahre ist und eine Vielzahl von Sprachen abdeckt. Es gibt also viel zu sehen.

Hier sind einige der Faktoren, die sich auf die Auswahl auswirken könnten:

  • Sprache: C, Java, SQL, PL / SQL
  • Codealter: Neuer Code vs. alter Code
  • Code-Nutzung: Häufig verwendeter Code im Vergleich zu (effektiv) totem / wenig verwendetem Code
  • Codewichtigkeit: Kritischer Code im Vergleich zu nicht kritischem Code
  • Entwickler: Junior-Entwicklercode vs Senior-Entwicklercode

Ich verstehe, dass dies keine Frage mit einer absoluten endgültigen Antwort ist, aber jede Anleitung wäre nützlich.

Einige periphere Fragen:

Burhan Ali
quelle

Antworten:

12

Im Allgemeinen müssen Sie alles überprüfen . Wenn ein neuer Antrag 2 000 LOC enthält, müssen alle 2 000 LOC überprüft werden.

Aus diesem Grund gibt es keine bewährte Methode für die Auswahl der zu überprüfenden Elemente.

Wenn Sie sich einer vorhandenen großen Codebasis nähern, die noch nie überprüft wurde, müssen Sie eine vorhandene große Codebasis erneut schreiben und festlegen , wo Sie beginnen möchten. Es kommt stark darauf an:

  • auf der Codebasis (ein einzelner monolithischer Code wäre schwieriger umzuschreiben / zu überprüfen als ein Satz separater Komponenten usw.),

  • Ihr Kontext (können Sie alles, woran Sie arbeiten, unterbrechen und drei Monate (drei Jahre?) damit verbringen, nur am Umschreiben / Überprüfen zu arbeiten, oder müssen Sie dies nur in kurzen Abständen tun, wenn Sie Zeit haben)?

  • die Art der Überprüfung, die Sie durchführen (haben Sie eine Checkliste mit zu überprüfenden Dingen? Abhängig von den Elementen der Checkliste möchten Sie möglicherweise zuerst einige Teile überprüfen).

Wenn ich du wäre, würde ich:

  • Befolgen Sie das 80% -20% -Prinzip, das im ersten Kommentar der zweiten Frage erwähnt wird, auf die Sie verwiesen haben.

  • Berücksichtigen Sie, dass 100% als Ideal vielleicht nicht wert sind. Es ist wie eine 100% ige Codeabdeckung für Komponententests, mit der Ausnahme, dass eine solche Codeabdeckung meist unmöglich oder extrem teuer ist.

  • Beginnen Sie mit den Teilen des Codes, die Sie am häufigsten verwenden und die am wichtigsten sind. Wenn die Codebasis über eine Bibliothek verfügt, die neue Benutzer auf Ihrer Unternehmenswebsite authentifiziert und registriert, überprüfen Sie diese zuerst, da Sie auf jeden Fall Sicherheitslücken finden möchten, bevor Hacker dies tun.

  • Verwenden Sie vorhandene Metriken, um zu bestimmen, was zu überprüfen wichtiger ist. Wenn ein Teil der Codebasis überhaupt keine Komponententests enthält, während ein anderer, ebenso wichtiger Teil eine Codeabdeckung von 85% aufweist, lesen Sie zunächst den ersten Teil. Wenn ein Teil der Codebasis von einem Entwickler geschrieben wurde, von dem bekannt ist, dass er unerfahren ist und mehr Fehler enthält als seine Kollegen, überprüfen Sie zunächst seinen Code.

Arseni Mourzenko
quelle
Wenn Sie TDD richtig durchführen, ist eine 100% ige Abdeckung nicht nur einfach, sondern auch unvermeidlich und stellt sich in der Tat als ein sehr niedriger Balken heraus.
Jonathan Hartley
4

Überprüfen Sie zunächst alle Änderungen, die Sie am Code vorgenommen haben. das wird verhindern, dass sich das Problem verschlimmert. Beginnen Sie dann mit der Überprüfung des Codes anhand der Häufigkeit der Änderungen. Dies werden die Problembereiche sein.

Sie sollten herausfinden, wie Sie nachverfolgen können, dass Sie einen Codeabschnitt überprüft haben, damit Sie den Überprüfungsumfang Ihres Codes im Verhältnis zu anderen Bedenken analysieren können.

Wenn Sie feststellen können, welcher Code nicht von Ihren Tests abgedeckt wird, wird dies zur Überprüfung mit höherer Priorität behandelt.

retracile
quelle
3

Überprüfen Sie alle vorgenommenen Änderungen, bevor Sie die Produktion starten. Installationsskripte, Quellcode, Datenbankänderungen, alles! Bei der Codeüberprüfung geht es darum, zu verhindern, dass fehlerhafter Code in die Produktion gelangt. Sei es ein schlechtes Organisationsschema oder einfach ein eingeführter Fehler, weil etwas übersehen wurde.

Das Refactoring des aktuellen Codes, an dem Sie arbeiten, geht Hand in Hand mit der Codeüberprüfung. Wenn ich beispielsweise Code überprüfe und in einer Klasse, die eine Fehlerbehebung enthielt, doppelten Code vorhanden ist, würde ich diesen nicht weitergeben, selbst wenn der Entwickler diesen Code in der Fehlerbehebung nicht geändert hätte. Ich würde sie zurückgehen lassen und den doppelten Code entfernen.

Wenn Sie unablässig umgestalten, wird die Codeüberprüfung nützlich. Sonst ist es Zeitverschwendung.

Wenn Sie den Codeüberprüfungsprozess als Schritt in Ihren Entwicklungsprozess integrieren, wird die Codebasis mit der Zeit besser. Besser noch, Sie sollten Ihren Entwicklern nicht erlauben, neue Funktionen oder Fehlerbehebungen vorzunehmen, bis der Codeüberprüfungs-Rückstand leer ist. Dies stellt sicher, dass die Codeüberprüfung durchgeführt wird.

Gibt es bekannte Bereiche, die überarbeitet werden müssen, dauert dies jedoch lange (dh 1 Woche oder länger). Erstellen Sie dann ein Arbeitselement für dieses Refactoring und fügen Sie es als zu bearbeitendes Element hinzu.

Charles Lambert
quelle
1
Ich bin nicht einverstanden - lassen Sie den Code in die Produktion gehen und überprüfen Sie ihn, wenn Sie können. Der Trick besteht darin , Ihren Entwicklern zu vertrauen und davon auszugehen, dass sie keine großen Fehler machen. Wenn dies der Fall ist (wir alle), können Sie die Probleme nach dem Einchecken beheben und umgestalten. Der Versuch, zu verhindern, dass der gesamte Code vor der Überprüfung in die Produktion gelangt, bedeutet in der Regel, dass (meiner Erfahrung nach) kein Code in die Produktion gelangt. Wenn Sie Ihren Entwicklern nicht vertrauen, können Sie sie natürlich zusammen mit der scharfen Schere im stationären Schrank einsperren.
Gbjbaanb
"Überprüfen Sie alle vorgenommenen Änderungen, bevor sie in die Produktion gelangen", stimme ich dem größtenteils zu. "Besser noch, Sie sollten Ihren Entwicklern nicht erlauben, neue Funktionen oder Fehlerbehebungen vorzunehmen, bis der Codeüberprüfungs-Rückstand leer ist." Ich würde dies gerne tun, aber angesichts des wirtschaftlichen Drucks ist dies leider nicht realistisch.
Burhan Ali
Ich vertraue immer meinen Entwicklern. Die Entwickler sind diejenigen, die die Codeüberprüfung durchführen. Die Einführung eines Prozesses, der sicherstellt, dass die Codeüberprüfung in keiner Weise durchgeführt wird, spiegelt das mangelnde Vertrauen in die Fähigkeiten der Entwickler wider. Die Entwickler, Projektmanager und Geschäftsinhaber sollten sich mehr darüber freuen, dass sie sich um eines weniger Sorgen machen müssen, nämlich daran zu denken, eine Codeüberprüfung durchzuführen.
Charles Lambert
@BurhanAli - Es ist sehr realistisch. Unsere Kunden waren namhafte Kunden (denken Sie an Microsoft) und unsere Veröffentlichungszyklen sind sehr schnell. Es sollte ungefähr 30 Minuten dauern, manchmal sogar eine Stunde, bis ein Entwickler eine Änderung überprüft. Wenn es länger dauert, teilen Sie Ihre Arbeit höchstwahrscheinlich nicht in ausreichend kleine Teile auf, was insgesamt ein anderes Problem darstellt.
Charles Lambert
2
@gbjbaanb Sie lassen nicht überprüften Code in Produktion gehen? Beeindruckend. Es geht nicht darum, Ihren Entwicklern nicht zu vertrauen (Sie können einen Ihrer Entwickler dazu bringen, anderen Code zu überprüfen), es geht darum, offensichtliche Fehler zu finden
Rob
2

Überprüfen Sie zunächst den gesamten neuen Code und nehmen Sie Änderungen am vorhandenen Code vor.

Bei der Überprüfung von Änderungen an vorhandenem Code sollte der Entwickler die Boyscout-Regel befolgen. Lass den Code besser als er ihn gefunden hat.

Das bedeutet nicht, dass Sie die gesamte Datei reparieren müssen, um perfekt zu sein. Aber es sollte nicht zu dem Durcheinander beitragen, es sollte es ein bisschen besser machen. Vielleicht, indem Sie die Änderungen in neue Klassen verschieben, die richtig strukturiert sind, und den Rest der ursprünglichen Codedatei so lassen, wie er ist (schließlich funktioniert er).

Sobald Sie als Entwickler beginnen, den Code zu verbessern, indem Sie den gesamten neuen Code und die Änderungen überprüfen, sollten Sie wissen, in welchen Bereichen der Anwendung die meisten Änderungen erforderlich sind. Überprüfen Sie diese und diskutieren Sie nach und nach, wie sie verbessert werden können.

Das Überprüfen von Code, der vor 10 Jahren geschrieben wurde, ist sinnlos. Der Entwickler hätte sich in diesen 10 Jahren verbessern müssen. Es macht also keinen Sinn, es noch einmal zu lesen, um zu erfahren, was Sie alle wissen.

Der Zweck der Codeüberprüfung besteht darin, die Fehler, die Sie derzeit machen, zu verbessern und zu korrigieren und dieses Wissen im Team zu teilen.

CaffGeek
quelle
+1 für "Lass den Code besser, als er ihn gefunden hat." Das versuche ich immer zu fördern. Was das Überprüfen von 10 Jahre altem Code angeht, stimme ich dem zu, was Sie sagen. Aber gibt es vielleicht einen Vorteil, wenn Sie dies tun, um das Team mit der Idee der Überprüfung zufriedener zu machen? Es besteht nicht die große Gefahr, dass sich Leute gegen Code wehren, den sie nicht geschrieben haben (oder der so alt ist, dass sie vergessen haben, dass sie ihn geschrieben haben).
Burhan Ali
1

In meinem Projekt ist die Codeüberprüfung in den meisten Fällen ein Muss für jede Aufgabe / User Story / jeden Fehler, der entwickelt wird. Wir verwenden Scrum / Agile-Prozesse, und Ticket / Story wird erst nach dem Schreiben von Komponententests und dem Abschluss der Codeüberprüfung in den Build verschoben (dies ist ein Rückstand für die Qualitätssicherung).

Zu diesem Zweck verwenden wir die Atlassian FishEye- Analyse mit Crucible Code Review, die in JIRA + SVN integriert ist.

Wenn der Entwickler den Code für eine bestimmte Story eincheckt, erstellt er eine neue Codeüberprüfung in FishEye, in der er die anderen Mitglieder des Teams auswählt, die die Überprüfung durchführen sollen.

Sobald die Codeüberprüfung abgeschlossen ist (das Tool hebt die übermittelten Änderungen hervor und ermöglicht es, die Kommentare für die jeweilige Codezeile zu hinterlassen), korrigiert der Entwickler die genannten Probleme / implementiert die vorgeschlagenen Verbesserungen und verschiebt das Ticket in die Spalte "Built" in JIRA bereit zum Testen und dass keine weiteren Codeänderungen für dieses spezielle Arbeitselement erwartet werden.

Dies stellt auch sicher, dass die Qualitätssicherung keine Änderungen testet, die möglicherweise während der Umgestaltung des Codes nach der Codeüberprüfung fehlerhaft sind .

Zusammenfassend muss der gesamte Code überprüft werden - dies unterstützt die hohe Qualität des Codes, was normalerweise zu einem besseren Design, einer besseren Lesbarkeit, Wartbarkeit und Testbarkeit des Codes führt und die Entwicklungsleistung auf lange Sicht verbessert.

Paul
quelle