Verbesserte Code-Überprüfung und Unit-Testing-Praxis

15

Wie können Sie als Teamleiter, der eine Gruppe von Entwicklern verwaltet, die keine Erfahrung (und keine Notwendigkeit) mit Codeüberprüfung und Komponententests haben, die Praxis der Codeüberprüfung und Komponententests vorantreiben?

Wie schaffen Sie eine Möglichkeit, Codeüberprüfung und Komponententests auf natürliche Weise in den Ablauf des Entwicklers zu integrieren?

Einer der Widerstände dieser beiden Bereiche ist, dass "wir immer auf dem neuesten Stand sind, also keine Zeit für Codeüberprüfung und Komponententests".

Ein weiterer Widerstand für die Codeüberprüfung ist, dass wir derzeit nicht wissen, wie es geht. Sollten wir den Code bei jedem Check-in überprüfen oder den Code zu einem bestimmten Zeitpunkt überprüfen?

Graviton
quelle
Auf jeden Fall eine interessante Frage - es gab andere ähnliche Fragen, die jedoch alle vom Programmierer gestellt wurden, nicht von den Lead- / PM-Mitarbeitern.
Michael K

Antworten:

16

Stimmen Ihre Teammitglieder tatsächlich darin überein, dass Codeüberprüfungen und Unit-Tests gute Dinge sind, nur gibt es dafür keine Zeit?

Oder versuchen sie einfach, die Idee mit dieser Ausrede zurückzuweisen?

Im ersten Fall besteht die Lösung darin, sofort damit zu beginnen . (OK, wenn Sie sich in den letzten Tagen vor einem wichtigen Meilenstein befinden, können Sie vielleicht bis dahin warten - aber nicht mehr.) Wir hatten diese Situation an einem früheren Arbeitsplatz, an dem ich als Qualitätsingenieur für die Verbesserung der Codierungspraktiken verantwortlich war Gesamtqualität. Wir haben den Beginn der Codeüberprüfungen bis nächste Woche verschoben. Eines Tages wurde mir klar, dass wir das ungefähr einen Monat lang gemacht haben und wahrscheinlich bis zum Ende weitermachen werden, wenn ich nicht etwas anderes versuche. Also habe ich die erste Codeüberprüfung für diese Woche angekündigt. Ich sagte den Jungs: "Kein Problem, wenn es nicht perfekt sein wird oder wenn wir noch nicht genau wissen, was wir tun sollen - wir werden einfach anfangen, sehen, wie es läuft und die Dinge verbessern, wenn wir lernen." Es hat funktioniert, zumindest bis ich die Firma verlassen habe.

Im zweiten Fall benötigen Sie möglicherweise mehr Informationen und eine offene Diskussion mit dem Team. Besprechen Sie Probleme mit der Codequalität, fragen Sie sie, was sie als Probleme im Entwicklungsprozess (oder im Fehlen von Problemen ) / im Code / beim Testen usw. ansehen . Das ultimative Ziel ist nicht unbedingt, Codeüberprüfungen durchzuführen - sie sind nur Mittel, während das Ziel darin besteht, den Entwicklungsprozess und die Qualität seiner Ausgabe zu verbessern. Es könnte sich herausstellen, dass es andere, schmerzhaftere Probleme gibt, die einfacher behoben werden könnten und schneller mehr Nutzen bringen. dann nimm diese zuerst. Dies können sogar geringfügige Änderungen in der Umgebung oder im Prozess sein. All dies wird die Moral des Teams verbessern, gegenseitiges Vertrauen aufbauen und der Teambindung helfen.

Unter dem Strich kann man niemandem Qualität aufzwingen - man kann nur die Hindernisse beseitigen, die der Schaffung von Qualität im Wege stehen . Durch die Durchsetzung strenger Regeln und verbindlicher Praktiken ohne vorherigen Teamkonsens können Sie das Team entfremden und letztendlich die angestrebte Qualitätsverbesserung verhindern. OTOH Durch offene Diskussion und das Streben nach Einigung über die drängendsten Probleme des Teams und die Verbesserung der Situation ist es wahrscheinlicher, dass Sie Teamunterstützung erhalten. Dies wird auf lange Sicht einen entscheidenden Unterschied bei der Aufrechterhaltung der Qualitätsverbesserung bewirken.

Péter Török
quelle
nette antwort. Sie sind sich nicht sicher, ob Sie ein System für die Codeüberprüfung haben, damit diese die Idee leichter umsetzen können? Ich denke, jeder weiß, dass das Überprüfen und Testen gut ist, nur dass sie es nicht sehen. Das Ziel eines guten Systems zur Codeüberprüfung besteht darin, ihm das Erkennen des Lichts zu erleichtern und das Testen von Einheiten zu vereinfachen.
Graviton
@Graviton, klar, Sie können ein paar Test-Code-Überprüfungen durchführen, damit die Leute den Dreh raus und entscheiden können, ob sie es mögen oder nicht. Stellen Sie sicher, dass keine Schuldzuweisungen erfolgen und sich die Leute weiterhin auf die gefundenen Probleme konzentrieren und nicht auf den Autor. Wählen Sie zuerst die richtigen Codeteile aus, möglicherweise sogar den alten Code, der von keinem der aktuellen Teammitglieder geschrieben wurde. Es sollte einigermaßen komplex, aber nicht zu schrullig sein, damit die Leute es realistisch nachvollziehen und sogar einige echte Fehler darin entdecken können.
Péter Török
+1 für das Sprichwort "Jetzt anfangen". IME ist der einzige Weg, um den Aufschub zu überwinden.
Michael K
5

Das klassische Problem. Nie genug Zeit, um es richtig zu machen, immer genug Zeit, um die Arbeit zu wiederholen. Bis die Leute anfangen, die besten Praktiken zu praktizieren, wird es anscheinend nie genug Zeit geben, um die besten Praktiken zu praktizieren. Zumal die Siege für Menschen außerhalb der Entwicklung unsichtbar sind.

Der Schlüssel für die Codeüberprüfung ist, dass Sie so wenig Code wie möglich und so schnell wie möglich überprüfen möchten. Auf diese Weise ist es einfacher, Zeit für die Überprüfung zu haben, der Code ist für die Benutzer aktuell, und die Implementierung der vorgeschlagenen Verbesserungen wird einfacher. Im Extremfall möchten Sie jeden einzelnen Check-in überprüfen. Ein gutes Tool zur Automatisierung ist http://code.google.com/appengine/articles/rietveld.html . Es ist eine Variante des Tools, das Google intern verwendet, um die Codeüberprüfung bei jedem Einchecken zu erzwingen.

Die Herausforderung der Codeüberprüfung wurde vor Jahrzehnten im Klassiker The Psychology of Computer Programming beschrieben . Das Problem ist, dass Programmierer dazu neigen, ihr Selbstbild an ihre Programmierfähigkeiten zu binden. Was bedeutet, dass Programmierer immer dann, wenn sie mit Beweisen konfrontiert werden, dass ihre Fähigkeiten nicht dem Schnupftabak gewachsen sind, dazu neigen, dies persönlich zu nehmen. Dies kann zu ernsthaften Konflikten führen. Wenn Sie Steve McConnells Klassiker Rapid Development aufgreifen, bietet er eine Reihe von Vorschlägen für die Einrichtung eines Codeüberprüfungsprozesses, der die Wahrscheinlichkeit solcher Konflikte verringert. (Ein wichtiges Element ist, sicherzustellen, dass das Management niemals in den Prozess involviert ist.) Beachten Sie, dass dies die Konfliktwahrscheinlichkeit verringert, aber nicht das Auftreten von Konflikten verhindert.

Trotzdem überwiegen die Vorteile bei weitem die Kosten. Nur um eine Metrik zu zitieren: IBM stellte fest, dass die Codeüberprüfung Dollar für Dollar war, um Fehler am effektivsten zu finden und zu beseitigen. Dies ersetzt in keinem Fall Ihre QS-Abteilung. Aber es führt zu weitaus weniger Problemen, die sie finden müssen. Und das ist, bevor Sie sich mit den Vorteilen befassen, die das Lernen beschleunigen, Wissen verbreiten usw.

btilly
quelle
+1 für aktuelle Forschungsergebnisse. Haben Sie einen Link zu den IBM-Seiten?
10.
Ich habe keinen Link zu ihnen, aber Code Complete .
btilly
3

Gib ihnen nicht die Option. Machen Sie Tests und Überprüfungen obligatorisch. Wenn sie nicht zusammenarbeiten, können Sie auf einige Hardlinetaktiken zurückgreifen, z. B. das Ablehnen nicht getesteter oder nicht überprüfter Werbeaktionen. Wenn die Dinge wirklich schlecht sind, entlassen Sie Ihren schlimmsten Täter.

Ich habe Fälle gesehen, in denen ein Team immer hinter dem Zeitplan zurückliegt, weil es immer Fehler behebt, die durch Tests und Überprüfungen hätten entdeckt werden müssen. Ein bisschen mehr Arbeit im Voraus spart auf lange Sicht viel mehr Zeit und je eher Sie Ihr Team in Einklang bringen, desto besser wird Ihr Team.

Leider kann dies einige Zeit in Anspruch nehmen, um wirklich Ergebnisse zu erzielen. Um die Praxis zu fördern, können Sie die Häufigkeit von Fehlerberichten, die durchschnittliche Zeit bis zur Behebung von Fehlern und die Implementierungsrate der Funktionen aufzeichnen. Normalerweise stelle ich fest, dass sich diese Kennzahlen nach etwa sechs Monaten Test- und Überprüfungszeit verbessern und Ihr Team sie endlich erhält.

Schmiede
quelle
Wenn Sie 6 Monate lang ohne Tests und Überprüfungen entwickelt haben, werden Sie zu dem Zeitpunkt, zu dem Sie diese Methoden implementieren müssen, sagen, dass Sie nicht die Zeit haben, weil Sie Fehler beheben müssen.
Graviton
Ziemlich harsche Antwort!
Marcie
Entschuldigung, ich war mir in den sechs Monaten vielleicht nicht sicher. Ich meinte, dass die Metriken nach sechs Tests und Überprüfungen merklich besser werden. Der Punkt ist, dass man einfach mit dem Testen beginnen muss, um den Nutzen zu erzielen - die Gewinne, die durch das Testen erzielt werden, werden nicht sofort gesehen.
Smithco
1

Es ist schwierig, tdd gegen den Willen der Entwickler einzuführen. Es ist schwer zu lernen, tdd zu lieben.

Da tdd auf der grünen Wiese am effizientesten ist (oder hart, teuer, ineffizient, wenn die Tests nachträglich durchgeführt werden), würde ich mit einem kleinen Team beginnen, das etwas Neues implementiert. Wenn Sie zwei Entwickler im Team finden, die weniger gegen tdd sind als die anderen, ist dies ein guter Ausgangspunkt. Denken Sie daran, dass die Produktivität der Tdd-Entwickler leiden wird, während sie mit Tdd unerfahren sind.

Diese tdd-Entwicklung ist ein guter Ausgangspunkt für ein Codereview. Diskutieren Sie, wie das tdd die Programmarchitektur beeinflusst und wie es die Softwarewartung erleichtert.

k3b
quelle