tdd vs bdd analyze differences with examples
Αυτό το σεμινάριο εξηγεί τις διαφορές μεταξύ TDD έναντι BDD με παραδείγματα:
TDD ή Test Driven Development και BDD ή Behavior Driven Development είναι οι δύο τεχνικές ανάπτυξης λογισμικού.
Πριν βυθίσουμε βαθύτερα τη διαφορά μεταξύ αυτών των δύο, ας καταλάβουμε πρώτα τι εννοούν μεμονωμένα και πώς χρησιμοποιούνται;
Ας αρχίσουμε!!
Η προεπιλεγμένη πύλη δεν είναι διαθέσιμη Windows 10
Τι θα μάθετε:
Τι είναι το TDD;
Το TDD σημαίνει δοκιμαστική ανάπτυξη. Σε αυτήν την τεχνική ανάπτυξης λογισμικού, δημιουργούμε πρώτα τις δοκιμαστικές θήκες και μετά γράφουμε τον κώδικα που βασίζεται σε αυτές τις δοκιμαστικές περιπτώσεις. Αν και το TDD είναι μια τεχνική ανάπτυξης, μπορεί επίσης να χρησιμοποιηθεί για την ανάπτυξη δοκιμών αυτοματισμού.
Οι ομάδες που εφαρμόζουν το TDD, χρειάζονται περισσότερο χρόνο για την ανάπτυξη, ωστόσο, τείνουν να βρουν πολύ λίγα ελαττώματα. Το TDD έχει ως αποτέλεσμα βελτιωμένη ποιότητα κώδικα και τον κώδικα που είναι πιο επαναχρησιμοποιήσιμος και ευέλικτος.
Το TDD βοηθά επίσης στην επίτευξη υψηλού επιπέδου κάλυψη δοκιμών περίπου 90-100%. Το πιο δύσκολο πράγμα για προγραμματιστές που ακολουθούν το TDD είναι να γράψουν τις δοκιμαστικές τους περιπτώσεις πριν γράψουν τον κώδικα.
Προτεινόμενη ανάγνωση => Ο τελικός οδηγός για τη σύνταξη εξαιρετικών περιπτώσεων δοκιμής
Διαδικασία TDD
Η μεθοδολογία TDD ακολουθεί μια πολύ απλή διαδικασία 6 βημάτων:
1) Γράψτε μια δοκιμαστική θήκη: Με βάση τις απαιτήσεις, γράψτε μια αυτοματοποιημένη δοκιμαστική θήκη.
2) Εκτελέστε όλες τις δοκιμαστικές περιπτώσεις: Εκτελέστε αυτές τις αυτοματοποιημένες δοκιμαστικές περιπτώσεις στον τρέχοντα κώδικα.
3) Αναπτύξτε τον κώδικα για αυτές τις δοκιμαστικές περιπτώσεις: Εάν η δοκιμαστική θήκη αποτύχει, τότε, γράψτε τον κωδικό για να λειτουργήσει η δοκιμαστική θήκη όπως αναμένεται.
4) Εκτελέστε ξανά τις δοκιμαστικές περιπτώσεις: Εκτελέστε ξανά τις δοκιμαστικές θήκες και ελέγξτε εάν έχουν εφαρμοστεί όλες οι δοκιμαστικές περιπτώσεις που έχουν αναπτυχθεί μέχρι στιγμής.
5) Αναδιαμορφώστε τον κωδικό σας: Αυτό είναι ένα προαιρετικό βήμα. Ωστόσο, είναι σημαντικό να επαναπροσδιορίσετε τον κωδικό σας για να τον κάνετε πιο αναγνώσιμο και επαναχρησιμοποιήσιμο.
6) Επαναλάβετε τα βήματα 1-5 για νέες δοκιμαστικές περιπτώσεις: Επαναλάβετε τον κύκλο για τις άλλες περιπτώσεις δοκιμής έως ότου εφαρμοστούν όλες οι δοκιμαστικές περιπτώσεις.
Παράδειγμα εφαρμογής υπόθεσης δοκιμής σε TDD
Ας υποθέσουμε ότι έχουμε την απαίτηση να αναπτύξουμε μια λειτουργία σύνδεσης για μια εφαρμογή που έχει πεδία ονόματος χρήστη και κωδικού πρόσβασης και ένα κουμπί υποβολής.
Βήμα 1: Δημιουργήστε μια δοκιμαστική θήκη.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Βήμα 2: Εκτελέστε αυτήν τη δοκιμαστική υπόθεση και θα λάβουμε ένα σφάλμα που λέει ότι η σελίδα σύνδεσης δεν έχει οριστεί και δεν υπάρχουν μέθοδοι με ονόματα enterUserName, enterPassword και υποβάλλετε.
Βήμα 3: Αναπτύξτε τον κωδικό για τη συγκεκριμένη περίπτωση. Ας γράψουμε τον υποκείμενο κωδικό που θα εισαγάγει το όνομα χρήστη και τον κωδικό πρόσβασης και θα λάβουμε ένα αντικείμενο αρχικής σελίδας όταν είναι σωστά.
public class LoginPage{ String username; String password; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Βήμα 4: Εκτελέστε ξανά τη δοκιμαστική θήκη και θα λάβουμε μια παρουσία της αρχικής σελίδας.
Βήμα 5: Ας αναδιαμορφώσουμε τον κώδικα για να δώσουμε τα σωστά μηνύματα σφάλματος όταν οι συνθήκες εάν η μέθοδος υποβολής δεν είναι αληθείς.
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Βήμα 6: Τώρα ας γράψουμε μια νέα δοκιμαστική θήκη με κενό όνομα χρήστη και κωδικό πρόσβασης.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Τώρα αν προσπαθήσετε να εκτελέσετε αυτήν τη δοκιμαστική θήκη, θα αποτύχει. Επαναλάβετε τα βήματα 1 έως 5 για αυτήν τη δοκιμαστική θήκη και, στη συνέχεια, προσθέστε τη λειτουργικότητα για να χειριστείτε κενές συμβολοσειρές ονόματος χρήστη και κωδικού πρόσβασης.
Τι είναι το BDD;
Το BDD σημαίνει ανάπτυξη βάσει συμπεριφοράς. Το BDD είναι μια επέκταση στο TDD όπου αντί να γράφουμε τις δοκιμαστικές περιπτώσεις, ξεκινάμε γράφοντας μια συμπεριφορά. Αργότερα, αναπτύσσουμε τον κωδικό που απαιτείται για την εφαρμογή της συμπεριφοράς από την εφαρμογή μας.
Το σενάριο που ορίζεται στην προσέγγιση BDD διευκολύνει τη συνεργασία των προγραμματιστών, των υπευθύνων δοκιμών και των χρηστών επιχειρήσεων.
Το BDD θεωρείται βέλτιστη πρακτική όταν πρόκειται αυτοματοποιημένες δοκιμές καθώς εστιάζει στη συμπεριφορά της εφαρμογής και όχι στη σκέψη για την εφαρμογή του κώδικα.
Η συμπεριφορά της εφαρμογής είναι το επίκεντρο του BDD και αναγκάζει τους προγραμματιστές και τους δοκιμαστές να περπατήσουν στα παπούτσια του πελάτη.
Διαδικασία BDD
Η διαδικασία που εμπλέκεται στη μεθοδολογία BDD αποτελείται επίσης από 6 βήματα και είναι πολύ παρόμοια με εκείνη του TDD.
1) Γράψτε τη συμπεριφορά της εφαρμογής: Η συμπεριφορά μιας εφαρμογής γράφεται σε απλή αγγλική γλώσσα όπως ο ιδιοκτήτης του προϊόντος ή οι επιχειρηματικοί αναλυτές ή QAs.
2) Γράψτε τα αυτοματοποιημένα σενάρια: Αυτή η απλή αγγλική γλώσσα μετατρέπεται σε δοκιμές προγραμματισμού.
3) Εφαρμόστε τον λειτουργικό κώδικα: Στη συνέχεια εφαρμόζεται ο λειτουργικός κώδικας που διέπει τη συμπεριφορά.
4) Ελέγξτε εάν η συμπεριφορά είναι επιτυχής: Εκτελέστε τη συμπεριφορά και δείτε εάν είναι επιτυχής. Εάν είναι επιτυχής, μεταβείτε στην επόμενη συμπεριφορά, διαφορετικά διορθώστε τα σφάλματα στον λειτουργικό κώδικα για να επιτύχετε τη συμπεριφορά της εφαρμογής.
5) Κωδικός αντιδραστήρα ή οργάνωση: Ανακαλύψτε ή οργανώστε τον κωδικό σας για να τον κάνετε πιο αναγνώσιμο και επαναχρησιμοποιήσιμο.
6) Επαναλάβετε τα βήματα 1-5 για νέα συμπεριφορά: Επαναλάβετε τα βήματα για να εφαρμόσετε περισσότερες συμπεριφορές στην εφαρμογή σας.
Διαβάστε επίσης => Πώς συμμετέχουν οι υπεύθυνοι δοκιμών στις τεχνικές TDD, BDD & ATDD
Παράδειγμα εφαρμογής συμπεριφοράς στο BDD
Ας υποθέσουμε ότι έχουμε την απαίτηση να αναπτύξουμε μια λειτουργία σύνδεσης για μια εφαρμογή που έχει πεδία ονόματος χρήστη και κωδικού πρόσβασης και ένα κουμπί υποβολής.
Βήμα 1: Γράψτε τη συμπεριφορά της εφαρμογής για την εισαγωγή του ονόματος χρήστη και του κωδικού πρόσβασης.
Scenario: Login check Given I am on the login page When I enter 'username' username And I enter 'Password' password And I click on the 'Login' button Then I am able to login successfully.
Βήμα 2: Γράψτε το αυτοματοποιημένο σενάριο δοκιμής για αυτήν τη συμπεριφορά όπως φαίνεται παρακάτω.
@RunWith(Cucumber.class) public class MyStepDefinitions { @Steps LoginPage loginPage; @Steps HomePage hp; @Given('^I am on the login page $') public void i_am_on_the_login_page(){ loginPage.gotoLoginPage(); } @When('^I enter '((^')*)' username$') public void i_enter_something_username(String username) { loginPage.enterUserName(username); } @When('^I enter '((^')*)' password$') public void i_enter_something_password(String password) { loginPage.enterPassword(password); } @When('^I click on the '((^')*)' button$') public void i_click_on_the_submit_button(String strArg1) { hp = loginPage.submit(); } @Then('^I am able to login successfully.$') public void i_am_able_to_login_successfully() { Assert.assertNotNull(hp); } }
Βήμα 3: Εφαρμόστε τον λειτουργικό κώδικα (Αυτός είναι παρόμοιος με τον λειτουργικό κώδικα στο TDD παράδειγμα βήμα 3).
public class LoginPage{ String username = ''; String password = ''; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Βήμα 4: Εκτελέστε αυτήν τη συμπεριφορά και δείτε εάν είναι επιτυχής. Εάν είναι επιτυχής, μεταβείτε στο βήμα 5, διαφορετικά, εντοπίστε το σφάλμα της λειτουργικής εφαρμογής και, στη συνέχεια, εκτελέστε το ξανά.
Βήμα 5: Η επαναπροσδιορισμός της εφαρμογής είναι ένα προαιρετικό βήμα και σε αυτήν την περίπτωση, μπορούμε να αναδιαμορφώσουμε τον κώδικα στη μέθοδο υποβολής για να εκτυπώσουμε τα μηνύματα σφάλματος όπως φαίνεται στο βήμα 5 για το παράδειγμα TDD
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Βήμα 6: Γράψτε μια διαφορετική συμπεριφορά και ακολουθήστε τα βήματα 1 έως 5 για αυτήν τη νέα συμπεριφορά.
Μπορούμε να γράψουμε μια νέα συμπεριφορά για να ελέγξουμε εάν έχουμε κάποιο σφάλμα επειδή δεν εισάγουμε το όνομα χρήστη όπως φαίνεται παρακάτω:
Scenario: Login check Given I am on the login page And I click on the 'Login' button Then I get an error to enter username.
TDD Vs BDD - Βασικές διαφορές
TDD | BDD |
---|---|
Ίσως να είναι μια καλύτερη προσέγγιση για έργα που περιλαμβάνουν API και εργαλεία τρίτων. | Ίσως να είναι μια καλύτερη προσέγγιση για έργα που βασίζονται σε ενέργειες των χρηστών. Για παράδειγμα: ιστότοπος ηλεκτρονικού εμπορίου, σύστημα εφαρμογών κ.λπ. |
Αντιστοιχεί στην ανάπτυξη βάσει δοκιμών. | Υποδηλώνει Ανάπτυξη βάσει συμπεριφοράς. |
Η διαδικασία ξεκινά γράφοντας μια δοκιμαστική θήκη. | Η διαδικασία ξεκινά γράφοντας ένα σενάριο σύμφωνα με την αναμενόμενη συμπεριφορά. |
Το TDD εστιάζει στον τρόπο υλοποίησης της λειτουργικότητας. | Το BDD εστιάζει στη συμπεριφορά μιας εφαρμογής για τον τελικό χρήστη. |
Οι δοκιμαστικές περιπτώσεις γράφονται σε γλώσσα προγραμματισμού. | Τα σενάρια είναι πιο ευανάγνωστα σε σύγκριση με το TDD καθώς είναι γραμμένα σε απλή αγγλική μορφή. |
Οι αλλαγές στον τρόπο λειτουργίας της εφαρμογής επηρεάζουν πολύ τις δοκιμαστικές περιπτώσεις στο TDD. | Τα σενάρια BDD δεν επηρεάζονται πολύ από τις αλλαγές λειτουργικότητας. |
Απαιτείται συνεργασία μόνο μεταξύ των προγραμματιστών. | Απαιτείται συνεργασία μεταξύ όλων των ενδιαφερομένων. |
Μερικά από τα εργαλεία που υποστηρίζουν το TDD είναι: JUnit, TestNG, NUnit κ.λπ. | Μερικά από τα εργαλεία που υποστηρίζουν BDD είναι SpecFlow, Cucumber, MSpec κ.λπ. |
Οι δοκιμές στο TDD μπορούν να γίνουν κατανοητές μόνο από άτομα με γνώσεις προγραμματισμού, | Οι δοκιμές στο BDD μπορούν να γίνουν κατανοητές από οποιοδήποτε άτομο, συμπεριλαμβανομένων αυτών που δεν γνωρίζουν προγραμματισμό. |
Το TDD μειώνει την πιθανότητα εμφάνισης σφαλμάτων στις δοκιμές σας. | Τα σφάλματα στα τεστ είναι δύσκολο να εντοπιστούν σε σύγκριση με το TDD. |
συμπέρασμα
Η επιλογή μεταξύ TDD Vs BDD μπορεί να είναι πολύ δύσκολη. Κάποιοι μπορεί να υποστηρίξουν ότι το BDD είναι καλύτερο για την εύρεση σφαλμάτων, ενώ άλλοι μπορεί απλώς να πουν ότι το TDD παρέχει υψηλότερη κάλυψη κώδικα.
Καμία μεθοδολογία δεν είναι καλύτερη από την άλλη. Εξαρτάται από το άτομο και την ομάδα του έργου για να αποφασίσει ποια μεθοδολογία θα χρησιμοποιήσει.
Ελπίζουμε ότι αυτό το άρθρο έχει ξεκαθαρίσει τις αμφιβολίες σας σχετικά με το TDD έναντι του BDD !!
Συνιστώμενη ανάγνωση
- 180+ Δοκιμές Εφαρμογών Ιστού Παράδειγμα δοκιμών (δείγμα Λίστα ελέγχου)
- Πώς να μεταφράσετε χειροκίνητες δοκιμαστικές περιπτώσεις σε σενάρια αυτοματισμού; - Ένας οδηγός βήμα προς βήμα με παράδειγμα
- Ερωτήσεις συνέντευξης δοκιμαστικών περιπτώσεων: Γράψτε υποθέσεις δοκιμής με βάση το σενάριο
- Πώς εμπλέκονται οι υπεύθυνοι δοκιμών στις τεχνικές TDD, BDD & ATDD
- Κάλυψη δοκιμής σε δοκιμές λογισμικού (Συμβουλές για μεγιστοποίηση της κάλυψης δοκιμών)
- 8 Εργαλεία και Πλαίσια Δοκιμών Βέλτιστης Ανάπτυξης βάσει Συμπεριφοράς (BDD)
- Εκμάθηση Specflow: Ο απόλυτος οδηγός για το εργαλείο BDD
- Τρόπος σύνταξης δοκιμαστικών περιπτώσεων: Ο τελικός οδηγός με παραδείγματα