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

Testing 使用许多开关和参数,您如何有效地测试命令行软件,testing,command-line,grammar,Testing,Command Line,Grammar,命令行实用程序/软件可能由许多不同的开关和参数组成 假设您的软件名为CLI,并假设CLI具有以下功能: CLI的一般语法为: CLI[可选参数] 可以是“矩阵”、“复数”、“整数”、“浮点”、“日志” 可以是“加”、“减”、“乘”、“除” 我想不出任何必要的和可选的参数,但假设您的软件确实支持它 现在你想测试这个软件。您希望测试接口本身,而不是逻辑。基本上,接口必须返回正确的成功代码和错误代码 本质上,许多真实的word软件仍然提供一个带有多个选项的命令行界面。我很好奇,是否有任何正式的测试

命令行实用程序/软件可能由许多不同的开关和参数组成

假设您的软件名为CLI,并假设CLI具有以下功能:

  • CLI的一般语法为:
    CLI[可选参数]
  • 可以是
    “矩阵”、“复数”、“整数”、“浮点”、“日志”
  • 可以是
    “加”、“减”、“乘”、“除”
  • 我想不出任何必要的和可选的参数,但假设您的软件确实支持它
现在你想测试这个软件。您希望测试接口本身,而不是逻辑。基本上,接口必须返回正确的成功代码和错误代码

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


我很想了解更多关于任何可以应用于此类问题的理论模型的信息,或者如果在座的任何人确实以令人满意的覆盖率进行了此类测试,我维护的产品中有一个命令行工具,我的情况与您描述的非常相似。我所做的是使用一个单元测试框架,并将每个参数组合编码为一个测试方法

该程序是在c#/.NET中实现的,因此我使用了内置于visualstudio的微软测试框架,但这种方法适用于任何单元测试框架

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


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

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

不回答您的实际问题,但在我看来,所需参数将包括您希望对其应用操作的实际值-说“添加两个复数”没有什么意义在不提供实际数字的情况下:-)可选参数可以是快速加法或安全除法的算法选择-gcc for one允许您指定浮点计算的属性,以便您可以执行类似的操作。因此,在您的情况下,参数组合的生成是静态的?它是否“发现”组成特定命令的组件它应该运行什么,或者您是否有不同命令组合的静态列表?此外,如果工具进行了添加新命令或添加新错误代码的拖运,会发生什么情况?这需要手动干预测试实用程序并对其进行修改?我不知道您所说的“是否发现…”是什么意思。测试套件是专门为测试CLI工具而构建的,因此测试隐式地包括CLI的功能以及它接受的输入类型的知识。输入不是静态的-测试套件使用System.Random类生成输入,并且它会重复这样做。在某些情况下,它随机生成输入并重复运行测试,直到达到案例覆盖率的某些标准。它不是一个“静态组合列表”,但也不是100%覆盖率,我认为这在我的案例中是不切实际的。至于修改CLI和添加错误代码,在TDD之后,我首先编写新的测试。我编写了定义输入集和预期输出的测试,然后为CLI编写代码,然后运行测试。非常有趣-感谢您的链接