Это? Может быть. Мое мнение таково, что оно очень плохо подходит для развлекательного программного обеспечения в целом, хотя оно может хорошо работать для библиотек низкого уровня.
РЕДАКТИРОВАТЬ: Вот некоторые оправдания для моего мнения.
Википедия определяет BDD как метод, который «поощряет сотрудничество между разработчиками, QA и нетехническими или бизнес-участниками в программном проекте». Это уже звучит как плохая идея, потому что игры отличаются от большинства программного обеспечения тем, что они не предназначены в качестве инструментов для удовлетворения конкретной потребности «нетехнического или делового участника», а представляют собой сплоченные работы, широко предназначенные для развлечения. Акцент делается на «желаемом поведении программного обеспечения», но игры редко имеют «желаемое поведение программного обеспечения», за исключением технического уровня. Есть определенная заслуга в проверке этой части кода, но не у конечного пользователя, потому что они никогда его не увидят.
Но давайте предположим, что вы хотите избавиться от этого человеческого участия и просто использовать BDD для принудительного исполнения контрактов между различными модулями кода, что, насколько я вижу, мало чем отличается от обычной разработки, основанной на тестировании, которую я также считаю малоэффективной. подходит для игр по следующей причине.
Тесты полезны для проверки того, что дискретные события произошли, когда ожидается. Это хорошо работает в программировании на основе событий, т.е. В большей части мира программного обеспечения, где выполняется действие, генерируется некоторый вывод, а затем вы просто проверяете, совпадают ли действие и результат. Однако игровое программное обеспечение обычно представляет собой симуляцию, в которой действие не имеет дискретного результата, а постоянно меняет состояние мира. Если мой скрытый плеер издает шум, я могу проверить, что ИИ преследует меня. Итак, я могу создать тест, чтобы убедиться, что ИИ находится в состоянии «охоты» после создания шума, и это здорово. Но откуда мне знать, что охота вообще работает? Вы не можете проверить это мгновенно - вы можете наблюдать это только с течением времени.
Кроме того, подход, основанный на тестировании, может создать ложное чувство безопасности и заставить людей поверить, что код лучше, чем есть на самом деле.
def check_dice_roll_in_range():
d = new Dice()
assert(d.roll() between 1 and 6)
class Dice:
def roll():
return 4
Поскольку результат теста может дать ложный положительный результат, вы никогда не сможете избежать основной необходимости проверять сам код. Но если сам код проверен адекватно, тест приобретает второстепенное значение. Вот почему, по моему мнению, тесты лучше всего использовать после события, чтобы проверить исправления ошибок.
Я бы не стал утверждать, что тестирование никогда не принесет никакой пользы: если объекты X и Y работают вместе, вы получите ожидаемый результат. Вопрос в том, используете ли вы наиболее эффективный способ проверки этого. Методы могут включать в себя формальную проверку, проверку кода, методы проверки вначале, методы проверки в последнюю очередь, традиционное тестирование черного ящика QA или просто использование кода, как ожидается, и наблюдение за результатами. Последние два варианта на удивление эффективны в большинстве случаев, потому что, несмотря на то, что они звучат так, как будто им не хватает строгости, большинство ошибок обнаруживаются в ходе обычного использования, и понять ошибку в ее естественном контексте иногда бывает проще, чем понять ее в искусственном тесте. упряжь. Кроме того,
Итак, в заключение, я думаю, что разработка через тестирование не обязательно является отличным выбором для программного обеспечения, что одних тестов никогда не бывает достаточно для обеспечения качества программного обеспечения (и, следовательно, время, потраченное на их написание, должно сравниваться с альтернативным использованием этого времени разработчика), что игры особенно плохо подходят для автоматизированных тестовых случаев, и что игры особенно плохо подходят для методов разработки, в которых акцент делается на «ценность для бизнеса» и «приемочное тестирование».
(Надеюсь, это лучший ответ, даже если вы не согласны с моими утверждениями.)