Wie überzeugen Sie das Management, in Unit-Tests zu „investieren“?

45

Wie haben Sie Ihren Manager davon überzeugt, dass er Sie zum Unit-Test einlädt?

Unter "Verwendung" verstehe ich, dass es mir gestattet ist, die Komponententests im Laufe der Zeit zu entwickeln, in die Quellcodeverwaltung einzuchecken und aufrechtzuerhalten usw.

Typische Management-Einwände sind:

  1. Der Kunde hat für Unit-Tests nicht bezahlt
  2. Das Projekt lässt keine Zeit für Unit-Tests
  3. Technische Schulden? Welche technischen Schulden?

Kennen Sie andere Einwände? Was waren deine Antworten?

Danke im Voraus!

louisgab
quelle
6
Zu diesem Thema gibt es in artofunittesting.com ein ganzes Kapitel .
StuperUser
6
Mischen Sie keine Tests und TDD, BITTE ! Es lässt die Leute denken, dass sie keine Tests brauchen, es sei denn, sie machen TDD!
P Shved
1
Menschen, die überzeugen müssen, können nicht überzeugen. Betrachten Sie Ihr Szenario als eine verlorene Sache.
Mark Canlas
@Pavel, zuerst dachte ich, du würdest nicht picken, aber du hast recht. Ich möchte die "Erlaubnis" zum Unit-Test haben, Punkt. TDD ist mein eigenes Ding.
Louisgab
6
Warum müssen Sie die Erlaubnis einholen, um zu überprüfen, ob Ihr Code wie erwartet funktioniert?
Jaap

Antworten:

25

Ich bin kürzlich auf dieses Problem gestoßen, als ein Kunde an Bord unserer Methodik war, aber das höhere Management erfuhr, dass die Entwickler ihre Zeit mit Testen und nicht mit Entwickeln verbrachten, und war besorgt darüber - schließlich hatten sie QA-Mitarbeiter, die die Tests durchführten! Ich habe hier darüber gebloggt, wie ich damit umgegangen bin:

http://practicalagility.com/show-them-the-numbers-its-results-that-matter/

Zusammenfassend habe ich unsere geschätzten Stunden mit den tatsächlichen Stunden für das Projekt verglichen und dann unsere Fehlerquote mit der Fehlerquote anderer Teams verglichen. In unserem Fall waren diese Zahlen günstig und es gab keine Bedenken mehr.

Mein Fazit aus dieser Erfahrung lautet:

... Der beste Weg, jemanden davon zu überzeugen, dass Ihre Vorgehensweise praktisch und pragmatisch ist, besteht darin, sie zu tun und sie an anderen Vorgehensweisen zu messen. Die Leute interessieren sich nicht für Dogmen, oder warum Sie denken, dass etwas der beste Weg sein sollte. Nur wenn Sie den Menschen die Zahlen zeigen und die Effektivität Ihres Ansatzes messen, können Sie wirklich zeigen, dass Ihre Praktiken effektiv sind.

Bei anderen Projekten haben wir mit Kundenentwicklern zusammengearbeitet, die keine Komponententests erstellt oder TDD durchgeführt haben, und wir mussten Tests aufrechterhalten, die sie brechen. Es wird jedoch sehr einfach, den TDD-Ansatz an diese Kundenentwickler zu verkaufen, wenn Sie ihnen sagen können, was sie im Code gebrochen haben, bevor sie es wissen!

In Ihrem Fall würde ich es also bei Bedarf heimlich tun (vielleicht gibt es einen kleinen Bereich des Codes, in dem Sie beginnen können, diese Änderungen häufig zu testen oder für den Sie verantwortlich sind), aber behalten Sie Ihre Zahlen im Auge - was ist das? Aufwand für die Erstellung Ihrer Tests? Was ist die Fehlerrate? Wie ist der Vergleich mit anderen Projekten / Teammitgliedern?

Meiner Meinung nach sollte niemand um Erlaubnis bitten oder sich dafür entschuldigen müssen, dass er seine Arbeit ordnungsgemäß ausführen möchte, und jeder professionelle Entwickler sollte versuchen, seinen Code mit automatisierten Tests zu testen, wo immer dies möglich und praktisch ist. Hoffentlich ist es in Ihrem Fall beides. Viel Glück!

Paddyslacker
quelle
Danke für die Antwort. Ich habe versucht, den Link, aber es scheint kaputt. Ich denke, ich würde es gerne lesen, wenn es verfügbar wäre.
Joe J
Joe, entschuldige den Deadlink. Ich habe dies in meinem persönlichen Blog erneut gepostet, daher sollte der Link jetzt funktionieren.
Paddyslacker
2
Dies ist eine gute Antwort, aber nicht jeder kann leicht vergleichen, was er mit einem anderen Projekt macht. Ich kann mich nicht erinnern, wo ich es gelesen habe, aber das überzeugendste Argument für einen Unternehmer, das ich gesehen habe, war der Vergleich von Unit-Tests mit doppelter Buchführung. Naiv ist es Zeitverschwendung, die Zahlen zweimal zu machen. Aber jeder, der etwas über Buchhaltung weiß, würde es als unverzeihlich verantwortungslose Pflichtverletzung betrachten, nur eine Seite der Bücher zu tun. Unit Testing ist die analoge Entwicklung zur doppelten Buchführung.
JimmyJames
@JimmyJames, ich stimme zu, dass Sie nicht immer mit einem anderen Projekt vergleichen können, und ich stimme Ihrer Analogie zur doppelten Buchführung zu. Ich denke, wenn Sie anfangen, Komponententests auf einer vorhandenen Codebasis ohne Tests durchzuführen, können Sie die Fehlerrate der Codebasis und andere Metriken zwischen dem Teil, der durch Komponententests abgedeckt wird, und dem nicht abgedeckten Code vergleichen, sodass Sie einige echte Daten zum Sichern haben Ihr Ansatz auch.
Paddyslacker
@Paddyslacker Ich bin nicht anderer Meinung. Es ist allerdings ein bisschen eine Henne-Ei-Sache. Wenn Sie eine Erlaubnis benötigen, um mit dem Schreiben von Komponententests zu beginnen, können Sie diese nur schwer verwenden, um den Nachweis zu erbringen, dass die Erlaubnis erteilt werden sollte. Es ist nicht entweder oder. Der Vergleich mit realen Daten ist ein viel, viel stärkeres Argument. Dieses alternative Argument ist schwächer, aber einfacher zu montieren.
JimmyJames
20

Return on Investment (ROI) anzeigen

Das Schreiben automatisierter Tests braucht Zeit. Einmal. Das Ausführen automatisierter Tests nimmt keine Zeit in Anspruch, da Sie während der Ausführung etwas anderes tun können.

Beispiel: Das manuelle Testen von Feature X dauert 30 Minuten. Das Schreiben eines automatisierten Tests würde 1 Stunde dauern. Selbst wenn wir keine Fehler haben, müssen wir Feature X im Verlauf des Projekts zehn Mal testen, da die abhängigen Ebenen und Komponenten geändert werden. Durch die Automatisierung des Tests von Feature X sparen wir 4 Stunden über die gesamte Laufzeit des Projekts.

In der Realität zahlen sich automatisierte Tests bei einem Fehler wirklich aus - Erstens finden sie Fehler frühzeitig und kostengünstig, was Zeit und Peinlichkeit spart. Zweitens summiert sich die Zeitersparnis im Vergleich zum manuellen Testen außerordentlich schnell, wenn Sie einen schwierigen Fehler haben und viele Zyklen des Code-Build-Tests durchlaufen, um dies herauszufinden.

Unternehmen verstehen es, Zeit und Geld zu sparen. So verkaufen Sie es.

Steven A. Lowe
quelle
3
Auch wenn die Anwendung einmal implementiert wurde und jemand nach einer Änderung fragt, ist es viel einfacher zu sehen, ob Sie mit Ihren Änderungen etwas anfangen.
m4tt1mus
4
@mattimus: absolut - eine automatisierte Testsuite zahlt sich aus wie eine Annuität; Es ist in der Tat Versicherung
Steven A. Lowe
15

Wenn Sie bereits mit ihnen konfrontiert wurden und sie damit nicht einverstanden sind, sich aber nicht wohl fühlen, Code ohne sie zu schreiben, dann fragen Sie nicht noch einmal. Schreiben Sie sie einfach und checken Sie sie nicht ein.

Das Management wird keine Codezeilen zählen, aber sie werden feststellen, dass alle Ihre Eincheckvorgänge höhere Erfolgsquoten von der Qualitätssicherung (oder von Kunden) haben, und sie werden schließlich fragen, warum ... dann können Sie alle wie "BAM! TDD" sein ! "

Sie spielen nicht mit dem Projekt, dem Prozess oder der Quelle. Ich sehe also keinen negativen Grund. Ehrlich gesagt sehe ich keinen Grund, warum es zeitlich anders ist, als alle Ihre manuellen Tests mit Ausführen + Eingabe + Prüfergebnissen durchzuführen.

Steven Evers
quelle
4
+1: Du musst sowieso testen. Schreiben Sie einfach Unit-Tests, anstatt darüber zu streiten, wie die Tests durchgeführt werden sollten.
S.Lott
1
Nur, dass sie lokal sind, funktioniert nicht gut in einer Teamumgebung mit einer gemeinsamen Codebasis. Andere Leute brechen Ihre Tests mit ihren Änderungen ab.
Alb
3
@Alb: Das ist der Preis, den Sie zahlen, wenn das Management nicht an Bord kommt - besser als ohne Tests.
Steven Evers
3
Bravo. Jeder Test ist besser als kein Test. Wenn ein Test aufgrund einer Änderung einer anderen Person abgebrochen wird, ist dies ein guter Grund zu fragen, warum sich die API ohne Ankündigung geändert hat.
S.Lott
"Das Management wird keine Codezeilen zählen", das ist sehr richtig. Danke für die Antwort!
Louisgab
7

1) Der Kunde hat für Unit-Tests nicht bezahlt

Der Kunde (dachte er) hat für eine funktionierende Lösung bezahlt. In Abhängigkeit von den Verträgen kann die Behebung von Mängeln für Ihr Unternehmen tatsächlich rentabel sein. Wenn ausreichend gesperrt ist. Bezahlen Sie also wieder für eine funktionierende Lösung. TDD sollte dieses Ziel unterstützen.

2) Das Projekt lässt keine Zeit für TDD

TDD dauert nicht länger. Es sollte die Menge an fremdem oder überflüssigem Code reduzieren und die Codebasis auf das fokussieren, was die Tests bestehen lässt. Alle bestandenen Tests bedeuten, dass der Code fertig ist, vorbehaltlich der Qualität und Angemessenheit der Tests.

3) Technische Schulden? Welche technischen Schulden?

Ich habe den Eindruck, dass Sie sich für das nachträgliche Hinzufügen von Tests zu vorhandenem Code aussprechen. Dies ist zu den besten Zeiten ein Albtraum und bringt nicht die Vorteile, die Sie erwarten könnten. Das Hinzufügen von Tests zur Behebung von Fehlern sollte jedoch akzeptabel sein und langfristig helfen.

Ich empfehle sowieso nicht, die Tests zu schreiben, wie es Snorfus vorgeschlagen hat. Theoretisch hört sich das gut an, aber Unit-Tests können und werden sich mit der Zeit ändern. Wenn sich die Anforderungen ändern, werden neue Funktionen hinzugefügt, und die Komponententests müssen aktualisiert werden. Wenn Sie als Teil eines Teams arbeiten, sind Ihre Komponententests veraltet, da andere Funktionen / Fehlerbehebungen hinzufügen.

Ich spreche die spezifischen Punkte an, die Sie angesprochen haben, anstatt neue anzusprechen, weil es dort Spielraum gibt, um Fortschritte zu erzielen oder zu verstehen, warum es blockiert wird.

Ian
quelle
5
"Ich empfehle sowieso nicht, die Tests zu schreiben" - ich war schon einmal in dieser Position. Es ist schwierig, die Tests selbst durchzuführen. Wenn diese Belastung zu groß wird, lassen Sie die Tests einfach fallen. Zumindest hatten Sie sie, als Sie aktiv in der Codebasis gearbeitet haben. Dies sollte beim anfänglichen Design / Fix hilfreich sein, wenn Sie keine Regressionen feststellen. Ich habe enormen Wert in Komponententests für Designzwecke gefunden, aber ich habe ziemlich wenige Regressionen gefunden, wenn die Tests nicht auf der gleichen Ebene wie der Code gehalten werden.
Steve Jackson
1
Wer Features / Fixes hinzufügte und Unit-Tests nicht aktualisierte, verstand das Konzept des Unit-Tests nicht.
Akira Yamamoto
In der Tat ist dies eines der verwirrendsten Probleme, die die Lebensfähigkeit von TDD oder verwandten Prozessen beeinträchtigen. Denken Sie daran, ich habe dies anscheinend vor 7 Jahren geschrieben, eine Menge ist immer noch relevant. Das Schreiben von (guten, objektiven, präzisen) Tests ist schwierig. Das Schreiben von Tests für eine Codebasis, die keine hat, ist sehr schwierig. Es ist schwierig, nicht-technischen Managern die Vorteile vor Augen zu führen (es sei denn, sie lesen einen Artikel darüber. In diesem Fall werden Sie zu Tode "gemessen". Sogar das Konzept einer Einheit ist schwierig. Ich bin ein Klassiker Meine Vorstellung von einer Einheit ist nicht die gleiche wie die eines Mockisten (als Beispiel mit 30 verbleibenden Zeichen)
Ian
4

Für jeden Kunden, der mit Produktionsproblemen konfrontiert ist,

  1. Schreiben Sie einen Unit-Test und senden Sie eine E-Mail an den Manager, in der Sie darauf hinweisen, dass Sie einen Unit-Test hinzugefügt haben, um das Szenario abzudecken.

  2. Und sagen Sie ihm, dass dieses Problem in der Produktion nicht noch einmal auftreten wird, da unser Komponententest jede Nacht ausgeführt wird. Bevor der Code in die Produktion geht, werden wir anhand dieses Komponententestfehlers feststellen, ob er fehlerhaft ist.

  3. Sagen Sie ihm, dass dieses Produktionsproblem niemals aufgetreten wäre, wenn wir diesen Komponententest bereits durchgeführt hätten, bevor der Code in Produktion gegangen ist.

Tun Sie dies konsequent und beharrlich und bald wird er überzeugt sein. Die Manager mögen es nicht, wenn der Kunde mit Produktionsproblemen konfrontiert wird, und er wird sich der Idee des Unit-Tests anschließen. Viel Glück.

java_mouse
quelle
Das ist gut :-)
BVengerov