鲁棒性和上下文代码验证

第一部分:鲁棒性验证

由Anirban Gangopadhyay和Ram Cherukuri

这是其中一个两部分概述代码验证方法的系列。

我们从一个问题开始:我应该在软件开发的哪个阶段验证我的代码?

答案很简单。在编译它后,您应该验证它,当您的思想中的代码是新鲜的。一旦您示出了潜在的错误,审查和修复这些错误就可以几乎微不足道。在工作流程中的阶段之后,修复错误永远不会变得更容易。

如果您遵循此方法,则最有可能验证代码单位。该装置可能会集成到开发周期中的现有代码库中。波尔盖斯®下载188bet金宝搏产品允许您以两种不同的方式验证:通过稳健验证,您可以在其中验证您的单位,或通过上下文验证,您可以在其余代码库的上下文中验证您的单元。在以下两篇文章中,我们提供了一些指南,可以帮助您决定采取哪种方法。

但首先,每种方法都有什么差异?让我们从稳健验证开始。

在稳健性验证中,PolySpace产品验证您的单位是否具有稳健(即,对于所有下载188bet金宝搏输入,未定义功能,函数调用序列的某些错误是安全的。如果您遵循此方法,则在代码集成和测试期间不会出现新的错误。如果您查看并修复了PolySpace产品标记的所有错误,则您不必再次查看该单元(文件或函数)。下载188bet金宝搏

让我们用一些简单的例子说明这种行为。

对所有投入的鲁棒性

示例显示num1和num2是函数dividdebydifference的输入。

在此示例中,Num1和Num2输入到该功能dividebydifference.除了它们的数据类型,Polyspace无法确定其他任何信息num1.num2来自此代码。因此,它考虑了所有可能的值int多变的:

  • 操作的结果num1 - num2.num / den.可以超过允许的价值int多变的。因此,PolySpace警告潜在的溢出在两个操作。
  • num1.可以等于num2.因此,Polyspace警告可能被零除的情况除法错误。

然而,一旦Polyspace产品在你的代码中指出下载188bet金宝搏了这些漏洞,你就可以通过采取适当的行动使你的函数更加健壮。例如,在上面的示例中,可以设置检查以防止溢出和除零。

对所有未定义功能的鲁棒性

假设您的代码单元调用单元外部的函数,并且/或者您没有函数定义。如何确保在定义函数之后,代码中不会出现新的运行时错误?您可以使用健壮性方法。

示例示例在声明期间在1和3之间分配值。

在上面所示的示例中,den在声明期间在1到3之间分配值。但是,它的地址已通过支线机可能会发生变化支线机.因为定义支线机Polyspace产品考虑的可能性是下载188bet金宝搏den可以改变,可以在范围内具有任何值int多变的。因此,它警告说,该划分可能会导致划分零误差。

然而,一旦Polyspace的产品指出了这个错误下载188bet金宝搏,你就可以保护这个划分,例如,通过传递den支线机按价值而不是通过指针。现在,该划分操作是安全的,无论的定义如何支线机可能。

通过按价值而不是通过指针来保护划分。

从用户的角度来看,健壮性验证也很有吸引力。使用这种方法设置验证需要更少的工作。在提供了源文件和目标设置之后,可以继续运行验证。默认设置的目的是根据所有输入、函数定义等验证代码。

因此,健壮性验证是一种方法,不是吗?在实践中,你必须权衡花在设置上的时间和花在审查大量错误上的时间。然而,使用鲁棒性方法可能会导致太多的潜在错误而无法检查。

为了在稳健性验证期间发现所有错误,PolySpace产品对输入变量等未知来进行广泛的假设。下载188bet金宝搏涉及这些未知数的大多数业务可能会失败。因此,您可以在允许的时间内进行评论更多的潜在错误。

下一个帖子说明解决此问题的另一种验证方法(称为上下文代码验证)。