状态转换测试法(State Transition Testing)

来源:互联网 发布:清理系统垃圾软件 编辑:程序博客网 时间:2024/06/17 12:29
 

状态转换测试法应用于以下模式:被测组件拥有多个状态(state)各个状态之间的转换(transition)由事件(event)来触发,各个状态之间的转换还可能导致一些动作(action)的产生

在该种模式下被测组件应该包括状态、转换、事件、动作及它们之间的联系。其中各个状态之间是正交(disjoint)的。各个状态是可以被明确识别的,而且其数量是有限的。事件用于触发各状态之间的转换。而事件的触发将由组件的输入产生。作为结果,状态的转换可能导致一些动作的产生,从而可能进一步产生输出

在该种模式下通常用状态转换图、状态转换模型或状态转换来描述被测组件各状态之间的转换。

在该种设计模式下测试用例将执行(覆盖)各个状态之间的转换。每条测试用例可以覆盖多个转换。但每条用例必须包括。

l  该组件的起始状态。

l  对该组件的输入。

l  期望输出。

l  期望的最终状态。

对于每条测试用例的期望状态,我们必须详细描述以下内容。

l  起始状态。

l  触发该状态转换至下一状态的事件。

l  该转换所产生的期望动作。

l  转换后的期望状态。

在这种模式下的测试用例可以被设计用来测试各状态之间的有效转换,还可以被设计用来测试那些未在组件测试文档中明示的转换。

该黑盒技术是基于被测组件涉及状态的转换为模式。


下图为一个组件由事件触发而从一个状态转换到另一个状态,并产生输出。


一个组件由事件触发而从一个状态转换到另一个状态

根据设计文档描述得出下图


转换后的表格

这一组7条用例覆盖了该组件设计文档中所描述的所有状态转换,但都只执行了一个状态,这一级别覆盖方式称为0-switch覆盖(最基础的覆盖),可以找出显而易见的错误转换或输出,但无法测试到需要进行一系列状态转换才能出现的问题。因此可以提高覆盖等级,把测试用例设计为1-switch覆盖以在一个测试用例中执行多个状态转换。

设计该组件的1-switch覆盖的测试用例时,从4个状态中的某一个状态出发,然后进行两次状态的转换并覆盖所有的可能路径,如下表:

进行再次状态的转换并覆盖所有可能的路径

依照上述方法可以的覆盖等级提高到n-switch覆盖,每个用例覆盖到n个状态的转换,可以测到一些更深层次,需要进行更多状态转换才能出现的问题。

0-switch覆盖的测试用例中的状态转换是所有n-switch覆盖测试用例的的状态转换的全集,但0-switch覆盖的测试用例仅限于组件设计文档的描述,组件设计文档不可能显示地描述一些隐藏的状态转换或无效的状态转换,也就是说0-switch乃至于n-switch覆盖都可能会遗漏这一类隐藏的状态转换或无效的状态转换。

利用状态表(State Table来实现找到组件设计文档未显示地描述一些隐藏的状态转换或无效的状态转换。

状态表(State Table)的表格


列出该组件的状态表

组件的状态表

上表中4个状态,5种输入,因此有20种组合,其中7种是在组件设计文档中被详细描述过的,正好对应于0-switch覆盖中测试用例中的所有状态转换。其余13NA,意味着其未在组件设计文档中描述或该状态无效。

NA-4,“暂停时显示正在播放帖的静止画面”状态下对其进行“屏蔽信号”,这时设计者可以选择“媒体播放软件的显示屏幕”显示“静止画面”或“无信号时显示‘无信号’提示画面”,但这并没有在文档中描述。

强调:NA-4属于本身可以有符合逻辑的解释,但由于并不属于显而易见的转换。因为行为定义容易被设计人员忽略。而对于软件测试人员我们就有义务把这些被忽略的点找出来,并将其交给设计保敦促其给出详细的定义,铂再对新的设计文档重新画出状态转换图,重新分析,并重新设计测试用例。

又如NA-13(“无信号状态”下“屏蔽信号”)等就属于无效状态变换,可以排除,不对其设计测试用例。

原创粉丝点击