Model Checking Guided Testing for Distributed Systems——论文泛读

EuroSys 2023 Paper 论文阅读笔记整理

问题

分布式系统已成为云计算的支柱,不正确的系统设计和实现可能严重影响分布式系统的可靠性。尽管使用形式化规范建模的分布式系统设计可以通过形式化模型检查进行验证,但要弄清其相应的实现是否符合已验证的规范仍然是具有挑战性的。不正确的系统实现可能违反其已验证的规范,导致复杂的错误。

现有方法局限性

研究人员提出了许多方法来检测分布式系统实现中的错误,可以分类为三类:

  • 形式验证框架[41, 42, 67],以细化的方式验证分布式系统实现的属性。然而,验证过程复杂且耗时。通常需要多人年的工作量来验证系统实现[58]。

  • 基于模型的测试[31, 44, 51],利用抽象模型生成测试用例,以测试分布式系统实现中的特定属性或行为。例如,Modulo [44]对分布式存储系统中的数据一致性属性建模,并生成测试用例以查找收敛故障错误。

  • 实现级别的模型检查器[47, 57, 64, 68, 69],专门设计用于在分布式系统实现中发现错误。在运行时拦截和重排序非确定性的分布式事件(例如,消息和故障)。但它们无法了解目标系统的预期执行结果(即,测试用例的 Oracle),并依赖开发人员手动编写特定系统属性或行为的通用断言来揭示错误。

本文方法

我们提出了一种分布式系统测试技术,即模型检查引导测试(Model checking guided testing,Mocket),以弥合分布式系统中规范和其实现之间的差距。给定目标分布式系统的 TLA+ [45] 规范,我们分析通过验证规范生成的验证状态,并为系统实现生成测试用例。将 TLA+ 规范映射到系统实现中的相应代码之后,进一步确定性地强制系统执行遵循从验证规范生成的测试用例。在系统测试期间,监视系统的运行时状态并将其与 TLA+ 规范中的相应验证状态进行比较。我们使用形式化模型检查生成的状态空间来引导对系统实现的测试,并发现目标分布式系统中的错误。

为了评估Mocket的可行性和有效性,我们将其应用于三个流行的分布式系统,并在它们中发现了3个先前未知的错误。

限制:

  • Mocket需要开发人员手动操作。

  • Mocket要求TLA+规范应该接近相应的实现。

  • 在某些场景下,Mocket可能会错过目标系统中的一些实现错误:TLA+规范并没有涵盖分布式系统的所有实现细节;系统实现中的某些并发性没有在TLA+规范中正确建模;省略了一些可能触发目标系统中实现错误的路径。

  • Mocket只能在基于Java的分布式系统上工作。

开源代码:GitHub - tcse-iscas/Mocket: TLA+ model checking guided testing for distributed systems

总结

针对分布式系统的故障检测。作者提出Mocket,需要给定目标分布式系统的TLA+规范,分析规范生成的验证状态,为系统实现生成测试用例。将 TLA+ 规范映射到系统实现中的相应代码之后,进一步确定性地强制系统执行遵循从验证规范生成的测试用例。在系统测试期间,监视系统的运行时状态并将其与 TLA+ 规范中的相应验证状态进行比较。并发现目标分布式系统中的错误。

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妙BOOK言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值