Sự khác biệt chính giữa TDD và BDD là gì? [đóng cửa]


129

Test Driven Development đã trở thành cơn thịnh nộ trong cộng đồng .NET trong vài năm qua. Gần đây, tôi đã nghe những lời càu nhàu trong cộng đồng ALT.NET về BDD. Nó là gì? Điều gì làm cho nó khác với TDD?


2
Xem thêm, lập trình viên.stackexchange.com / q / 181818/76176 . Câu hỏi này là nhiều hơn về chủ đề đó.
Evan Carroll

TDD là cho các bài kiểm tra vi mô. BDD là dành cho các yêu cầu hoặc kiểm tra vĩ mô. Nghe các tập từ 1 đến 8 về Kim tự tháp thử nghiệm và nó sẽ giải thích các cấp độ sau: agilenoir.biz/series/agile- Dùts
Lance Kind

Câu trả lời:


104

Tôi hiểu BDD là về đặc điểm kỹ thuật hơn là thử nghiệm . Nó được liên kết với Thiết kế hướng tên miền (bạn không thích những từ viết tắt * DD này à?).

Nó được liên kết với một cách nhất định để viết các câu chuyện của người dùng, bao gồm các bài kiểm tra cấp cao. Một ví dụ của Tom ten Thij :

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

(Trong bài viết của mình, Tom tiếp tục thực hiện trực tiếp đặc tả thử nghiệm này trong Ruby.)

Giáo hoàng của BDD là Dan North . Bạn sẽ tìm thấy một giới thiệu tuyệt vời trong bài viết Giới thiệu về BDD của mình .

Bạn sẽ tìm thấy một so sánh của BDD và TDD trong video này . Cũng có ý kiến ​​về BDD là "TDD được thực hiện đúng" bởi Jeremy D. Miller

Cập nhật ngày 25 tháng 3 năm 2013

Video trên đã bị mất trong một thời gian. Đây là một cái gần đây của Llewellyn Falco, BDD vs TDD (giải thích) . Tôi tìm thấy lời giải thích của anh ấy rõ ràng và đến điểm.


10
Liên kết video dường như đã trở nên tồi tệ
James Nail

1
Christian, tiêu đề video và tên người nói là gì? vì vậy chúng tôi có thể theo dõi nó
smci

1
Hiện tại, liên kết 'Tom Ten Thij' đã chết .. đây là trực tiếp @ - tomtenthij.nl/2008/1/25/iêu
Kundan Pandit

Đây là một trò chơi ngắn dạy những điểm chính của BDD: agilenoir.biz/en/am-i-behavioral-or-not
Lance Kind

16

Đối với tôi, sự khác biệt chính giữa BDD và TDD là trọng tâm và từ ngữ. Và lời nói rất quan trọng để truyền đạt ý định của bạn.

TDD chỉ đạo tập trung vào thử nghiệm. Và vì trong các thử nghiệm "thế giới thác nước cũ" xuất hiện sau khi thực hiện, nên suy nghĩ này dẫn đến hiểu sai và hành vi.

BDD chỉ đạo tập trung vào hành vi và đặc điểm kỹ thuật, và do đó tâm trí thác nước bị phân tâm. Vì vậy, BDD dễ hiểu hơn là thực hành thiết kế và không phải là thực hành thử nghiệm.


2
TDD không liên quan gì đến vòng đời thiết kế phần mềm "thác nước". Nếu bất cứ điều gì, TDD là bất khả tri SDLC. Mục đích của TDD là viết số lượng mã tối thiểu cần thiết để có được một bài kiểm tra để vượt qua. Theo một cách nào đó, bài kiểm tra trở thành đặc tả kỹ thuật cho mã tuân thủ.
Gavin Baumanis

1
TDD là "Thử nghiệm đầu tiên" và có thể hoạt động khá tốt với Agile. Điều này không chính xác.
Terrance

13

Dường như có hai loại BDD.

Đầu tiên là phong cách ban đầu mà Dan North thảo luận và điều này gây ra việc tạo ra các khung kiểu xBehave. Đối với tôi phong cách này chủ yếu được áp dụng để thử nghiệm chấp nhận hoặc thông số kỹ thuật đối với các đối tượng miền.

Phong cách thứ hai là những gì Dave Astels phổ biến và theo tôi, là một hình thức mới của TDD có một số lợi ích nghiêm trọng. Nó tập trung vào hành vi thay vì kiểm tra và cả các lớp kiểm tra nhỏ, cố gắng đến điểm mà về cơ bản bạn có một dòng trên mỗi phương thức (đặc tả) kiểm tra. Kiểu này phù hợp với tất cả các cấp độ thử nghiệm và có thể được thực hiện bằng cách sử dụng bất kỳ khung thử nghiệm đơn vị hiện có nào mặc dù các khung mới hơn (kiểu xSpec) giúp tập trung một hành vi thay vì thử nghiệm.

Ngoài ra còn có một nhóm BDD mà bạn có thể thấy hữu ích:

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


7

Test-Driven Development là một phương pháp phát triển phần mềm thử nghiệm đầu tiên, có nghĩa là nó yêu cầu viết mã kiểm thử trước khi viết mã thực tế sẽ được kiểm tra. Theo lời của Kent Beck:

Phong cách ở đây là viết một vài dòng mã, sau đó là một bài kiểm tra nên chạy, hoặc thậm chí tốt hơn, để viết một bài kiểm tra không chạy, sau đó viết mã sẽ làm cho nó chạy.

Sau khi tìm ra cách viết một đoạn mã nhỏ, bây giờ, thay vì chỉ viết mã, chúng tôi muốn nhận phản hồi ngay lập tức và thực hành "viết mã một chút, kiểm tra một chút, viết mã một chút, kiểm tra một chút". Vì vậy, chúng tôi ngay lập tức viết một bài kiểm tra cho nó.

Vì vậy, TDD là một phương pháp kỹ thuật cấp thấp, mà các lập trình viên sử dụng để tạo ra mã sạch hoạt động.

Phát triển dựa trên hành vi là một phương pháp được tạo ra dựa trên TDD, nhưng đã phát triển thành một quy trình không chỉ liên quan đến lập trình viên và người thử nghiệm, mà thay vào đó là giao dịch với toàn bộ nhóm và tất cả các bên liên quan quan trọng, kỹ thuật và phi kỹ thuật. BDD bắt đầu từ một vài câu hỏi đơn giản mà TDD không trả lời tốt: tôi nên viết bao nhiêu bài kiểm tra? Tôi thực sự nên kiểm tra những gì và tôi không nên làm gì? Những thử nghiệm nào tôi viết sẽ thực sự quan trọng đối với doanh nghiệp hoặc đối với chất lượng tổng thể của sản phẩm, và đó chỉ là kỹ thuật quá mức của tôi?

Như bạn có thể thấy, những câu hỏi như vậy đòi hỏi sự hợp tác giữa công nghệ và kinh doanh. Các bên liên quan kinh doanh và các chuyên gia tên miền thường có thể cho các kỹ sư biết loại thử nghiệm nào nghe có vẻ hữu ích, nhưng chỉ khi các thử nghiệm là thử nghiệm cấp cao xử lý các khía cạnh kinh doanh quan trọng. BDD gọi các bài kiểm tra giống như doanh nghiệp như vậy, ví dụ về các ứng dụng, các ví dụ như trong các bộ phận khác, cho tôi biết một ví dụ về cách tính năng này hoạt động chính xác, Trực tiếp và bảo lưu từ kiểm tra, kiểm tra kỹ thuật, như xác thực dữ liệu hoặc kiểm tra tích hợp API. Phần quan trọng là trong khi các bài kiểm tra chỉ có thể được tạo bởi các lập trình viên và người kiểm thử, thì các ví dụ có thể được thu thập và phân tích bởi toàn bộ nhóm phân phối của các nhà thiết kế, các nhà phân tích, v.v.

Trong một câu, một trong những định nghĩa tốt nhất về BDD mà tôi đã tìm thấy cho đến nay là BDD nói về những cuộc trò chuyện với các chuyên gia tên miền và sử dụng các ví dụ để có được sự hiểu biết chung về hành vi mong muốn và khám phá những ẩn số. Phần khám phá là rất quan trọng. Khi nhóm phân phối thu thập nhiều ví dụ hơn, họ bắt đầu hiểu về lĩnh vực kinh doanh ngày càng nhiều và do đó họ giảm sự không chắc chắn về một số khía cạnh của sản phẩm mà họ phải đối phó. Khi sự không chắc chắn giảm, sự sáng tạo và tự chủ của đội ngũ giao hàng tăng lên. Chẳng hạn, giờ đây họ có thể bắt đầu đề xuất các ví dụ của riêng mình mà người dùng doanh nghiệp không nghĩ là có thể vì thiếu chuyên môn công nghệ.

Bây giờ, có các cuộc trò chuyện với các chuyên gia kinh doanh và tên miền nghe có vẻ tuyệt vời, nhưng tất cả chúng ta đều biết điều đó thường kết thúc như thế nào trong thực tế. Tôi bắt đầu hành trình của mình với công nghệ là một lập trình viên. Là lập trình viên, chúng tôi được dạy viết mã thuật toán, mẫu thiết kế, trừu tượng. Hoặc, nếu bạn là một nhà thiết kế, bạn được dạy thiết kếTổ chức thông tin và tạo giao diện đẹp. Nhưng khi chúng tôi nhận được công việc cấp đầu vào, chủ lao động của chúng tôi hy vọng chúng tôi sẽ "cung cấp giá trị cho khách hàng." Và trong số những khách hàng đó có thể là, ví dụ ... một ngân hàng. Nhưng tôi không thể biết gì về ngân hàng, ngoại trừ cách giảm số dư tài khoản của mình một cách hiệu quả. Vì vậy, tôi sẽ phải bằng cách nào đó dịch những gì được mong đợi của tôi thành mã ... Tôi sẽ phải xây dựng một cầu nối giữa ngân hàng và chuyên môn kỹ thuật của mình nếu tôi muốn cung cấp bất kỳ giá trị nào. BDD giúp tôi xây dựng một cây cầu như vậy trên nền tảng giao tiếp ổn định giữa đội ngũ giao hàng và các chuyên gia tên miền.

Tìm hiểu thêm

Nếu bạn muốn đọc thêm về BDD, tôi đã viết một cuốn sách về chủ đề này. Viết kỹ thuật tuyệt vời Viết ra khám phá nghệ thuật phân tích các yêu cầu và sẽ giúp bạn tìm hiểu cách xây dựng một quy trình BDD tuyệt vời và sử dụng các ví dụ như một phần cốt lõi của quy trình đó. Cuốn sách nói về ngôn ngữ phổ biến, thu thập các ví dụ và tạo ra cái gọi là thông số kỹ thuật thực thi (kiểm tra tự động) từ các ví dụ về các kỹ thuật giúp các nhóm BDD cung cấp phần mềm tuyệt vời về thời gian và ngân sách.

Nếu bạn quan tâm đến việc mua Thông số kỹ thuật tuyệt vời của Viết, bạn có thể tiết kiệm 39% với mã khuyến mãi 39nicieja2 :)


6

Tôi đã thử nghiệm một chút với phương pháp BDD và kết luận sớm của tôi là BDD rất phù hợp để sử dụng thực hiện trường hợp, nhưng không phải trên các chi tiết cơ bản. TDD vẫn đá ở mức đó.

BDD cũng được sử dụng như một công cụ truyền thông. Mục tiêu là để viết các thông số kỹ thuật thực thi có thể được hiểu bởi các chuyên gia tên miền.


2

Dường như với tôi rằng BDD là một phạm vi rộng hơn. Nó gần như ngụ ý TDD được sử dụng, rằng BDD là phương pháp bao gồm tập hợp thông tin và yêu cầu sử dụng, trong số những thứ khác, thực hành TDD để đảm bảo phản hồi nhanh chóng.


2

Với kiến ​​thức mới nhất của tôi về BDD khi so sánh với TDD, BDD tập trung vào việc chỉ định điều gì sẽ xảy ra tiếp theo, trong khi TDD tập trung vào việc thiết lập một tập hợp các điều kiện và sau đó nhìn vào đầu ra.


2

Phát triển hướng hành vi dường như tập trung nhiều hơn vào sự tương tác và giao tiếp giữa các Nhà phát triển và cả giữa Nhà phát triển và người thử nghiệm.

Bài viết Wikipedia có lời giải thích:

Phát triển hành vi lái xe

Bản thân tôi không thực hành BDD.


2

Hãy xem xét lợi ích chính của TDD là thiết kế. Nó nên được gọi là Thiết kế hướng thử nghiệm. BDD là một tập hợp con của TDD, gọi nó là Thiết kế hướng hành vi.

Bây giờ hãy xem xét một triển khai phổ biến của TDD - Kiểm thử đơn vị. Các đơn vị trong Kiểm tra đơn vị thường là một bit logic là đơn vị công việc nhỏ nhất bạn có thể thực hiện.

Khi bạn đặt các Đơn vị đó lại với nhau theo cách có chức năng để mô tả Hành vi mong muốn cho các máy, bạn cần hiểu Hành vi bạn đang mô tả cho máy. Thiết kế hướng hành vi tập trung vào việc xác minh sự hiểu biết của người thực hiện về các trường hợp sử dụng / Yêu cầu / Bất cứ điều gì và xác minh việc triển khai từng tính năng. Nói chung, BDD và TDD phục vụ mục đích quan trọng là thông báo thiết kế và mục đích thứ hai là xác minh tính đúng đắn của việc thực hiện, đặc biệt là khi nó thay đổi. BDD được thực hiện đúng liên quan đến biz và dev (và qa), trong khi Kiểm tra đơn vị (có thể được xem không chính xác là TDD thay vì một loại TDD) thường được thực hiện trong dev silo.

Tôi sẽ thêm rằng các xét nghiệm BDD phục vụ như là yêu cầu sống.



1

Không có sự khác biệt giữa TDD và BDD. ngoại trừ bạn có thể đọc các bài kiểm tra của mình tốt hơn và bạn có thể sử dụng chúng theo yêu cầu. Nếu bạn viết các yêu cầu của mình bằng các từ giống như khi bạn viết các bài kiểm tra BDD thì bạn có thể đến từ khách hàng của mình với một số bài kiểm tra được xác định sẵn sàng để viết mã.


1

Sự khác biệt giữa phát triển dựa trên thử nghiệm (TDD) và phát triển theo hướng hành vi (BDD)

  • BDD tập trung vào khía cạnh hành vi của hệ thống hơn là
    khía cạnh triển khai của hệ thống mà TDD tập trung vào.

  • BDD cung cấp một sự hiểu biết rõ ràng hơn về những gì hệ thống nên làm
    theo quan điểm của nhà phát triển và khách hàng. TDD chỉ
    cung cấp cho nhà phát triển sự hiểu biết về những gì hệ thống nên làm.

  • BDD cho phép cả nhà phát triển và khách hàng làm việc cùng nhau để phân tích các yêu cầu có trong mã nguồn của hệ thống.


1

Nói tóm lại, có sự khác biệt lớn giữa TDD và BDD Trong TDD, chúng tôi chủ yếu tập trung vào Dữ liệu thử nghiệm Trong BDD, trọng tâm chính của chúng tôi là hành vi của dự án để bất kỳ người không lập trình nào cũng có thể hiểu được dòng mã thay mặt cho tiêu đề của phương pháp đó


1

Đây là ảnh chụp nhanh:

  • TDD chỉ là quá trình kiểm tra mã trước khi viết nó!

  • DDD là quá trình được thông báo về Tên miền trước mỗi chu kỳ chạm vào mã!

  • BDD là một triển khai của TDD mang lại một số khía cạnh của DDD!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.