健壮性和上下文代码验证:

第二部分:语境验证

作者:Anirban Gangopadhyay和Ram Cherukuri

第一部分在这两部分系列中,我们讨论了稳健性代码验证,这是一种方法,您可以在其中验证您的代码单位的代码单位。我们概述了一些例子,我们讨论了使用这种方法的利弊。

在这篇文章中,我们将讨论上下文代码验证,在该验证中,您将在代码库的上下文中验证您的代码单元,该单元将被集成到代码库中。这篇文章将使用与上一篇文章相同的例子,向您介绍上下文代码验证背后的概念,然后概述使用这两种类型的代码验证(健壮性和上下文)的最佳实践。

在上下文代码验证中,需要进行一些初始设置——您必须为正在验证的代码提供一些上下文。例如,你必须提供:

  • 输入变量的合理范围。
  • 手动存根表示未定义的功能。
  • 主要功能调用函数的顺序,以便在其他人之前调用一些。(如果您没有提供实际情况,这是必要的主要的功能。)

但害怕没有。虽然它听起来像是很多工作前面,但这是你的单位的一次性设置。你有什么回报?您有更少的潜在错误来审查。让我们从稳健性代码验证帖子中采取相同的例子。这次,在验证之前,我们在PolySpace中使用可用选项®下载188bet金宝搏产品为验证提供上下文。

向输入提供上下文

假设你知道num1.num2.不能等于。它们都不能超过32位整数的范围。您可以将此信息指定给验证软件。PolySpace产下载188bet金宝搏品允许您通过数据范围规范界面执行此操作,您可以在其中指定精确的输入范围。

这是验证相同的结果。这次,它已经指定了num1.num2.在范围内[100年200年……]和[10 0…] 分别。正如预期的那样,没有出现划分和溢出错误。PolySpace用户界面中的代码显示为绿色,表示软件已证明缺少这些错误。

鲁棒性和上下文代码验证

验证结果。

为未定义的函数提供上下文

假设你知道checkDenominator正如它的名字所暗示的那样:它检查分母的值,但不改变它。Polyspace产下载188bet金宝搏品允许您通过数据范围规范接口。

这是验证相同的结果。这次,它已经指定了checkDenominator不改变存储在地址中的值。正如所预期的那样,未显示归零错误的划分。工具提示在该师期间,请讲述DEN仍在范围内[1 ... 3],就像初始化时一样。

数据范围规范接口

数据范围规范接口。

是的,有时你必须尽力猜测输入范围。但如果您的投入代表现实世界中的数量,您或客户将对他们的范围有一个坚实的想法。一旦您为这些范围验证了代码,您可以将它们作为单位的安全范围文档。如果有人在这些范围内使用您的单位,他或她完全以他或她自己的风险为行为。

记住:有了情境验证,你(或你的上司)脑海中总会潜藏着那些“如果……会怎么样”的想法。你可能会问:

  • 如果上下文更改了什么?
  • 如果您不了解您的单位可能被重用的所有上下文怎么办?毕竟,我们要求您尽早验证代码。
  • 如果认证要求要求您有某些单位验证所有可能性的单位怎么办?您可能必须提出一份报告,说明您的尽职调查。

在健壮性和上下文代码验证之间选择的最佳实践

在开始为验证指定上下文之前,最佳实践可能是后退一步,问以下问题:

  • 您的申请有多重要?

如果您的代码是用于关键应用程序的,那么如果您能够确保单元的健壮性,您和代码的用户晚上会睡得更好。对代码执行健壮性验证可能会更好。

否则,即使你为你的单位记录了所有的安全范围,你仍然给其他人留下了不阅读或遵循你的指示的空间。健壮性验证是一种保护代码不受任何环境影响的方法。

此外,您可能迟早要满足认证要求。如果你正在对你的单元进行健壮性验证并修复或证明所有错误,那么你就领先了一步。

  • 您是否知道您的单位的整套要求?

您能写下您的单位互动的每个其他单元的详细规格吗?您知道您的单位将收到的完整输入范围吗?如果没有,您将更好地验证您使用上下文代码验证的所有可能性的代码。

您还可以采用健壮性和上下文验证相结合的方法,为某些变量提供范围,而不为其他变量提供范围。

  • 您的代码是否有多大可能重用?

您正在编写一个可以在许多上下文中调用的库函数吗?您是否在为将来要继承的类编写定义?如果是这样,理想情况下应该对代码执行健壮性验证。

您的代码越强大,您将来更容易重复使用它。如果在狭窄的上下文中验证代码,则严重限制其可重用性。如果有人打算在该狭隘的上下文之外重复使用您的代码,他必须重新运行代码上的验证。

一旦回答了这些问题,就可以设计适合自己需求的验证策略。最终,你的策略将是绝对安全与充分利用时间之间的折衷。Polyspace产下载188bet金宝搏品可以帮助您识别代码的弱点,并由您决定提供多少上下文。