如何有效地测试命令行软件,有许多开关和参数



命令行实用程序/软件可能包含许多不同的开关和参数。

假设你的软件叫做CLI,假设CLI有以下特性:

  • CLI的通用语法是:CLI <data structures> <operation> <required arguments> [optional arguments]
  • <data structures>可以是'matrix', 'complex numbers', 'int', 'floating point', 'log'
  • <operation>可能是'add', 'subtract', 'multiply', 'divide'
  • 我想不出任何必需的和可选的参数,但是让我们说你的软件支持它

现在你想测试这个软件。您希望测试接口本身,而不是逻辑。本质上,接口必须返回正确的成功码和错误码。

从本质上讲,许多真正的word软件仍然提供带有几个选项的命令行界面。我很好奇是否为此建立了正式的测试方法。我的一个想法是构建一个语法(如EBNF)并描述接口的"语言"。但我没能推动这个想法。在这种情况下,语法有什么用呢?它是如何生成许多许多组合的?

我很想了解更多的理论模型,这些模型可以应用于这样的问题,或者这里是否有人做过这样的测试,并且覆盖率令人满意

有一个命令行工具作为我维护的产品的一部分,我有一个非常类似于你描述的情况。我所做的是使用单元测试框架,并将每个参数组合编码为测试方法。

程序是用c#/语言实现的。所以我使用的是Visual Studio内置的微软测试框架,但这种方法适用于任何单元测试框架。

每个测试调用一个实用程序函数,该实用程序函数启动流程并发送输入和输出。然后,每个测试负责验证CLI的输出是否符合预期。在某些情况下,有一组测试用例可以由单个测试方法执行,其中有一个for循环。逻辑需要运行CLI并检查每次迭代的输出。

我所拥有的测试集并没有涵盖参数的所有排列,但它涵盖了80%的情况,如果有任何缺陷,我可以添加新的测试。

使用递归语法生成开关是一个有趣的想法。如果您要尝试这样做,那么您需要首先以一种可以使用所有开关的方式编写语法,然后对语法进行随机漫步。这提供了一种简单的方法来随机遍历语法并输出结果。

最新更新