从场景到测试实现:基于Promela的测试方法解析
1. 测试场景映射到测试实现
在测试场景的实现过程中,正确的实现需要对消息和延迟进行协调,以确保测试的合理性并提高故障检测能力。以自动售货机为例,它有服务人员和消费者两个接口,测试人员需要模拟这两种角色的行为。如果在测试实现中,开启消息后紧接着发送投币消息而没有延迟,测试结果将取决于这两条消息的竞争情况,即使被测系统(SUT)的行为是正确的,测试人员也可能得出失败的结论。因此,合理的测试需要引入延迟。
根据相关研究,我们会插入协调消息和延迟,延迟的时长根据消息延迟来确定。为避免额外的并发问题,我们将来自不同测试组件的协调消息存储在不同的缓冲区中,这样可以在测试实现中保留原始测试场景的并发程度。此外,我们还会添加额外的协调消息,如 t_trigger ,用于通过本地超时检测缺失的SUT消息。
对于简单的替代块,每个部分以SUT发送到同一测试组件的消息开始,我们可以通过扩展现有算法来支持。而对于一般性质的替代块,目前被视为格式错误的场景,但未来可以通过添加额外的协调消息来处理,这些消息可以让不同的测试组件相互告知SUT选择的替代方案。
2. 测试实现映射到Promela
接下来,我们将表示测试实现的消息顺序图(MSC)映射到中间的Promela模型。Promela是用于Spin模型检查器的建模语言,主要用于并发系统的模拟和分析,而不是直接执行。在我们的场景中,模型检查有助于在生成Java可执行测试脚本之前检测错误。与普通模拟相比,模型检查的优势在于它可以验证所有可能的执行路径,而且由于测试场景描述的是有限行为,潜在的状态空间爆炸通常可以得到控制。
超级会员免费看
订阅专栏 解锁全文
55

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



