Property-Based Testing 原理与工具

共 19 题
#

1. Property-Based Testing - QuickCheck,属性、生成器、收缩、不变式与集成的核心概念?

A PBT 只测试单个固定输入
B PBT 与例式测试完全等价
C PBT 不需要生成器
D PBT 描述对所有输入成立的性质,并用生成器自动生成输入验证 ✓ 正确答案
#

2. PBT 中的 Shrinking(收缩)策略是如何工作的?为什么收缩对于定位最小反例至关重要?不同数据类型(整数、列表、树)的收缩策略有何差异?

A 收缩把反例系统化简为最小可复现反例,便于定位根因 ✓ 正确答案
B 收缩让反例变得更大
C 收缩与生成器无关
D 收缩只适用于整数
#

3. 如何为复杂领域对象(如嵌套 JSON、状态机、数据库记录)设计 PBT 生成器(Generator)?组合子(combinator)模式与自定义生成器的取舍?

A 生成器只能产生基础类型
B 自定义生成器永远优于组合子
C 组合子模式无法表达复杂对象
D 应优先使用组合子模式,复杂约束再考虑自定义生成器 ✓ 正确答案
#

4. Property-Based Testing 与 Example-Based Testing 的互补关系,PBT 能发现哪些 Example-Based 测试遗漏的缺陷?PBT 在哪些方面不如手写用例?

A PBT 擅长发现边界与意外输入缺陷,例式测试擅长精确断言明确需求 ✓ 正确答案
B PBT 与例式测试完全互斥
C 例式测试一定能发现所有缺陷
D PBT 无法发现边界缺陷
#

5. 属性测试(Property-Based Testing)与蜕变测试的关系和差异?

A 属性测试不涉及预言问题
B 两者完全无关
C 蜕变测试不能与随机生成结合
D 蜕变关系可作为属性测试中的一种属性形式 ✓ 正确答案
#

6. 主流 PBT 工具对比,Hypothesis(Python)、ScalaCheck(Scala)、fast-check(TypeScript)、jqwik(Java) 的设计理念差异和生态集成方式?

A ScalaCheck 面向 Python
B jqwik 面向 TypeScript
C fast-check 面向 Java
D Hypothesis 面向 Python 并与 pytest 集成 ✓ 正确答案
#

7. Stateful Property-Based Testing(有状态属性测试)的原理,如何用状态机模型驱动测试序列生成?请以缓存系统或数据库连接池为例说明。

A 有状态 PBT 不需要状态抽象
B 有状态 PBT 只测无状态函数
C 有状态 PBT 用状态机模型 + 操作序列驱动,并验证不变量 ✓ 正确答案
D 有状态 PBT 无法验证不变量
#

8. Property-Based Testing 的核心,不变量(invariant)如何从需求提炼,与传统例式测试的互补关系?

A 不变量只能从数学公式提炼
B 不变量描述对所有合法输入都成立的性质 ✓ 正确答案
C 不变量与业务规则无关
D 例式测试是不变量的泛化
#

9. 属性的常见模式,不变量、幂等、往返与逆运算等属性如何从业务规则中识别,哪些属性最容易自动化验证?

A 不变量与业务规则无关
B 幂等属性最难验证
C 往返与逆运算属性最容易自动化验证 ✓ 正确答案
D 属性只能从数学性质提炼
#

10. PBT 的统计完备性,随机生成无法枚举全部输入时,如何评估属性测试的置信度(运行次数、分布与种子数)?

A 置信度受运行次数、生成分布与种子数影响 ✓ 正确答案
B PBT 能穷举所有输入
C 生成分布不影响置信度
D 种子数不影响测试覆盖
#

11. PBT 在 CI/CD 中的集成挑战,随机性导致的不可复现问题如何处理?种子(seed)管理与回归测试策略?

A 种子管理无关紧要
B PBT 在 CI 中无法使用
C 随机性导致不可复现,需固定种子并固化反例为回归用例 ✓ 正确答案
D 反例无需固化
#

12. Property-Based 测试的适用边界,状态ful 系统、随机输入与时间依赖场景下的难点?

A PBT 能直接处理时间依赖
B PBT 适合确定性、可建模不变量的场景 ✓ 正确答案
C 有状态系统无需状态机建模
D PBT 对纯函数无效
#

13. 属性测试与模糊测试的对比?

A 两者目标完全相同
B PBT 需要属性作预言,Fuzzing 以崩溃为信号 ✓ 正确答案
C Fuzzing 需要精确输出预言
D PBT 主要发现内存崩溃
#

14. PBT 生成器自身的测试,如何验证生成器分布合理、能覆盖边界与特殊值?

A 生成器只能产生随机大值
B 生成器无需测试
C 生成器分布不影响 PBT 效果
D 应验证生成器分布合理、覆盖边界与特殊值 ✓ 正确答案
#

15. PBT 在输入校验与安全测试中的应用,用属性描述输入约束,自动发现校验逻辑漏洞?

A PBT 无法生成恶意输入
B PBT 只能测正常输入
C 校验逻辑无需 PBT 测试
D 用属性描述校验后输入应满足的约束,自动发现校验漏洞 ✓ 正确答案
#

16. PBT 与契约测试的组合,用属性不变量验证 API 在不同输入下的行为一致性?

A 契约测试验证结构契约,PBT 验证行为不变量 ✓ 正确答案
B 两者完全重复
C PBT 无法验证 API 行为
D 契约测试能验证所有行为
#

17. PBT 的团队落地,哪些模块(纯函数、解析器、序列化)最适合先引入,如何评估收益?

A 纯函数最难写属性
B 应一次性全量引入
C 应优先在纯函数、解析器、序列化等易建模不变量的模块引入 ✓ 正确答案
D 收益无法评估
#

18. PBT 的性能控制,生成器效率、用例数量上限与 CI 时长预算如何平衡?

A 用例数越多越好
B 通过高效生成器、用例数上限与分级运行平衡 CI 时长 ✓ 正确答案
C 生成器效率无关紧要
D PBT 无法控制时长
#

19. PBT 与数据库约束的一致性验证,如何用属性描述业务规则(库存非负、状态合法迁移),验证应用逻辑与库约束一致?

A 用属性描述业务规则,验证应用逻辑生成的库状态始终满足约束 ✓ 正确答案
B 数据库约束无需应用层校验
C PBT 无法验证数据一致性
D 库存非负规则无法用属性描述