2015-06-03 12 views
7

Giải pháp của chúng tôi dựa trên các dịch vụ nhỏ. Mặt khác, CIO của chúng tôi mong đợi chúng ta thực hành Phát triển theo hướng hành vi trên mọi tính năng mới.BDD và microservices

Có thể quản lý BDD trong kiến ​​trúc microservices không? Dựa trên kinh nghiệm của bạn, có phải là một thực hành tốt để áp dụng BDD đối với kiến ​​trúc như vậy, hay bạn có nghĩ rằng chúng ta nên trực tiếp xem xét thử nghiệm tích hợp?

[EDIT]

Chính xác hơn, theo ý kiến ​​của tôi, thử nghiệm BDD được dự kiến ​​sẽ xác minh logic nghiệp vụ và chỉ logic kinh doanh. Trong nhiều khung công tác, các kịch bản thử nghiệm BDD được tạo ra bởi những người trượt ván, với một DSL. Các xét nghiệm BDD có xu hướng hội tụ với các thực hành "Không biết cơ sở hạ tầng" độc quyền. Mặt khác, Integration Tests phải xác minh rằng giải pháp phù hợp với cơ sở hạ tầng đích (chúng được thực hiện bởi DevOps?), Và chỉ có cơ sở hạ tầng. Khi chức năng kinh doanh được "phân phối" trên microservices, bạn nên thử hầu hết mọi thứ (infra và kinh doanh) trong môi trường BDD Tests của bạn (nó phải là môi trường địa phương) và mocking kinh doanh làm suy yếu rất nhiều mục tiêu của bạn. Bạn có nghĩ rằng các phương pháp này tương thích không?

+1

Tác giả của BDD in Action cho rằng chúng tương thích: http://www.slideshare.net/wakaleo/bdddriven-microservices – ngm

+1

Cảm ơn bạn đã chú ý đến nó. Tôi chỉ đọc một số bài báo được viết bởi JF thông minh, chúng tôi chia sẻ các quan điểm tương tự về câu hỏi đó. Ông nói rằng chúng tương thích với các giai đoạn phát triển khác nhau. Nếu kiến ​​trúc giải pháp làm cho nó có thể (tôi hy vọng một kiến ​​trúc gốc làm cho nó có thể), BDD phù hợp tối ưu cho các thử nghiệm chấp nhận kinh doanh. Sau khi kiểm tra chấp nhận là OK, kiểm tra tích hợp nhằm thử nghiệm giải pháp đối với cơ sở hạ tầng mục tiêu. Tách Mối Quan Tâm. Ông tuyên bố đẩy trở lại chấp nhận mặc định cho các nhà phát triển từ hội nhập thử nghiệm là một sự lãng phí thời gian. Tương thích, nhưng không giống nhau. –

Trả lời

8

Tại sao bạn nghĩ rằng BDD và thử nghiệm tích hợp là khác nhau?

BDD chỉ có nghĩa là lái xe thiết kế của bạn thông qua các hành vi mong muốn, thường được thể hiện thông qua một tập hợp các bài kiểm tra chấp nhận.

Các thử nghiệm này có thể là 'kiểm tra tích hợp' liên quan đến nhiều dịch vụ [vi] hoặc có thể là các thử nghiệm xác định hành vi mong muốn của một dịch vụ hoặc một lớp duy nhất trong dịch vụ đó. Lý tưởng nhất là sẽ có một kết hợp của các bài kiểm tra ở tất cả các cấp độ này. Điều quan trọng là bạn chỉ định hành vi bạn muốn và sử dụng hành vi này để thúc đẩy sự phát triển.

Cách hệ thống của bạn được triển khai ở một mức độ nào đó, không liên quan miễn là nó thể hiện hành vi mong đợi. Đối với các bài kiểm tra cấp cao xử lý hệ thống như một hộp đen, điều này là đúng và bạn càng đi thấp và bạn càng gần với mã thực tế thì điều này sẽ trở nên kém hiệu quả hơn (vì bạn đang thử nghiệm hiệu quả tại thời điểm đó). Vì vậy, tôi sẽ tập trung vào hành vi mong đợi từ các tính năng mới và viết thông số kỹ thuật cho các thử nghiệm chấp nhận này trước, sau đó triển khai các dịch vụ của bạn để thực hiện hành vi yêu cầu thêm các bài kiểm tra cấp thấp hơn theo cách thiết thực, ghi nhớ rằng mức độ thấp hơn, các bài kiểm tra càng có nhiều khả năng chúng trở nên mong manh và cần được thay đổi khi bạn thay đổi việc triển khai của mình.

EDIT

Dựa trên câu hỏi chỉnh sửa của bạn.

Tôi không đồng ý rằng các kiểm tra BDD chỉ nên kiểm tra logic nghiệp vụ. Trong thực tế, thông thường các bài kiểm tra BDD tập trung nhiều hơn vào việc thử nghiệm toàn bộ hệ thống, với tất cả các phần được tích hợp với nhau. Có nói rằng BDD chỉ là một kiểu thử nghiệm bằng cách xác định hành vi mong muốn và có thể được áp dụng cho bất kỳ cấp độ nào của ứng dụng. Bạn có thể kiểm tra một lớp đơn bằng cách chỉ định hành vi sử dụng cú pháp Gherkin, và đôi khi chúng ta làm điều này. chúng tôi cũng xác định hành vi mong đợi của toàn bộ hệ thống bằng cách sử dụng Gherkin và hành vi dự kiến ​​của các dịch vụ của chúng tôi riêng lẻ. Các thử nghiệm này sẽ tự nhiên có định dạng hơi khác tùy thuộc vào mức chúng tôi đang nhắm mục tiêu.

Đối với các bài kiểm tra hệ thống, chúng tôi có thể có đặc điểm kỹ thuật như thế này:

Scenario: user can perform action A 
    Given I am a user with access to some feature A 
    And feature A is enabled for the user 
    When I call perform action A with parameters 'Bob' and 'John' 
    Then A 'BobJohn' is created 
    And notifications are sent to the current user 

cho các dịch vụ cá nhân chúng ta có thể làm xét nghiệm như

Scenario: create messages are handled correctly 
    Given the service is set up 
    When a message arrives to create a 'BobJohn' 
    Then a new entry is added to the database with the key 'BobJohn' 
    And an outgoing notification message for 'BobJohn' is created 

Đối với các lớp học cá nhân chúng ta có thể làm xét nghiệm như

Scenario: Notifier class should send notifications via all users preferred means 
    Given the current user wants notification by Twitter 
    And the current user who wants notification by email 
    When I send the notification 'BobJohn' to the current user 
    Then the twitter notifier should be invoked with 'BobJohn' 
    And the email notifier should be invoked with 'BobJohn' 

Đây là tất cả các bài kiểm tra kiểu BDD nhưng chúng kiểm tra các khía cạnh khác nhau của sys tem.

+1

Rất cám ơn phản hồi của bạn, tôi đồng ý một phần với bạn, nhưng đó chính xác là mục đích của câu hỏi của tôi. Tôi đã chỉnh sửa câu hỏi, bạn nghĩ sao? –

+0

Cảm ơn phản hồi của bạn Sam –

1

Tôi tin rằng khả năng đạt được thử nghiệm chức năng trên một dịch vụ là điểm đánh dấu tốt cho chất lượng. Kiểm thử tích hợp là tốn kém, chậm và đau đớn. Kiểm thử tích hợp không phải là nơi để nói nếu hành vi của bạn là chính xác, mục đích lịch sử của nó là để nêu rõ các thành phần có tương tác chính xác hay không.

Các vấn đề liên quan