Wie man Teamkollegen davon überzeugt, TDD zu verwenden [closed]

15

Ich bin die einzige Person in meinem Team, die TDD verwendet. Wie bringe ich sie dazu, es zu benutzen?

Ich ärgere mich, dass der Code eines anderen Benutzers meine Tests durchbricht und ich derjenige bin, der sie reparieren muss.

Behebt die Verwendung von Github, Gabel und Zuganforderung dieses Problem, sodass sie den Test bestehen müssen, bevor der Zug akzeptiert wird?

Ich bin nicht die Projektmanagerin und kann sie anscheinend nicht davon überzeugen, es zu benutzen.

wizztjh
quelle
11
"Jemandes Code wird meine Tests brechen" Haben Sie die Möglichkeit in Betracht gezogen, dass dies darauf hinweist, dass Ihr Design und / oder Ihre Tests einfach zu zerbrechlich sind?
Mücke
1
Eng verbunden: programmers.stackexchange.com/questions/44145/…
Péter Török
2
Beginnen Sie vielleicht mit der Erstellung von Integrationstests. Diese sind schwerer zu knacken, da der Input / Output (fast) immer gleich sein sollte. Wenn sich alle daran gewöhnt haben, fügen Sie Komponententests hinzu, da Integrationstests bei der Ausführung aller Tests etwas langsam sind. Nebenbei bemerkt: Wenn ich ein PM eines kleinen Projekts wäre (weniger als 2 Monate oder so), würde ich es nicht mögen, wenn die Entwickler auch Zeit damit verbringen würden, Tests zu schreiben. Das Projekt muss abgeschlossen sein und das Schreiben von Tests ist gut, aber es braucht Zeit und bei solch kleinen Projekten ist die Wahrscheinlichkeit gering, dass Sie während der Projektzeit viel Wartung durchführen.
Jan_V
1
Entwickler sollten weiterhin robusten und stabilen Code schreiben und Tests können dabei helfen. Wir sagen nicht einmal den Premierministern, dass wir Tests schreiben, da es sie nichts angeht. Wir schreiben sie, um sicherzustellen, dass unser Code noch genauso funktioniert wie vor 5 Monaten. Sie sollten es auch nicht als echte "Tests" ansehen, es ist eher eine Versicherung, ein Helfer oder ein Prüfer. Wenn man sagt, wir schreiben Tests, könnte man verwirrt sein und denken, dass dies eine Aufgabe ist, die ein Tester erledigen sollte.
Jan_V
2
Auch sehr ähnlich zu: programmers.stackexchange.com/q/141468/39178 ... und ich suche immer noch nach ein paar guten Argumenten. Das Problem ist, dass man die Meinung der Menschen wirklich nicht ändern kann, wenn sie nicht bereit sind, sich zu ändern, oder wenn sie das Gefühl haben, dass das, was sie bereits tun, für sie gut genug ist.
S.Robins

Antworten:

5

Meines Erachtens ist der einzige Weg, um von Tests zu überzeugen, zu zeigen, dass sie nützlich sind - dh, dass Testfehler dazu beitragen, Fehler zu finden und zu beheben .

Die Art und Weise, wie Sie das Problem beschreiben, scheint hier nicht der Fall zu sein. Aussehen...

... wenn ich ziehe, bricht jemand meine Tests und ich bin derjenige, der sie reparieren muss.

Wenn ich das richtig verstehe, müssen Sie die Tests ändern. Nun, das hört sich nicht so an, als ob Testfehler helfen, Fehler zu finden und zu beheben , oder? Wenn Tests bei der Suche nach Fehlern nicht helfen, ist es eine ziemlich schwache Position, Ihre Kollegen zu überzeugen - was können sie erwarten, um zu gewinnen? langwierige Korrekturen in fragilem Testcode?

Das mag nach einer Sackgasse klingen, ist es aber nicht. Ihr Endziel (überzeugen Sie für TDD) ist immer noch ziemlich sinnvoll, lassen Sie es nicht fallen. Konzentrieren Sie sich einfach darauf, das entdeckte Hindernis zu beseitigen.

Testfehler, die Sie jetzt stören, sind im Wesentlichen "Fehlalarme" - das heißt, dies sind Fehler in Tests, die nicht im Code enthalten sind. Nutzen Sie diese als Gelegenheit, um Tests zu verbessern und zu lernen, wie Sie ein zuverlässiges Testdesign erstellen können. Arbeiten Sie an Tests, um die Häufigkeit von "Fehlalarmen" zu verringern und das Erkennen von echten Fehlern im getesteten Code zu vereinfachen.

Wenn Sie echte Fehler entdecken, lassen Sie Ihre Kollegen dies wissen und helfen Sie ihnen bei der Behebung - und vergessen Sie nicht, darauf hinzuweisen, dass diese Fehler bei Ihren Tests festgestellt wurden. Das ist eine wirklich solide Grundlage, um Ihre Kollegen zu überzeugen.


Es ist erwähnenswert , dass Test - Design Fähigkeiten , die Sie in „vorläufigen“ Stadium entwickeln wird höchstwahrscheinlich wieder benötigt werden, wenn (wenn :) Sie endlich Ihre Mitspieler zu verwenden TDD überzeugen. Denk daran...

... Was würde passieren, wenn Ihre unerfahrenen Kollegen eine testgetriebene Entwicklung erfahren?

Das Erste, was zu erwarten ist, ist, dass Jungs anfangen werden, beschissene Tests zu schreiben und (Horror!) Sogar gute zu brechen, während sie lernen. Um ihnen zu helfen, einen Weg zu finden, wie sie es richtig machen können, benötigen Sie ein solides Verständnis für gutes Testdesign.

Alle Fehler, die Sie jetzt in Ihren Tests finden und beheben, werden von all Ihren Teamkollegen immer wieder wiederholt, wenn sie anfangen zu lernen. Wenn (wann!) Dies passiert, sollten Sie schnell und klar erklären, wie Sie sich verbessern können, wenn Sie möchten, dass sie TDD weiterhin positiv gegenüberstehen.

Mücke
quelle
2
Gute Antwort, aber ich würde erwähnen, dass, wenn niemand anderes TDD ausführt oder die Testsuite ausführt, ein häufiges Szenario zum Unterbrechen eines Tests darin besteht, dass jemand den Produktionscode geändert hat, ohne den Test zu ändern, um die Änderung des Verhaltens zu erwarten. Könnte so einfach sein wie das Ändern des Wortlauts in einer Ausnahmemeldung. Sie checken ein, OP checkt aus, Tests brechen ab, es kommt zu Heiterkeit. Sie können einen Test betrachten , die eine genaue Fehlermeldung zu spröde, aber der Vertrag für meinen letzten Job behauptet , einen Defekt wie definiert jede Abweichung von der angegebenen AAT und Fehlermeldungen waren häufig Mängel.
KeithS
12

Als ich den Einsatz von Test Driven Development fördern wollte, führte ich ein Cyber-Dojo durch . Bei dieser Art von Übung liegt der Schwerpunkt nicht auf dem Code selbst, sondern auf dem Prozess des Schreibens des Codes .

Wir verbrachten einen Nachmittag zu zweit und wiederholten die gleiche Kata, jedoch unter verschiedenen Bedingungen. Wir begannen mit allen Gruppen, die gleichzeitig eine Übung machten. Dies lieferte eine Grundlinie.

Wir diskutierten dann einige der Grundprinzipien von TDD, ließen alle Partner wechseln und die gleiche Kata wiederholen. Wir haben die gleiche Kata wiederholt, um die Codegenerierung zu unterdrücken und stattdessen die Leute auf den Prozess der Benennung von Testfällen und den Rot / Grün-Zyklus zu konzentrieren.

Dann wiederholten wir die Kata noch einmal, aber ungefähr alle 10 Minuten wechselte eine Person in jeder Gruppe zu einer anderen und simulierte die eher fließenden Teamumgebungen, die wir heutzutage oft vorfinden.

In der letzten Iteration haben wir beide Partner alle 10 Minuten oder so in verschiedene Gruppen wechseln lassen. Dies hat gezeigt, dass mit TDD auch die Übergabe von einem Team an ein anderes nicht unbedingt zu schmerzhaft sein muss, da das Projekt nur einen Rot / Grün-Zyklus von der Arbeit entfernt sein sollte.

Das Interessante war, dass es nur wenige Leute gab, die vor der Sitzung TDD gemacht hatten, aber welche TDD-Kenntnisse sich dort schnell verbreiteten, bis die Kata abschließend durchgingen und die meisten Menschen auf TDD-Weise dachten oder zumindest begriffen konnten, warum könnte von Vorteil sein.

Die Leute sagten im Allgemeinen, dass der Nachmittag sowohl lustig als auch informativ war, und wir suchen jetzt nach anderen Möglichkeiten, Cyber-Dojo an meinem Arbeitsplatz einzusetzen.


Cyber-Dojo , geschrieben von Jon Jagger , eignet sich hervorragend für diese Art von Übung. Es handelt sich um eine webbasierte integrierte Umgebung zum gezielten Üben von TDD und zum Erlernen der Teamdynamik. Es wurden viele Kata ausgewählt, um den Leuten zu helfen, sich auf den TDD-Prozess und nicht auf das Problem zu konzentrieren. Es unterstützt auch eine Reihe von Sprachen, von Python und Ruby bis Java und C ++.

Das Beste ist, wenn Sie nach dem Ausführen einer Kata noch einmal zurückgehen und den rot / grünen Verlauf (oder auch nicht * 8 ') jeder der teilnehmenden Gruppen betrachten können. Die Ampeln bieten eine hervorragende Möglichkeit, die Funktionsweise des TDD-Prozesses zu veranschaulichen.

Wenn Sie Ihren eigenen CyberDojo-Server haben möchten, finden Sie das gesamte Projekt bei github. Von dort aus ist sogar eine virtuelle Turnkey-Linux- Appliance verknüpft. Wenn Sie also bereits VMware Player oder VirtualBox installiert haben, können Sie innerhalb dieser Appliance arbeiten Ein paar Minuten nach dem Herunterladen der Appliance!

Mark Booth
quelle
1
+1 für die Cyber-Dojo-Referenz. War mir nicht bewusst. Sieht sehr interessant aus.
Radarbob
8

Wenn sie TDD widerstehen, ist es in Ordnung. Viele Leute (auch ich) haben Probleme damit, Unit-Tests zu schreiben.

Sie sollten jedoch die Frage stellen, ob es überhaupt keine Komponententests gibt und ob Komponententests nicht funktionieren. Unit-Tests sind ein Sicherheitsnetz, das viele mögliche Fehler verhindert und Code-Refactoring ermöglicht. Erklären Sie die höhere Codequalität und den saubereren Code.

Ich denke, das Beste wäre, ein Video zu finden, das die Vorteile der Verwendung von TDD erklärt, und es in einem Meeting zu zeigen.

Wenn sie sich weigert zuzuhören, können Sie versuchen, zu jemandem über ihr zu gehen, aber das ist vielleicht nicht sehr klug, wenn Ihr Chef so stur ist.

BЈовић
quelle
6

Es ist wirklich schwer, Menschen davon zu überzeugen, ihre Gewohnheiten zu ändern, aber hier sind einige Dinge, die Sie ausprobieren können:

  • Sprechen Sie mit den anderen Entwicklern und erklären Sie ihnen, warum Sie TDD für eine gute Idee halten.
  • Überzeugen Sie sie (oder zumindest einige von ihnen), es für eine begrenzte Zeit zu versuchen
  • Versuchen Sie, einige Mindestanforderungen für eine gute Teamarbeit festzulegen. Sie müssen nicht unbedingt TDD durchführen, aber sie sollten auf keinen Fall Code einchecken, der die Komponententests nicht besteht. Dies ist ein anderes Problem, als sie davon zu überzeugen, TDD zu verwenden, und es ist viel wichtiger, es anzugehen.
  • Versuchen Sie, das Management davon zu überzeugen, eine Testphase für TDD durchzusetzen. Sie müssen bereit sein, Beweise dafür zu liefern, warum dies eine gute Vorgehensweise ist und wie das Unternehmen in Zukunft Zeit und Geld sparen kann.

Wenn all dies überhaupt nicht funktioniert, sollten Sie überlegen, woanders zu arbeiten. Es gibt viele andere Unternehmen, in denen Ihr Leben erheblich einfacher wäre.

Oleksi
quelle
1
Singapur ist ein kleines Land, nicht viele Möglichkeiten.
Wizztjh
6
"Wenn nichts davon funktioniert, sollten Sie überlegen, woanders zu arbeiten." Oder, nur zur Veranschaulichung, Sie könnten in Betracht ziehen, TDD nicht mehr zu verwenden :).
Lukas Stejskal
1
+1 für den dritten Aufzählungspunkt. Das ist das eigentliche Problem.
Riwalk
6

Hier gibt es zwei leicht unterschiedliche Probleme: Leute dazu zu bringen, TDD zu machen, und Leute, die Ihre Tests brechen.

Ich bin mir bei der ersten Ausgabe nicht sicher, persönlich finde ich es eine künstliche Arbeitsweise und nicht für alle Arten der Entwicklung geeignet. Ich bin alle dafür, dass ich eine gute Suite von Komponententests habe, aber ich finde es normalerweise effizienter, zuerst den Code und dann die Tests zu schreiben, da sich meine Ideen beim Schreiben des Codes ständig ändern und es auch Zeitverschwendung ist, Tests zu schreiben früh (IMO).

Richten Sie das Projekt in der zweiten Ausgabe so ein, dass beim Einchecken Komponententests ausgeführt werden, damit andere Entwickler keine andere Wahl haben, als zu wissen, dass sie einen Test gebrochen haben.

Chris Card
quelle
Dies ist ein guter Punkt, es handelt sich um zwei verschiedene Themen. Lösen Sie zunächst das Problem "Sie brechen meine Tests". Dann arbeiten Sie daran, dass sie TDD machen.
ozz
+1 für "seitdem ich den Code schreibe, ändern sich meine Ideen ständig" und interessante Beobachtungen. Vielleicht geht es mir genauso, und deshalb fällt es mir schwer, zuerst Tests zu schreiben? Besonders zu Beginn eines experimentellen Projekts.
Buttons840
4

Wie in vielen anderen "Wie soll ich X davon überzeugen, die Y-Methode / Technologie anzuwenden", ist meine Antwort immer dieselbe: am Beispiel.

Verwenden Sie es und erzielen Sie bessere (mesurable) Ergebnisse. Stellen Sie dann sicher, dass die anderen es bemerken.

Klaim
quelle
2

Bei einem vorhandenen Projekt ist dies nicht der Fall. Es ist dasselbe, als würden Sie Änderungen an der Art und Weise vornehmen, in der geschweifte Klammern in altem Code platziert werden, weil Sie den Einrückungsstil nicht mögen.

Dante
quelle
Es ist ein neues Projekt, ich habe es gerade in dieser Woche begonnen.
Wizztjh
Unser letztes Projekt wurde zu groß und fehlerhaft. Daher halte ich es für eine gute Idee, TDD für dieses Projekt zu verwenden.
Wizztjh
2

Viele gute Ratschläge. Und jetzt noch ein bisschen mehr ...

Sie müssen Herz und Verstand (WHAM) jeweils für eine Luddite gewinnen. Vergiss es ihnen in den Rachen zu zwingen. Viele Objektstunden über einen unbestimmten Zeitraum (tut mir leid). Schließlich werden Sie eine kritische Masse erreichen und die "richtigen" Personen überzeugen.

Ihre ständige und beständige Begeisterung und Hingabe für TDD ist für eine WHAM-Kampagne von großer Bedeutung.

Sie müssen das Testen und die Codeänderungen in lehrbare Momente verwandeln, die Lektionen, die für Ihre Co-Codierer von Bedeutung sind. Mach es persönlich. Ist ihnen der Ruf wichtig, überdurchschnittlich sauberen Code zu liefern? Kümmern sie sich darum, dass das Management sie über Code hinwegtäuscht, der jetzt zu spät ist, weil ihnen Integrationstester einen Reality-Check gegeben haben? Hat Jack den Wunsch, einen schwierigen Code zu ändern, hat aber Angst vor Nebenwirkungen?

Sammeln Sie gute Beispiele für das Durchbrechen von Tests, indem Sie durch Codierer verursachte Fehler einfangen. Die Programmierer werden das Ändern von Tests als unnötige Arbeit in irrelevanten Code ansehen. sie müssen verstehen, dass die Tests gerade ihre Esel bedeckten.

Suchen Sie nach Code mit globalen Auswirkungen (eine einfache Dienstprogrammmethode), erstellen Sie einige Tests und demonstrieren Sie dann , dass Tests Änderungen zulassen, ohne Erdbeben in der gesamten Anwendung zu befürchten. Und ich möchte auch das emotionale Problem hervorheben!

Sammeln Sie einige einfache Time-to-Clean-Codebeispiele (dh in die Produktion übernommen) und zeigen Sie, dass wir sie trotz des zusätzlichen Aufwands für die Testcodierung schneller und mit höherer Qualität erledigen konnten.

Warnung: TDD ist keine Heilung für und kann schlechtes OO-Design und schlechte Codierung nicht überwinden (aber es kann es definitiv aufdecken). Lassen Sie nicht zu, dass die Ludditen den Testcode für ihre Inkompetenz verantwortlich machen.

Radarbob
quelle
1

Ich würde versuchen, den Manager erneut zu überzeugen. Nach dem, was Sie geschrieben haben, können Sie Ihre Teamkollegen meines Erachtens nicht davon überzeugen, TDD hinter ihrem Rücken durchzuführen.

Du musst ihre Sprache sprechen. Manager sind in der Regel nicht von der Technologie beeindruckt, verstehen jedoch die Geschäftssprache:

  • Tests sparen Zeit während der Entwicklung, da anstelle manueller Tests (Fehler lokal reproduzieren, mit der Rails-Konsole spielen ...) automatisch Tests ausgeführt werden

  • Test spart viel Zeit bei der Anwendungswartung, wenn Sie Fehler leicht erkennen können, wenn Sie etwas ändern. Erklären Sie, dass Tests höhere Anfangsinvestitionen erfordern, sich aber langfristig amortisieren (die Wartung guter Tests ist normalerweise schnell und einfach).

  • und was wirst du mit der zusätzlichen Zeit anfangen? erstelle moar stuff und verdiene moar geld :)

Versuchen Sie es mit folgendem Argument für Programmierer (es hat bei mir schon funktioniert): "Sie testen Code sowieso mit oder ohne TDD. Nur Sie tun es manuell, anstatt es zu automatisieren. Intelligente Entwickler automatisieren so viele Dinge wie möglich. "

Lukas Stejskal
quelle
0

Bei realen Projekten mit Terminen möchten sich die Leute darauf konzentrieren, die Arbeit mit dem zu erledigen, was sie wissen. Das ist nur die menschliche Natur. Und wenn Sie TDD nie gelernt hätten, wären Sie in dieser Situation genauso wie sie. Ich garantiere es.

Warum liebt, lernt und lebt die Menge der Müllsammler RAII nicht? Wie können Sie sich für die automatische Speicherverwaltung einsetzen, aber die altmodische Verwaltung für allgemeine Ressourcen wie Dateien, Verbindungen usw. beibehalten? Weil RAII eine Technologie ist, die sie nicht kennen, verstehen und keine Zeit haben, sie zu nutzen, wenn sie eine Frist haben, in der die Arbeit erledigt werden muss.

Ich wette, Sie verwenden RAII nicht und sind nicht bereit, es für Ihr aktuelles Projekt zu lernen und zu verstehen. Dasselbe wie Ihr Kollege, der nicht bereit ist, TDD zu lernen und zu verstehen.

Lord Tydus
quelle