基于属性测试与编译中间语言的研究进展
基于属性测试的验证框架
在软件开发过程中,测试与验证是确保代码质量的重要环节。基于属性的测试(PBT)作为一种有效的测试方法,近年来受到了广泛关注。
在一次案例研究中,研究团队对未以验证为目的编写的现有代码进行了验证。对于约2000行的Coq代码(其中约1000行严格处理生成和不可区分性,另外约1000行是传递使用的定义),验证证明需要约2000行代码。研究团队认为,未来通过更好地利用无点推理和不可计算集库,这个数字有望进一步减少。
在生成测试数据时,研究团队发现了一些问题。最初在生成过程中忘记改变数据类型,而这些问题在证明过程中被发现并修复。修复这些完整性错误对生成器效率影响很小,但能提供更好的测试效果。
相关工作方面,Dybjer等人在依赖类型理论中结合测试和证明的开创性工作,引入了验证生成器的思想,并将满射性(完整性)确定为最重要的验证属性。他们将生成器建模为将自然数的有限二叉树转换为域元素的函数,并从第一原理证明了几个复杂度与红黑树示例生成器相似的生成器的满射性。不过,研究团队在此基础上更进一步,构建了一个用于PBT的通用验证框架。通过像QuickCheck那样分离种子和大小,研究团队对可构造数据的大小有了更多控制。虽然这使得形式验证变得更困难,因为需要在证明中明确考虑大小,但通过如Unsized和SizeMonotonic这样的类型类支持组合大小推理。而且,研究团队的检查器不是固定形状的,而是以模块化的方式构建和验证的。
Wilson曾尝试将PBT引入Coq,创建了一个简化的类似QuickCheck的工具,用于为一小类可测试属性自动生成测试输入。但其工具不支持在Coq中编写生成器,因此无法证明
属性测试与中间语言研究进展
超级会员免费看
订阅专栏 解锁全文
934

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



