快速检查状态-机器:使用基于状态机的模型测试单子程序

这是一个候选发布包!在这里,您可以预览此软件包版本发布到主软件包索引后的显示方式(可以通过下面的“维护”链接完成)。请注意,一旦包被发布到主包索引,它就无法撤消!请咨询包上传文档了解更多信息。

[保持][发布]

参见自述文件https://github.com/advancedtelematic/quickcheck-state-machine#自述文件


[跳到自述]

属性

版本 0.0.0,0.0.0,0.1.0,0.2.0,0.3.0,0.3.1,0.4.0,0.4.1,0.4.2,0.4.3,0.5.0,0.6.0,0.7.0,0.7.1,0.7.2,0.7.3,0.8.0,0.9.0,0.10.0
更改日志 CHANGELOG.md公司
依赖关系 ansi-wl-打印(>=0.6.7.3 && <0.7),基础(>=4.7 && <5),约束(>=0.9.1 && <0.10),容器(>=0.5.7.1 && <0.6),mtl公司(>=2.2.1 && <2.3),并联输入输出(>=0.3.3 && <0.4),快速检查(>=2.9.2 && <2.10),随机的,随机的(>=1.1 && <1.2),单子(>=2.2 && <2.3),stm公司(>=2.4.4.1 && <2.5)[细节]
许可证 BSD-3条款
版权 版权所有(C)2017,ATS Advanced Telematic Systems GmbH
作者 斯特万·安杰尔科维奇
维护人员 斯特万·安杰尔科维奇<stevan@advancedtelematic.com>
类别 测试
主页 https://github.com/advancedtelematic/quickcheck-state-machine#自述文件
源回购 头部:git克隆https://github.com/advancedtelematic/quickcheck-state-machine
已上传 通过斯特瓦纳2017年6月7日08:27:27Z

模块

[索引]

下载

维修人员角落

包装维护人员

对于包维护者和黑客托管者


快速检查状态-机器-0.0.0自述文件

[返回包描述]

快速检查状态机

黑客攻击 生成状态

快速检查状态机是基于的Haskell库快速检查,用于测试有状态程序。图书馆不同于这个测试。快速检查。一元(Monadic)方法因为它允许用户通过状态机指定正确性使用前置和后置条件的基于模型。状态机的优势方法有两个方面:1)指定程序的正确性变得越来越少adhoc,2)你可以免费测试比赛条件。

基于状态机的模型规范和基于属性的组合测试首先出现在Erlang的专有QuickCheck中。这个快速检查状态机库可以被视为试图提供类似的Haskell的QuickCheck库的功能。

示例运行(摘要)

下面是我们在变量中查找竞争条件时的输出示例参考示例:

>快速检查(可变引用.prop_parallel RaceCondition)***失败!(5次试验和6次收缩后):无法线性化:┌──────────────────────┐新建││                 ⟶ $0 │└──────────────────────┘│ ┌────────┐│ │ 包括0美元┌─────────┐ │ │        │收入0美元│ │ │        │©©©©©©©©©©©©©() ││         │ │ └────────┘│    ⟶ () │ │└─────────┘ │┌─────────┐ │读取$0│││     ⟶ 1 │ │└─────────┘ │

显然,如果我们并行增加一个可变引用,那么最终可能会得到一个比赛条件。我们将回到下面的示例,但如果您是不耐烦,你可以找到完整的来源代码在这里.

它是如何工作的

粗略的想法是要求图书馆用户提供:

然后,库返回一个顺序属性和一个并行属性。

Sequential属性

这个顺序属性检查模型是否与语义。这样做的方式是:

  1. 生成命令列表;

  2. 从初始模型开始,对每个命令执行以下操作:

    1. 检查前提条件是否成立;
    2. 如果是,使用语义执行命令;
    3. 检查后置条件是否成立;
    4. 利用过渡函数对模型进行了改进。
  3. 如果出现问题,请缩小命令的初始列表并显示一个最小反例。

Parallel属性

这个平行性质检查语义的并行执行是否可以用顺序模型解释。这对于尝试查找比赛条件——这通常很难测试。它的工作原理是跟随:

  1. 生成一个命令列表,这些命令将作为并行程序(将其视为设置的初始化位某些州);

  2. 生成两个命令列表,用作并行后缀;

  3. 按顺序执行前缀;

  4. 并行执行后缀并收集每个命令的调用和响应;

  5. 尝试找到命令调用的可能顺序交错尊重后条件的回应。

最后一步主要是试图找到线性化的呼叫可能发生在单个线程上。

示例

开始时,可能最简单的方法是看一看其中的一个示例:

所有示例都有关联的规格模块位于这个示例/测试目录。它们利用了示例中的属性,并作为一部分进行了测试属于特拉维斯CI.

为了更好地理解示例,可能有助于git克隆回购,光盘进入示例/目录并启动堆栈ghci并运行不同属性交互。

如何做出贡献

这个快速检查状态机这个图书馆仍处于实验阶段。

我们希望鼓励用户试用它,并加入关于如何我们可以在问题跟踪器上改进它!

另请参见

许可证

BSD样式(请参阅文件LICENSE)。