哪些敏捷实践与游戏开发兼容?

时间:2010-10-14 03:55:13

标签: refactoring tdd agile

最近我对敏捷方法有很多了解。我在Martin Fowler网站上阅读的一些论文看起来至少对我来说是完全没有缺陷的,我想知道什么敏捷实践最适合游戏开发,特别是对于小预算,小型和缺乏经验的团队项目(粗体,因为它非常重要)。

重构这样的概念看起来像是一个小而缺乏经验的团队。 “拥抱变革”的想法也与缺乏经验的团队相结合,他们的想法一直在变化。但像TDD这样的问题很有问题。

例如,测试与Direct3D交互的类是困难和次优的。这没什么意义。

如果你能列出一些对游戏开发有意义的实践,我将非常感激。那些有助于组织艺术生产的人是有利的。引用现实世界的案例是另一个好处。

提前致谢。

编辑 -

另外,我的团队由3人组成:一名程序员,一名图形设计师和一名程序员/图形设计师combomix。我们有客户,所以我们必须单独做出所有决定。

我在Fowler的一篇文章中读到,敏捷类型依赖于开发人员 - 客户端的交互,但他也提到,不情愿坚持敏捷的客户仍然可以通过敏捷开发得到良好的服务(该文章被称为{{ 3}})。这对我的情况有何影响?

结论 -

我认为StackOverflow上的问题也可以帮助其他人,所以我会在这里总结一下我对这个主题的看法。

  • 通过使用模拟对象,即使是难以测试的元素(如图形界面)以及它们与客户端类的关系也是可以管理的。

    例如,不是让界面的每个客户端在许多条件下真正测试它的使用(例如,全屏/窗口模式切换,这几乎影响游戏中的所有内容),它们可以针对看似似乎是它们的行为与原始类相同,另外还测试了mock对原始对象的保真度。

    这样,缓慢的部分(实际打开窗口和东西)只在检查模拟对实现的保真度时完成一次,其他一切只是在模拟上顺利运行。 [感谢New Methodology]

  • A Cameron有助于缓解偏执寻求对单位进行彻底测试,通过规范实际行为来“替换”测试,而不是在很多情况下更好地进行未经测试的挤压单位(或仅间接地)测试,如果你喜欢这样做)避免过多的一对一测试与单元(类,方法,变量等)奇偶校验,这增加了测试(现在“规范”)的脆弱性。 [感谢BDD mindset]

6 个答案:

答案 0 :(得分:2)

我建议您试用VersionOne(www.versionone.com)。 VersionOne对于处理单个项目的小团队是免费的,并且具有易于使用的工具,用于敏捷状态跟踪和项目规划。他们的网站还提供了解释各种敏捷开发方法的链接。

敏捷开发有不同的风格;我建议看一下极限编程(XP)模型,作为一个很好的例子: http://www.extremeprogramming.org/map/project.html

敏捷开发与项目规划和需求跟踪一样,与实际编程实践一样重要。

这个想法是确保你记录需要开发的游戏功能(作为“用户故事”),给出(非常粗略)估计每个人将花费多长时间,并找出哪些是重要的。为每个版本提供少量时间,并安排您在此期间可以发布的最重要,最便宜的功能。该系统可确保稳定的正向进度,保​​护您免受持续,不可预测的优先级更改,并确保您不会开发出无法运行的巨大单片代码库。

关于测试驱动开发,我认为Cameron和Andrew Grimm的评论都很重要。如果你抽象出图形API调用之类的东西,你可以做更多的单元测试。

答案 1 :(得分:1)

你肯定想看看Extreme Programing(XP),看看Kent Beck的 Extreme Programming Explained: Embrace Change, 2nd Edition

你可以做的最有用的事情是对Behaviour-Driven Development做一些研究,这基本上是测试驱动的开发。它将重点放在测试和规范上。您不必担心哪些课程的作用与您的课程表现出的行为有关。

所以说你不打算使用TDD,或BDD,只是简单的疯狂谈话。敏捷开发的核心概念之一是从您的​​测试/规范开发您的软件。你必须摆脱测试/规范测试你的类的心态。这不是他们真正想要的。它们用于描述应用程序应该展示的行为,然后使用该测试/规范将行为写入应用程序。

你可能会写这样的东西

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

然后你去编写代码来实现它。你描述了你想要的代码,然后你去写它。它允许您以小的,一口大小的块编写代码,最重要的是,当其他人拿起您的代码时,他们可以运行测试并看到一切正常。当他们想要添加新功能时,他们使用相同的过程,所以现在当你回到代码时,你可以相信他们的代码也可以工作。

答案 2 :(得分:1)

自2003年以来,Scrum,XP和Kanban等敏捷/精益方法已成功应用于游戏开发。

有很多博客包括: http://blog.agilegamedevelopment.com/

还有一本书。请参阅上面博客中的图书链接。

答案 3 :(得分:0)

如果你有良好的模型视图控制器(MVC)分离,你应该能够测试没有图形的“业务逻辑”。例如,测试给定武器产生的伤害是否正确,不能射穿墙壁,并且具有一定的效果区域。

答案 4 :(得分:0)

敏捷与GameDev完全不兼容。它们是两种完全相反的方法。

敏捷是关于开发灵活应对不断变化的业务需求,并将项目分解为明确和可管理的最后期限和工作单元。 GameDev定期大幅改变业务需求,而不关心对开发的影响,并通过无法管理的最后期限和大量工作分解开发团队。

答案 5 :(得分:0)

我不认为实际上任何与游戏开发不兼容的敏捷元素。我认为你在测试图形功能方面遇到了麻烦;运行图形功能可生成图像,并且可以轻松地将图像与手动批准的“黄金大师”进行比较(请参阅Approval Tests了解一下此方法)。

重构是一项很好的技术,但应该使用单元测试的安全网来完成。获得单元测试的最佳方法是首先开发代码测试,因此TDD是您应该遵循的另一种敏捷实践。而且它更好 - 重构,测试和其他 - 如果你配对。团队中有足够的人来配对编程。试一试,看看你运行测试功能的速度有多快!