你在实际项目中使用过Quickcheck吗[关闭]

2024-04-28

快速检查 http://www.cs.chalmers.se/~rjmh/QuickCheck/及其变体(即使有一个Java https://bitbucket.org/blob79/quickcheck),看起来很有趣。然而,除了学术兴趣之外,它在实际应用程序测试中真的有用吗(例如 GUI 应用程序或客户端/服务器,甚至采用 StackOverflow 本身)?如果您有任何类似测试生成器的经验,我们将不胜感激。


好吧。实际上不是,但我曾在最初开发 QuickCheck 的人手下学习过,他是一个非常有趣的人。

早在 2004 年,我们被迫使用 QuickCheck 来测试我们的 Haskell 程序,它是好是坏的结合。主要是糟糕,因为 Haskell 本身有点令人畏惧,但当你让它工作时,仍然很棒。

从那时起,约翰完善了他多年前编写的代码,并实际上帮助爱立信测试了他们复杂的电信硬件,他发现了大约 2000 万行代码中的错误,通过他的方法将其减少到仅仅三个步骤。他是一位出色的演讲者,所以听他展示他的出色表现总是一件令人高兴的事情,但总而言之,他对 QuickCheck 所做的事情对我来说是新的。所以我问他,他对将其推向市场有何兴趣。他对这个想法持开放态度,但当时他的业务(基于 QuickCheck)相对较新,因此他还会关注其他领域。现在是 2007 年。我的观点是,即使您最终不会使用 QuickCheck,您也可以从它中学习。

但什么是快速检查?它是一个组合测试框架和一种有趣的测试程序的方法。微软研究院的人们已经建立了Pex http://research.microsoft.com/en-us/projects/Pex/这有点相似。 Pex 通过检查您的 IL 自动生成测试。然而,约翰会为函数的可能输入和测试属性编写一个生成器。属性是可以轻松测试的东西,而且更加正式。例如反转列表?嗯,反转列表与将列表分成两半,分别反转它们,然后以相反的顺序连接反转的两半是一样的。

1,2,3,4 // original
1,2 3,4 // split into A and B
2,1 4,3 // reverse A and B
4,3,2,1 // concat B and A

这是一个很好的属性,可以使用称为规范的 QuickCheck 进行测试,结果非常令人惊讶。

Pex 很好,但不如 QuickCheck 那么酷,Pex 简化了事情,QuickCheck 做到了,但编写好的规范需要付出很多努力。

QuickCheck 的强大之处在于,当它遇到故障时,它会将导致测试失败的输入减少到尽可能小的形式。为您提供导致测试失败的状态进展的详细描述。与其他测试框架相比,其他测试框架只会尝试以暴力方式破坏您的代码。

这是由于您如何编写测试规范而成为可能的。 QuickCheck 依靠伪随机性来发明输入,正因为如此,它能够回溯并找到未通过测试的非常小的输入。

编写 QuickCheck 属性需要做很多工作,但最终结果是更好的测试。正如 John 本人所说,70% 的错误是通过单元测试发现的,但正是另外 30% 的错误导致了程序崩溃。 QuickCheck 正在测试最后 30%。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你在实际项目中使用过Quickcheck吗[关闭] 的相关文章

随机推荐

  • 根据另一个 csv 文件过滤 csv 文件中的行并将过滤后的数据保存在新文件中

    大家好 所以我试图根据file1过滤file2 其中file1是file2的子集 但 file2 有一个描述列 我需要能够分析 file1 中的数据 我想做的是过滤 file2 并仅获取 file1 中的标题及其描述 我尝试了这个 但我不太
  • 为什么 PS1 不更新 git 分支名称?

    PS1 w git branch grep cut b 3 100 我按上面设置我的 PS1 但在我更改分支后 它不会更新提示中的分支名称git checkout 或使用以下命令更改存储库cd 如何解决这个问题 当反引号引用位被评估时PS1
  • 根据 pandas 中其他数据帧的值更改一个数据帧的值

    我有一个数据框 df1 id value 1 100 2 100 3 100 4 100 5 100 我有另一个数据框 df2 id value 2 50 5 30 我想用 df1 中的值替换 df2 中 id 的这些值 最终修改后的df1
  • 通过iPhone音频插孔读取数据

    我正在寻找一种方法来读取通过 iPhone 的音频插孔从 Arduino 发送的原始数据 我搜索了很多并发现this https github com sanjibahmad Is Headphone Plugged In tree mas
  • 编译时检查函数是否使用/未使用 C++

    我想在编译时检查是否有某些函数某堂课使用 未使用 相应地使编译过程失败 通过 例如如果函数F1在代码中的某处调用我希望编译成功 并且 if 函数F2称为我希望它失败 关于如何使用预处理器 模板或任何其他 C 元编程技术来做到这一点 有什么想
  • 视频作为网站背景? HTML 5

    我想使用视频作为背景 而不是自动拉伸到整个屏幕 背景 的图像 我还想旋转视频和图像 以便以任何顺序显示随机视频 图像 如果知道如何延迟视频播放 以便视频在网站加载后 30 秒只播放一次 那就太好了 thx 看看我的 jquery video
  • java.lang.IllegalArgumentException:在 Servlet 映射中生成无效的

    我遵循了这个问题的解决方案在 Java 构建路径上找不到超类 javax servlet http HttpServlet https stackoverflow com questions 22756153 the superclass
  • 基于 MySQL 中的另一列创建计算列

    我的表中有 2 列 varchar 8 and an int 我想要auto increment the int column当我这样做时 我想将值复制到varchar 8 column 但用 0 填充它直到它达到 8 个字符长 因此例如
  • jQuery mobile 在 Opera Mini 浏览器中失败。如何获得错误输出?

    I have a jQuery Mobile http en wikipedia org wiki JQuery Mobile website that works great on normal browsers but it fails
  • android 将自定义字体设置为油漆

    我想在油漆上绘制文字 如何用自定义字体绘制它 前 Helvetica 并且还粗体 我更愿意使用系统字体而不是从资源创建它 谢谢 如果 自定义字体 是指作为资源提供的字体 则以下代码应该有效 Typeface plain Typeface c
  • Java 压缩字符串

    我需要创建一个接收字符串并返回字符串的方法 防爆输入 AAABBBCCC 防爆输出 3A4B2C 好吧 这很尴尬 我在今天的面试中无法做到这一点 我正在申请初级职位 现在 我在家尝试制作一些静态工作的东西 我的意思是 不使用循环有点无用 但
  • 人们应该选择 ImmutableDictionary 还是 ImmutableSortedDictionary?

    我听说 NETSystem Collections Immutable集合被实现为平衡二叉树 以满足其不变性约束 甚至是传统上对哈希表进行建模的集合 例如Dictionary 通过使用积分值GetHashCode作为排序键 如果我有一种类型
  • 如何从 Jenkins 文件调用 groovy 脚本?

    我正在尝试将 Jenkinsfile 中的内容分离成一个常规脚本来制作 但它无法调用这些脚本 这是代码 usr bin env groovy node test node stage Checkout echo BRANCH NAME en
  • Python ctypes:SetWindowsHookEx 回调函数从未被调用

    我正在尝试用 Python 编写一个程序 该程序可以识别何时显示警报框 对话框 它正在处理多个监视器 我希望它在任务栏图标闪烁 弹出错误 通知等时在辅助监视器上显示可视化效果 据我所知 检测这些事件的方法是使用消息挂钩 如下所述 http
  • 使用本地 SQlite 数据库填充可扩展列表视图的方法

    我的应用程序中有一个 sqlite 数据库 我想用它制作一个可扩展的列表视图 我已经确定了我应该采取的方法 尝试了很多方法来找到相同的教程 但找不到一个使用本地数据库填充可扩展列表的教程 Android 网站上有一个教程 他们使用手机中的联
  • 可选地支持模板的initializer_list构造可能包装容器

    如果我有一个包装标准容器的模板 似乎我可以相当轻松地委托初始化器列表构造函数 template
  • 反应光滑的幻灯片高度问题

    我无法让这些 React Slick 滑块组件达到相同的高度 它们都是响应式 div 并随着页面大小的变化相应地调整大小 但理想情况下 我希望左侧的 div 与右侧的 div 具有相同的高度 我使用下面的代码片段定义了 SimpleSlid
  • 插入到表中并在 SQL 中拆分字符串

    我想将分割字符串插入到我的表中 如您所见 create table Organization organizationId bigint provienceId bigint CityId bigint TownId bigint Inse
  • Objective-C 有没有办法捕获发送到 nil 的消息?

    我刚刚被一种烦人的东西咬了bug https stackoverflow com questions 913627 uiviewcontroller viewdidload not being calledObjective C 中的 向
  • 你在实际项目中使用过Quickcheck吗[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 快速检查 http www cs chalmers se rjmh QuickCheck 及其变体 即使有一个Java https bitbuc