BDD: Bắt đầu


9

Tôi đang bắt đầu với BDD và đây là câu chuyện của tôi:

Feature: Months and days to days
    In order to see months and days as days
    As a date conversion fan
    I need a webpage where users can enter
    days and months and convert them to days.

Tôi có một số nghi ngờ ...

Tôi có nên viết kịch bản của mình trước khi mã hóa bất cứ điều gì hay trước tiên tôi nên viết một kịch bản và sau đó viết mã, viết lại một kịch bản và sau đó viết mã, v.v ...?

Nếu tôi nên viết kịch bản của mình trước đó, các bước của tôi có thể được phê duyệt và mã sản xuất vẫn không được thực hiện không?

Khi nào tôi nên thực hiện tái cấu trúc mã của mình? Sau khi tính năng được thực hiện hoặc sau mỗi kịch bản thực hiện?


"các bước của tôi có thể được phê duyệt và mã sản xuất vẫn không được thực hiện không?" Điều đó có nghĩa là gì? Vui lòng giải thích.
S.Lott

Câu trả lời:


12

Từ câu chuyện, tôi suy luận rằng bạn đang tự mình viết mã.

Thông thường, mục đích của BDD là cho phép các cuộc hội thoại, đặc biệt là giữa doanh nghiệp và nhà phát triển, để nhóm có thể chắc chắn rằng họ đã đạt được sự hiểu biết chung. Chúng tôi cũng muốn bao gồm những người thử nghiệm, bởi vì họ có thể phát hiện ra khi chúng tôi bỏ lỡ các tình huống.

Nếu bạn đang tự làm việc này, hãy lấy một con vịt cao su và giải thích hành vi của ứng dụng của bạn với con vịt. Cho một số ví dụ về cách nó nên hoạt động. Đó sẽ là những kịch bản của bạn.

Để bắt đầu, tôi sẽ đề nghị không tự động hóa các kịch bản đó. Bạn có thể viết chúng ra nếu bạn thích. Hãy nhớ rằng kết quả kinh doanh mà bạn đã chia sẻ với con vịt là về mức độ phù hợp để diễn đạt chúng. Bây giờ bạn sẽ có ý tưởng về cách ứng dụng hoạt động và bạn có thể chạy qua các tình huống theo cách thủ công. Tôi thích đối xử với mọi thứ không hoạt động như một lỗi . Đôi khi tôi đã bắt đầu với tự động hóa, nhưng chỉ khi tôi biết rất rõ hệ thống hoạt động như thế nào, tôi mới quen với các công cụ và giao diện người dùng được hiểu rõ. Thậm chí sau đó tôi thường phải làm lại nó một chút khi tôi đã viết mã.

Ở cấp độ thấp hơn, hãy nói với con vịt của bạn cách mỗi lớp sẽ cư xử. Cung cấp một số ví dụ. Vịt cao su hoàn toàn có khả năng hiểu ngôn ngữ kỹ thuật. Bây giờ bạn có BDD cấp đơn vị, còn gọi là kiểm tra đơn vị. Chu kỳ tái cấu trúc đỏ-xanh xảy ra ở đây. (Tôi không có xu hướng cần phải cấu trúc lại nhiều nữa, bởi vì tôi đang nghĩ về trách nhiệm của các lớp học, diễn đạt nó theo ngôn ngữ định hướng kinh doanh và dù sao nó cũng có xu hướng rơi ra một cách khá hay. Nhưng tôi Tôi đã làm điều này được một lúc rồi. Sẽ ổn thôi nếu bạn làm thế.)

Đừng tái cấu trúc nó quá nhiều. Chúng tôi vẫn muốn nhận phản hồi về mã của mình, vì luôn có những điều chúng tôi không biết mà chúng tôi không biết . Sự hoàn hảo là kẻ thù của bạn ở đây. Làm cho nó đủ tốt, làm cho nó dễ đọc, sau đó tiếp tục. Nếu bạn cần làm cho một cái gì đó hoàn hảo để thực hiện các thay đổi hơn nữa, hãy làm điều đó khi bạn thực hiện các thay đổi tiếp theo.

Nếu bạn có cơ hội nhận phản hồi về các kịch bản của mình từ các bên liên quan trong kinh doanh, nhưng họ không ngồi cùng bạn, bạn có thể gửi các kịch bản cho họ ngay khi bạn viết và trước khi bạn tự động hóa chúng. Bạn cũng có thể muốn gửi một bản mô phỏng UI, để chúng có thể tương quan các từ với hành động. Đừng đi quá xa trước mã hóa với điều này. Làm việc với giả định rằng những gì bạn đã làm là sai và bạn cần nhận phản hồi để tìm hiểu làm thế nào.

Như một gợi ý cuối cùng, đừng nói chung cụm từ câu chuyện theo quan điểm của người dùng (kịch bản, có, nhưng không phải câu chuyện). Chúng không phải là những câu chuyện của người dùng. Có lẽ nên đọc một cái gì đó như:

In order to attract people to my website
As @thom
I want users to easily convert months and days to days.

Dù sao, có một số mục tiêu cấp cao hơn mà bạn đang tìm kiếm. Điều này cũng sẽ giúp bạn rút ra những khả năng bạn cần. Chúc may mắn với nó, và xin lỗi cho bài viết quá dài.


1
Phần 'vịt cao su' là tuyệt vời. Tôi nghĩ tôi là người duy nhất nghĩ về điều đó!
NoChance

3

Tôi có nên viết kịch bản của mình trước khi mã hóa bất cứ điều gì hay trước tiên tôi nên viết một kịch bản và sau đó viết mã, viết lại một kịch bản và sau đó viết mã, v.v ...?

Cả hai sẽ làm việc. Chọn một.

Nó không quan trọng lắm.

Bạn càng có nhiều kịch bản, bạn càng có thể thiết kế trước.

Bạn càng có nhiều kịch bản, càng mất nhiều thời gian để hoàn thành công việc.

Khi nào tôi nên thực hiện tái cấu trúc mã của mình? Sau khi tính năng được thực hiện hoặc sau mỗi kịch bản thực hiện?

Không. Bạn tái cấu trúc khi việc thiết kế kịch bản tiếp theo trở nên khó khăn .


Tôi đã đặt một câu hỏi mới ... "Nếu tôi nên viết kịch bản của mình trước khi ...". Bạn có thể xem qua được không? Cảm ơn rât nhiều.
thom

1
@ S.Lott Câu trả lời tốt nhưng có một ngụy biện: dựa trên tính hữu ích của chu trình tái cấu trúc đỏ-xanh, tôi sẽ đề nghị tái cấu trúc liên tục trong quá trình BDD, ngay sau mỗi thử nghiệm xanh.
Rein Henrichs

@Rein Henrichs: Một giải pháp thay thế sẽ là lưu ý rằng tái cấu trúc để hoàn thành tất cả các thử nghiệm cho một câu chuyện xảy ra như một phần không thể tránh khỏi và không thể tránh khỏi của mã hóa. Ngay cả một thiết kế tuyệt vời cũng không thể bao gồm tất cả các cơ sở. Việc tái cấu trúc đó dường như không đáng nhắc đến. Tuy nhiên, bạn đã chỉ ra nó độc đáo. Tuy nhiên, tái cấu trúc giữa các câu chuyện là một hoạt động nghiêm trọng và tốn thời gian hơn, vì bộ tính năng phát triển bởi sự bồi đắp của các câu chuyện.
S.Lott

3

Sử dụng động từ mô tả

Feature: CONVERT Months and days to days

Đừng đưa ra quyết định thiết kế trong các câu chuyện ["Tôi cần một trang web" là một quyết định thiết kế]

As a date conversion fan
I want to convert days and months into days

Sử dụng các mục tiêu giá trị kinh doanh trong các câu chuyện

So that [some business reason]

Viết càng nhiều tính năng và câu chuyện càng tốt trước khi bắt đầu viết mã; câu chuyện thông báo cho nhau , ảnh hưởng đến các tính năng và thông báo cho thiết kế.

Tái cấu trúc sau mỗi câu chuyện. Đỏ-Xanh-Tái cấu trúc.


+1, câu trả lời tốt. Nhưng không phải là "cách BDD" để tái cấu trúc như là một phần của chu trình kiểm thử đơn vị bên trong chứ không phải là chu trình kiểm tra chấp nhận bên ngoài?
pdr

@pdr: đó là những gì tôi muốn nói, tái cấu trúc sau mỗi câu chuyện. Kiểm tra BDD / TDD quy mô từ đơn vị đến chấp nhận, chỉ có một chu kỳ (trong tâm trí của tôi) ;-)
Steven A. Lowe

Tại sao "Tôi cần một trang web" là một quyết định thiết kế? Cảm ơn!
thom

@thom: câu chuyện của người dùng nên thể hiện những gì người dùng muốn có thể làm, chứ không phải cách nó sẽ được thực hiện. Nói cách khác, các tính năng, câu chuyện và kịch bản là các yêu cầu và thông số chức năng. Đừng đưa ra quyết định thiết kế cho đến khi bạn có bức tranh đầy đủ. Trong ví dụ này (có lẽ là giả tạo), nhu cầu kinh doanh của người dùng nói chung có thể chỉ ra rằng một trang web có thể không phải là giải pháp thuận tiện nhất - tiện ích máy tính để bàn hoặc ứng dụng di động có thể tốt hơn, tùy thuộc vào cách thức / thời điểm họ cần sử dụng. Chi tiết triển khai làm lộn xộn các câu chuyện và có thể khóa bạn vào một thiết kế cụ thể quá sớm.
Steven A. Lowe
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.