flash小游戏的测试驱动开发实践(一)
1、思路
很久以前就了解到了Test Driven Development。当时的情况是随着游戏的开发,代码通常会越来越多,也越来越混乱。通常书上这时会告诉我们,要重构。可是真的操作起来,还是无从下手。因为重构意味的打破原有的代码结构,而你不知道这样的改变会带来什么样的后果。这时,书上告诉我们,要有测试驱动开发。因为完善的测试能够在我们重构代码后,确认软件的行为没有改变(如果通过了测试)。
但问题是,TDD真的适合游戏开发吗?首先需求的不断改变是游戏开发中的常态,每当需求改变时也就意味这这些测试用例也要发生改变,这会带来许多额外的工作。其次,GUI的自动化测试本身也是一个难题,而游戏又是一个需要大量人机交互的软件。于是我放下了想要实践TDD的念头。
直到有天听了eidoit在第6届 FLASH开发者交流会上的演讲,记住了两句话。第一句话的意思是说,先写测试用例并不是为了今后的测试,而是为了能写出好的代码。因为要想写出测试用例,就强迫你在写具体的代码之前就想好这个模块的接口,即行为。而要想写出简单的测试用例,就意味着模块有较少的依赖。这样的思路实际改变了我在上面对于测试的看法,测试不是为了保障重构,而是希望能在一开始就有好的设计。第二句话是“不可编译-可编译-不可运行-可运行”,这是对具体做法的描述。在第一步写好测试用例时,实际上相关的类里还没有提供接口,因此是不可编译的。从不可编译到可编译是接口的编码。加入接口后,测试可以编译,但是所需的功能还没有实现。而从不可运行到运行则是对接口的具体实现。
2、实践
我之前编写flash小游戏时习惯采用flash IDE + flashdevelop,使用文档类(document class)结合fla文件中的图像和as文件中的代码。这样的问题在于一个fla文件只能指定一个文档类,不方便编译运行测试。于是根据网上的一些指点,我尝试了swc+flashdevelop的方式,在FD中建立项目时不再采用Flash IDE Project,而是用AS3 Project。然后将fla中的图像资源编译为swc文件,在FD中导入使用。(这些fla中依然可以指定文档类)虽然建立的AS3 Project依然只能指定一个as文件设定“always compile”作为程序入口,但通过Tools->Flash Tools->Build Current File (Ctrl+F8)可以运行将任何一个as文件编译为单独的swf,这样便可以单独运行测试用例了。
posted @ 2010-12-02 23:20 小明的明天 阅读(128) 评论(0) 推荐(0)