2013-04-17 7 views
6

कहें कि मैं ककड़ी के साथ एक शॉपिंग कार्ट, बीडीडी विकसित कर रहा हूं। एक गाड़ी बल्कि जटिल है और इसमें कई घंटियां हैं और सीटी हैं, लेकिन यह "ब्लॉग" या "उपयोगकर्ता प्रोफ़ाइल" के लिए भी हो सकती है।गेचरिन और ककड़ी में एक फीचर और क्या परिदृश्य बनाता है?

मैं हमेशा "कार्ट" परिदृश्य के होने की फ़ीचर और घंटी और सीटी माना जाता है। हालांकि, यह फ़ीचर फ़ाइलों को बना सकता है और परिदृश्य के शाब्दिक अर्थ के विरुद्ध चला जाता है। यहां बताया गया है कि यह कैसे देखेंगे:

Feature: Cart 

    So that I can buy items 
    As a user 
    I want to place items in a cart 


    #.... Many more scenarios 

    Scenario: Empty a filled cart 
    Given 2 products in my cart 
    When I visit the cart page 
    And I press "Empty cart" 
    Then I should see the text: 
     """ 
     Your cart is empty. 
     """ 

    Scenario: Empty an empty cart 
    Given 0 products in my cart 
    When I visit the cart page 
    Then I should not see the "Empty cart" button 

    # Many more Scenario's 

अधिक जानकारी भर दी गई है, अब तक यह "खाली कार्ट" समूह बन जाता है। मुझे आश्चर्य है, "कार्ट खाली करना" एक स्टैंडअलोन फ़ीचर माना जाना चाहिए? इससे कई विशेषताएं हो सकती हैं, जिनमें सभी शामिल हैं लेकिन कुछ परिदृश्य है। परिदृश्य का फिर "संदर्भ" की तरह बन गया। इसलिए जैसा:

Feature: Emptying Cart 

    So that I can reconsider my shopping-spree 
    As a user 
    I want to empty my cart 

    Scenario: with a filled cart 
    Given 2 products in my cart 
    When I visit the cart page 
    And I press "Empty cart" 
    Then I should see the text: 
     """ 
     Your cart is empty. 
     """ 

    Scenario: with an empty cart 
    Given 0 products in my cart 
    When I visit the cart page 
    Then I should not see the "Empty cart" button 

कुछ एक फ़ीचर बनाने के लिए एक अच्छा दिशानिर्देश क्या है? मुझे परिदृश्य को अपने फ़ीचर में पुन: समूह कब करना चाहिए? कितने परिदृश्य एक फ़ीचर आमतौर पर है?

उत्तर

9

आप अपने परिदृश्यों छोटा कर सकते हैं - और यहां तक ​​कि कुछ से छुटकारा पाने के - उन्हें declarative, rather than imperative में phrasing, भाषा के आधार पर।

उदाहरण के लिए:

Given the cart has two products in 
When I empty the cart 
Then I should see it has nothing in it. 

यह बस के रूप में एक यूआई के रूप में वास्तविक खरीदारी कार्ट का सच हो सकता है। इसमें इसमें कोई कार्यान्वयन विवरण नहीं है। आप देख सकते हैं कि कुछ कदम आपके एक से अधिक से मेल खाते हैं; यह एक अच्छी बात है क्योंकि यह उस कोड में जटिलता रखती है जहां यह अधिक रखरखाव योग्य है।

हम वाक्यांश अपने अन्य परिदृश्य इस तरह से करते हैं, तो हम पाते हैं: क्योंकि "फिर" बस यह है कि राज्य के लिए सच है

Given my cart is empty 
Then I should not be able to empty it again. 

कोई "जब" यहाँ है।

क्या आपको वास्तव में इस परिदृश्य की आवश्यकता है, हालांकि? क्या यह आपको या आपकी कंपनी को पहले से खाली गाड़ी खाली करने की क्षमता के साथ छोड़ने के लिए मार देगा? यह अनिवार्य रूप से सौंदर्यशास्त्र है। UI को उपयोग करने में आसान बनाने के लिए इसे जोड़ा गया है, और केवल यह बताने के लिए कि यूआई उपयोग करने योग्य है या नहीं, वास्तव में इसका उपयोग करना है। यदि आपको कभी भी इस तरह के परिदृश्य मिलते हैं, तो मैं उन्हें बाहर निकालने की सलाह देता हूं। आप उस तर्क को यूनिट-टेस्ट कर सकते हैं जो बटन सक्षम या अक्षम हो जाता है।

यदि आप भाषा की इस शैली में बदल जाते हैं, तो केवल सौंदर्यशास्त्र और प्रयोज्यता का परीक्षण करने वाले किसी भी परिदृश्य को हटा दें, आपको पता चलेगा कि आपकी फीचर फाइलें बहुत छोटी हो गई हैं।

मैं शीर्ष पर सबसे दिलचस्प या आश्चर्यजनक परिदृश्य डालने की भी सिफारिश करता हूं। उदाहरण के लिए, यह एक और अधिक दिलचस्प परिदृश्य होगा (और हाँ, यह दो "whens" उस में है, क्योंकि यह दो अलग-अलग उपयोगकर्ताओं के बीच एक बातचीत के साथ जुड़े व्यवहार का वर्णन करता है):

Given a user put a copy of "Moby Dick" in his cart 
When the last copy of "Moby Dick" is sold 
And the user comes back to look at his cart 
Then it should tell him, "Sorry, this item is currently out of stock." 

यह और भी हो सकता है दिलचस्प:

Given a user put a new copy of "Moby Dick" in his cart 
And there are second-hand copies of "Moby Dick" available 
When the last new copy of "Moby Dick" is sold 
And the user comes back to look at his cart 
Then it should tell him, "Sorry, this item is currently out of stock." 
And it should also show the way to the second-hand copies with, 
    "2nd hand copies are available." 

यह एक अलग-अलग परिदृश्य होगा; कुछ ऐसा जो आपकी दुकान ने अन्य दुकानों के लिए अलग-अलग किया, और इसलिए व्यवसाय के लिए बहुत रुचि है।

शीर्ष पर सबसे दिलचस्प लोगों को डालकर, इससे कोई फर्क नहीं पड़ता कि सुविधा फ़ाइल लंबी है। हम सभी जानते हैं कि कार्ट कैसे वस्तुओं को खरीदने और बेचने के लिए काम करता है, और हम वैसे भी नीचे उस परिदृश्य को परिदृश्य नहीं पढ़ रहे हैं।

Andy Waite is right जब वह कहता है कि कोई कठोर नियम नहीं हैं, तो इसे कान से चलाएं; अगर यह काम नहीं करता है, तो कुछ अलग करें। उम्मीद है कि ये संकेत भी मदद करेंगे।

2

आप फ़ोल्डरों में विशेषताओं को समूहबद्ध कर सकते हैं उदा। यदि आप कोई फ़ोल्डर cart हो सकता है और उसके बाद, emtpy_cart.feature, update_cart.feature के लिए फ़ाइलों की सुविधा आदि

कोई कठिन नियम है, लेकिन व्यक्तिगत रूप से मैं के बारे में 8 परिदृश्यों की तुलना में अधिक एक भी सुविधा फ़ाइल में नहीं जाते थे।

स्वाद के कैसे सुविधाओं की संरचना करने का एक बढ़िया उदाहरण के लिए स्वयं के दस्तावेज़ की जाँच करें: https://www.relishapp.com/relish/relish

संबंधित मुद्दे