主要观点:
- 作者本想发布未经编辑的时事通讯,此次回应关于“如今的孩子认为随机生成输入(基于属性的测试)比寻找最有意义的输入更酷”的讨论。
- 解释了基于属性的测试(PBT)的概念,即描述执行应具有的一般属性,然后在随机值上进行测试,它能测试更广泛的输入,但需要学习如何提出属性和复杂策略。
- 针对 Brian 的观点进行反驳,认为 PBT 在处理即使是中等复杂问题中边界条件和边缘情况的组合爆炸方面具有价值,而手动单元测试难以涵盖所有情况。
- 指出大多数 PBT 示例使用简单的数字和数组,缺乏复杂的输入空间,不能很好地展示 PBT 的优势,应使用更复杂的输入如字符串、字典等。
- 说明这是四年前的每周时事通讯,仍会定期更新,包含软件历史、形式方法等主题,可订阅,Brian 也对此有反驳。
关键信息:
- PBT 示例如“加法可交换”和“反转列表两次返回原列表”很常见但简单,优势不明显,复杂输入空间才能体现 PBT 价值。
- 函数输入空间维度增加会导致更多边缘情况,如二维空间比一维更复杂。
- 不同 PBT 库的策略 API 不同,难以通用地讨论相关技能。
重要细节:
- 给出函数
def add(a, b): return a + b
和@given(integers(), integers()) def test_add_is_commutative(a, b): assert add(a,b) == add(b,a)
的 PBT 示例。 - 提到 Brian 对 PBT 示例的不满及相关讨论。
- 介绍作者的时事通讯更新内容及订阅方式,以及新书《Logic for Programmers》的早期访问信息。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。