Какие гибкие методы совместимы с развитием игры?

В последнее время я много разбираюсь в гибких методологиях. Некоторые статьи, которые я прочитал на веб-сайте Мартина Фаулера, по-видимому, были для меня совершенно необоснованными, и мне было интересно, какие гибкие методы наиболее подходят для разработки игр, , особенно для малобюджетных, малогабаритных и неопытных командных проектов (жирный, потому что это действительно важно).

Концепции, такие как рефакторинг, выглядят так, как будто они могут полностью сочетаться с небольшой и неопытной командой. Идея "охватить изменение" также сочетается с неопытными командами, чьи идеи крутятся и все время поворачиваются. Но такие вещи, как TDD, довольно проблематичны.

Это сложно и субоптимально для проверки класса, который взаимодействует с Direct3D, например. Это не имеет большого смысла.

Я был бы очень благодарен, если бы вы могли перечислить множество практик, которые имели смысл для разработки игр. Одной из плюсов является помощь в организации художественного производства. Цитаты реальных случаев - еще один плюс.

Спасибо заранее.

edit -

Кроме того, моя команда состоит из 3 человек: одного программиста, одного дизайнера графики и одного программиста/графического дизайнера combomix. У нас нет клиента, поэтому мы должны принимать все решения в одиночку.

В статье Фаулера я читал, что гибкая деятельность зависит от взаимодействия между разработчиком и клиентом, но он также упомянул, что клиенты, которые неохотно придерживаются гибкости, все еще могут хорошо обслуживаться гибким развитием (статья называлась Новая методология). Как это относится к моему делу?

Выводы -

Я думаю, что вопросы в StackOverflow также могут помочь другим, поэтому я попытаюсь обобщить мои мысли по этому вопросу здесь.

  • Используя макетные объекты, даже труднодоступные элементы, такие как графические интерфейсы и их отношение к классам клиентов, могут быть управляемыми.

    Например, вместо того, чтобы позволить каждому клиенту интерфейса по-настоящему проверить его использование во многих условиях (например, полноэкранный/оконный переключатель режима, который затрагивает почти все в игре), их можно было протестировать против макета, который, казалось бы, они ведут себя так же, как и исходный класс, и дополнительно проверяют верность верности оригинальному объекту.

    Таким образом, медленная часть (фактически открывающая окно и прочее) выполняется только один раз, проверяя верность верности реализации, а все остальное просто работает над макетом. [спасибо Cameron]

  • A BDD mindset помогает при ослаблении параноидов искать тщательное тестирование единиц, "заменяя" тестирование по спецификации фактического поведения, а не сжатые единицы, которые во многих случаях лучше, пусть непроверенные (или только косвенно тестируемые, если вы предпочитаете его использовать), чтобы избежать слишком большого количества тестов "один-один-один" по сравнению с единицей (класс, метод, переменная и т.д.), что добавляет к тестированию (теперь "спецификацию" ) хрупкость. [спасибо Kludge]

Ответ 1

Я бы рекомендовал попробовать VersionOne (www.versionone.com). VersionOne бесплатно для небольшой команды, работающей над одним проектом, и имеет простые в использовании инструменты для гибкого отслеживания состояния и планирования проектов. На их сайте также есть ссылки на объяснения различных методологий разработки Agile.

Существуют различные варианты развития Agile; Я бы рекомендовал взглянуть на модель экстремального программирования (XP), как хороший пример: http://www.extremeprogramming.org/map/project.html

Проворная разработка так же связана с отслеживанием проектов и требованиями, как и с практикой программирования.

Идея состоит в том, чтобы убедиться, что вы записываете игровые функции, которые необходимо разработать (как "истории пользователей" ), дайте (очень грубую) оценку того, сколько времени займет каждый, и выясните, какие из них важны. Извлеките небольшое количество времени для каждого выпуска и назначьте наиболее важные, наименее дорогостоящие функции, которые вы можете выпустить за это время. Эта система обеспечивает устойчивый прогресс вперед, защищает вас от постоянных непредсказуемых изменений приоритета и гарантирует, что вы не создадите огромную монолитную базу кода, которая не работает.

Что касается Test-Driven Development, я думаю, что комментарии Cameron и Andrew Grimm оба на одном. Вы можете сделать намного больше модульного тестирования, если отвлечься от таких вещей, как вызовы графических API.

Ответ 2

Вы определенно хотите посмотреть Extreme Programing (XP), взгляните на Kent Beck Экстремальное программирование Объяснение: Embrace Change, 2nd Edition

Самое полезное, что вы можете сделать, это сделать некоторые исследования "Поведенческие разработки" , которые в основном основаны на тестировании. Он снимает фокус с тестов и обратно на спецификации. Вы не беспокоитесь о том, какие классы делают так, как показывает поведение вашей программы.

Так что говорить, что вы не собираетесь использовать TDD или BDD, это просто безумный разговор. Одной из основных концепций разработки Agile является разработка вашего программного обеспечения из ваших тестов/спецификаций. Вы должны выйти из менталитета, что тесты/спецификации тестируют ваши классы. Это не совсем то, для чего они нужны. Они предназначены для описания поведения, которое ваше приложение должно продемонстрировать, затем используя этот тест/спецификацию, чтобы написать поведение в вашем приложении.

Вы можете написать что-то вроде этого

Describe Startup
  it "should display a welcome screen" do
    game = Game.new
    game.start
    game.output_buffer.should match("Welcome")
  end
end

Затем вы напишите код, чтобы это произошло. Вы описываете код, который хотите, а затем напишите его. Это позволяет вам писать свой код небольшими, кусочками размера и, самое главное, когда кто-то еще забирает ваш код, они могут запускать тесты и видеть, что все работает. Когда они хотят добавить новую функциональность, они используют один и тот же процесс, поэтому теперь, когда вы возвращаетесь к коду, вы можете верить, что их код тоже работает.

Ответ 3

Agile/Lean методы, такие как Scrum, XP и Kanban, были успешно применены к разработке игр с 2003 года.

Есть несколько блогов, в том числе: http://blog.agilegamedevelopment.com/

и книгу. См. Ссылку на книгу в блоге выше.

Ответ 4

Если у вас есть хорошее разделение контроллера модели (MVC), вы должны иметь возможность протестировать "бизнес-логику" без графики. Например, тестирование того, что данное оружие дает правильное количество урона, не может стрелять сквозь стены и имеет определенную область действия.

Ответ 5

Agile совсем не совместим с GameDev. Это две совершенно противоположные методологии.

Agile - это развитие, которое гибко меняет требования бизнеса и разбивает проекты на четкие и управляемые сроки и рабочие единицы. GameDev рассказывает о регулярном и резком изменении требований к бизнесу, не заботясь о влиянии на развитие, и разбивая команды разработчиков на неуправляемые сроки и объемы работы.

Ответ 6

Я не верю, что на самом деле есть элемент Agile, который несовместим с развитием игры. Я думаю, вы ошибаетесь в связи с трудностями тестирования графических функций; запуск графической функции создает изображение, и легко сравнивать изображения с одобренными вручную "золотыми мастерами" (см. одобрение тестов для одного из способов об этом).

Рефакторинг - прекрасный способ, но это должно быть сделано с защитой от единичных тестов. Лучший способ получить модульные тесты - сначала разработать свой тест кода, поэтому TDD - это еще одна гибкая практика, которой вы должны следовать. И все лучше - рефакторинг, тестирование, а остальное - если вы пара. У вас достаточно людей в команде для парного программирования. Попробуйте и посмотрите, насколько быстрее вы получите протестированные функции!