如何确保在基于事件的并发设置中涵盖所有案例?

时间:2018-12-23 01:09:40

标签: testing concurrency developer-tools formal-verification event-based-programming

SICP 3.4.2中,存在不同过程中事件顺序的问题。

  

假设我们有两个过程,一个具有三个有序事件(a,b,c),一个具有三个有序事件(x,y,z)。如果两个进程同时运行,并且对它们的执行方式没有任何限制,则事件的可能顺序有20种,这与两个进程的单独顺序一致。

20 orderings

  

当程序员设计这个系统时,我们将不得不考虑这20种排序中的每一种的影响,并检查每种行为是否可以接受。随着流程和事件数量的增加,这种方法很快变得难以处理。

是否有任何工具/最佳实践可以帮助程序员确保涵盖每个逻辑上不同的情况?

如果程序员可以在事件之间定义一组事件和约束,并且该工具将返回所有有效的事件顺序(识别并分组类似的循环模式),那就太好了。

给出可能的事件流的列表,程序员将能够添加/删除/修改约束。

这个问题对我来说很重要,因为我遇到的大多数错误都与某些比赛条件或某些未处理的情况有关。

我真的不想在某些高级类型系统中使用特定的语言,我宁愿有一个与技术/语言无关的解决方案,可以充当某种助手-设计和记录系统:包括事件,约束(和状态)。

那将是我的圣杯。

我正在寻找涉及以下主题的解决方案:形式方法,形式验证,序言(由于详尽的搜索和逻辑),并发,依赖类型,基于事件的编程,许多类型的测试,按合同设计,循环复杂性;但是他们都没有给我答案。此外,深入类型理论似乎是一个过大的杀伤力。

1 个答案:

答案 0 :(得分:0)

“三个有序事件(a,b,c)”
这取决于存在多少交错状态以及需要共享哪些资源(在哪个时间内)。查阅并发理论书籍,了解完整的语言理论。您需要以某种方式形式化流程的依赖关系[再次依赖于代码]

种族条件和未处理的案件可以减少到范围和资源上,因此从广义上讲,您要么需要限制表达的可能性,以正式/自动地验证您的代码。根据错误的情况,或者您需要有限的资源。

在语言/编程中,这是通过例如模式,良好的API,语言构造等来完成的。但是,没有通用的功能,并且取决于用例。

种族条件和未处理的案件看起来您需要更强的键入和自动资源约束,否则您的软件设计可能有缺陷。