BNF 语法测试用例生成 [已关闭]

BNF grammar test case generation [closed]

提问人:Rob Walker 提问时间:9/9/2008 最后编辑:Mihai LimbășanRob Walker 更新时间:9/17/2015 访问量:2341

问:


我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便用事实和引文来回答。

8年前关闭。

有没有人使用过从 BNF 语法生成测试字符串的工具,然后可以将其输入到单元测试中?

单元测试 分析

评论


答:

1赞 hazzen 9/10/2008 #1

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

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

1赞 joel.neely 9/10/2008 #2

我已经完全按照 hazzen 评论的那样做了(在脚本语言中使用嵌入式 DSL)。这是一个稍微有趣的练习,但除了最基本的测试,例如解析,它并没有太大的用处。我最有趣的大多数测试都与更复杂的关系有关,而不是在BNF(或任何其他上下文无关语法)中轻松表达的关系。

0赞 EfForEffort 9/18/2008 #3

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

如果我用Haskell或ML编写编译器,我会使用QuickCheck

0赞 codelion 9/17/2015 #4

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