Dogmatisches TDD

Standard

Immer wieder wird den “Verfechtern” des Test-Driven Developments (TDD) vorgeworfen, dogmatisch zu sein. Vor ein paar Wochen gab es eine Diskussion unter Größen der Software-Entwicklung darüber, wann TDD und Unit-Tests verwendet werden sollen und wann nicht. Hier eine kurze Zusammenfassung.

Die Start-Up-Falle

Alles begann mit einem Blogpost von Robert C. Martin, auch bekannt als Uncle Bob. In diesem Blogpost beschrieb er die Start-Up-Falle. Das ist die Idee, dass die Situtation in einem Start-Up anders wäre. Dass alles, was man über professionelle Software-Entwicklung gelernt hat, in diesem besonderen Job nicht anwendbar ist und man daher die Regeln brechen muss.

Uncle Bob widerspricht dem vehement. Die Start-Up-Phase ist nicht anders. Sie gibt vielmehr die Richtung für die nächsten Phasen vor. Die Praktiken, die zu erfolgreicher Software führen, sind immer gültig.

Natürlich meint er mit einer dieser Praktiken TDD (Test Driven Development). Manche glauben, dass man schneller ist, wenn man keine Tests schreibt.

Uncle Bob setzt dem entgegen, dass der Buchhalter eines Start-Ups unter noch größerem Druck steht als jeder Software-Entwickler. Immerhin verwaltet er oder sie das Geld der Investoren. Dennoch folgt der Buchhalter den Regeln und der Methoden der Buchhaltung. Sind Fehler im Code tolerierbarer als die Berechnungen des Buchhalters? Natürlich nicht. Kann ein Fehler im Code das Unternehmen nicht ruinieren? Natürlich kann er das. Wieso sollte man dann auf TDD verzichten, wenn der Buchhalter auch nicht auf die doppelte Buchhaltung verzichtet?

TDD nicht anzuwenden, macht einen nicht schneller, sondern vielmehr langsamer. Die Gründe dafür sind einfach:

  • Man kann den Code nicht mehr refaktorisieren.
  • Daher wird der Code verrotten.
  • Er wird daher immer schwerer zu handhaben.
  • Man wird langsamer.

Das Gemeine daran, TDD nicht anzuwenden, ist, dass es einem das Gefühl gibt, schneller zu sein. Man arbeitet hart, ist 60, 70 oder 80 Stunden pro Woche in der Arbeit.

Aber Aufwand ist nicht gleich Geschwindigkeit. Mit der Zeit steigen die Schätzungen. Es wird immer schwerer, neue Features einzubauen. Es sammeln sich immer mehr Bugs an. Der Entwicklungsfortschritt wird immer langsamer, die Anzahl der Fehler steigt. Die Katastrophen werden immer mehr.

Daher empfiehlt Uncle Bob: Wenn man schneller vorankommen will,

  • folge den bewährten Praktiken!
  • schreibe deine Tests!
  • refaktorisiere deinen Code!
  • halte den Code einfach und sauber!
  • hetze nicht!

Die Pragmatik des TDD

Der Blogpost über die Start-Up-Falle dürfte einigen Aufruf verursacht haben. Deshalb hat Uncle Bob einen Tag später den nächsten Blogpost verfasst. Darin geht er auf den Vorwurf des Dogmatismus ein.

Im Prinzip wurde Uncle Bob vorgeworfen, dass er zu dogmatisch sei. TDD mag in manchen Fällen großartig sein, aber in anderen Fällen hätte es zu hohe Kosten. Deshalb muss man pragmatisch sein und je nach Situation entscheiden.

Für Uncle Bob ist TDD eine Disziplin für Programmierer wie die doppelte Buchhaltung für Buchhalter oder die sterile Vorgehensweise für Chirurgen. Selbst diese gehen in bestimmten Situationen von diesen Praktiken ab.

Und genauso ist es mit TDD für Programmierer. Uncle Bob listet Fälle auf, in denen nicht einmal er TDD anwendet:

  • Er schreibt keine Tests für Getter und Setter.
  • Er schreibt keine Tests für Member-Variablen.
  • Er schreibt keine Tests für triviale Funktionen oder Einzeiler.
  • Er schreibt keine Tests für GUIs. Er bemüht sich aber, jede signifikante Verarbeitung im GUI-Code in testbare Module auszulagern (MVVM, MVC, MVP, …)
  • Er wendet TDD nicht für Code an, den er noch mit der Methode “Versuch und Irrtum” entwickeln muss. Er schreibt entweder die Tests danach oder löscht den so entstandenen Code und entwickelt ihn mit TDD neu.
  • Er schreibt in manchen Situationen keine Tests für Programme, die klein sind und wirklich nur einmal verwendet werden.
  • Er mockt Software von anderen Herstellern und testet seinen Code. Nur wenn er glaubt, dass die Fremdsoftware nicht funktioniert, oder Mocken zu viel des Guten wäre, testet er diese auch.

Tests für trivialen Code?

Dieser Blogpost wiederum führte zu weiteren Diskussionen über die Frage, ob trivialer Code getestet werden soll. Immerhin hat Uncle Bob geschrieben, dass er Getter, Setter, triviale Funktionen und Einzeiler nicht testet. Mark Seemann vertritt die Position, dass auch trivialer Code getestet werden muss. Seine Argumente:

  • Bei TDD lenken die Tests das Design. Wenn man den Test schreibt, kann man noch gar nicht wissen, ob der Code trivial wird. Er untermauert dieses Argument mit Uncle Bobs Idee der Transformation Priority Premise.
  • Trivialer Code muss nicht trivial bleiben. Wenn ein Getter oder Setter bzw. eine .NET-Property trivial ist, wofür hat man sie dann überhaupt? Getter und Setter ermöglichen es, in Zukunft die Implementierung zu ändern. Um diese Implementierung refaktorisieren zu können, braucht man Unit-Tests.
  • Nicht-trivialen Code nicht zu testen, ist ein schrecklicher Rat für TDD-Anfänger. TDD-Anfänger werden diese Hintertüre jedesmal verwenden, wenn der Code einmal schwieriger zu testen ist. Die Bedingung ist ja auch nicht besonders genau definiert. Wann kann man schon vorhersehen, dass der Code trivial sein wird?

Weiters demonstriert Mark Seemann an einem Beispiel, dass man den Aufwand für das Testen von Properties reduzieren kann. Seine These ist, dass Uncle Bob die Kosten für das Testen von trivialen Code als fix annimmt und den Nutzen dafür als gering. Wenn man aber die Kosten senkt, ergibt sich ein besseres Kosten-/Nutzenverhältnis.

Dem widersprach Mark Rendle. Seine Argumente:

  • Tests für .NET-Properties testen den Compiler und nicht den Code.
  • Sie testen Implementierungsdetails und nicht die Anwendungslogik. Es gibt andere Tests, die eine Anwendungsfunktionalität testen, die die .NET-Properties, Getter und Setter brauchen, sonst müssten sie als toter Code entfernt werden.
  • Sinnlose Tests sind schlimmer als überhaupt keine Tests.
  • Tests für Getter, Setter und anderen trivialen Code verbergen überflüssigen Code.
  • Sie präsentieren TDD in schlechtem Licht, weil sie TDD als unnötig zeitfressend, kleinlich und zwecklos erscheinen lassen.

Daraufhin hat Derick Bailey beiden widersprochen und rechtgegeben. Für ihn ist die Frage, ob eine .NET-Autoproperty getestet werden soll, mit der eigentlichen Funktion des Codes verbunden. Wenn die Property einen Mehrwert liefert, was die Funktionalität betrifft, sollte es auch einen Unit-Test dafür geben.

Jimmy Bogard hat wahrscheinlich unabhängig von der ganzen Diskussion ungefähr zur gleichen Zeit einen Blogpost geschrieben. Kurz gesagt, soll man nur dann Tests schreiben, wenn sie einen Wert bieten. Und wann das ist, beantwortet er mit der berühmten Beraterantwort: “It depends.”

In einem weiteren Blogpost präzisierte Mark Seemann seine Position. In Übereinstimmung mit dem Dreyfus-Modell bevorzugt er fixe Regeln für TDD-Anfänger. Weiters wirft er die Frage auf, ob in seinem Beispiel überhaupt eine .NET-Property notwendig ist. Eigentlich würde auch ein normales Feld reichen.

Start-Ups und TDD

In der Zwischenzeit hat Greg Young auf einen anderen Aspekt des ursprünglichen Blogposts von Uncle Bob geantwortet. Anhand eines eigenen persönlichen Beispiels versucht er dabei zu argumentieren, dass es für Start-Ups gefährlich sei, das Produkt nach den üblichen Entwicklungsmethoden zu entwickeln. Ein Start-Up sollte sich vielmehr darauf konzentrieren, “Production Prototypes” zu entwickeln.

Chris McKenzie hat ihm widersprochen und die Frage aufgeworfen, ob es gerechtfertigt ist, mangelhafte Software am laufenden Band zu produzieren, nur weil man für ein Start-Up arbeitet.

Uncle Bob antwortete in einem eigenen Blogpost und wehrt sich vor allem gegen die Unterstellung, dass TDD jemanden langsamer entwickeln lässt.

Meine Sichtweise

Was halte ich eigentlich von dem allen?

Ich stimme der Position von Uncle Bob zu. TDD ist eine bewährte Methode, doch gibt es Situationen, wo sie nicht praktikabel ist. Allerdings handelt es sich dabei um Ausnahmen, die es so lange wie möglich zu vermeiden gilt.

Ich stimme auch Mark Seemann zu, dass es für TDD-Anfänger fixe Regeln braucht. Nur mit viel Erfahrung kann man Regeln brechen. Deshalb empfehle ich jedem TDD-Anfänger, den Regeln zu folgen. Auch dann, wenn jemand mit TDD-Erfahrung diese Praktik nicht anwenden würde.

Ich habe noch nie in einem Start-Up gearbeitet, aber ich verwende seit ca. 10 Jahren TDD. Und ich entwickle deshalb nicht langsamer. Greg Young beschreibt in seinem Blogartikel einen Fall von technischen Schulden. Um kurzfristige Ziele zu erreichen, kann man auf gutes Design und Unit-Tests verzichten. Allerdings darf man nicht vergessen, rechtzeitig den Code auf eine tragfähige Basis mit Tests zu stellen, sonst verrottet der Programmcode, neue Features können nur mehr mit großem Aufwand eingearbeitet werden und die Fehlerquote steigt. Genauso wie es Uncle Bob in seinem ursprünglichen Blogpost beschrieben hat. Kann es sich ein junges Unternehmen, dass sich noch einen Namen erarbeiten muss, überhaupt leisten, laufend mangelhafte Software auszurollen?

230 thoughts on “Dogmatisches TDD

  1. After looking into a number of the blog articles on your
    blog, I truly appreciate your technique of
    blogging. I saved as a favorite it to my bookmark site list and will be checking back in the near future.
    Take a look at my web site too and tell me what you think.

  2. wh0cd296339 [url=http://rocaltrol.doctor/]rocaltrol 0.25 mcg[/url] [url=http://cheapwellbutrin.doctor/]wellbutrin sr 150mg[/url] [url=http://buyavalide.doctor/]buy avalide[/url] [url=http://genericbactrim.doctor/]bactrim[/url] [url=http://tofranil.doctor/]tofranil[/url]

  3. wh0cd296339 [url=http://genericbaclofen.doctor/]baclofen generic[/url] [url=http://buyclomid.doctor/]clomid[/url] [url=http://buykamagra.doctor/]kamagra[/url] [url=http://buyviagra.doctor/]buy viagra[/url] [url=http://buyalbuterol.doctor/]generic albuterol online[/url] [url=http://genericzithromax.doctor/]zithromax[/url]

  4. oxvdasin maglie calcio rxoqymef fotbollstrjor barn grulykme billige
    fotballdrakter xihrdgae billige fodboldtrojer
    rmopxlfv fotbollstrjor mwdqlfsa maglie calcio a poco prezzo uyfvkrcm fodboldtrojer lrejvods billige fotballdrakter

  5. arohjzsy fodboldtrojer ygcimrde maglie calcio poco prezzo
    rdnozcyb billiga fotbollstrjor ktucreao fotballdrakter
    lmsbehqi fodboldtrojer born hugjnmxk billiga fotbollstrjor lgsxhzea maglie del calcio iwjycsur fotballdrakter

  6. Hello, i feel that i noticed you visited my website thus
    i came to go back the prefer?.I am trying to in finding things to enhance my web site!I suppose its adequate to
    make use of some of your ideas!!

  7. hello there and thank you for your information – I’ve certainly picked up something new from right
    here. I did however expertise several technical points using
    this website, since I experienced to reload the web site
    lots of times previous to I could get it to load properly.
    I had been wondering if your web hosting is OK? Not that I
    am complaining, but sluggish loading instances times will very frequently affect your
    placement in google and could damage your quality score if ads and marketing with Adwords.
    Anyway I am adding this RSS to my email and could look out for a
    lot more of your respective interesting content.
    Ensure that you update this again very soon.

  8. Hi there, just became alert to your blog through Google,
    and found that it is truly informative. I am going to watch out
    for brussels. I’ll be grateful if you continue this in future.
    A lot of people will be benefited from your writing.
    Cheers!

  9. Hello! I’ve been following your website for a while now and finally got the courage to go ahead and give you a shout out from Porter Texas! Just wanted to mention keep up the fantastic work!

  10. My developer is trying to convince me to move to .net from PHP. I have always disliked the idea because of the expenses. But he’s tryiong none the less. I’ve been using Movable-type on a number of websites for about a year and am concerned about switching to another platform. I have heard very good things about blogengine.net. Is there a way I can transfer all my wordpress posts into it? Any kind of help would be really appreciated!

  11. Hi there! This post could not be written any better! Reading this post reminds me of my old room mate! He always kept talking about this. I will forward this article to him. Pretty sure he will have a good read. Thank you for sharing!

  12. I actually wanted to make a small note so as to express gratitude to you for those amazing ways you are showing on this site. My extended internet research has at the end been paid with brilliant information to share with my close friends. I would state that that we website visitors actually are definitely fortunate to exist in a fabulous site with very many brilliant individuals with interesting ideas. I feel really privileged to have encountered the web pages and look forward to plenty of more fabulous times reading here. Thank you once more for a lot of things.

  13. It’s in point of fact a nice and helpful piece of info. I’m happy that you simply shared this helpful info with us. Please stay us up to date like this. Thank you for sharing.

  14. My husband and i got joyful when Raymond managed to complete his research via the precious recommendations he obtained when using the weblog. It’s not at all simplistic to simply always be freely giving information the rest may have been selling. And we consider we now have the website owner to appreciate because of that. These illustrations you made, the easy blog navigation, the relationships you can give support to engender – it’s got many excellent, and it’s making our son and the family consider that that content is enjoyable, and that is extraordinarily important. Many thanks for everything!

  15. I’m not sure exactly why but this blog is loading very slow for me. Is anyone else having this problem or is it a problem on my end? I’ll check back later and see if the problem still exists.

  16. Excellent blog here! Also your web site lots up fast! What host are you using? Can I am getting your associate link to your host? I desire my website loaded up as fast as yours lol

  17. Hi this is kind of of off topic but I was wanting
    to know if blogs use WYSIWYG editors or if you have to manually
    code with HTML. I’m starting a blog soon but have no
    coding knowledge so I wanted to get guidance from someone with experience.
    Any help would be greatly appreciated!

  18. เพิ่มไลค์เพจ ราคาถูก, รับไลค์แฟนเพจ, ปั้มไลค์รูป Facebook, ปั้มไลค์เพจ Facebook, รับทำเพจสินค้าพร้อมยอดไลค์, รับเพิ่ม Like Fanpage Facebook ราคาพิเศษ เหมาะสำหรับผู้ที่ต้องการเพิ่ม Like Fanpage ให้ดูเป็นความน่าเชื่อถือของร้าน, บริการเพิ่มไลค์แฟนเพจฟรี, ปั้มไลค์ราคาถูก, การเพิ่ม Like เป็นการเพิ่มโอกาสทางการขายสินค้าของคุณนั่นเอง ด้วยงานบริการเพิ่มไลค์แฟนเพจระดับมืออาชีพ ประสบการณ์การทำงานหลายปี, เพิ่มไลค์แฟนเพจ ราคาถูก, ปั้มไลค์มือถือ, รับจ้างเพิ่มไลค์, จ้างกดไลค์, Add Like Fanpage, ปั้มไลค์เพจคนไทย, รับปั้มไลค์เพจ, ปั้มไลค์เพจ, เพิ่มไลค์, Pump Like, ไลค์แฟนเพจ, รับทำไลค์ครบวงจร, แฟนเพจพร้อมยอดไลค์, ไลค์คนไทย 100%, ปั้มรูป, ปั้มไลค์สถานะ, ปั้มไลค์ ในโทรศัพท์, ไลค์แฟนเพจราคาถูก, รับ Like Fanpage, Auto Like, บริการปั้มไลค์ฟรี, ปั้มไลค์ฟรี, ซื้อไลค์แฟนเพจ, กดไลค์แฟนเพจ, รับสร้างแฟนเพจพร้อมยอดไลค์, ปั้มเพจเฟสบุ๊ค, ไลค์แฟนเพจเฟสบุ๊ค, รับปั้มไลค์รูป, กด Like, เพิ่มไลค์ฟรี, ปั้มไลค์ครบวงจร, Like Fanpage, ปั้มยอดไลค์เป็นคนไทย 100%, รับเพิ่มไลค์แฟนเพจเฟสบุ๊ค, เพิ่มไลค์คนไทย, รับทำเพจเฟสบุ๊ค, ปั้มโพสต์, เพิ่มไลค์แฟนเพจ, ปั้มไลค์ง่ายๆ, ปั้มเพจ, จ้างเพิ่มไลค์, ปั้มไลค์ทั่วไป, ไลค์แฟนเพจได้สูงสุดหนึ่งล้านไลค์, รับจ้างปั้มไลค์, บริการปั้มไลค์แฟนเพจฟรี, บริการเพิ่มไลค์เฟสบุ๊คให้แฟนเพจ, เพิ่มไลค์เพจ, กดไลค์, เพิ่ม Like, ไลค์เพจ, ปั้มไลค์แฟนเพจ, รับเพิ่มไลค์แฟนเพจ เป็นการโปรโมทแฟนเพจ เพื่อเพิ่มยอดขายสินค้าได้, ปั้มไลค์เพจฟรี, ปั้มไลค์รูปเฟส, จ้างไลค์, รับเพิ่มไลค์, โกงไลค์, ปั้มเพจ เหมาะสำหรับผู้ที่ต้องการยอดไลค์เพจเพจเยอะๆ, รับจ้างกดไลค์, รับไลค์ครบวงจรทั่วไทย, ปั้มไลค์รูป, จ้างปั้มไลค์, ปั้มไลค์, บริการเพิ่ม Like ให้แฟนเพจของคุณ โดยทีมงานระดับมืออาชีพ ในระยะเวลาอันสั้นและราคาถูก รับประกันไลค์จากคนไทย 100%, ปั้มไลค์ Facebook, จ้างไลค์รูป, ปั่นไลค์, ปั้ม Like ฟรี, กดไลค์รูป, รับทำไลค์แฟนเพจจำนวนมาก, Up Like Fanpage, ปั้มไลค์เฟสบุ๊ค

  19. Thank you for some other wonderful article.
    The place else may just anyone get that kind of info in such
    an ideal approach of writing? I have a presentation subsequent week, and I am at the
    search for such information.

  20. ปั้มไลค์.com เว็บบริการปั้มไลค์ สถานะ คอมเม้น รูปภาพ และระบบต่างๆอีกมากมายไม่ว่าจะเป็น เชคคนไลค์โพส โพสลงกลุ่ม ต่างๆในทีเดียว เว็บปั้มไลค์ เพิ่มไลค์ฟรี ปั๊มไลค์ เพิ่มไลค์ facebook ฟรี เพิ่มไลค์ สถานะ เพจ รูปภาพ คอมเม้น วิดีโอ ปั๊มไลค์ โกงรูปไลค์ ปั้มlike ปั้มไลค์เฟสบุ๊ค ปั๊มไลค์ สอนfacebookฟรี วิธีแฮคไลค์ โปรเฟสบุ๊ค ออโต้ไลค์ โกงไลค์ ใช้งานง่ายและฟรี

  21. Its like you learn my mind! You appear to understand a lot about this,
    such as you wrote the guide in it or something.

    I believe that you can do with a few percent
    to power the message house a little bit, however instead of that, this is
    great blog. An excellent read. I will certainly be back.

  22. รับเพิ่มยอดไลค์เพจ, บริการปั้มไลค์แฟนเพจ, ปั้มไลค์แฟนเพจคนไทยราคาถูก, ซื้อไลค์แฟนเพจ, รับจ้างกดไลค์เพจ

  23. It is the best time to make some plans for the future and
    it is time to be happy. I have read this post and if I could I desire to suggest you some interesting things
    or advice. Maybe you could write next articles referring to this article.
    I want to read even more things about it!

  24. Hello there, simply was alert to your weblog thru Google, and found that it’s really informative. I am going to be careful for brussels. I’ll appreciate when you continue this in future. Lots of folks shall be benefited from your writing. Cheers!

  25. I spent four years trying EVERYTHING in Online Dating, and through a huge amount of trial and error, I produced a system that I will share for you. This book will take you, step by step, through everything you need to know to double, triple or even quadruple the number of women you meet online.

  26. I am so happy to read this. This is the kind of manual that needs to be given and not the random misinformation that is at the other blogs. Appreciate your sharing this greatest doc.

  27. Increase Facebook Likes, Facebook Auto Liker, Autoliker Facebook, auto liker, Working Auto Liker, Facebook Autoliker, Status Liker, Autoliker, Autoliker, auto like, Facebook Liker, Auto Like, facebook auto liker, Photo Liker, Fb Autoliker, Status Auto Liker, autoliker, Auto Liker, autolike, Photo Auto Liker

  28. Fantastic beat ! I wish to apprentice while you amend your site, how could
    i subscribe for a blog website? The account helped me a applicable deal.
    I had been tiny bit familiar of this your broadcast provided shiny
    transparent idea

Leave a Reply

Your email address will not be published.