Я виявив, що TDD працює погано, коли мова заходить про нові системи. Я розробник відеоігор, і нещодавно використовував TDD для створення системи, яка використовує кілька простих способів поведінки, щоб створити реалістичний рух для сутності.
Наприклад, є поведінки, які відповідають за те, щоб віддалити вас від небезпечних районів різних типів, і такі, що відповідають за пересування вас до цікавих областей різних типів. Об'єднання результатів кожної поведінки створює остаточний рух.
Кишки системи були реалізовані легко, і TDD тут був корисний для визначення того, за що повинна відповідати кожна підсистема.
Однак я зіткнувся з проблемами, коли справа стосувалася конкретизації взаємодії поведінки та, що ще важливіше, як вони взаємодіють у часі. Часто не було правильної відповіді, і хоча мої початкові тести проходили, QA міг постійно шукати кращі випадки, коли система не працювала. Щоб знайти правильне рішення, мені довелося повторити кілька різних способів поведінки, і якщо я оновлював тести кожен раз, щоб відображати нові форми поведінки, перш ніж перевірити, чи працювали вони в грі, я, можливо, закінчував би знову викидати тести. Тому я видалив ці тести.
Я, можливо, мав би мати більш сильні тести, які зафіксували кращі випадки, які QA виявила, але коли у вас є така система, яка сидить на вершині багатьох фізичних та ігрових систем, і ви маєте справу з поведінкою з часом, це стає дещо кошмар, щоб уточнити, що саме відбувається.
Я майже напевно помилявся в своєму підході, і, як я вже сказав, для кишок системи TDD працював блискуче, і навіть підтримував кілька оптимізуючих рефакторів.