15.4 缺陷触发和测试设计
测试设计中的每个元素都表示了一种缺陷触发。使用一种或多种测试技术不能保证所有的缺陷触发在测试中得到了充分体现。要将合适的触发包含在了你所做的任何一种测试设计中需要付出一些努力。针对指定的游戏特性、功能、容量的一组或多组测试设计都应该包括所有的缺陷触发。如果你有之前版本的数据,看看哪种触发能最有效地发现缺陷并把你所能想到的其他触发都包括到你的设计中去。
每种触发的有效性都能用测试中发现的缺陷数来估计。你也可以看作是游戏代码对每一种触发的敏感度。相对于其他触发,较大的缺陷/测试比例能告诉你如何经济地发现错误,也能预示一些游戏设计或实现时的缺陷。如果你只有有限的时间和资源来运行一定的测试。针对最有效的触发来进行测试能找出比一般测试(通常是正常测试)多得多的缺陷。你针对最有效的触发进行不断地测试,直至你再也不能发现新的缺陷了。重复这一过程并穷尽每一种触发。
15.4.1 组合触发设计实例
让我们回到HALO高级控制组合式设计,如第10章图10-26所示,让我们看看是否还需要添加一些触发。测试显示敏感度的默认值、最小值、最大值。最小值和最大值可以看作是压力值,因为随着操纵杆的移动游戏要给出或快或慢的反应。余下的参数值能够决定功能是开启还是关闭。无需特殊的配置或环境要应用于启动、重启、异常或压力测试。大部分测试值表示正常行为。为了使测试更有效,除了考虑其他可能的压力值外还要包括缺少的触发。
先确定与高级控制选项相关的配置资源。所有这些参数都影响到游戏控制器的使用。有不同类型的游戏控制器,比如说有些带有振动效果而有些没有,有些是无线的而有些则是有线的。控制器可以插入游戏控制台提供的任何一个扩展槽。在游戏中选取选项时,可以把控制器从插槽中拔出,然后又把它插到相同的位置或另外一个。这些可能性在组合表中添加了新的参数和值。更新后的表如图15-5。因为引入了新的参数和值使表变得复杂了,Allpair工具用来生成了这种表格。

图15-5 配置触发高级控制组合表
还可以另外创建一张包括了与设置相关的参数和值单独的表。这样,你能在做健全测试时使用这张表,然后当游戏通过健全测试后该表也可以用于其他的触发。高级选项游戏控制器配置表如图15-6所示。

图15-6 高级游戏控制器配置选项表
当移除控制器时,不管控制器从那个插槽中移除,游戏都会提示你“请重新连接1号控制器”如图15-7所示。不管你把控制器插到哪个插槽,你都能恢复配置。移除控制器对控制台的副作用是移动之前控制器的配置都会丢失。设备会恢复到最近存储的值。如果仅仅是在屏幕设置这并不如何糟糕,你只需要几个数据就可以恢复,但当你要更新一组数据来定义一个RPG角色的时候,丢失数据就会麻烦。相对地,托尼霍克滑板(Tony Hawk’s Underground )能识别指定的控制器,但需要控制器插入到相同的插槽才可以继续并且保存设置后的选项值。

图15-7 HALO中“游戏控制器移除”的提示
下一步是找出异常触发的时机。因为通过是选择列出的值,没有机会输入错误的值。但有可能该选择机制出问题。A键和B键对应“接受选项”或“返回到上一屏幕”。测试时,试着按下X、Y、左触发键(L)或右触发键(R)。接着,你还可以为这些值添加表格中的栏并将NONE选项放入到表格里,如图15-8所示。虽然表格又增加了一些,这28个格子成对的话可以覆盖总共15360种可能的值的组合。

图15-8 包括配置和异常游戏触发的高级游戏选项表
这么做的潜在危险是,你测试的大部分情况都会导致异常行为,这也会使你看不到其他测试的结果。在图15-8中,只有六种测试——1、2、13、14、25和26——避开了输入异常。也可以另外创建一张单独的表隔离异常的结果,如图15-9。同步参数的“NONE”值并没包括在内,因为它不是一种异常触发且在非异常表格中已体现了这一特性。

图15-9 只添加异常触发的初始高级控制表
“Look Sensitivity”中的极端数据表明是压力触发,但是这里还有其他类似的可以在选择选项时执行的操作吗?对于特殊的游戏,在游戏控制器上的左模拟摇杆和D键都可以做横向和纵向滚动。同时操作它们可能产生有趣的结果。对比,可以定义一个“Scroll Control”参数并加入表中,参数值定义为“LEFT STICK”,“D-PAD”和“BOTH”。根据一样的理论,相对于之前的触发,当为这些触发创造一张单独的表格时,需要决定是否添加这些参数和值到表格中。
下面只剩针对高级控制测试的启动和重启触发。这些特殊的配置与单个玩家的配置文件关联。可以对新的配置和正在使用的配置的设置进行测试。新的配置文件行为可以看作启动触发。把“Protile”参数添加到表格中,参数值有“NEW”“EXISTING”。
高级控制选择过程可以用好几种方法重启:没有存档返回到上一屏幕,从控制台弹出游戏磁盘,或关闭控制器。做完这些操作后再返回到高级控制屏幕去检查确认是否有不正常的情况。因为这些设置可以保存在内置存储或可移动存储体上,另外进行“重启”的方法是将外部的信息加载到内部保存的值上。在表格上用“RE-ENTER”参数来表示它的相关的参数值有“NONE”对应正常触发以及“BACK”,“EJECT”,“OFF”,“LOAD EXTERNAL”等对应重启触发。
15.4.2 TFD触发实例
TFD的触发根据流程来设定。附录D中的弹药TFD模板,将被用来阐明所有的缺陷触发是如何引入TFD中的。这次的模板比起你在第11章构建的TFD流程要多一些,但从触发的角度来看是“完整的”。下面针对PC版的《虚幻竞技场2004》来进行讲解。
首先,当处于“NoGunNoAmmo”状态时,模板包括了大量的正常触发流程比如说是“Getgun”和“GetAmmo”。然而,同一事件根据它们所处环境以及它们离开和进入的状态可能表示不同的触发。举例来说,当你的弹药已经是最大时,既“GetAmmo”在资源(弹药)处于最大时执行功能的情况。这种情况就被限定为压力触发。开枪时没有弹药则落入了另一种极端的状况,此时弹药资源正处于最小值。图15-10显示了弹药TFD做了着重标记的压力触发。

图15-10 弹药TFD模板和压力流程
现在怎样添加一个启动触发呢?TFD的“Enter”流程指向右边玩家在游戏中处于活动的状态。事实上,这是“游戏前操作”区域,玩家可以在单击“开火”按钮初始游戏(通常是鼠标左键)之前在竞技场内到处跑。这与测试的目的有关,玩家走过武器或弹药时不会有任何累积的结果。
通过“NoGunNoAmmo”状态下执行“流程分离”可以表示TFD中的启动过程。总共分成两种连接状态。一种状态保留原始名称和连接(除了进入流程)同时另一种状态引起了空运行和倒计时行为。图15-11显示了TFD的一部分分离的过程。

图15-11 NoGunNoAmmo状态分离
新的赛前状态被引入到TFD中。断开进入流程中的“NoGunNoAmmo”,把它连接到Prematch。然后尝试在“Prematch”阶段添加流程“GetAmmo”和“GetGun”。这些流程都是启动触发。图15-12显示了这个变化。

图15-12 游戏前状态和添加到弹药模板的启动触发流程
接下来在图中添加重启触发。这可能使得比赛中你的状态改为一名观战者随后改回一名选手。观战模式使你的角色离开游戏同时能让你自由控制观看的角度。当你再次返回当前比赛时,任何在你进入观看模式之前捡到的枪或弹药都会失去。从观看模式可以立即再次进入游戏,不需要倒回到你最开始启动游戏的时候。在初始的倒数时间过去以后,你可以在比赛的任何时间段挂起然后再加入。在TFD中添加一个观看者和加入流程,再在每个TFD的游戏中把状态关联到“NoGunNoAmmo”。不要忘记给“NoGunNoAmmo”自己添加一个回环流程。更新后的TFD如图15-13所示。

图15-13 弹药TFD模板和“SperateAndJoin”重启流程
随着所有的流程的进入和离开,加在“NoGunNoAmmo”状态上的压力越来越多。这看起来像一个繁忙的交叉口。比起不繁忙的情况这要危险得多。同时也反映了“NoGunNoAmmo”状态保持安全的重要性和对变化的敏感。
TFD已经连接起来但还有少量其他的触发需要考虑。对于异常触发来说,有一个操作可以用于武器的交替开火模式。通常情况下,鼠标左键用于正常开火而右键用于交替开火。有些武器,比如说榴弹投掷器,则没有交替开火模式。因此当用户尝试交替开火模式时既不会发射也不会减少弹药数。
这些情况你可以用来作为异常触发。因为“UnsupportedAltFire”操作并不会改变武器的弹药数,把它作为一个环路加入到TFD的有枪和弹药的状态中。结果就如图15-14所示。

图15-14 弹药模板和AltFire异常触发流程
最后,配置也应该包括在内。游戏中有一项武器设定允许玩家选择旧式特定武器。若允许该游戏系列早期版本的玩家使用这个设定,就会需要额外的测试。你需要确保武器构成的改变在游戏进行时不会影响武器装载的弹药,也不会造成非预期的声音或是出现一个武器复制品。添加一个“ToggleWeaponSkin”流程到每一个玩家拥有武器的状态。因为这不会影响弹药数,所以这些流程是回环流程,将回到它们起始的状态。图15-15显示了带有这些设置流程的TFD。

图15-15 弹药模板和武器外观配置流程
现在TFD变得十分拥挤。记住,这些组合测试中的选项也可用于TFD、树形测试,以及所提出的正式或非正式的测试。你可以把触发合并入一个单独设计中,或创造一组测试来包括你需要的触发。
另外,为每种测试元素记录内部触发是非常有用的。你可以在每个TFD流程,组合测试中的参数值,或是测试树的节点后面的括号里标记一个字母用来代表触发。然后你通过计算字母出现的次数就可以知道每种触发的使用频率。当你在设计中移除或增加一个新的测试时,这还可以用来重新评估触发。







