摘要
作者利用有限状态机建模提出了一种软件设计的测试方法,根据规范对测试结果进行评估。
简介
这篇文章提出了一种新的测试策略,通过有限状态自动机建模可以查看软件系统控制结构。该策略具有以下特点:
1)只对设计的控制结构进行校核
2)不需要可执行的正确规范
3)只要满足一些合理的假设,测试序列就保证能揭示控制结构中的任何错误
下文将讨论自动机理论方法背后的假设以及如何放宽其中一些假设,然后讨论了其余的限制是否合理或者实用。最后,利用自动机理论方法测试了计算机图形、实时过程控制和电话交换系统设计。
“自动机理论”测试策略
背景
本文中考虑的软件系统中有两种原语:stimuli和operations。stimuli是来自软件系统外部世界的输入;operations是软件系统对stimuli操作而引起的事件。假设控制结构可以建模为有限状态机,存在有限数量的状态,下一个操作和下一个状态仅取决于当前状态和输入。我们进一步假设机器是1)完全指定的,2)最小的,3)从固定的初始状态开始,4)每个状态在实践中都是可到达的。
方法
该方法包括三个主要步骤:
- 估计正确设计中的最大状态数:人为判断。
- 根据设计生成测试序列(可能有错误):所需的测试序列集是两组序列P和Z的连接。
- 验证对步骤2中生成的测试序列的响应:1)测试模式-与正确的做比较。2)路径程序
其中
P的构造:首先构造“测试树”,测试树中的所有路径分支构成集合P。
Z的构造:Z定义为W∪X·W···∪Xm-n·W,其中∪为并集,·为连接X0为空集,Xi+1=X·Xi。W为特征集合,表示由输入序列组成,可以区分最小自动机中每一对状态的行为。X为所有的输入。m为正确版本可能具有的最大状态数,n为设计的有限状态机以最小形式具有的状态数。
测试树构造:首先,用A的起始状态作为测试树T的根;其次,假设现在构建到了T的第k层,通过从左到右检查第k层中的节点来构建(k+1)层。如果第k层的状态和第j层的非结束状态相同(j<=k),则说明该节点结束。否则,标记为新的状态Ai。如果输入x后,状态机从Ai状态转移到Aj状态,在测试树上,x为分支,Aj为后继节点。
可靠性
两个自动机是等价的,即当且仅当两个自动机是P ·Z等价时,只要满足以下假设,则设计是无误差的:1)这两个自动机具有相同的输入字母;2)规范中隐含的自动机(正确版本)的最大状态数的估计是正确的。
复杂性
如果有n个状态,k个输入,所需测试序列的最少个数小于等于n2·km-n+1,所有测试序列的总长度不超过n2·m·km-n+1