基于扩展符号转换系统的组合随机测试
在复杂系统的测试和验证中,符号转换系统(Symbolic Transition Systems)是一种强大的工具。本文将详细介绍基于扩展符号转换系统(ESTS)的组合随机测试方法,包括系统的模拟、组合、一致性检查以及实际应用等方面。
1. 模拟(Simulation)
ESTS的执行通过信号接收或时间延迟产生的执行轨迹来解释。这些执行轨迹总是嵌入在两个阻塞状态之间。
- 阻塞状态(Blocking State) :阻塞状态 $\tilde{s}$ 是指满足 $\exists\lambda \in \lambda_i \cup \delta$,使得 $|out(s, \lambda)| \neq 0$ 或 $out(s, \lambda^*) = \varnothing$ 的状态 $s \in S$。阻塞配置表示为 $\tilde{q} = \langle\tilde{s}, \iota\rangle$。需要注意的是,阻塞状态并不限制 $\tau$、$\gamma$ 或 $\lambda_o \in \Lambda_o$ 类型的输出转换的发生,这使得混合状态成为可能。
- 执行轨迹(Execution Trace) :执行轨迹 $\eta = t_1, t_2, \ldots, t_n$ 是一系列转换,连接两个阻塞状态且不能被中断。它由触发部分 $\eta_t$ 和完成部分 $\eta_c$ 组成,其中 $\eta_t$ 仅包含信号 $\Lambda_t = \Lambda_i \cup \delta$ 的转换,$\Lambda_c = \Lambda_o \cup \gamma \cup \tau$。执行轨迹的长度表示为 $|\eta|$,且 $|\eta| \geq 1$,其中 $|\eta_t| = 1$,$|\eta_c| \geq 0$。
由于ESTS允许非确定性行为,信号接收或时间流逝可能导致多个执行轨迹,形成结果列表 $E(\tilde{q}, \lambda)$。其递归生成定义为 $E’(\tilde{q}, \lambda) = \bigcup{e(\eta) | \eta \in E(\tilde{q}, \lambda)}$,其中 $\lambda \in \Lambda_c$ 是触发输入,$\tilde{q} \in Q$ 是当前配置,$E’(\tilde{q}, \lambda)$ 初始化为 $t \in out(\tilde{q}, \lambda) | \vartheta \models \phi$。函数 $e(\eta)$ 定义如下:
e(η)' =
⎧
⎪
⎪
⎪
⎨
⎪
⎪
⎪
⎩
∪
tc
{e(η ◦ tc) | tc ∈ out(˜q', Λc)}
if out(˜q', Λt) = ∅ ∧ out(˜q', Λc) ̸= ∅
η ∪ ∪
tc
{e(η ◦ tc) | tc ∈ out(˜q', Λc)}
if out(˜q', Λt) ̸= ∅ ∧ out(˜q', Λc) ̸= ∅
η
otherwise
如果存在完成转换的循环,且其动作不使任何一个保护条件为假,则递归生成完成步骤会创建无限数量的轨迹。
2. 组合(Composition)
模型组合基于参与的ESTS之间的信号通信。使用全局队列 $Q$ 进行确定性通信,以传递信号。
- 模型通信(Model Communication) :信号 $\lambda$ 的接收或状态 $\tilde{q}$ 中的时间流逝会导致执行轨迹列表 $\eta \in E’(\tilde{q}, \lambda)$。轨迹 $\eta$ 所需的执行时间或发送的信号可能会引起其他ESTS或环境的反应。因此,需要创建系统执行轨迹列表 $E_M(\tilde{q}, \lambda)$,其中 $M \subseteq \mathcal{M}$ 是所有参与的ESTS的集合。这些轨迹包含初始轨迹 $\eta$ 及其与其他ESTS的反应轨迹的串联。
- 信号分类 :将信号分为外部通信和内部通信两类。外部通信信号 $\bar{\Lambda} = \bar{\Lambda}_i \cup \bar{\Lambda}_o$,其中 $\bar{\Lambda}_i \subseteq \Lambda_i$,$\bar{\Lambda}_o \subseteq \Lambda_o$;内部通信信号 $\hat{\Lambda} = \hat{\Lambda}_o \cup \hat{\Lambda}_i$,其中 $\hat{\Lambda}_o = \Lambda_o \setminus \bar{\Lambda}_o$,$\hat{\Lambda}_i = \Lambda_i \setminus \bar{\Lambda}_i$。
- 可观察输出(Observables) :定义 $obs(\eta) = \langle\langle\lambda_o, d_1\rangle, \ldots, \langle\lambda_o, d_N\rangle\rangle$ 为轨迹 $\eta \in E’(\tilde{q}, \lambda)$ 的输出信号列表。可观察输出 $obs(\eta) = obs(\eta) | \lambda_o \in \bar{\Lambda}_o$,不可观察输出 $\overline{obs}(\eta) = obs(\eta) | \lambda_o \in \hat{\Lambda}_o$。
- 系统执行轨迹(System Execution Trace) :系统执行轨迹 $\eta_M = \eta_{m_1} \circ \cdots \circ \eta_{m_N}$ 是ESTS $m \in M$ 的执行轨迹 $\eta_{m_i}$ 的串联,其中 $i = 1..N$,$N = |M|$ 是 $M$ 中的条目数。
系统执行轨迹的创建通过接收轨迹函数 $rt(\eta)$ 递归定义:
rt(η) =
⎧
⎨
⎩
η
if obs(η) = ∅
∪
η′ {η ◦ η′ | η′ ∈ rt (ηm ∈ Em(˜qm, λ) | λ ∈ obs(η))}
otherwise
该算法确保在开始下一个执行步骤之前处理队列中存储的所有信号。每个执行轨迹也可能产生输出信号,这些信号会被加入队列。这可能导致参与的ESTS之间形成无限循环。
由于信号接收的优先级高于延迟转换的遍历,在寻找系统执行轨迹时忽略了延迟转换的影响。转换 $t$ 的遍历需要时间 $dur(t)$ 完成,执行时间通过函数 $time(\eta)$ 计算:
time(η) =
∑
i=1
N
dur(ti) + delay(ti) - time(ηg(ti))
其中 $\eta_g$ 是 $\eta$ 的连接子轨迹,由转换 $t_i$ 所属的定时组 $g$ 中的转换组成。
3. 一致性(Conformance)
使用交替模拟来解释被测实现(IUT)相对于规范的正确性。为简单起见,这里仅讨论确定性ESTS的一致性。
- 可移动转换(Moves) :定义函数 $moves(\tilde{q}, \Lambda)$ 为所有参与的ESTS在状态 $\tilde{q}$ 下,保护条件满足且信号包含在给定集合 $\Lambda$ 中的所有输出转换的并集。
moves(˜qM, Λ) =
{t | src(t) = ˜qM ∧ ˜qM |= ϕt ∧ signal(t) ∈ Λ}
- 交替模拟(Alternating Simulation) :交替模拟的含义通过以下两个方程形式化:
∀t2 ∈ moves(˜q2, ¯Λi ∪ δ) | (∃t1 ∈ moves(˜q1, ¯Λi ∪ δ) | λ2 = λ1 ∧ ˜q′2 = ˜q′1)
∀t1 ∈ moves(˜q1, ¯Λo) | (∃t2 ∈ moves(˜q2, ¯Λo) | λ1 = λ2 ∧ ˜q′1 = ˜q′2)
第一个方程要求规范中可遍历的所有输入或延迟转换在IUT上也必须可执行;第二个方程要求IUT产生的每个输出必须被规范允许。
- 时间约束(Timing Constraints) :除了基本的I/O行为,还要求IUT的输出满足ESTS中给定的时间约束。
∀⟨λo, d⟩j ∈ obs(η) | (∃η′ | ⟨λ′o, ¯d⟩j ∈ obs(η′) ∧ λo = λ′o ∧ min(¯d) ≤ d ≤ max(¯d))
其中 $\bar{d} = time(sub(\eta’, 1, k)) \pm \varepsilon_k$,$k = idx(t’_o, \eta’)$。
4. 应用(Application)
通过一个简单的随机测试用例生成示例展示该方法的适用性。
- 随机游走(Random Walk) :在随机游走方法中,通过为转换 $t \in moves(\tilde{q}, \bar{\Lambda}_i)$ 生成可行数据和延迟转换的时间流逝,显式触发从当前状态 $\tilde{q}$ 出发的输出转换。输入生成通过约束求解器(如GNU Prolog)为每个转换单独进行,以找到满足转换保护条件的解。
- 随机选择 :如果在某个阶段有多个可能的转换,且它们的保护条件都能满足,则对其概率 $\alpha$ 进行归一化并进行随机选择。也可以随机选择显式等待,等待时间 $t_w$ 需满足 $0 \leq t_w \leq \delta_{min}$,其中 $\delta_{min}$ 是所有活动延迟转换的最小超时时间。
- 执行和生成轨迹 :选择输入动作后,将其发送到相应的ESTS并执行;等待动作则在整个系统上执行。执行输入或等待动作后,生成系统执行轨迹 $E_M(\tilde{q}, \lambda)$。
下面是不同轨迹的输入和输出示例:
| 轨迹 | 输入 | 可观察输出 $obs(\eta)$ | 不可观察输出 $\overline{obs}(\eta)$ |
| ---- | ---- | ---- | ---- |
| T1 |?a(p1 ≤ 50, p2 ≥ 5)
wait(p1) | ${\langle e, p1 + 4 * td\rangle}$ | ${\langle b, 2 * td\rangle}$ |
| T2 |?a(p1 > 100 + 4 * td, p2 < 5)
wait(100)
wait(p1 - (100 + 4 * td)) | ${\langle d(z + 3), 100 + 6 * td\rangle, \langle e, p1 + 4 * td\rangle}$ | ${\langle b, 2 * td\rangle}$ |
| T3 - 1 |?a(td < p1 ≤ 50, p2 ≥ 5)
?c
wait(p1 - (100 + 2 * td)) | ${\langle e, p1 + 4 * td\rangle}$ | ${\langle b, 2 * td\rangle}$ |
| T3 - 2 |?a(p1 ≤ td, p2 ≥ 5)
?c | ${\langle e, p1 + 4 * td\rangle}$ | ${\langle b, 2 * td\rangle}$ |
随机游走可用于在线和离线测试用例生成。在线测试时,SUT与模型并行执行,输入和输出可立即处理;离线测试时,需要存储所有可能的轨迹并在随机游走的每一步进行扩展。
5. 相关工作(Related Work)
近年来,基于符号转换系统的几种方法得到了研究。
- STG :是测试工具TGV的符号扩展,允许根据给定的测试目的生成测试用例。
- STSimulator :实现了一种基于符号转换系统的方法,用于在线随机测试,并在Jambition项目中用于自动推导Web应用的测试用例。
- 基于定时自动机的模型检查器 :如UPPAAL,用于行为规范和测试用例生成。但这些方法仍然依赖于数据的显式建模,面临数据密集型应用中的可扩展性问题。
综上所述,基于ESTS的组合随机测试方法提供了一种有效的方式来测试和验证复杂系统,同时考虑了系统的非确定性、时间约束和信号通信等因素。通过随机游走方法,可以生成多样化的测试用例,提高测试的覆盖率和有效性。
下面是整个过程的流程图:
graph TD;
A[开始] --> B[模拟:信号接收或时间延迟];
B --> C[生成执行轨迹];
C --> D{是否为阻塞状态};
D -- 是 --> E[组合:信号通信];
D -- 否 --> B;
E --> F[生成系统执行轨迹];
F --> G[一致性检查];
G --> H{是否满足一致性};
H -- 是 --> I[应用:随机测试用例生成];
H -- 否 --> J[调整系统];
J --> B;
I --> K[结束];
通过上述方法和流程,可以对基于ESTS的系统进行全面的测试和验证,确保系统的正确性和可靠性。
基于扩展符号转换系统的组合随机测试
6. 方法优势与挑战分析
6.1 优势
- 考虑多因素 :该方法综合考虑了系统的非确定性、时间约束和信号通信等多个重要因素。在复杂系统中,这些因素相互影响,传统的测试方法可能难以全面覆盖。而基于ESTS的组合随机测试能够更准确地模拟系统的实际运行情况,提高测试的真实性和有效性。
- 生成多样化测试用例 :随机游走方法允许生成多样化的测试用例。通过随机选择输入和等待时间,可以探索系统在不同场景下的行为,增加测试的覆盖率。这有助于发现一些在常规测试中难以发现的潜在问题。
- 可用于在线和离线测试 :既可以进行在线测试,实时处理输入和输出,及时获取系统的反馈;也可以进行离线测试,提前存储所有可能的轨迹,适用于不同的测试需求和场景。
6.2 挑战
- 无限循环问题 :在组合过程中,由于每个执行轨迹可能产生输出信号并加入队列,可能导致参与的ESTS之间形成无限循环。这会使测试过程陷入死循环,无法正常结束,需要额外的机制来检测和处理这种情况。
- 可扩展性问题 :与其他基于符号转换系统的方法类似,该方法仍然依赖于数据的显式建模,在数据密集型应用中可能面临可扩展性问题。随着数据量的增加,测试的复杂度和时间成本可能会显著上升。
7. 操作步骤总结
为了更清晰地展示基于ESTS的组合随机测试的操作过程,下面将其步骤进行总结:
-
模拟阶段
- 接收信号或经历时间延迟。
- 根据信号和时间延迟生成执行轨迹。
- 判断是否到达阻塞状态,如果是则进入组合阶段,否则继续接收信号或等待时间流逝。
-
组合阶段
- 通过全局队列进行信号通信。
- 根据初始轨迹和其他ESTS的反应生成系统执行轨迹。
-
一致性检查阶段
- 定义可移动转换,判断规范和IUT之间的交替模拟关系。
- 检查IUT的输出是否满足时间约束。
-
应用阶段
- 使用随机游走方法触发输出转换。
- 通过约束求解器生成满足转换保护条件的输入。
- 随机选择输入或等待动作。
- 执行输入或等待动作后,生成系统执行轨迹。
8. 实际应用建议
在实际应用基于ESTS的组合随机测试方法时,可以考虑以下建议:
- 合理设置参数 :在随机游走过程中,合理设置输入参数和等待时间的范围。例如,根据系统的实际情况确定 $\delta_{min}$ 的值,以确保随机选择的等待时间在合理范围内。
- 处理无限循环 :为了避免无限循环问题,可以设置最大执行步数或时间限制。当测试过程达到最大步数或时间时,强制终止测试并进行相应的处理。
- 结合其他测试方法 :可以将该方法与其他测试方法相结合,如边界值分析、等价类划分等,以提高测试的覆盖率和有效性。
9. 未来发展方向
随着技术的不断发展,基于ESTS的组合随机测试方法也有一些未来的发展方向:
- 优化可扩展性 :研究如何减少对数据显式建模的依赖,提高在数据密集型应用中的可扩展性。例如,可以采用更高效的数据表示和处理方法。
- 增强智能性 :引入人工智能和机器学习技术,使测试过程更加智能化。例如,通过机器学习算法自动调整随机选择的参数,提高测试的效率和准确性。
- 与其他系统集成 :将该方法与其他系统(如监控系统、调试系统等)进行集成,实现更全面的系统管理和维护。
10. 总结
基于扩展符号转换系统(ESTS)的组合随机测试方法为复杂系统的测试和验证提供了一种有效的解决方案。通过模拟、组合、一致性检查和应用等多个阶段,该方法能够全面考虑系统的各种因素,生成多样化的测试用例,提高测试的覆盖率和有效性。
在实际应用中,虽然该方法面临一些挑战,如无限循环和可扩展性问题,但通过合理设置参数、处理无限循环和结合其他测试方法等措施,可以有效应对这些挑战。未来,随着技术的不断进步,该方法有望在优化可扩展性、增强智能性和与其他系统集成等方面取得进一步的发展。
下面是不同阶段的详细对比表格:
| 阶段 | 主要任务 | 关键因素 | 输出结果 |
| ---- | ---- | ---- | ---- |
| 模拟 | 信号接收或时间延迟,生成执行轨迹 | 非确定性、时间约束 | 执行轨迹 |
| 组合 | 信号通信,生成系统执行轨迹 | 信号分类、全局队列 | 系统执行轨迹 |
| 一致性检查 | 判断可移动转换,检查交替模拟和时间约束 | 规范、IUT | 一致性判断结果 |
| 应用 | 随机测试用例生成 | 随机游走、约束求解器 | 测试用例 |
通过对该方法的深入理解和应用,可以更好地确保基于ESTS的系统的正确性和可靠性,为复杂系统的开发和维护提供有力支持。
超级会员免费看
171万+

被折叠的 条评论
为什么被折叠?



