Ответ 1
BDD "тесты" существуют на разных уровнях детализации, вплоть до первоначального видения проекта. Большинство людей знают о сценариях. Несколько человек помнят, что BDD начал со слова "должен" в качестве замены для JUnit "test" - в качестве замены TDD. Причина, по которой я ставил "тесты" в кавычках, состоит в том, что BDD не совсем о тестировании; он сосредоточился на поиске мест, где есть недостаток или несоответствие понимания.
В связи с этим фокус, разговоры гораздо важнее, чем инструменты BDD.
Я снова скажу это. Разговоры гораздо важнее, чем инструменты BDD.
Приемочное тестирование на самом деле не требует разговоров и обычно работает с допущения, что тесты, которые вы пишете, являются правильными тестами. В BDD мы предполагаем, что мы не знаем, что делаем (и, вероятно, не знаем, что мы не знаем). Вот почему мы используем такие вещи, как "Given, When, Then" - чтобы мы могли вести беседы вокруг сценариев и/или примеров на уровне единицы. (Эти два уровня, с которыми знакомы большинство людей - эквивалент приемочных испытаний и модульных тестов, - но они поднимаются в масштабе).
Мы не называем их "приемочными испытаниями", потому что вы не можете спросить делового человека "Пожалуйста, помогите мне с моим приемочным тестом". Они будут смотреть на вас с действительно странным, прищуренным взглядом, а затем увольняют вас за эту девушку-выродка. 93% из вас этого не хотят.
Попробуйте "Я хотел бы поговорить с вами о сценарии, где...". Или: "Можете ли вы привести мне пример?" Любой из них хорош. Вызов их "Приемочные тесты" начинает заставлять людей думать, что вы на самом деле выполняете тестирование, что подразумевает, что вы знаете, что делаете, и просто хотите убедиться, что вы это сделали. В этот момент разговоры, как правило, сосредоточены на том, как быстро вы можете получить неправильную вещь, а не о том, что вы выходите не так.
И ты ошибаешься. Действительно, честно говоря, вы. Даже если вы думаете, что это не так, это только потому, что вы не понимаете невежество второго порядка. Вы не знаете, что вы не знаете, и все в порядке, пока вы нашли места, где вы могли бы знать, что не знаете. (Вы не найдете их всех. Не позволяйте парадоксу категоризации поддерживать вас ночью.)
Единственный способ получить правильное решение - получить все требования впереди, и вы знаете, что происходит, когда вы это пытаетесь. Это так. Это водопад. Помните овертайм? Работа в выходные? Семь лет, в которые ни одна вещь, которую вы создали, не сделала ее для производства? Если вы хотите этого избежать, у вас есть только один шанс: предположите, что вы неправы, поговорите об этом, чтобы быть менее ошибочным, а затем примите, что вы по-прежнему неправы и в любом случае идите. Написание тестов слишком рано означает, что у вас есть еще больше шансов ошибиться, и теперь это сложнее изменить, и все думают, что вы правы, и премьер-министр измеряет вашу скорость, и теперь вы полны решимости ошибиться в течение еще двух недель. И, что еще хуже - вы собираетесь проверить, что вы тоже ошибаетесь.
Еще раз. Разговоры гораздо важнее, чем инструменты BDD.
Пожалуйста, не зацикливайтесь на инструментах. Инструменты - это всего лишь механизм для захвата разговоров и обеспечения того, чтобы они играли в код. Сценарии не являются заменой для разговоров, не более 3 х 5 индексных карт является заменой требований.
Сказав это, если вы должны начать с инструмента, поместите Slim за Fitnesse, чтобы он мог работать с прекрасными Given/When/Thens без необходимости возиться с таблицами Fit и креплениями. GivWenZen основан на Slim и любой из них камней. FitSharp эквивалентен тем из вас в пространстве .NET. Или просто используйте Cucumber или SpecFlow, или сбивают немного пользовательских DSL *, которые будут выполнять эту работу в течение многих лет.
Прозрачность: * Я написал это. И бит JBehave. Хотелось бы, чтобы мы назвали его "Dont-concent-on-BDD-tools-Behave". Я мог бы сильно участвовать в других бит BDD. Плюс Дэн Север купит мне пинту, если я смогу получить это сообщение, так что это не совсем беспристрастный совет.
Независимо - уже есть разговоры. Это просто люди. Поговорите.