有没有更好的方法来测试我的软件?

由Ram Cherukuri

在大多数嵌入式软件开发组织中,测试是验证过程的主要部分。研究估计,大约25 - 30%的开发时间花在测试上,在某些情况下,这可能高达50%[1]。

核查有两个关键目标:

  • 确保功能的正确性,验证软件是否符合要求
  • 确保运行时的正确性,并验证实现的正确性和健壮性

这些验证目标彼此是正交的,并且传统上通过测试来解决,这些测试包括功能测试、性能测试、边界值测试、健壮性测试、随机测试以及语句覆盖率和决策覆盖率测试。所有这些策略可以分为两大类:

  • 功能正确性的基于需求的测试策略
  • 基于覆盖率的运行时正确性测试策略

然而,以这种方式测试嵌入式软件是验证嵌入式软件的最佳方法吗?下面是一篇关于嵌入式软件测试[2]的文章中的解释:

在理想情况下,您希望测试程序中的每一个可能的行为。这意味着至少测试一次所有可能的输入组合或所有可能的决策路径。

这是一个高尚但完全不切实际的目标。例如,在《软件测试的艺术》一书中,Glen Ford Myers描述了一个只有5个决策的小程序,它有10^14个唯一的执行路径。他指出,如果您能够每5分钟编写、执行和验证一个测试用例,那么将需要10亿年的时间来全面测试这个程序。

显然,理想的情况是无法达到的,所以您必须使用这种理想的近似。正如您将看到的,功能测试和覆盖率测试的组合提供了一个合理的次优选择。基本的方法是选择一些功能测试,一些覆盖率,有最高的暴露错误的概率。”

仅使用功能和基于覆盖率的测试所固有的弱点的最明显的例子是一家主要航空公司最近报告的软件问题。尽管DO 178指南强制执行了严格的验证和安全要求,要求进行大量的测试和手动审查,但它未能防止溢出错误,直到产品交付[3]。

显然,仅仅依靠测试的验证是不完整的。幸运的是,Polyspace产品等工具的出现可以缓解这个问题,并验证每种可能的输入组合和每种可能下载188bet金宝搏的决策路径。

多空间静态分析解使用一种被称为抽象解释的形式方法。这种技术通过在编译时验证软件应用程序的动态特性,弥合了传统静态分析技术和动态测试之间的差距。

在不执行程序本身的情况下,抽象解释研究程序的所有可能行为——即所有可能的输入组合和所有可能的执行序列——在一次传递中确定程序如何以及在哪些条件下会失败。你可以在这里找到更多的细节Polyspace静态分析解决方案白皮书

您不仅可以分析程序的每一个可能的行为来完全验证您的软件,还可以显著地减少用于测试软件的工作和开发时间。你可以利用Polyspace工具提供的动态运行时行为:

  • 替换或减少健壮性测试
  • 执行死代码覆盖率
  • 减少测试周期的数量
  • 识别相关测试向量

在以后的文章中,我们将讨论Polyspace如何帮助完成这些任务。使用Polyspace静态分析和测试的这种组合的好处在于,您可以节省大量的工作,并减少总体开发时间。一家主要的汽车供应商能够将测试周期减少50%,主要是通过替换稳健性测试和减少测试周期。Polyspace生成的工件演示了如何实现所需的质量级别。你可以在测试过程的不同阶段使用Polyspace工具,如:

  • 单元测试
  • 集成测试
  • 验收测试

如果您有兴趣了解Polyspace工具如何在您的开发过程中发挥作用以减少您的测试工作,联系作者把这个网络研讨会(24:27)

参考文献