10

有没有人有使用从 BNF 语法生成测试字符串然后可以输入单元测试的工具的经验?

4

4 回答 4

1

我没有工具问题的答案,但我会说在任何文本处理语言(perl/python/etc)中从 BNF 语法随机生成句子都相当容易,而在更大的语言中稍微冗长一些( Java/C/etc),但自己动手应该不会太难。

这样做的问题当然是它只能在语法中生成字符串,而且除非你的语法很简单,否则测试空间是无限大的。

于 2008-09-09T16:32:46.217 回答
1

我已经完全按照 hazzen 评论的方式完成了(在脚本语言中使用嵌入式 DSL)。这是一个稍微有趣的练习,但除了最基本的解析测试之外,它并不是非常有用。我的大多数最有趣的测试都与比 BNF(或任何其他上下文无关语法)更复杂的关系有关。

于 2008-09-09T16:43:41.697 回答
0

例如,如果您正在开发一个编译器,那么您可能有一个抽象语法树数据类型。如果是这样,那么您可以编写一个函数来生成一个随机 AST —— 这样,您可以将其打印到一个字符串并将其提供给您的单元测试。以这种方式保证它是一个有效的程序,因为你是从你的 AST开始的。

如果我在 Haskell 或 ML 中编写编译器,这就是我会做的,使用QuickCheck

于 2008-09-17T17:21:59.883 回答
0

Gramtest就是这样一种工具,它可以从任意用户定义的 BNF 语法生成字符串。您可以在此处阅读有关 Gramtest 背后算法的更多详细信息,并此处提供有关该工具的一些实用技巧。

于 2015-09-17T01:49:45.723 回答