Ich wollte genau diese Frage stellen, um zu sehen, wie viele Unternehmen tatsächlich TDD praktizieren.
In den elf Jahren, in denen ich beruflich programmiert habe, waren sich nur die letzten beiden Organisationen überhaupt der Verbreitung von TDD bewusst (dies erstreckt sich über fast fünf Jahre, bevor TDD nicht mehr so populär war wie heute). Ich komme auf den Punkt und beantworte Ihre Frage, bevor ich mich mit meinem Verkaufsargument für TDD beschäftige :)
Bei der letzten Firma, für die ich gearbeitet habe (akademischer Online-Verlag für geistes- und naturwissenschaftliche Sammlungen), wussten wir, dass wir TDD praktizieren mussten, aber wir sind nie ganz dort angekommen. Zu unserer Verteidigung hatten wir eine 250-KB-Codebasis, sodass das Hinzufügen von Tests zu einer nicht testbaren Codebasis dieser Größe als unüberwindlich empfunden wurde (ich habe das Gefühl, dass ich das jetzt schreibe!). Auch die Besten von uns machen Fehler .
Wer auch nur eine kleine Menge von TDD weiß , wie schmerzhaft Nachrüsten Tests braun Feld untestable Code getan werden kann ... Die Hauptursachen sind implizite Abhängigkeiten (Sie alle Hebel assert Ergebnisse aus dem Code nicht ziehen kann - nicht Mock können Szenarien) und Verletzung des Einzelverantwortungsprinzips (Tests sind kompliziert, erfunden, erfordern zu viel Setup und sind schwer zu verstehen ).
Wir haben unser QA-Team vorübergehend erweitert (von einem, vielleicht zwei Personen auf ein halbes Dutzend oder mehr), um die Plattform vor jeder Veröffentlichung zu testen . Es war sehr zeitaufwändig und finanziell gesehen, einige Veröffentlichungen würden drei Monate dauern, um das Testen abzuschließen. Schon damals wussten wir, dass wir Probleme hatten, sie waren einfach keine „Blocker“ oder „Kritisch“, sondern nur „Hochpriorität“.
Wenn Sie über jahrelange Erfahrung im kaufmännischen Bereich verfügen, werden Sie zu schätzen wissen, dass jedes Unternehmen kritische Aufgaben wahrnimmt und dann eine höhere und höchstwahrscheinlich auch eine höhere Prioritätsstufe einführt - insbesondere, wenn jemand von oben ein Feature / eine Fehlerbehebung vorantreibt. Ich schweife ab ...
Ich freue mich, Ihnen mitteilen zu können, dass ich in meinem derzeitigen Unternehmen (Entwicklungshaus für Telekommunikation, Web und mobile Apps) TDD praktiziere, zusammen mit Jenkins CI, um andere statische Analyseberichte zu erstellen (die Codeabdeckung ist am nützlichsten, nachdem die Testsuite bestanden wurde). . Die Projekte, für die ich TDD verwendet habe, sind ein Zahlungssystem und ein Grid-Computing-System.
Das Verkaufsgespräch ...
Es kann oft ein harter Kampf sein, der automatisierte Tests für nichttechnische Teammitglieder rechtfertigt. Das Schreiben von Tests erhöht zwar den Entwicklungsaufwand, aber ... die Zeit, die Sie jetzt in das Testen investieren, spart Ihnen später Wartungsaufwand. Sie leihen sich wirklich nur Zeit . Je länger das Produkt in Gebrauch ist, desto mehr sparen Sie - und desto weniger müssen Sie umschreiben .
Zuerst testen bedeutet, dass Sie zuerst Ihre Absicht codieren und dann bestätigen, dass Ihr Code diese Absicht erfüllt. Dies bietet Fokus und destilliert Ihren Code, um nur das zu tun, was beabsichtigt ist und nicht mehr (read no bloat). Es ist gleichzeitig eine ausführbare Spezifikation und Dokumentation (wenn Ihr Test gut geschrieben ist und die Tests so lesbar / sauber sein sollten wie Ihr Systemcode, wenn nicht mehr!).
Nicht-Programmierer werden (oft) nicht über diese Einsicht verfügen und daher ist TDD für sie nicht besonders wertvoll und wird als Wegwerfverknüpfung zu einem früheren Veröffentlichungsdatum angesehen.
Das Programmieren ist unsere Domäne, und aus meiner Sicht liegt es in unserer Verantwortung , als Profis Empfehlungen für bewährte Verfahren wie TDD abzugeben. Die Projektmanager müssen nicht entscheiden, ob dies zur Verkürzung der Entwicklungszeit erfolgt, da dies außerhalb ihrer Zuständigkeit liegt . Ebenso wenig teilen sie Ihnen mit, welches Framework, welche Caching-Lösung oder welcher Suchalgorithmus verwendet werden soll, und sie sollten Ihnen nicht mitteilen, ob Sie automatisierte Tests durchführen sollen.
In meiner Meinung nach ist die Software - Entwicklung der Industrie (im Großen und Ganzen) derzeit unterbrochen, die Tatsache , dass Tests für Ihre Software zu haben ist nicht die Norm.
Stellen Sie sich das in anderen Branchen vor: Medizin, Luftfahrt, Automobil, Kosmetik, Plüschtiere, alkoholische Getränke usw. Ich habe meine Verlobte gebeten, eine Branche zu nennen, in der das Produkt nicht getestet wird und sie es nicht konnte!
Vielleicht ist es unfair zu sagen, dass keine Tests stattfinden, weil dies der Fall ist ... aber in Unternehmen ohne automatisierte Tests ist dies ein sehr manueller / menschlicher Prozess (Lesen klobig und oft fehleranfällig).
Einen Punkt möchte ich in Ihrer Frage ansprechen ...
Sie wollten normalerweise, dass die Entwicklung sofort oder nach einer kurzen Designpause beginnt. Mehr wie bei Agile.
Da "Agile" keine Vorgehensweise ohne Tests vorschreibt, ist Kent Beck , der Schöpfer von XP und TDD , das erste auf agilemanifesto.org aufgeführte Mitglied !
Zwei Bücher, die ich wärmstens empfehlen kann, wenn Sie an TDD interessiert sind oder sie einfach nicht gelesen haben und ein begeisterter Programmierer sind (lesen das alle richtig?;)
Wachsende objektorientierte Software, die von Tests geleitet wird
Sauberer Code - Serie von Robert C Martin ("Onkel Bob")
Diese beiden Bücher ergänzen sich und verdichten viel Sinn auf wenige Seiten.
Danke, dass du diese Frage gestellt hast :)