TDD已成为认真对待自己职业的软件开发人员喜爱的方法。[IEEE:TDD]该方法的好处显著,成本相对较低。[The Three Laws of TDD]
没有哪个软件领域是不适合或无效的TDD。然而,有些领域确实具有挑战性。游戏恰恰就是其中之一。
事实上,挑战并不是游戏本身,而是UI。之所以UI具有挑战性,是因为你通常不知道想要UI看起来像什么,直到你看到它。UI是那种必须要摸索出来的东西。正确地完成它是一个深度迭代的过程,充满了曲折、死胡同和小巷。首先为UI编写测试可能会很困难,也会浪费时间。
现在,在所有人都会说:“Bob叔叔说:‘不要为UI做TDD’”之前,让我说一下。难以为UI做纯TDD并不意味着你不能为几乎其他所有东西做纯TDD。很多游戏都是关于算法的,你可以使用TDD来编写这些算法。尤其是在游戏中,有一些算法代码就像UI一样需要调整,因此可能无法首先进行测试。但是还有许多其他算法代码应该首先进行编写测试。在我看来,通过对低级代码进行单元测试和对高级行为进行烟雾测试,可以获得不错的测试覆盖率。我认为(希望)其他工作室也采取了类似的方法。
如果我的TDD观点听起来有些模棱两可,那是因为确实如此。我对其仍然持有一定的保留意见。虽然我看到了一些好处(回归测试,强调先设计后编码),但在与现有代码库合作时应用并强制执行它似乎会导致许多麻烦。
大多数游戏开发者在现代开发实践方面并不是很精通。谢天谢地。
但测试驱动的开发模型强调首先集中精力考虑如何使用某个功能,然后再详细说明它的作用。总的来说,这样做是有好处的,因为它迫使你集中精力考虑一个特定的功能实际上将如何适应你正在做的任何事情(比如一个游戏)。
所以优秀的游戏开发者自然而然地做到了这一点。只是没有明确表达出来。
@Rune 再次强调,请将重点放在“D”而非“T”上。在单元层面上,测试是一个思考工具,可以帮助您理解自己想要什么并推动代码的设计。在单元层面上,我发现最终得到的代码更加清洁、稳健。我把高质量的代码片段放入系统中,它们之间的匹配度就越好,产生的错误就越少(但不是没有)。
这与游戏需要进行的严格测试完全不同。
测试驱动开发(TDD)在任何地方都不是一种“正常”的方法,因为它仍然相对较新,并且尚未被普遍理解或接受。这并不意味着现在没有一些公司采用这种方式工作,但我仍然很惊讶听到有人在这个时候使用它。