BNF语法测试用例生成
时间:2020-03-05 18:50:08 来源:igfitidea点击:
是否有人对从BNF语法生成测试字符串然后可用于单元测试的工具有任何经验?
解决方案
回答
我没有工具问题的答案,但是我会说,在任何文本处理语言(perl / python / etc)中,从BNF语法中随机生成句子都是相当容易的,而在较大的语言中,其冗长一些( Java / C / etc),但推出自己的游戏应该不难。
当然,这样做的问题在于它只能在语法中生成字符串,并且除非语法非常简单,否则测试空间将无限大。
回答
我完全按照hazzen的评论做(使用脚本语言的嵌入式DSL)。这是一个非常有趣的练习,但是最基本的测试除外,例如解析,它并不是非常有用。我最有趣的测试中,大多数都与比BNF(或者任何其他无上下文语法)中的表达式更复杂的关系有关。
回答
例如,如果我们正在开发编译器,则我们可能具有抽象语法树数据类型。如果是这样,那么我们可以编写一个函数以生成随机AST-可以将其打印到字符串中并将其提供给单元测试。自从我们开始使用AST以来,就可以保证这种方法是有效的程序。
如果我正在用Haskell或者ML编写编译器,这就是我将要使用QuickCheck进行的工作。