2012-02-27 16 views
5

Tôi đang cố viết các yêu cầu cho quy trình kinh doanh đa bước (thông qua trình hướng dẫn). Tôi có nhiều tình huống trong đó tương tác của người dùng với một màn hình sẽ thay đổi dù bạn có được phép chọn tùy chọn trên màn hình khác hay không.Khi viết một tính năng BDD, tôi có nên đặt tương tác của người dùng trước đó vào bước Đã cho hay khi Bước?

Ví dụ (tôi đã che khuất doanh nghiệp thực tế, nhưng quá trình và hình thức các bước gần giống):

Feature: Personal Diagnostic Search Filter 
    In order to select a Technician who offers Personal Diagnostics, 
    when I've asked for a Personal Diagnostic 
    As a Business Customer 
    I want to limit my search to Technicians who offer Personal Diagnostics 

    Background: 
    Given a Business named "Big Al's Auto Supply" 
     And a Customer named "Bob Test" at the "Big Al's Auto Supply" Business 
     And an Account named "[email protected]" owned by "Bob Test" 
     And the "[email protected]" Account has the "Repair Order Creator" 
     permission 
     And you log in as "[email protected]" 
     And you start scheduling a new Repair Order 

    Scenario: Enter the Select Technician page when Use PD is selected 
    Given you select Use PD 
    When you enter the Select Technician page 
    Then the PD Filter should be visible 
     And the PD Filter should be selected 

    Scenario: Basic Search for Technicians when PD Filter is selected 
    Given a Technician named "PD Technician" 
     And the Technician named "PD Technician" supports PD 
     And a Technician named "Non-PD Technician" 
     And the Technician named "Non-PD Technician" does not support PD 
     And you select Use PD 
     And you enter the Select Technician page 
     And you select the PD Filter 
     And you select Basic Search 
    When you search for Technicians with the name "Technician" 
    Then your search results should contain "PD Technician" 
     And your search results should not contain "Non-PD Technician" 

Nhưng trên the Gherkin wiki, chúng tôi khuyên bạn:

Tránh nói về tương tác của người dùng trong givens

Họ tiếp tục tạo ngoại lệ, mặc dù:

Đăng nhập người dùng (Ngoại lệ đối với đề xuất không tương tác. Những điều "xảy ra sớm hơn" là ok).

Nó cũng được cho biết trên trang đó rằng:

Mục đích của Khi bước là để mô tả các hành động chính người dùng thực hiện

gì thuộc về một Given và những gì thuộc về trong một thời điểm nếu bạn có nhiều tương tác giao diện người dùng?

Trong trường hợp đầu tiên, select Use PD yêu cầu tương tác giao diện người dùng vì nó là một phần của trình hướng dẫn tạo Đơn đặt hàng sửa chữa mới. Tuy nhiên đó là điều kiện tiên quyết để Bộ lọc PD hiển thị và được kích hoạt khi người dùng vào trang Chọn kỹ thuật viên.

Kịch bản đầu tiên có thể không quá tệ, nhưng kịch bản thứ hai làm trầm trọng thêm vấn đề. Tìm kiếm được kích hoạt khi bạn nhấn Tìm kiếm nhưng có rất nhiều tương tác UI phải được thực hiện để điều hướng đến trang đó. Một số tương tác đó không thể được tô bóng, hoặc là Use PD phải được chọn để bộ lọc tìm kiếm xuất hiện. Nhưng những tương tác giao diện người dùng đó không phải là hành động chính của trường hợp.

Trả lời

8

Như một quy tắc chung, hãy thử càng nhiều càng tốt để cụm từ kịch bản như thể bạn đang trò chuyện về nó và loại trừ càng nhiều thông tin không liên quan càng tốt.

Ví dụ, tôi rất thích kịch bản của bạn ở trên để đọc một cái gì đó như:

Given our customer Bob Test is scheduling a repair order 
And we have two technicians: "Fred Technician" and "George Nontechnician" 
When Bob Test decides he wants a Personal Diagnostic 
And he selects a technician 
Then the search results should only contain "Fred Technician" 

Sau đó làm bất cứ điều gì là cần thiết để thực hiện những bước làm việc - có thể họ đăng nhập hay không. Lưu ý rằng tôi chưa nói về "trang" hoặc thực hiện các bước thực tế - chúng phải trực quan cho người dùng. BDD không phải là về thử nghiệm. Đó là về các ví dụ về cách mọi người sẽ sử dụng hệ thống, để bạn có thể trò chuyện xung quanh các ví dụ đó và khám phá chúng, tìm các trường hợp ngoại lệ và các tình huống khác nhau, v.v.

Kiểm tra bộ lọc có thể nhìn thấy không có giá trị . Người dùng không quan tâm rằng bộ lọc hiển thị. Anh quan tâm rằng anh ta có thể sử dụng bộ lọc để có được kết quả của mình, vì vậy chỉ cần làm điều đó.

Trong mã, tôi thường chuyển đối tượng "Thế giới" giữa các bước của mình. Điều đó có thể nhận được rất nhiều gubbins ra khỏi con đường. Tôi đã không sử dụng Gherkin nhiều nhưng tôi tưởng tượng nó cung cấp cho một khả năng tương tự. Bạn có thể lưu trữ tất cả chi tiết người dùng trong đó, kỹ thuật mà bạn đã tạo để bạn có thể kiểm tra nó không mang lại "George Nontechnician" trong kết quả, v.v.

Sử dụng tên thân thiện cho vai trò cũng hữu ích, bởi vì mọi người có thể hình dung ra Fred và George trông như thế nào.

Loại bỏ mọi thứ sẽ không tạo sự khác biệt trong kịch bản và sẽ không giúp mọi người tưởng tượng điều đó xảy ra. Bạn biết rằng Bob có quyền lên lịch một đơn đặt hàng vì đó là những gì anh ấy đang làm - chỉ cần thêm những thứ cần thiết vào bước đó.

"Khi" là hành vi bạn quan tâm đến mô tả. Trong trường hợp này, bạn quan tâm đến khả năng lọc cho Chẩn đoán cá nhân, do đó, tất cả tương tác của người dùng được liên kết với hành vi phải ở trong "Khi" và tất cả tương tác trước đó phải ở trong "Givens". Tôi thấy hữu ích khi thử và nghĩ về một ngữ cảnh trong đó kết quả khác nhau - ví dụ, điều gì xảy ra nếu không có kỹ thuật viên PD nào có sẵn? Điều đó cho tôi biết sự khác biệt là gì; chúng tôi sẽ thiết lập một ngữ cảnh khác nhưng thực hiện cùng một sự kiện . Bối cảnh đi trong Given, các sự kiện đi vào khi nào. (Điều này được sử dụng để đơn giản hơn nhiều trước khi "nền" được giới thiệu).

Nói chung, nếu mắt bạn sáng lên khi bạn nhìn vào một tình huống, bạn đang làm điều gì đó sai.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn câu trả lời :) Điều "hiển thị" trái ngược với các tình huống khác mà bộ lọc không hiển thị (vì tùy chọn được chọn trên màn hình trước đó trong trình hướng dẫn) và kết quả tìm kiếm không được lọc. Người dùng cũng có thể bỏ chọn bộ lọc. Tôi không bao gồm tất cả các kịch bản của mình vì tôi muốn cố gắng giữ câu hỏi ngắn gọn và tìm ra vấn đề cốt lõi của mình - tôi có cần mô tả toàn bộ giao diện người dùng không, và nếu có, tôi có cần phải đi từ bước 1 không? –

+1

Tôi nghĩ rằng bạn đã cho tôi một phần quan trọng mặc dù. Tôi có thể cần phải tìm ra tên miền của tôi và pare chúng xuống. Quyền so với tương tác UI so với tìm kiếm đối với diễn viên trong doanh nghiệp là tất cả các miền khác nhau một chút và [DNorth cho biết tôi chỉ nên có 2 tên miền trong kịch bản của mình] (http://dannorth.net/2011/01/31/whose-domain- is-it-anyway /). –

+0

Điểm tốt về tên thân thiện. "George Hữu ích" và "Jimmy DoItYourself" thậm chí còn nhiều màu sắc hơn, và tôi có thể sẽ đi với một cái gì đó như thế. BTW Gherkin không phải là một công cụ riêng của mình. Nó chỉ là một tên chính thức cho hương vị dưa chuột của BDD "tính năng: blah kịch bản: cho/khi/sau đó" cú pháp, mà đang cố gắng để phát triển được một số loại (rất cơ bản) tiêu chuẩn. Vì vậy, bạn rất có thể đã sử dụng Gherkin mà không biết điều đó. –