鲁棒性和上下文代码验证
第一部分:鲁棒性验证
由Anirban Gangopadhyay和Ram Cherukuri
这是其中一个两部分概述代码验证方法的系列。
我们从一个问题开始:我应该在软件开发的哪个阶段验证我的代码?
答案很简单。在编译它后,您应该验证它,当您的思想中的代码是新鲜的。一旦您示出了潜在的错误,审查和修复这些错误就可以几乎微不足道。在工作流程中的阶段之后,修复错误永远不会变得更容易。
如果您遵循此方法,则最有可能验证代码单位。该装置可能会集成到开发周期中的现有代码库中。波尔盖斯®下载188bet金宝搏产品允许您以两种不同的方式验证:通过稳健验证,您可以在其中验证您的单位,或通过上下文验证,您可以在其余代码库的上下文中验证您的单元。在以下两篇文章中,我们提供了一些指南,可以帮助您决定采取哪种方法。
但首先,每种方法都有什么差异?让我们从稳健验证开始。
在稳健性验证中,PolySpace产品验证您的单位是否具有稳健(即,对于所有下载188bet金宝搏输入,未定义功能,函数调用序列的某些错误是安全的。如果您遵循此方法,则在代码集成和测试期间不会出现新的错误。如果您查看并修复了PolySpace产品标记的所有错误,则您不必再次查看该单元(文件或函数)。下载188bet金宝搏
让我们用一些简单的例子说明这种行为。
对所有投入的鲁棒性
在此示例中,Num1和Num2输入到该功能dividebydifference
.除了它们的数据类型,Polyspace无法确定其他任何信息num1.
和num2
来自此代码。因此,它考虑了所有可能的值int
多变的:
- 操作的结果
num1 - num2.
和num / den.
可以超过允许的价值int
多变的。因此,PolySpace警告潜在的溢出在两个操作。 num1.
可以等于num2
.因此,Polyspace警告可能被零除的情况除法错误。
然而,一旦Polyspace产品在你的代码中指出下载188bet金宝搏了这些漏洞,你就可以通过采取适当的行动使你的函数更加健壮。例如,在上面的示例中,可以设置检查以防止溢出和除零。
对所有未定义功能的鲁棒性
假设您的代码单元调用单元外部的函数,并且/或者您没有函数定义。如何确保在定义函数之后,代码中不会出现新的运行时错误?您可以使用健壮性方法。
在上面所示的示例中,den
在声明期间在1到3之间分配值。但是,它的地址已通过支线机
.窝
可能会发生变化支线机
.因为定义支线机
Polyspace产品考虑的可能性是下载188bet金宝搏den
可以改变,可以在范围内具有任何值int
多变的。因此,它警告说,该划分可能会导致划分零误差。
然而,一旦Polyspace的产品指出了这个错误下载188bet金宝搏,你就可以保护这个划分,例如,通过传递den
到支线机
按价值而不是通过指针。现在,该划分操作是安全的,无论的定义如何支线机
可能。
从用户的角度来看,健壮性验证也很有吸引力。使用这种方法设置验证需要更少的工作。在提供了源文件和目标设置之后,可以继续运行验证。默认设置的目的是根据所有输入、函数定义等验证代码。
因此,健壮性验证是一种方法,不是吗?在实践中,你必须权衡花在设置上的时间和花在审查大量错误上的时间。然而,使用鲁棒性方法可能会导致太多的潜在错误而无法检查。
为了在稳健性验证期间发现所有错误,PolySpace产品对输入变量等未知来进行广泛的假设。下载188bet金宝搏涉及这些未知数的大多数业务可能会失败。因此,您可以在允许的时间内进行评论更多的潜在错误。
下一个帖子说明解决此问题的另一种验证方法(称为上下文代码验证)。