Là BDD có thể mở rộng cho các dự án vừa và lớn?


22

Trong mỗi trang web bạn đọc về BDD (Phát triển hướng hành vi), bạn tìm thấy một ví dụ rất đơn giản cho bạn thấy nó rõ ràng và dễ dàng như thế nào để xác định các yêu cầu của bạn. Nhưng cố gắng thực hiện quy trình này trong một sản phẩm lớn (không phải là ví dụ máy tính) cho tôi thấy rằng mọi thứ có thể nhận được (hoặc sẽ nhận được) khá phức tạp và không thể đọc được; đặc biệt là thay đổi các yêu cầu tại một thời điểm sau đó có nghĩa là rất nhiều công việc để sửa các bài kiểm tra Tích hợp cho việc này.

Vì vậy, tôi tự hỏi, liệu BDD có thực sự xứng đáng? Liệu nó có giải quyết được một vấn đề mà các kỹ thuật khác không làm được!


Quá tệ, tôi nghĩ rằng vấn đề này khá mang tính xây dựng khi xem xét rằng BDD đang trở nên phổ biến hơn gần đây.
DD

1
Nếu bất cứ ai có đủ đại diện có thể đề nghị mở lại thì đó sẽ là những người tuyệt vời.
DD

Tôi sẽ mở lại, nhưng bạn đã chấp nhận câu trả lời đầu tiên ...
MattDavey

1
Tôi đã chấp nhận vì nó đã bị đóng, vì vậy tôi biết không có câu trả lời nào khả thi hơn, nhưng tôi thực sự xen vào các báo cáo kinh nghiệm hơn về điều này, tôi sẽ không chấp nhận nó ngay bây giờ
DD

2
ok tuyệt vời :) Tôi nghĩ bạn cũng nên chỉnh sửa câu hỏi một chút. Tôi nghĩ rằng câu hỏi của bạn là về khả năng mở rộng của BDD trong các dự án lớn. "BDD có thực sự tốt như vậy không" là chủ quan, "Liệu BDD có mở rộng tốt cho các dự án lớn không" khách quan hơn một chút.
MattDavey

Câu trả lời:


6

Tôi nghĩ rằng một trong những tài nguyên tốt nhất trên BDDĐặc tả theo sách Ví dụ . Nó nói rất nhiều về cách tổ chức các bài kiểm tra BDD và cách viết chúng để chúng không gây ra quá nhiều việc làm khi yêu cầu thay đổi.

Nếu mọi thứ trở nên phức tạp hoặc quá phức tạp trong các bài kiểm tra của bạn thì có lẽ bạn đang làm sai điều gì đó. Nó giống với BDD và TDD. Viết bài kiểm tra tốt là khó và phải mất nhiều tháng để học nó.


3
TDD không giống nhau, việc kiểm tra một đơn vị được xác định trước không bao giờ có thể phức tạp như vậy trừ khi bạn có đơn vị quá lớn sẽ có mùi mã, nhưng kiểm tra tích hợp được cho là kiểm tra sự tương tác giữa nhiều đơn vị, tổng chức năng, điều này cho phép độ phức tạp của nó tăng lên tuyến tính với các yêu cầu, bạn vẫn không thể phá vỡ nó thành các phần nhỏ hơn vì nó sẽ không được kiểm tra tích hợp nữa nếu được thực hiện.
DD

Bạn có thể đính kèm một số xét nghiệm BDD phức tạp và tôi có thể thấy những gì có thể được thực hiện để làm cho chúng đơn giản hơn.
Piotr Perak

Nó không dễ dàng như vậy, những cái tôi có ở đây không phải bằng tiếng Anh tôi sẽ phải dịch chúng, nếu tôi tìm thấy một yêu cầu mà tôi có thể dễ dàng dịch sang tiếng Anh tôi có thể đính kèm nó, nhưng mã phía sau cũng là một vấn đề. quá lớn để đính kèm ở đây trong một bài.
DD

Tại sao điều này bị hạ cấp? Tôi đã cung cấp nguồn lực lớn sẽ giúp OP giải quyết vấn đề của mình.
Piotr Perak

đó không phải là tôi, tôi sẽ cho +1 để bù nhưng tôi chỉ có thể làm điều này trong 14 giờ vì tôi đã sử dụng tất cả 30 phiếu bầu của mình cho ngày hôm nay.
DD

5

Nó có thể giúp nhận ra rằng trọng tâm của BDD là các cuộc hội thoại . BDD thực sự là một công cụ phân tích tình cờ cung cấp một số thử nghiệm hồi quy như một sản phẩm phụ đẹp.

Tôi đã sử dụng các kịch bản ở tất cả các cấp độ trong cuộc trò chuyện; từ việc xác định các bên liên quan khác nhau để xem liệu một bản phát hành có khả năng được đón nhận hay không, đến tìm hiểu cách thức hoạt động của một mô-đun hoặc lớp .

Có một vài gợi ý và lời khuyên tôi có thể đề xuất để làm cho việc này dễ dàng hơn.

Nếu bạn chưa bao giờ làm điều đó trước đây, nó sẽ thay đổi.

Bất cứ điều gì mới đối với tên miền hoặc doanh nghiệp đều có thể thay đổi. Bạn có thể nhận ra bạn đang ở trong không gian này nếu bạn đang nói chuyện qua các tình huống, đặt câu hỏi cho họ và doanh nghiệp nói, "Ồ, tôi không chắc chắn." Đó là một dấu hiệu tốt để ngừng cố gắng thực hiện BDD và tăng cường một cái gì đó để có được phản hồi nhanh hơn, để giúp doanh nghiệp tìm ra những gì họ muốn. Khi các ý tưởng đã ổn định, các kịch bản có thể được viết lại.

Tất cả các dự án đều có một số khía cạnh đối với chúng là mới, hoặc bạn sẽ không thực hiện chúng.

Nếu bạn đã làm nó trước đây, nó nhàm chán.

Cũng như các khía cạnh mới, khác biệt , các dự án thường có một số khía cạnh được thương mại hóa tương tự như các khía cạnh đã được thực hiện. Chẳng hạn, nếu tôi đang sản xuất một chiếc điện thoại di động mới, nó vẫn cần phải thực hiện cuộc gọi. "Gọi điện thoại" là một kịch bản nổi tiếng đến mức chúng ta không cần phải nói qua nó. Tương tự, những thứ như "đăng nhập" hoặc thậm chí "đăng ký người dùng" thật nhàm chán.

Bất cứ nơi nào có thể, hãy sử dụng các thư viện cho những thứ này, và sau đó bạn sẽ không phải viết các kịch bản xung quanh chúng. Ngoài ra, hãy thực hiện các bit khác trước - có người dùng đã đăng nhập và tìm hiểu xem anh ấy đang đăng nhập vào mục nào . Những khu vực này không có khả năng thay đổi, vì vậy dù sao bạn cũng có thể thoát khỏi việc kiểm tra thủ công.

Nếu ai đó đã làm điều đó trước đây, nói chuyện thông qua các kịch bản có thể giúp đỡ.

Có một chút giữa nơi chúng ta có các yêu cầu cụ thể về tên miền, những thứ tương đối dễ hiểu bởi ai đó và sự không chắc chắn thực sự chủ yếu xoay quanh phạm vi thay vì hành vi thực tế của hệ thống.

Nói chuyện qua các kịch bản có thể giúp nhóm phát triển khám phá hành vi, rút ​​ra kiến ​​thức của một chuyên gia và để đảm bảo rằng hành vi có giá trị đã biết được nắm bắt.

Đây là bit mà BDD hoạt động tốt nhất. Mẹo của tôi là viết các kịch bản thú vị nhất ở đầu tệp tính năng (hoặc wiki, nếu bạn không tự động hóa) và xóa mọi kịch bản trùng lặp hoặc dễ suy ra.

Bất cứ nơi nào có thể, hãy sử dụng các kịch bản giống như các ví dụ về cách ứng dụng hoạt động . Ví dụ: nếu bạn muốn hiển thị cách xác thực hoạt động, hãy hiển thị một vài ví dụ về cách ứng dụng giúp người dùng điền vào biểu mẫu. Kiểm tra xác nhận là nghiêm ngặt bằng cách sử dụng thử nghiệm đơn vị, dễ dàng hơn nhiều để duy trì và chạy nhanh hơn.

đọc thêm

Nếu bạn quan tâm đến điều này, đây là một số điều tôi đã viết có thể giúp ích.

BDD trong lớn

Cynefin cho nhà phát triển , đi sâu vào ba lĩnh vực này chi tiết hơn

Các slide hướng dẫn của tôi , tất cả đều đẹp và được chú thích cho bạn, và bao gồm cả stack.


Cảm ơn bạn vì câu trả lời đầy thông tin này, tôi đã đọc các liên kết bạn đã đính kèm
DD

3

Chúng tôi đã xây dựng một dự án khá phức tạp ( độ phức tạp miền ) vào mùa thu năm ngoái và tôi có thể thành thật nói rằng việc đưa công việc phía trước vào BDD đã cứu dự án. Tôi đã thấy một mối tương quan mạnh mẽ giữa độ phức tạp của miền và lợi ích của BDD.

Hãy để tôi có một điều ngoài lề: kiểm tra các quy tắc kinh doanh phức tạp là khó khăn. Câu hỏi là, bạn có muốn thử và nhớ tất cả các kịch bản điên rồ bất cứ khi nào bạn thực hiện thay đổi hoặc bạn muốn mạng lưới an toàn đó cho bạn biết khi bạn phá vỡ thông số kỹ thuật. Dành thời gian trước và tìm ra tất cả các kịch bản, viết chúng ra và cuối cùng viết tất cả các bài kiểm tra cho chúng.

Và khi bạn quay lại sau để cố gắng hiểu mọi thứ, có thông số kỹ thuật có thể kiểm chứng đó là một sự cứu rỗi.


1

BDD là một quá trình phát triển dựa trên TDD (Phát triển dựa trên thử nghiệm) Dưới đây là một số ưu và nhược điểm của TDD được rút ra từ kinh nghiệm cá nhân của tôi:

  • TDD, đảm bảo rằng phạm vi của bạn được xác định rõ. Bằng cách này, bạn thiết kế trường hợp thử nghiệm của bạn đầu tiên. Do đó, đặt kỳ vọng cho đoạn mã bạn phải viết.
  • TDD là một cách bảo vệ mã của bạn. Giả sử bạn viết một hàm đơn giản và sau đó bạn thêm một số điều kiện chuyển đổi phức tạp trong cùng hàm này. Ngày mai, nếu người khác muốn sửa đổi chức năng này, anh ta có thể tham khảo trường hợp thử nghiệm. Nếu anh ta muốn thay đổi chức năng của bạn, thì anh ta cũng phải thay đổi trường hợp kiểm tra (hầu hết các lần). Điều này cho phép anh ấy / cô ấy hiểu rằng có một lý do đằng sau những gì bạn đã viết.
  • TDD cho phép phát triển phần mềm nhanh hơn. Mỗi người trong chúng ta sẽ phải đối mặt với vấn đề này trong khi viết mã. Chúng tôi bắt đầu với một ý tưởng. Và dần dần mất dấu vết của nó. Chúng tôi cuối cùng đặt các đoạn mã không mong muốn để xử lý một số tình huống. Trong TDD, bạn đặt kỳ vọng trả trước. Qua đó, bạn hạn chế bản thân đi lang thang quá xa mục tiêu.
  • TDD cho phép bạn bắt các lỗi có thể xảy ra trước khi dự án lên mạng. Điều này chủ yếu phải làm với chất lượng của các trường hợp thử nghiệm được viết.

Nhược điểm:

  • Lúc đầu, TDD có thể là một chút khó khăn. Nhiều người không hiểu khái niệm phát triển lái xe trường hợp thử nghiệm.
  • TDD, đôi khi có thể dẫn đến những nỗ lực lớn trong bảo trì. Điều này có liên quan đến các trường hợp thử nghiệm không mong muốn hoặc vô nghĩa.
  • TDD phải được thực hiện với một nhúm muối. Không có nhà phát triển nào thích dành thời gian cho một số trường hợp thử nghiệm được viết bởi người khác. Giải mã ý nghĩa của testcase đôi khi có thể gây ra đau đầu lớn.

Tôi làm việc trong một dự án với hơn 900.000 dòng mã. Và tôi vẫn theo dõi BDD. Một điều quan trọng bạn cần xem xét là số lỗi có thể xảy ra hoàn toàn do các trường hợp kiểm tra. Vài năm sau, bạn sẽ bị BDD chửi thề!


2
Bạn nên giải thích thêm về sự khác biệt giữa BDD và TDD và nơi phần DDD xuất hiện.
Benjamin Gruenbaum

1
@BenjaminGruenbaum Lý tưởng nhất, không có sự khác biệt giữa BDD và TDD. BDD khi theo đúng cách cũng giống như TDD! Vì vậy, tôi đã không thấy bất kỳ lý do nào để mang đến sự khác biệt như là một phần của câu trả lời. Nhờ đề nghị mặc dù!
Ricketyship

1
"TDD cho phép phát triển phần mềm nhanh hơn." đã có nghiên cứu nào xác nhận điều này chưa? Chỉ tò mò thôi. Tôi cũng sẽ đề cập rằng tăng tốc không phải là tuyến tính.
Den

2
@AlexandreMartins Hah, hoàn toàn! Điều quan trọng hơn nhiều để nhận ra rằng bạn có thể có các bài kiểm tra & kịch bản chất lượng kém hơn là giả vờ rằng tất cả đều là IMO tốt.
Lunivore

2
@Lunivore Có, đó là điều làm phiền tôi trong trường hợp BDD / TDD. Các trường hợp thử nghiệm cần phải mạnh mẽ. Thật không may, có quan điểm này trong cộng đồng phát triển miễn là có các trường hợp thử nghiệm, nó vẫn ổn! Tôi đã từng thấy một trường hợp thử nghiệm trong đó có một hàng được chèn vào bảng bằng cách sử dụng câu lệnh sql và điều tương tự được khẳng định ở bước tiếp theo! Có phải nhà phát triển đang cố gắng kiểm tra chức năng tiên tri?!
Ricketyship
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.