Є це? Можливо. На мою думку, це може спричинити дуже погану придатність до програмного забезпечення для розваг, хоча це може працювати добре для бібліотек низького рівня.
EDIT: Ось якесь обґрунтування моєї думки.
Вікіпедія визначає BDD як техніку, яка "заохочує співпрацю між розробниками, QA та нетехнічними або діловими учасниками програмного проекту". Це вже звучить як погана ідея, оскільки ігри відрізняються від більшості програмного забезпечення тим, що вони не розроблені як інструменти для задоволення конкретної потреби у «нетехнічному або бізнес-учаснику», а є згуртованими творами, розробленими в цілому для розваги. Є акцент на "бажаній поведінці програмного забезпечення", але ігри рідко мають "бажану поведінку програмного забезпечення", крім технічного рівня. Однозначно є заслуга в тому, щоб перевірити цю частину коду, але не з кінцевим користувачем, оскільки вони його ніколи не побачать.
Але припустимо, що ви хочете викинути цю людину з зацікавленими сторонами і просто використовувати BDD для забезпечення контрактів між різними модулями коду, які, наскільки я бачу, не сильно відрізняються від звичайних тестових розробок, які я також вважаю погано- підходить для ігор з наступної причини.
Тести корисні для перевірки того, що дискретні події сталися, коли очікували. Це добре працює в програмуванні на основі подій, тобто. у більшості програмного забезпечення, де виконується дія, генерується деякий вихід, а потім ви просто переконайтеся, що дія та результат збігаються. Однак ігрове програмне забезпечення, як правило, є симуляцією, коли дія має не дискретний результат, а постійну зміну світової держави. Якщо мій прихований програвач шумить, я, можливо, захочу перевірити, чи AI полює на мене. Отже, я можу створити тест, щоб переконатися, що ШІ знаходиться у «мисливському» стані після створення шуму, і це чудово. Але як я знаю, що полювання навіть працює? Ви не можете це перевірити миттєво - ви можете спостерігати це лише впродовж часу.
Крім того, тестовий підхід може створити помилкове почуття безпеки та спонукати людей вважати, що код кращий, ніж є насправді.
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 або просто використання коду, як очікувалося, та спостереження за результатами. Останні два варіанти напрочуд ефективні більшу частину часу, тому що, незважаючи на те, що їм не вистачає строгості, більшість помилок виявляються під час типового використання, і зрозуміти помилку в природному контексті іноді може бути простіше, ніж зрозуміти її в штучному тесті джгут Крім цього,
Отже, підводячи підсумок, я вважаю, що тестова розробка не обов'язково є чудовим вибором для програмного забезпечення, тому що тести самі по собі ніколи не є достатніми для забезпечення якості програмного забезпечення (і, таким чином, час, витрачений на їх написання, потрібно порівнювати з альтернативними способами використання того часу розробника), що ігри - це особливо погана відповідність для автоматизованих тестових випадків, і що ігри є особливо поганою відповідністю для методів розробки, які мають наголос на "цінність бізнесу" та "тестування на прийняття".
(Сподіваюся, це краща відповідь, навіть якщо ви не згодні з моїми пунктами.)