基于形式化规范的通用测试方法
在软件开发过程中,测试是确保软件质量的关键环节。基于形式化规范的测试方法为我们提供了一种系统且有效的途径来生成测试用例。下面将详细介绍这种方法及其在不同场景下的应用。
代数规范测试相关要点
- 公理覆盖测试 :通过一种名为展开(unfolding)的技术,可以对定义操作的公理前提中的情况进行覆盖。在示例的给定子集中,公理覆盖需要四个测试,这些测试对应三个一致性假设。例如,对于大小为一的队列中的消息有一个假设,对于大小大于一的队列有两个假设。更具体地说,对于最后输入的优先级小于或等于队列中所有消息的情况有一个测试,对于优先级大于队列中所有消息的情况有一个测试。还可以通过使用
ge
的规范来弱化第二个假设,将一致性子域进一步细分。这些操作在Bruno Marre开发的LOFT工具中已实现自动化。 - 神谕问题(Oracle Problem) :在代数规范的情况下,神谕问题归结为判断实现所计算的两个结果是否相等的问题。对于一些类型,可以使用编程语言提供的相等性测试,这些类型被称为可观察类型,通常对应内置类型(如布尔型、整型等)。但对于与待开发系统特定方面对应的类型,情况则不同,即使有相等性函数,它也是被测实现的一部分,可能存在错误。理论上,可以使用规范提供的可观察上下文将不可观察类型的相等性转换为一组可观察的相等性。然而,可观察上下文的数量通常是无限的,选择有限子集可能会影响有效性,除非做出有风险的神谕假设。不同的研究者提出了不同的解决方法,如Doong和Frankl尝试了基于选定可观察上下文的近似抽象相等性以及为每个类实现
e