代码之家  ›  专栏  ›  技术社区  ›  Rob Walker

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

  •  9
  • Rob Walker  · 技术社区  · 17 年前

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

    4 回复  |  直到 17 年前
        1
  •  1
  •   hazzen    17 年前

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

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

        2
  •  1
  •   joel.neely    17 年前

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

        3
  •  0
  •   EfForEffort    17 年前

    如果,比方说,你正在开发一个编译器,那么你可能有一个抽象语法树数据类型。如果是这样,那么您可以编写一个函数来生成一个随机的AST——有了它,您可以将它打印成一个字符串并将其馈送给您的单元测试。这样肯定是个有效的程序,因为你 起动 用你的AST。

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

        4
  •  0
  •   codelion    10 年前

    Gramtest 是一个可以从任意用户定义的BNF语法生成字符串的工具。你可以阅读更多关于Gramtest背后算法的细节 here 还有一些实用的工具提示 here .