状态机法测试设计举例

基本方法:根据需求画出状态转换图。然后覆盖每一种状态下触发动作和状态变化的事件和不会触发动作和状态变化的事件。实际中的思路是:首先通过常见的场景来覆盖一些状态转换的路径。检查是否覆盖了所有的状态转换。如果没有则补充场景来进行覆盖。

例如VRRP状态机测试、ATM机状态机测试。

举例:

在网络中,由于种种原因会导致路由的震荡和网络的震荡,这种震荡会引起路由计算不断进行,也会导致路由更新反复发送。这都会占用路由器资源。也会导致数据流走向的频繁变动。而BGP通常都运行在骨干网上,维护着大量的路由条目。路由震荡会对网络的稳定性造成威胁。所以引入路由震荡抑制机制,减少路由震荡对网络的不利影响的同时,也不会显著增加路由的收敛时间。命令如下:

bgp dampening [ half-life-time [ reuse-value suppress-value max-suppress-time ] ]

缺省关闭路由抖动抑制功能。配置bgp dampening启用该功能。

路由震荡抑制只对EBGP路由有效,对IBGP路由无效。

当一条有效的路由被回收时,我们称之为路由的一次震荡。当一条路由down时,就给它分配一个惩罚值1000,仍然保存这条路由,只是路由标记为history。路由每次down,惩罚值都增加1000。惩罚值每5秒钟减少一次,每个half-life-time(默认15分钟,可以修改)结束时惩罚值降为原来的一半。如果惩罚值超过预先设置的suppress-value(默认是2000,可以修改),则该路由被标记为damped,路由被抑制,该路由不再被使用和通告。如果邻居当前通告了这条路由,show ip bgp显示为*d,如果邻居当前回收了这条路由,show ip bgp仍然可以看到这条路由,只不过标记为d,没有*。当惩罚值低于reuse-value(默认值是750,可以修改)时,解除对该路由的抑制,即再次使用和通告这条路由。但是惩罚值不清零,直到惩罚值达到reuse-value的一半时,才会将惩罚值置为0。

注意1:当一条路由被抑制的时间达到max-suppress-time(默认值是half-life-time的4倍,即60分钟,可以修改)时,解除抑制,惩罚值清零。

注意2:当惩罚值达到最大惩罚值时,即使这条路由再震荡,惩罚值也不会再增加。因为如果超过这个值,即使max-suppress-time超时,惩罚值也不会低于750,也就是超过这个值,再增加已没有了意义。这个值等于reuse-value *2^(max-suppress-time/half-life-time)。缺省值是12000。

根据收集到的需求,画出状态机:

状态机法测试设计举例_第1张图片

首先测试典型的抑制和恢复场景。这里列举典型的抑制和恢复场景。

震荡一次没有被抑制的路由:Active的路由down之后,变为history,路由up之后,恢复Active。

震荡两次没有被抑制的路由:Active的路由down之后,变为history,路由up之后,恢复Active,然后再震荡一次。

震荡多次被抑制但是最终不再震荡的路由:Active的路由down之后,变为history,路由up之后,恢复Active,经过若干次震荡后从Active变成Damped down。Damped状态下,路由仍然震荡几次。最终路由不再震荡,Punish Value不断减小,最终Punish Value < Reuse Value。之后分为两个子场景:1、此时路由是up的,直接转为Active,2、此时路由是down的,先转为history,等到路由up后,再转为Active。

持续在震荡的路由:Active的路由down之后,变为history,路由up之后,恢复Active,经过若干次震荡后从Active变成Damped down。Damped状态下,路由仍然持续震荡。最终Max Suppress time out。之后分为两个子场景:1、此时路由是up的,直接转为Active;2、此时路由是down的,先转为history,等到路由up后,再转为Active。

如果只是单纯想覆盖每一种状态下触发动作和状态变化的事件,只需要使用后面两种场景来生成测试用例即可。不用额外补充用例来覆盖状态转换。

和状态转换无关的内容的测试没有在上面体现。比如“但是惩罚值不清零,直到惩罚值达到resume-value的一半时,才会将惩罚值置为0。”

你可能感兴趣的:(软件测试)