TDD is wasting time if... 49

Posted by Brett Schuchert Sat, 08 May 2010 15:36:00 GMT

You have no design sense.

OK, discuss.

Comments

Leave a response

  1. Avatar
    Sam 30 minutes later:

    False, as written. I’d like to offer a refinement.

    TDD is wasting time if you have an innate incapacity to express what you want an API (however fanciful) to look like in a test, and refuse to acknowledge the scientific method inexorably used to refine that fancy day-dream into a real-world working API. Even if you never learn from your mistakes in previous iterations, these two components will, if following TDD practices, lead to working software.

  2. Avatar
    Markus Gärtner 44 minutes later:

    TDD is wasting time, if you can get away with cowboy-coding – though that might be unprofessional in the long run. Great entry point for the Software Craftsmanship week.

  3. Avatar
    Joe Gutierrez about 1 hour later:

    Tdd is wasting time… if you don’t use it as a design sense.

  4. Avatar
    Esko Luontola about 1 hour later:

    TDD is wasting time, if you don’t know what the system should do (building the thing right vs. building the right thing).

    TDD is wasting time, if the code is very simple, is less than 10 lines long in total, and does not need to be changed.

    More ideas?

  5. Avatar
    Aviv Ben-Yosef about 1 hour later:

    Hmm… if you have no design sense it means you’re not getting one of the most powerful advantages to TDD, but… You’ll still have plenty of tests to support changes in case someone comes along with design sense (and you’re more likely to catch bugs as you code).

  6. Avatar
    Ashish Agrawal about 1 hour later:

    TDD is wasting time, if you have no plans for what need to happen. TDD begins with clear development goal in mind/paper. Don’t confuse with “How”, it is “What” that should be clear.

  7. Avatar
    Steve about 2 hours later:

    You’d be surprised at the number of developers who have great designing skills and yet do not practice TDD and at the number of TDD fans who are terrible developers.

  8. Avatar
    William Pietri about 2 hours later:

    What’s the context here?

    It would seem to me that if you have no design sense and can’t develop one, you should step away from the keyboard, because software development is purely a design activity.

    On the other hand, if you have even a smidgen of design sense and want to develop more, I think what you need is feedback. TDD gives you that in the fine-grained level and broader agile practices give you that at larger scales.

  9. Avatar
    Jason Y about 3 hours later:

    TDD is wasting time if the interface under test must remain in constant flux (e.g. CSS or HTML).

    TDD is wasting time if you’re eating, doodling, or otherwise doing something unrelated to software development.

  10. Avatar
    Yining about 3 hours later:

    TDD is wasting time if the code is not to be maintained.

    BTW, IMO, the thing for “design sense” is not absolute as yes or no, it’s more or less. It evolves, and is learned and sharpened along the way.

  11. Avatar
    Will Sargent about 3 hours later:

    TDD is wasting time if you are already familiar with the problem domain; that is if you’ve already solved the exact same problem before, and know the problems you’re going to run into.

    Tests are useful, but there’s no point in having them drive a design if you’ve already got one you know will work.

  12. Avatar
    Bernard N about 3 hours later:

    TDD is wasting time is you have no customer.

  13. Avatar
    Ilker Cetinkaya about 4 hours later:

    TDD is wasting time if you confuse Test-Driven-Design with Try-Dip-Development.

  14. Avatar
    David Adsit about 5 hours later:

    TDD is wasting time if you haven’t got a clear picture of how to design the system in a loosely coupled manner. Your unit tests end up as functional tests or integration tests.

    I think we are all familiar with the futility of attempting to test a system conclusively with integration or functional tests (J.B. Rainsberger: “Integration Tests Are A Scam”).

    Your tests become brittle and you start spending more time maintaining poorly written tests than you do maintaining/enhancing the code they are testing.

    I disagree strongly with the idea that having solved the problem previously, you no longer need to TDD a new implementation of the solution. Bugs hide in untested code. The only way to make sure that your code is bug-free is to test it.

  15. Avatar
    Esko Luontola about 7 hours later:

    Same as David Adsit, also I disagree with TDD being waste if you know the problem domain, or if you know what the design will be like. Any non-trivial amount of code is so complex, that getting it right without any assurance (from tests) is practically impossible. If I have to write more than 10 lines of code without a test, I begin to be afraid and have doubts whether the code will work correctly. Having come accustomed to TDD has made me aware of how easily things can break. (Or maybe I’m just not a real programmer, because I don’t program using `cat` – *ttp://xkcd.com/378/)

    Also the point about slow integration tests is a good one. I’ve added some features to a project whose test suite took 20-30 minutes to run (and some of the tests were non-deterministic), and it was no fun. Even the tests for the subsystem where I was working took many minutes to run. I was able to cope with it only by writing a couple of my own end-to-end smoke tests (in addition to fast unit tests for my own components), which I could then execute in less than 10 seconds, which was sufficiently fast for TDD to be practical.

  16. Avatar
    Esko Luontola about 7 hours later:

    Tests are useful, but there’s no point in having them drive a design if you’ve already got one you know will work.

    Even when I have the high-level design in my mind (i.e. ~90% of the time), I still get benefit from using TDD (compared to a test-last approach), because TDD is driving the low-level design at the method and expression level. Writing a failing test first is also an important step, because at that moment you are testing your tests – that they really test what they were meant to test, and that every condition and edge case is covered. When writing test-last, it’s easy to forget testing some logic. With test-first, that logic won’t come into existence without a test.

  17. Avatar
    Lior Friedman about 14 hours later:

    That can be said of almost everything related to software development.

  18. Avatar
    Malapine about 14 hours later:

    TDD is a waste of time if it takes >30 seconds to recompile a source module.

    TDD is a waste of time if you don’t have acceptance tests.

  19. Avatar
    Esko Luontola about 16 hours later:

    TDD is a waste of time if you don’t have acceptance tests.

    What you mean by acceptance tests? If it’s end-to-end tests, similar to what “Growing Object-Oriented Software, Guided by Tests” uses, then I have developed many applications with TDD using a bottom-up approach.

  20. Avatar
    Esko Luontola about 16 hours later:

    TDD is wasting time if the code is not to be maintained.

    Do you have experiences/opinions that how long it will take for TDD to be profitable? I’m guessing that it will be useful if the program takes more than 2 hours to develop. No non-trivial program can be written sequentially, without having to modify the code which was written a few minutes ago, so the code needs to be maintained already during development.

  21. Avatar
    Bhavesh about 17 hours later:

    TDD is a waste of time is you don’t know what you are testing and how your API would behave.

  22. Avatar
    Edward about 24 hours later:

    I think it is most interesting that Test Driven Design is always described as an implementation technique, rather than a design technique. Design is what you do before you start coding. Coding is implementation.

  23. Avatar
    Luca Minudel 1 day later:

    on the other end learning tdd with mock objects can help to learn design

  24. Avatar
    Keith 1 day later:

    TDD is a waste of time when what you are coding is calls across your systems boundaries.

  25. Avatar
    Sebastian Kübeck 1 day later:

    TDD is wasting time if it doesn’t have to work… (modified phrase stolen from Kent Beck)

  26. Avatar
    Nick Fortune 1 day later:

    I don’t believe TDD is ever a waste of time. The primary aim is surely to get interfaces that work reliably. Elegant design, while important, ought nevertheless to be a secondary consideration.

    If you lack design skills, you may get poorly designed interfaces, but if the methodology is followed, they should still work well.

    I would also expect that, between intentional design on the one hand, and the need for highly decoupled code on the other, the practice of TDD would foster an awareness of good design pretty quickly.

  27. Avatar
    Alex Simkin 1 day later:

    TDD is wasting time… period.

  28. Avatar
    Joe Gee 1 day later:

    Without good design skills, objects are heavily coupled and the developer does not know how to fix it, so the setups and teardowns become massive, unmanagable and fragile, take 5 times too long to write, and break over nothing useful. I have had this frustration introducing tdd at several shops.

  29. Avatar
    Taswar Bhatti 3 days later:

    TDD is a waste of time if the business model does not care about quality but rather just pushing features and out the market asap.

  30. Avatar
    Squidgely 4 days later:

    TDD is a waste of time if you can learn.

    Using your arms to hold on to the sofa is a great tool to help you to learn to walk, but once you learn to walk, holding on to the sofa is counter-productive.

    So it is with TDD.

    TDD is a great tool to help you write simple, loosely-coupled methods for all your logic, but once you learn what simple, loosely-coupled methods are then you can write simple, loosely-coupled without having to do TDD.

    If you cannot learn, then when you stop using TDD, you will return to writing complicated, tightly-coupled methods; in this case, a life-long adherence to TDD will be of benefit.

    The bad news is: your competitors can learn. They learn how to write simple, loosely-coupled methods and then they will write simple, loosely-coupled methods without having to write tests beforehand for every piece of logic. They will be faster and more productive than you. You will be sticking to TDD as your company is crushed underfoot.

    You might say that adhering to TDD forces you to write tests before all logic and so you will have more tests and more coverage than your competitor. And you will, but don’t be so naïve: don’t think that you haven’t make a judgment call on what not to test, just as your competitor has. Even the simplest method can take a huge number of input values and transform them into a huge number of output values.

    Take this method:

    int increment(int x) { return x+1; }

    How many tests would you write to test this method? With TDD, you have to write at least 1. But this method can take (say) 65536 input values and transform each one to a different one of 65535 output values.

    Of course you won’t write 65535 tests to test this method. You do what all professional testers do: you will chose a subset of all possible transformations, preferably a subset that is either indicative or more probable (or both).

    In this case, where all transformations are equally probable, you’ll chose an indicative case. But by making that choice, you are declaring that you will accrue no extra benefit by choosing four more tests of other indicative transformations; or ten more tests; or fifty. You’re making a value-call, a judgment of diminishing returns. You are presuming that all those other tests that you don’t write, all 99.99% of the possible transformation-space, will be successful without your directly testing them.

    Precisely the same call is made when you decide that this method is too simple to test by itself and you chose not to test this method at all; in other words, you abandon your TDD and simply write the logic, presuming success without directly testing them.

    This is the call your competitors will make. While you’re writing the tests, they are already writing the next functionality.

    Don’t for a moment think that TDD is guaranteed safety net. A blanket coverage of thousands of pieces of logic is simply an extra cost compared to your competitor, who’s made a judgment call on not testing those thousands of pieces of logic. And this judgment call is identical to yours, when you chose to presume successful the hundreds of thousands of data transformations of your logic that you don’t test.

    Don’t be caught hanging on to the sofa when your competitors are winning marathons.

  31. Avatar
    Jason Y 4 days later:

    @Taswar Bhatti Even in this case, TDD helps increase speed of development (for those who have practiced it long enough). If bugs that can be worked around are really no issue, just test the typical cases, not corner cases. (I actually think that bugs that can be worked around are almost always a real issue, so we should indeed test corner cases.)

    @Squidgely TDD is about writing tests first, not about testing extraneous cases. The cases tested with TDD are the same as those that should be tested period, regardless of how (automatically or manually). In the example you gave, there are 2 cases: a normal case (pick any int

  32. Avatar
    Jason Y 4 days later:

    Let me correct myself. Some cases may not be worthwhile to test with TDD but still should be tested (e.g. UI presentation layer), so cases to test with TDD are a subset of those one can test manually.

  33. Avatar
    Alexandre Gazola 5 days later:

    TDD is wasting time if you don´t care about code quality

  34. Avatar
    Herberth Amaral 6 days later:

    TDD is a waste of time if you aren’t disciplined.

  35. Avatar
    Squidgely 7 days later:

    @ Jason Y,

    Just going by your correction, you write, “ … cases to test with TDD are a subset of those one can test manually.”

    What part of my comment was that an argument against?

    If I suggested in my post that TDD test cases are not a subset of those that can be tested manually, then I apologize for my lack of clarity. Please allow me to pin-point my case.

    A summary of my post would reveal two points.

    Firstly, that TDD is the life-long pursuit for only two types of people: novices and those with a learning disability.

    Secondly, that most logic is untestable in the sense that the number of data transformations by that logic renders complete verification unprofitable, and therefore TDD’s encouraging of writing tests before logic entails the writing of superfluous tests. The writing of superfluous tests is a luxury few companies can afford; those companies that practice TDD are thus doomed to suffer at the hands of those that do not.

  36. Avatar
    Taswar Bhatti 9 days later:

    @ Jason Y, If your culture doesnt support it or thinks there is value I think its a dead end. One can write those test in which case I do but when push comes from business (ie we need this last week or yesterday) it just doesnt help. I think TDD needs a culture and business who care about quality.

  37. Avatar
    Kent 9 days later:

    TDD is a waste of time if your only goal is 100% coverage, and you don’t bother checking post-conditions.

  38. Avatar
    Ramone Sanchez 10 days later:

    TDD is a waste of time if you have no clue what you are doing… i.e. prototyping. But even then, it’s not a waste of time. Reconcile that.

  39. Avatar
    Doug Bailey 11 days later:

    TDD is a waste of time if you really like bugs.

  40. Avatar
    five finger shoes 12 days later:

    i believe you are good at writing. a good writter need many good topics

  41. Avatar
    Jason Y 12 days later:

    Good points, everyone!

    @Squidgely I’m only saying that TDD does not dictate testing things that you normally wouldn’t test if you weren’t using TDD (though it might work out that way in practice).

    @Taswar Bhatti I guess it depends (in part) on if opposition is toward TDD or toward delaying deadlines. If management wants it “out the door yesterday”, then, imo, at least some test automation helps (usually). If management or other devs oppose TDD itself, or if other devs don’t care if tests fail or if they actually test anything, then TDD may indeed be a waste of time.

  42. Avatar
    m2ts to mkv converter 18 days later:

    M2TS to MKV Converter is the best software for user to convert M2TS to MKV file, With the powerful M2TS to MKV converter,you can convert M2TS to MKV with best quality and convert M2TS to all the video formats.m2ts to mkv converter

  43. Avatar
    Thickie Holden 25 days later:

    rONG!!!!!!!!!!!!!!! LIKE TDD IS LIKE WAIST OF TIME FOR ME COS I DONT RITE TEH RONG STUF LIKE BUGS AN STUF!!!!!!!!!!!!!!!!!!TAHT IS FOR LIKE TOTAL LAMERZ WHO RITE STUF TAHT SUX!!!!!!!!!!!!!!!!!!!!!!!!!!!!LIKE MICRO$OFT EVIL RUBISH!!!!!!!!!!!!!!!!!!I RITE MY CODE IN LIKE PHP AN IT ALWAYS WURKS COS I DONO RITE LAMER BUGZ LIKE M$!!!!!!!!!!!!!!!!!!!!!!!HAHAHAHAHAHAHA TIHS IS CUZ IM LIKE TOTALY L33T CODER!!!!!! I DUN RITE A PROGGY WIHT NERLY LIKE FIFTY LINES AN IT WURKED FIRST TIME SO I NO WOT I TALK ABOET!!!!!!!!!!!!!!!!!!!!!!!!!!!SAY NO TO MICRO$OFT!!!!!!!!!!!!!!1

  44. Avatar
    Ashok Guduru 26 days later:

    Tests written during current scope of work will be very useful for the developers other than original developer. It can save lot of time and allow fearless changes.

  45. Avatar
    p90x workout about 1 month later:

    P90X is a working out system includs P90X workout and Insanity DVD which belong to P90X fitness program.

  46. Avatar
    http://www.laviesolar.com about 1 month later:

    Hey all. A am glad to find this site. Very usefull.

  47. Avatar
    Sonography 2 months later:

    Youngsun specializes in Carton Sealer, Smart Stainless Steel Carton Sealer ,Sealing

    Machine ect.Youngsun carton sealer saves time, saves money and improves efficiency

    which widely used in food electronics toiletry and manufacture industries. Thank you!

  48. Avatar
    Ultrasound 2 months later:

    Any man can win when things go his way, it’s the man who overcomes adversity that is

    the true champion. thanks a lot!

  49. Avatar
    supplynflshop 4 months later:

    Originally, the word emblem meant “inlaid ornamental work,” that is Wholesale NFL Jerseys, a

    symbol of something else – in this case, that of wealth, because of the time and skill required to do it . Badge probably became

    synonymous with emblem in the 15th century Cheap NFL Jerseys. Decal, an abbreviated version of

    “decalcomania,”a French word that came into use in the early 20th century referred to the English practice of “transfer printing”

    invented in the 18th century. This process transferred the ink from a design or drawing to the glass or porcelain when it was fired in the

    kiln NFL Jerseys.

Comments