
Test Driven Development ήταν η οργή στη ΝΕΤ κοινότητα τα τελευταία χρόνια. Πρόσφατα, έχω ακούσει grumblings στην ALT.NET κοινότητα για BDD. Τι είναι αυτό? Αυτό που το καθιστά διαφορετικό από TDD;

 
Ποιες είναι οι βασικές διαφορές μεταξύ TDD και BDD;
===================================================



Καταλαβαίνω BDD να είναι πιο σχετικά με **τις προδιαγραφές** από **τη δοκιμή** . Συνδέεται με τομέα Driven Σχεδιασμού (δεν αγαπώ αυτά * DD αρκτικόλεξα;).


Αυτό συνδέεται με ένα συγκεκριμένο τρόπο για να γράψει τις ιστορίες των χρηστών, συμπεριλαμβανομένων των δοκιμών υψηλού επιπέδου. Ένα παράδειγμα από [τον Tom δέκα Thij](http://tomtenthij.nl/2008/1/25/rspec-plain-text-story-runner-on-a-fresh-rails-app) :



```
Story: User logging in
  As a user
  I want to login with my details
  So that I can get access to the site

Scenario: User uses wrong password

  Given a username 'jdoe'
  And a password 'letmein'

  When the user logs in with username and password

  Then the login form should be shown again

```

(Στο άρθρο του, ο Τομ πηγαίνει για να εκτελέσουν άμεσα αυτές τις προδιαγραφές δοκιμών σε Ruby.)


Ο Πάπας της BDD είναι [Dan Βορρά](http://dannorth.net/) . Θα βρείτε μια μεγάλη εισαγωγή στο έργο του [Εισαγωγή BDD](http://dannorth.net/introducing-bdd) άρθρο.


Θα βρείτε μια σύγκριση των BDD και TDD σε αυτό το [βίντεο](http://video.google.com/videoplay?docid=8135690990081075324) . Επίσης, μια άποψη για BDD ως «TDD γίνει σωστά» από τον [Jeremy D. Miller](http://codebetter.com/blogs/jeremy.miller/archive/2007/09/06/bdd-tdd-and-the-other-double-d-s.aspx)


**25 του Μαρτίου 2013 ενημέρωση**


Το παραπάνω βίντεο έχει λείψει για κάποιο διάστημα. Εδώ είναι μια πρόσφατη από Llewellyn Falco, [BDD vs TDD (εξηγείται)](https://www.youtube.com/watch?v=mT8QDNNhExg) . Θεωρώ εξήγηση του σαφής και στο σημείο.

 

Συμπεριφορά Driven Development φαίνεται να επικεντρωθεί περισσότερο στην αλληλεπίδραση και επικοινωνία μεταξύ προγραμματιστές και μεταξύ προγραμματιστές και οι δοκιμαστές.


Το άρθρο της Wikipedia έχει μια εξήγηση:


[Συμπεριφορά με γνώμονα την ανάπτυξη](http://en.wikipedia.org/wiki/Behavior_Driven_Development)


Δεν εξάσκηση BDD τον εαυτό μου όμως.

 

Μου φαίνεται ότι BDD είναι ένα ευρύτερο πεδίο εφαρμογής. Είναι σχεδόν συνεπάγεται TDD χρησιμοποιείται, ότι BDD είναι η μεθοδολογία περικλείοντας που συγκεντρώνει τις πληροφορίες και τις απαιτήσεις για τη χρήση, amongh άλλα πράγματα, TDD πρακτικών προκειμένου να διασφαλιστεί η ταχεία ανατροφοδότηση.

 

Έχω πειραματιστεί λίγο με την προσέγγιση BDD και πρόωρο το συμπέρασμα μου είναι ότι BDD είναι κατάλληλη για χρήση εφαρμογή υπόθεση, αλλά όχι για τις βασικές λεπτομέρειες. TDD ροκ ακόμα σε αυτό το επίπεδο.


BDD χρησιμοποιείται επίσης ως ένα εργαλείο επικοινωνίας. Ο στόχος είναι να γράφετε εκτελέσιμο προδιαγραφές που μπορεί να γίνει κατανοητό από τους ειδικούς του χώρου.

 

Για μένα βασική διαφορά μεταξύ BDD και TDD είναι η εστίαση και η διατύπωση. Και οι λέξεις είναι σημαντικές για την επικοινωνία πρόθεσή σας.


TDD κατευθύνει επικεντρωθεί σε δοκιμές. Και δεδομένου ότι το «παλαιό κόσμο καταρράκτη» δοκιμές έρχονται μετά την εφαρμογή, τότε αυτή η νοοτροπία οδηγεί σε λανθασμένη αντίληψη και τη συμπεριφορά.


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

 

φαίνεται να είναι δύο τύπων BDD εκεί.


Το πρώτο είναι το αρχικό στυλ που Νταν Βόρεια συζητά και η οποία προκάλεσε τη δημιουργία των πλαισίων στυλ xBehave. Για μένα αυτό το ύφος ισχύει κυρίως για τις δοκιμές αποδοχής ή προδιαγραφών σε αντικείμενα τομέα.


Το δεύτερο στυλ είναι αυτό που διαδόθηκε ο Dave Astels και που, για μένα, είναι μια νέα μορφή TDD που έχει κάποια σοβαρά πλεονεκτήματα. Επικεντρώνεται στη συμπεριφορά παρά τις δοκιμές και μικρές τάξεις δοκιμή, προσπαθώντας να φτάσουμε στο σημείο όπου έχετε ουσιαστικά μία γραμμή ανά μέθοδο προδιαγραφές (τεστ). Αυτό το στυλ ταιριάζει σε όλα τα επίπεδα της δοκιμής και μπορεί να γίνει με οποιοδήποτε υπάρχον πλαίσιο δοκιμών μονάδα αν νεότερες πλαισίων (xSpec στυλ) βοηθούν να επικεντρωθεί ένα τη συμπεριφορά και όχι τη δοκιμή.


Υπάρχει επίσης μια ομάδα BDD που μπορεί να σας φανούν χρήσιμες:


<http://groups.google.com/group/behaviordrivendevelopment/>

 

Με την τελευταία γνώσεις μου στο BDD σε σύγκριση με TDD, BDD εστιάζει σχετικά με τον καθορισμό τι θα συμβεί στη συνέχεια, ενώ TDD επικεντρώνεται στη δημιουργία ενός συνόλου προϋποθέσεων και, στη συνέχεια, κοιτάζοντας την έξοδο.

 

BDD είναι σε μεγάλο βαθμό TDD γίνει σωστά. Ωστόσο, υπάρχει πρόσθετη αξία που BDD προσφέρει. Εδώ είναι μια σύνδεση στο ότι:


[BDD είναι κάτι περισσότερο από «TDD γίνει σωστά»](http://neelnarayan.blogspot.com/2010/07/bdd-is-more-than-tdd-done-right.html)

 

Αυτό το blog παρέχει μια ενδιαφέρουσα άποψη για τις διαφορές μεταξύ των TDD, BDD, και ATDD:
 <http://assertselenium.com/2012/11/05/difference-between-tdd-bdd-atdd/>

 

Δεν υπάρχει καμία διαφορά Περιοδο TDD και BDD. εκτός μπορείτε να διαβάσετε τις δοκιμές σας καλύτερα, και μπορείτε να τα χρησιμοποιήσετε ως απαιτήσεις. Αν γράψετε τις απαιτήσεις σας με τις ίδιες λέξεις, όπως γράφετε εξετάσεις BDD τότε μπορείτε να έρθετε Frome πελάτη σας με κάποια από τις δοκιμές σας ορίζεται έτοιμοι να γράψουν κώδικα.

 

Εξετάστε το κύριο όφελος των TDD είναι σχεδιασμού. Θα πρέπει να ονομάζεται Driven Test Σχεδιασμός. BDD είναι ένα υποσύνολο του TDD, την αποκαλούν Συμπεριφορά Driven σχεδιασμού.


Τώρα σκεφτείτε μια δημοφιλής εφαρμογή του TDD - Δοκιμές Μονάδα. Οι Μονάδες σε δοκιμή μονάδα είναι συνήθως ένα κομμάτι της λογικής που είναι η μικρότερη μονάδα της εργασίας που μπορείτε να κάνετε.


Όταν βάζετε αυτές τις μονάδες μαζί με ένα λειτουργικό τρόπο για να περιγράψει την επιθυμητή συμπεριφορά με τα μηχανήματα, θα πρέπει να κατανοήσουν τη συμπεριφορά που περιγράφετε στο μηχάνημα. Συμπεριφορά Driven Σχεδιασμός επικεντρώνεται στην εξακρίβωση της κατανόησης των υλοποιητές της χρήσης υποθέσεις / Απαιτήσεις / Ό, τι και να ελέγχει την εφαρμογή της κάθε χαρακτηριστικό. BDD και TDD σε γενικές γραμμές εξυπηρετεί το σημαντικό σκοπό την ενημέρωση του σχεδιασμού και της δεύτερης σκοπό να ελέγξουν την ορθότητα της εφαρμογής ειδικά όταν αλλάζει. BDD γίνει εμπλέκει δεξιά biz και dev (και qa), ενώ Δοκιμές Μονάδα (πιθανώς λανθασμένα θεωρηθεί ως TDD και όχι ένα τύπο της TDD) γίνεται συνήθως στο σιλό dev.


Θα ήθελα να προσθέσω ότι οι δοκιμές BDD χρησιμεύσει ως απαιτήσεις διαβίωσης.

 

Εδώ είναι η γρήγορη στιγμιότυπο:



> 
> * TDD είναι ακριβώς η διαδικασία της δοκιμής κώδικα πριν από τη σύνταξή της!
> * DDD είναι η διαδικασία να ενημερώνονται σχετικά με τον τομέα πριν από κάθε κύκλο αγγίζοντας κώδικα!
> * BDD είναι μια υλοποίηση του TDD που φέρνει σε ορισμένες πτυχές της DDD!
> 
> 
> 


Ελπίδα που βοηθά!

 

Η επιλογή μεταξύ TDD και BDD είναι περίπλοκο. Εξαρτάται από το αν υπάρχει το κατάλληλο πλαίσιο δοκιμών για την συγκεκριμένη γλώσσα σας στόχο, τι τους συνεργάτες σας είναι άνετα με, και μερικές φορές άλλους παράγοντες.


Ορισμένοι υποστηρίζουν ότι BDD είναι πάντα καλύτερη από TDD επειδή έχει τη δυνατότητα να καταργήσουν τα ζητήματα που μπορεί να προκύψουν κατά τη χρήση TDD.


Το κλειδί για την BDD είναι ότι μπορεί να αποτρέψει τα θέματα? δεν είναι εγγυημένη για να. Ζητήματα όπως η κακή οργάνωση κώδικα, κακές πρακτικές σχεδιασμού, κ.λπ., θα εξακολουθούν να υφίστανται. Θα έχετε μόνο μια χαμηλότερη πιθανή κουκούλα της γραφής κακό δοκιμές και έτσι έχουν πιο ισχυρά χαρακτηριστικά.

 

**Test-Driven Development** είναι μια δοκιμασία πρώτο μεθοδολογία ανάπτυξης λογισμικού, πράγμα που σημαίνει ότι απαιτεί τη σύνταξη κώδικα δοκιμής πριν από τη σύνταξη το πραγματικό κωδικό που θα δοκιμαστεί. Με τα λόγια Kent Beck είναι:



> 
> Το στυλ είναι εδώ για να γράψει μερικές γραμμές κώδικα, τότε ένα τεστ που πρέπει να τρέξει, ή ακόμα καλύτερα, να γράψει ένα τεστ που δεν θα τρέξει, τότε γράψτε τον κωδικό που θα σας κάνει να τρέξει.
> 
> 
> 


Μετά αναφέρονται για το πώς να γράψει ένα μικρό κομμάτι του κώδικα, τώρα, αντί απλώς κωδικοποίησης για, θέλουμε να έχετε άμεση ανατροφοδότηση και πρακτική «κώδικα λίγο, δοκιμάστε μια μικρή, κωδικό λίγο, δοκιμάστε λίγο.» Γι 'αυτό και αμέσως γράψει ένα τεστ για αυτό.


Έτσι TDD είναι χαμηλού επιπέδου, τεχνική μεθοδολογία που χρησιμοποιούν οι προγραμματιστές να παράγουν καθαρό κώδικα που λειτουργεί.


**Συμπεριφορά-Driven Development** είναι μια μεθοδολογία που δημιουργήθηκε με βάση την TDD, αλλά εξελίχθηκε σε μια διαδικασία που δεν αφορά μόνο τους προγραμματιστές και δοκιμαστές, αλλά, αντίθετα, ασχολείται με όλη την ομάδα και όλα τα σημαντικά ενδιαφερόμενα μέρη, τεχνικές και μη τεχνικές. BDD ξεκίνησε από μερικά απλά ερωτήματα που TDD δεν απαντά επίσης: πόσα τεστ θα πρέπει να γράψω; Τι πρέπει να κάνω στην πραγματικότητα δοκιμή-και τι δεν πρέπει να κάνω; Ποια από τις δοκιμές που γράφω θα είναι στην πραγματικότητα σημαντική για την επιχείρηση ή την συνολική ποιότητα του προϊόντος, και το οποίο είναι ακριβώς μου πάνω-μηχανικής;


Όπως μπορείτε να δείτε, αυτά τα ερωτήματα απαιτούν τη συνεργασία μεταξύ της τεχνολογίας και των επιχειρήσεων. Business ενδιαφερόμενους φορείς και ειδικούς του χώρου συχνά μπορεί να πει μηχανικοί τι είδους εξετάσεις ακούγεται σαν να ήταν δοκιμές χρήσιμο, αλλά μόνο αν οι δοκιμές είναι υψηλού επιπέδου που ασχολούνται με σημαντικές επιχειρηματικές πτυχές. BDD καλεί τέτοια επιχείρηση, όπως δοκιμές «παραδείγματα», όπως το «πες μου ένα παράδειγμα για το πώς αυτή η δυνατότητα πρέπει να συμπεριφέρονται σωστά,» και διατηρεί τη λέξη «τεστ» για τις χαμηλού επιπέδου, τους τεχνικούς ελέγχους, όπως επικύρωση δεδομένων ή ενσωματώσεις δοκιμών API. Το σημαντικό στοιχείο είναι ότι, ενώ *δοκιμές* μπορούν να δημιουργηθούν μόνο από τους προγραμματιστές και δοκιμαστές, *τα παραδείγματα* μπορούν να συλλέγονται και αναλύονται από το σύνολο της παράδοσης ομάδα-από τους σχεδιαστές, αναλυτές, και ούτω καθεξής.


Σε μια φράση, ένα από τα καλύτερα ορισμούς των BDD έχω [βρει](https://www.infoq.com/presentations/bdd-introduction) μέχρι στιγμής είναι ότι BDD είναι περίπου «έχει συνομιλίες με εμπειρογνώμονες του τομέα και χρησιμοποιώντας παραδείγματα για να αποκτήσουν μια κοινή αντίληψη της επιθυμητής συμπεριφοράς και να ανακαλύψουν άγνωστα.» Το τμήμα ανακάλυψη είναι πολύ σημαντική . Καθώς η ομάδα παράδοση συλλέγει περισσότερα παραδείγματα, αρχίζουν να καταλαβαίνουν ο τομέας των επιχειρήσεων όλο και περισσότερο και έτσι να μειώσει την αβεβαιότητα τους για ορισμένες πτυχές του προϊόντος που έχουν να αντιμετωπίσουν. Όπως μειώνει την αβεβαιότητα, τη δημιουργικότητα και την αυτονομία της αύξησης της ομάδας παράδοσης. Για παράδειγμα, μπορούν τώρα να αρχίσουν προτείνοντας τη δική τους παραδείγματα ότι οι χρήστες των επιχειρήσεων δεν πίστευα ότι ήταν δυνατόν, λόγω της έλλειψης εμπειρίας τεχνολογίας.


Τώρα, έχουν συνομιλίες με τις επιχειρήσεις και τον τομέα εμπειρογνώμονες ακούγεται μεγάλη, αλλά όλοι γνωρίζουμε πως ότι συχνά καταλήγει στην πράξη. Ξεκίνησα το ταξίδι μου με την τεχνολογία ως προγραμματιστής. Ως προγραμματιστές, έχουμε μάθει να *γράφουν κώδικα* -algorithms, σχεδιαστικά πρότυπα, αφαιρέσεις. Ή, αν είστε ένας σχεδιαστής, που έμαθε να *σχεδιάσουν* -organize πληροφορίες και να δημιουργήσουν όμορφα διασυνδέσεις. Αλλά όταν παίρνουμε θέσεις εργασίας entry-level μας, οι εργοδότες μας περιμένουν από εμάς να «παραδώσει αξία στους πελάτες.» Και μεταξύ αυτών οι πελάτες μπορούν να είναι, για παράδειγμα ... μια τράπεζα. Αλλά θα μπορούσα να ξέρω σχεδόν τίποτα για τραπεζική-εκτός από το πώς να μειώσει αποτελεσματικά το υπόλοιπο του λογαριασμού μου. Γι 'αυτό και θα πρέπει με κάποιο τρόπο να μεταφράσει αυτό που αναμένεται από μένα σε κώδικα ... Θα πρέπει να οικοδομήσουμε μια γέφυρα μεταξύ των τραπεζών και των τεχνικών εμπειρία μου αν θέλω να παραδώσει οποιαδήποτε τιμή. BDD βοηθά να οικοδομήσουμε μια τέτοια γέφυρα σε ένα σταθερό θεμέλιο της επικοινωνίας ρευστού μεταξύ της ομάδας παράδοσης και τους εμπειρογνώμονες του τομέα.


**Μάθε περισσότερα**


Αν θέλετε να διαβάσετε περισσότερα για BDD, έγραψα ένα βιβλίο σχετικά με το θέμα. **[«Γράφοντας Μεγάλη Προδιαγραφές»](https://www.manning.com/books/writing-great-specifications?a_aid=sbeug)** εξερευνά την τέχνη της ανάλυσης απαιτήσεων και θα σας βοηθήσει να μάθετε πώς να οικοδομήσουμε μια μεγάλη διαδικασία BDD και τη χρήση παραδειγμάτων ως βασικό μέρος αυτής της διαδικασίας. Οι συνομιλίες βιβλίο για την πανταχού παρούσα γλώσσα, τη συλλογή παραδειγμάτων, και τη δημιουργία λεγόμενες εκτελέσιμο προδιαγραφές (αυτοματοποιημένα τεστ) από τα παραδείγματα, τεχνικές που βοηθούν τις ομάδες BDD προσφέρει μεγάλη softeware στην ώρα τους και για τον προϋπολογισμό.


Αν σας ενδιαφέρει η αγορά «Γράφοντας Μεγάλη Προδιαγραφές,» **μπορείτε να αποθηκεύσετε 39%** με τον κωδικό προσφοράς **39nicieja2** :)

 

**Διαφορά μεταξύ της ανάπτυξης δοκιμή με γνώμονα την (TDD) και τη συμπεριφορά με γνώμονα την ανάπτυξη (BDD)** 


* BDD επικεντρώνεται στην συμπεριφοριστική πτυχή του συστήματος και όχι από την   

άποψη της εφαρμογής του συστήματος που TDD επικεντρώνεται.
* BDD δίνει μια σαφέστερη κατανόηση ως προς το τι είναι το σύστημα θα πρέπει να κάνει   

από την πλευρά του κυρίου του έργου και του πελάτη. TDD μόνο   

δίνει στον προγραμματιστή την κατανόηση του τι είναι το σύστημα θα πρέπει να κάνει.
* BDD επιτρέπει τόσο ο κύριος του έργου και ο πελάτης να συνεργαστούν για τις απαιτήσεις ανάλυση που περιέχεται μέσα στον πηγαίο κώδικα του συστήματος.

 

Με λίγα λόγια, υπάρχει σημαντική διαφορά μεταξύ TDD και BDD Στην TDD είμαστε majorly επικεντρώθηκε σε δεδομένα δοκιμών Σε BDD κύριος στόχος μας είναι η συμπεριφορά του έργου, έτσι ώστε κάθε μη - πρόσωπο προγραμματισμού μπορεί να καταλάβει τη γραμμή του κώδικα για λογαριασμό του τίτλου ότι η μέθοδος

 