# 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 对纯函数无效
# 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 库存非负规则无法用属性描述