2024 Clojure状态调查!中分享您的想法。

欢迎!请参阅关于页面以了解更多关于这个网站如何运作的信息。

0
Spec
编辑

嗨!
我正在探索clojure.spec.alpha的实现,并发现一组相当“小”(根据我的直观预期)的测试 :)

Clojure spec定义了一组原语,可以将它们组合在一起。
换句话说,Clojure spec定义了一种用于描述结构及其预测性属性的编程语言。

假设spec语义在理由指南中描述得不太正式,那么您是如何推理声明的语义和spec实现之间的一致性呢?

我预期有一个覆盖基本场景及其有限组合的大测试集——有点像是归纳基础。如果归纳基础是正确的,那么其他的组合也都应该是好的。

您是如何推理clojure.spec.alpha验证实现正确性的?

UPD:根据Alex Miller的第一个答案,将问题背景缩小到验证这个方面。

1 个答案

+1

选择
 
最佳回答

你主要是在询问验证、合规性、描述还是生成问题吗?

让我们将“验证”定义为基本上下文
验证的基础层是基于谓词的,并且大量复用了Clojure中的谓词。这些谓词本身主要很简单,并且按照定义是正确的(因为它们是与Clojure自身使用的相同谓词)。例如,字符串是通过string?进行检验,该检验确保对象是java.lang.String的一个实例。因此,在spec中这类测试并不多 - 我们利用现有的有效基础。

对于构建,每个构造不通常有很多情况,但https://github.com/clojure/spec.alpha/blob/master/src/test/clojure/clojure/test_clojure/spec.clj正在测试原语组合以涵盖它们。当然,做更多会更好,但最终还是想花些时间在生成用于测试的spec和值上(但这在没有spec的情况下很棘手)。
"当然,做更多会更好,但最终还是希望花时间在生成用于测试的规范和值(但如果没有规范,这会很棘手)"

是否通过某种方式生成规范,然后通过生成的规范生成器生成值,并通过生成的规范验证值是有意义的吗?
结果是,通过使用生成的规范生成器解决了值生成问题,这无疑将整个生成器逻辑层的耦合引入其中,因此验证责任没有被单独测试。
...