有关测试特定领域语言的好参考是什么?

时间:2009-08-19 07:11:01

标签: language-agnostic testing

我正在创建一种新的特定于域的语言。你如何测试语言,或者你可以用语言做什么(转换,编译,检查)。 学习最佳实践有哪些好的参考或出发点?

5 个答案:

答案 0 :(得分:1)

您可以以测试优先的方式构建编程语言:

  1. 使用您正在创建的语言创建脚本
  2. 断言脚本通过调查其副作用来工作。你可以这样做,例如使用以新语言执行脚本的宿主语言(机器语言)创建单元测试。
  3. 如果您想了解有关如何创建编程语言的更多信息,“The Definitive ANTLR Reference”一书是一个很好的起点。

    测试新语言语法的一个非常有用的模式如下:

    1. 解释脚本并构建AST
    2. 使用AST
    3. 生成新语言的代码
    4. 从生成的代码生成AST
    5. 断言两个AST结构相同
    6. 有时断言从两个AST生成的代码是相同的更方便。

      像构建语言一样构建测试:

      1. 词法
      2. 句法
      3. 语义

答案 1 :(得分:1)

我喜欢劫持其他项目的工作单元测试。例如,如果我知道boost单元测试正在运行,那么我可以在XYZ新的编译时操作之后重新运行测试并确保它们仍然通过。我不确定其他语言有什么用,但IMO for C ++,boost是最终的编译器压力测试。

对于一种新语言,我会将其置于我的标准评估程序之下:

  • 用新语言解决项目Euler问题。
  • 构建一个单元测试套件,运行您为这些问题编写的解决方案,并确保编译后的代码仍然返回正确的答案。

它远非完美,但它会迫使您构建各种算法/策略,结果是一个紧凑的验证测试。如果您对语言规范进行了更改,那么更新您的解决方案以容纳它们并不困难。

答案 2 :(得分:0)

这可能与您尝试提出的内容完全无关,但PHP附带自动化测试脚本,因此任何人都可以测试基本语言功能(变量,'if'语句,循环等)是否正常工作。 / p>

答案 3 :(得分:0)

传统的方法是使用您正在实现的语言来引导您的实现。这样你就可以获得一个“免费”的大型测试套件(当然相对而言),你有很强的动力来解决问题并进行优化。

答案 4 :(得分:0)

要研究的第一件事是unit testing,因为这是开发人员应该从一开始就做的事情。事实上,有些人甚至提倡在编写任何实际代码之前编写单元测试。

对于大多数流行语言(如Java,Python等),有许多单元测试框架。 This blog post提供了Javascript单元测试框架的完整列表。

下一步是了解lint程序,这些程序检查代码库是否存在错误或不清楚的结构。这通常不包含在构建过​​程中,但是是测试的重要部分。有C,Javascript和Python等lint程序。