Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πως η Microsoft την πάτησε στο Test-Driven Development

Îåêßíçóå áðü ôï ìÝëïò Παναγιώτης Καναβός. Τελευταία δημοσίευση από το μέλος Aris στις 25-11-2005, 22:50. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  23-11-2005, 12:49 7261

    Πως η Microsoft την πάτησε στο Test-Driven Development

        Μια "μικρή" θύελλα έχει ξεσπάσει την τελευταία εβδομάδα με αφορμή τις οδηγίες της Microsoft σχετικά με το Test-Driven Development. Ο λόγος? Ότι αυτό που περιγράφεται στο άρθρο ως Test-Driven Development απλά δεν είναι. Για την ακρίβεια, είναι το ακριβώς αντίθετο. 

        Όταν χρησιμοποιεί κανείς Test-Driven Development, πρώτα γράφει μικρά και εύκολα test με τον κώδικα όπως θα ήθελε να τρέξει για να υλοποιήσει ένα μικρό κομμάτι των απαιτήσεων, και μετά γράφει τις κλάσεις, τις μεθόδους και τον κώδικα από πίσω τους που θα υλοποιήσει τη λειτουργία. Μόλις περάσει το ένα τεστ, προχωράς στο επόμενο. Έτσι καταλαβαίνεις σταδιακά και τί δουλεύει ή όχι, πόσο περίπλοκα είναι πραγματικά η εφαρμογή και δημιουργείς σταδιακά την κατάλληλη σχεδίαση

        Το επίμαχο άρθρο όμως προτείνει να δημιουργηθούν από την αρχή οι κλάσεις και οι μέθοδοι, και μετά να δημιουργηθούν αυτόματα τα τεστ από τον κώδικα. Τον κώδικα μέσα στα τεστ βέβαια τον γράφουμε μόνοι μας. Απαιτεί ουσιαστικά να σχεδιαστεί όλη η εφαρμογή εκ των προτέρων, πριν καλά-καλά καταλάβει κανείς τί χρειάζεται, ενώ τα τεστ θα πρέπει να γραφτούν με τη μία αντί σταδιακά.

        Το συγκεκριμμένο άρθρο έχει προκαλέσει θύελλα αντιδράσεων ενώ η αξιολόγηση του είναι σταθερά αρνητική, με πάνω από 300 αναγνώστες να το έχουν ήδη βαθμολογίσει με 1/9 (0 δεν υπάρχει). Το πρόβλημα είναι ότι πολύς κόσμος θα το διαβάσει και θα νομίσει ότι αυτός είναι ο σωστός τρόπος να κάνει Test-Driven Development και είτε θα το εγκαταλείψει τρομοκρατημένος, ή θα το εφαρμόσει εντελώς λάθος.

    Αξίζει να διαβάσει κανείς τί έχει ήδη γραφτεί για το θέμα, καθώς μερικά από τα σχόλια είναι αρκετά βαρειά (διαβάστε Ron Jeffries στο τέλος):

    Sam Gentile
    The Microsoft Guidelines for TDD are creating quite a storm of protest from people in the Agile community for very good reason. They don't at all describe Test-Driven Development (TDD). They got it all wrong.

    Roy Osherove
    You''ll find that generating many test method stubs is usually the least helpful thing to do in any unit-testing scenariolet alone test-driven development, yet Microsoft toots it as one of the enabling features for TDD in Team System. That's an insult to the reader's intelligence and frankly, annoys me a lot.

    I do see good things in VSTS. The fact that it brings Unit Tests to the mainstream tools of .NET developers is huge. Java developers have had this support in their IDEs for years, and now that it's coming to Microsoft, some things will definitely change for the better. but this is just a marketing guy or an intern trying to point a pig with lipstick. Don't sell something it's not. You're embarrassing me and all the other folks who actually try to talk people into doing TDD, and will want to use VSTS to do it.

    Larkware
    "Microsoft really needs to do a couple of things here. First, they need to yank the offending content from MSDN before any more people notice how stupid they look. Second, some of the more prominent Microsoft agile bloggers need to step up to the plate to explain what they're doing to evangelize within the company so that this sort of thing is less likely to happen again in the future."

    Scott Bellware
    "Rather than shape up Visual Studio to be amenable to Test-Driven Development, and in its ignorance of the nature of Test-Driven Development, Microsoft’s marketing people have simply tried to snow job the developer community into swallowing a wholly different definition of Test-Driven Development. And the very text outlining Microsoft’s understanding of Test-Driven Development betrays its almost complete ignorance of why Test-Driven Development is effective and why it is practiced in the way that it is. 

    So, this is for the folks at MSDN. Listen up… you’ve already embarrassed yourself once, and you’ve embarrassed your insider and MVP communities by association this time as well..

    Ο Scott Bellware μάλιστα έχει και αναφορές στα σχόλια γνωστών ονομάτων στο χώρο του TDD, μεταξύ των οποίων του Robert Martin και του Ron Jeffries

    Robert Martin:
    Microsoft should pull these guidelines and try to figure out some way that the tool might actually support TDD. Redefining TDD as some kind of waterfall, just because their tool supports it that way, is not very helpful to the industry; and most programmers are all to clearly aware of this. If Microsoft would like to win the hearts and minds of more developers, they'd better try to figure out where the industry is actually going, rather than trying to drag the industry into it's tool. IMHO they should look very carefully at Eclipse, and IntelliJ -- especially IntelliJ.

    Bottom line: We don't need tools that help us do waterfall better. We don't need vacuous process guidlines with 14 linear steps describing something that is not TDD while claiming otherwise. We don't need to be force fed Visual Studio. What we need from Microsoft is for them to stop talking and listen.

    Michael Feathers:
    The style of TDD described in the guidelines would have us jump ahead and write five, ten, maybe twenty test cases before getting the first one to pass. You can do that, but it's like putting on a set of blinders. When you don't have to formulate the next test case right after passing the last one, there isn't much chance to think about improvements. Worse, there is a disincentive to thinking about them: if you find any, you have to delete all of the speculation you've hardcoded in the tests and interfaces you created in advance.

    Right now, I hope that MS revisits their guidelines. Yes, they have a tool that generates test stubs, but using it for TDD looks counter-productive. Adding stubs to legacy code? That would be great, but getting in the way of the feedback cycle? Bad. Bad. Bad.

    Ron Jeffries:
    The original article, at msdn2.microsoft.com/en-us/library/ms182521.aspx, describes TDD as a process where you get all your requirements understood, then define all your tests, then design an object's full interface, implement the tests, and make them work. It then goes on to explain how all these cool features in VSTS help with this "TDD" process.

    The features might be good, but the process described is not TDD, nor a reasonable variation thereof. Test-Driven Development was clearly defined by Kent Beck, and has been described by others, such as Dave Astels, and even myself. It is a process where the tests are written one at a time (though one might make note of some possible tests for the future), and the tests are used to help define the design and develop the code. The Microsoft version of TDD is indistinguishable from a single-object waterfall model, to a first approximation.

    Someone more paranoid than I am might conclude that Microsoft is intentionally trying to co-opt a perfectly good practice, pervert it, and tie it into mandatory use of their tools, which are, at this writing, about half as good as what's available in Open Source and commercial plug-ins for Visual Studio. I prefer to assume that it's just ignorance on their part, but I'm prepared to change my mind.

    The article is shameful. If it isn't intentionally malicious, it is at least ignorant and ill-conceived. It should be taken down and replaced with something that correctly reflects industry usage of the TDD terminology.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  23-11-2005, 17:27 7274 σε απάντηση της 7261

    Απ: Πως η Microsoft την πάτησε στο Test-Driven Development

    Διαβάζοντας σήμερα το άρθρο (δεν ξέρω εάν έγινε κάποια διόρθωση), έχω την αίσθηση ότι τα σχόλια είναι κάπως υπερβολικά.

    Η έννοια του "ορίζω το inteface με τον class designer", που συνίσταται, είναι μάλλον σωστή. Δεν είσαι υποχρεωμένος να το ορίσεις όλο. Επίσης, "ορίζω το class" νομίζω ότι σημαίνει ότι φτιάχνω το κέλυφος, χωρίς κώδικα (αυτό που παράγει αυτόματα ο class designer). Χωρίς αυτά (class name και method signature), ούτε παραδοσιακόSmile [:)] TDD δεν κάνεις ...

    Οπότε, το πρόβλημα είναι η αυτόματη παραγωγή πολλών tests; Μην τα φτιάξετε όλα αυτόματα Stick out tongue [:P]

    Άρης


    Aris
  •  23-11-2005, 17:44 7275 σε απάντηση της 7274

    Απ: Πως η Microsoft την πάτησε στο Test-Driven Development

     Aris wrote:

    Χωρίς αυτά (class name και method signature), ούτε παραδοσιακόSmile [:)] TDD δεν κάνεις ...

    Αντιθέτως, πρώτα φτιάχνεις τα τεστ όπως θες να τρέξουν και μετά αρχίζεις να γράφεις τον κώδικα που θα τα κάνει να τρέξουν. Αυτό σημαίνει Test-Driven Development.Σε όλα τα βιβλία και άρθρα για TDD ξεκινάνε με το "φτιάχνω το τεστ και βλέπω ότι δεν κάνει compile. Γράφω όσο κώδικα χρειάζεται για να γίνει compile". Όταν δουλεύεις με αυτό τον τρόπο είναι πολύ ευκολότερο και γρηγορότερο να πας από το ένα αρχείο στο άλλο και να γράψεις το σκελετό μιας μεθόδου παρά να πας στον class designer. Διαφορετικά δεν κάνεις Test-Driven Development, κάνεις κάτι διαφορετικό.

    Όσο για τα σχόλια, μου φάνηκαν και εμένα υπερβολικά, αλλά μόνο στην αρχή. Πρόσεξε ποιοί σχολιάζουν, είναι προγραμματιστές και συγγραφείς που ασχολούνται με το TDD από την αρχή. Το σκάνδαλο της υπόθεσης είναι ότι μπορεί μεν το Team System να μην υποστηρίζει TDD αλλά το άρθρο της Microsoft προσπάθησε να αλλάξει τον ορισμό του TDD για να το κάνει να φανεί ότι υποστηρίζει. Αν διαβάσεις και τα σχόλια του Scott Bellware θα διαπιστώσεις ότι όσοι είχαν δει από νωρίς το Team System είχαν προειδοποιήσει τη Microsoft αλλά αυτή τους αγνόησε.

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  24-11-2005, 14:57 7290 σε απάντηση της 7275

    Απ: Πως η Microsoft την πάτησε στο Test-Driven Development

    Η επίμαχη σελίδα αφαιρέθηκε! Αν μόνο είχαν ακούσει όσους τους προειδοποίησαν πριν από ένα χρόνο, όλη αυτή η ιστορία θα είχε αποφευχθεί!

    Εδώ που τα λέμε όμως, βγήκε και ένα καλό από όλη την ιστορία. Τα άρθρα που έγραψαν οι διαμαρτυρόμενοι bloggers έχουν μερικές πολύ καλές περιγραφές για το τί είναι Test-Driven Development και τη διαφορά του από το απλό testing.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  24-11-2005, 19:13 7306 σε απάντηση της 7275

    Απ: Πως η Microsoft την πάτησε στο Test-Driven Development

     pkanavos wrote:
     Aris wrote:

    Χωρίς αυτά (class name και method signature), ούτε παραδοσιακόSmile [:)] TDD δεν κάνεις ...

    Αντιθέτως, πρώτα φτιάχνεις τα τεστ όπως θες να τρέξουν και μετά αρχίζεις να γράφεις τον κώδικα που θα τα κάνει να τρέξουν. Αυτό σημαίνει Test-Driven Development.Σε όλα τα βιβλία και άρθρα για TDD ξεκινάνε με το "φτιάχνω το τεστ και βλέπω ότι δεν κάνει compile. Γράφω όσο κώδικα χρειάζεται για να γίνει compile". Όταν δουλεύεις με αυτό τον τρόπο είναι πολύ ευκολότερο και γρηγορότερο να πας από το ένα αρχείο στο άλλο και να γράψεις το σκελετό μιας μεθόδου παρά να πας στον class designer. Διαφορετικά δεν κάνεις Test-Driven Development, κάνεις κάτι διαφορετικό.

    Και το τέστ, τι ακριβώς ελέγχει (και επομένως, καλεί);
    Την doNotKnowReturnType someClassToDefineNameLater::someMethodToDefineNameLater(undisclosed parametersOfUndefinedType) ; Smile [:)]

    Πέρα από την πλάκα, η αλήθεια βρίσκεται κάπου στην μέση. Κάτι από σχεδιάση (λέγε με interface) υπάρχει στο μυαλό του developer. Ως προς την αυτόματη και μαζική παραγωγή tests σε πλήρως ορισμένες classes (κατι σε RUP/MSF), προφανώς δεν είναι TDD.

    Άρης


    Aris
  •  25-11-2005, 00:01 7308 σε απάντηση της 7290

    Απ: Πως η Microsoft την πάτησε στο Test-Driven Development

     pkanavos wrote:
    Η επίμαχη σελίδα αφαιρέθηκε! Αν μόνο είχαν ακούσει όσους τους προειδοποίησαν πριν από ένα χρόνο, όλη αυτή η ιστορία θα είχε αποφευχθεί!

    Εδώ που τα λέμε όμως, βγήκε και ένα καλό από όλη την ιστορία. Τα άρθρα που έγραψαν οι διαμαρτυρόμενοι bloggers έχουν μερικές πολύ καλές περιγραφές για το τί είναι Test-Driven Development και τη διαφορά του από το απλό testing.

    Γράψτε λάθος! :)

    http://blogs.msdn.com/robcaron/archive/2005/11/22/496086.aspx

    Patrick
  •  25-11-2005, 00:14 7309 σε απάντηση της 7306

    Απ: Πως η Microsoft την πάτησε στο Test-Driven Development

    Η έννοια του Test-Driven Development είναι πολύ συγκεκριμμένη και η βάση της είναι ότι η σχεδίαση οδηγείται από τα τεστ. Είναι θέμα ορισμού. Write test, write code, refactor, repeat.
    Όσο και αν φαίνεται περίεργο να ξεκινάς χωρίς κάποια σχεδίαση, πόσες φορές έφτιαξες ένα λεπτομερές class diagram μόνο και μόνο για να διαπιστώσεις μόλις άρχισες να γράφεις κώδικα ότι δεν σε βόλευε?

    Μια καλή πηγή για να βρεις πληροφορίες για το Test-Driven Development είναι το http://www.testdriven.com. Δες επίσης και το http://groups.yahoo.com/group/testdrivendevelopment, στο οποίο συχνάζουν οι συνήθεις ύποπτοι του Test-Driven Development όπως ο Ron Jeffries και ο Scott Bellware. Τέλος, ο "ορισμός" του Test-Driven Development είναι το βιβλίο "Test-Driven Development" του Kent Beck.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-11-2005, 22:50 7330 σε απάντηση της 7309

    Απ: Πως η Microsoft την πάτησε στο Test-Driven Development

     pkanavos wrote:

    Όσο και αν φαίνεται περίεργο να ξεκινάς χωρίς κάποια σχεδίαση, πόσες φορές έφτιαξες ένα λεπτομερές class diagram μόνο και μόνο για να διαπιστώσεις μόλις άρχισες να γράφεις κώδικα ότι δεν σε βόλευε?

    Πλήρες και λεπτομερές, ποτέ...

    Παρά το γεγονός ότι ασχολήθηκα με τις formal μεθοδολογίες (δες και το http://www.dotnetzone.gr/cs/forums/2621/ShowPost.aspx, στο οποίο έχεις μάλιστα συμετάσχει) ποτέ δεν αποδέχθηκα την "ολοκληρωτική" λογική τους (τα σχεδιάζουμε όλα και μετά τα δίνουμε στους developers να το γράψουν).

    Ευχαριστώ για τα links, και ανταποδίδω με το http://www.amazon.com/gp/product/0735619484/103-3552162-4787846?v=glance&n=283155&s=books&v=glance. Συνιστώ μάλιστα και το άλλο που δείχνουν στο "Better Together". Είναι καλά και τα δύο, κατα την γνώμη μου τουλάχιστον.

    Εάν διαβάσεις προσεκτικά ότι έγραψα, θα διαπιστώσεις ότι επί της ουσίας, συμφωνούμε...Smile [:)]

    Άρης


    Aris
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems