制定语义基线的制作方法

文档序号:9529242阅读:667来源:国知局
制定语义基线的制作方法
【专利说明】制定语父基线
[000。 背景
[0002] 由程序开发者开发的计算机程序常常相对较大和复杂。例如,操作系统的源代码 可包括几十万到几百万条代码,其中代码的不同部分由不同的开发者在不同的时间帖上写 出。由于开发者通常无法通过源代码推测所有可能的执行,在程序的运行时可发生无法预 料的错误。例如,某些变量值、事件、执行路径、其一些组合等可使得程序在被执行时按不期 望/不合需的方式操作(例如,该程序包括潜在的隐错)。为了检测隐错,已开发出了静态 分析和验证工具。
[0003] 静态分析和验证工具分析计算机可执行代码W标识程序执行期间可发生的潜在 隐错,诸如空指针异常、除W零错误、数组越界错误等等。在某些情况下,被提供警告的开发 者可希望忽略运样的警报,因为运些隐错可能是伪造的或者不值得修复(例如,修复隐错 可导致程序中更严重的问题)。随后,进一步,开发者可希望使运些"旧"警告被抑制,因为 开发者已经审阅了运些警告,并且重新提供相同的警告是多余的。换言之,抑制警告可允许 开发者仅被通知由向程序添加新特征引起的问题。
[0004] 使用常规的静态分析和验证工具,开发者的选项为1)向代码添加假设语句W抑 制每一个不期望的警告;或者2)经由属性或警报过滤文件来抑制警告。运些方法具有许多 缺点。例如,第一选项允许开发者作出显式的假设,但运仅在运样的假设被开发者感兴趣的 情况下才是有利的。此外,插入假设要求与由该工具发出的开发者期望抑制的警告的数目 成比例的人工努力。此外,在作出对程序的改变时,开发者必须人工地重构任何假设。关于 W上提到的第二选项,各警告可通过警告消息、警告类型或警告位置之间的句法匹配的方 式来抑制。由此,例如,开发者可指示在程序的新版本被分析时,要抑制在程序的行i处的 任何警告。
[0005] 更具体地,开发者可在对警告进行人工检查之后添加抑制属性(或警报过滤文件 中的条目);然而,运样的基于句法的抑制可能十分脆弱,因为对程序的小改变可导致句法 匹配失败。失败的抑制可随后导致重新报告已经被开发者归类为虚假的警报,由此导致混 淆和恼怒。此外,使用句法匹配可无意地抑制事实上确实为新的警告(例如,由对程序的修 订引起的警告)。例如,基于行的抑制策略可期望地抑制与程序的行i处的断言失败有关的 所有警告。因此,在原始程序中可抑制基于行i处的断言a。的警报。然而,如果开发者在程 序的行i处插入了一新的且可能失败的断言ai,由此使a。向后移位到行i+1,则关于a1的 失败的警告将被(错误地)抑制,而关于a。的失败的警告将被(错误地)报告。
[0006] 概述
[0007]W下是在本文更详细描述的主题的简要概述。本概述不旨在成为关于权利要求的 范围的限制。
[0008] 本文中描述了设及制定语义基线的各种技术,制定语义基线指的是根据对计算机 可执行程序中的警告的起因的语义理解来抑制运样的警告。更具体地,可接收计算机程序 (基线程序)的第一版本,并可在其上执行静态分析。对基线程序的静态分析即对运样的计 算机程序的语义分析导致标识出在执行该程序时可发生的可能隐错。当标识出隐错时,可 向开发者提出警告,其中示例性警告可包括向开发者指示:在执行基线程序时可发生空指 针异常、在执行基线程序时可发生除W零错误、在执行基线程序时可发生数组越界错误等 等。每一标识出的警告对应于基线程序中的相应位置。
[0009] 此外,对于每一标识出的警告,可推断出相应的语义条件。推断出的语义条件为W 下两种类型之一 :1)充分条件;或2)必要条件。充分条件保证当满足运样的条件时,基线 程序将到达非错误状态。必要条件保证当不满足运样的条件时,基线程序将到达错误状态。 语义条件可W是例如变量具有大于阔值的值、变量具有小于阔值的值、循环的迭代数限于 为某一值等等。
[0010] 随后,开发者可指示基于对基线程序的静态分析将抑制针对基线程序的至少一个 警告输出发生,使得被认为是虚假的或不值得开发者修复的警报不会随着开发者对基线程 序作出了改变而被重新报告给开发者。由此,开发者可指示她仅希望被提供由对基线程序 的修改引起的潜在错误。此后,可接收计算机程序的第二版本(新程序),其与基线程序不 相同。目P,该新程序W某种方式为基线程序的更新。
[0011] 针对基线程序推断出的相应条件的假设可随后被插入到新程序中的相应合适位 置处。当静态分析和验证工具分析该新程序时,该分析工具可读取并理解运些语义条件的 假设;运样的条件可用于抑制基线程序中的旧警告(即期望被指示为由开发者抑制的警 告)。然而,仍将由开发者对基线程序作出的修改所引起的警告提供给开发者,W由此向开 发者提供修复新隐错的机会。
[0012] W上概述呈现了简化概述,W提供对本文讨论的系统和/或方法的一些方面的基 本理解。本概述并不是对此处所讨论的系统和/或方法的全面综述。并不旨在标识关键/ 重要元素,也不描绘运样的系统和/或方法的范围。其唯一目的是W简化形式呈现一些概 念,作为稍后呈现的更详细说明的序言。
[0013] 附图简述
[0014]图1是促成将正确性的条件的假设插入计算机可执行程序的示例性系统的功能 框图。
[0015] 图2示出了正确性条件提取的示图。
[0016] 图3示出条件推断器组件的功能框图,该条件推断器组件被配置成在由静态分析 和验证工具进行分析时推断使得基线程序中的警告被抑制的正确性条件。
[0017] 图4是示例性插入器组件的功能框图,该插入器组件被配置成将推断出的正确性 条件的假设插入计算机可执行程序中。
[0018] 图5是示出用于将正确性条件的假设插入计算机可执行程序的示例性方法的流 程图。
[0019] 图6是示出供静态分析和验证工具抑制先前分析的警告输出的示例性方法的流 程图。
[0020] 图7是示例性计算系统。
[0021] 详细描述
[0022] 现在参照附图来描述设及计算机可执行程序中的警告抑制的各种技术,其中在全 部附图中相同的附图标记用于指代相同的元素。在W下描述中,为解释起见,阐明了众多具 体细节W提供对一个或多个方面的全面理解。然而,显然运(些)方面可W在没有运些具 体细节的情况下实施。在其他实例中,w框图形式示出公知的结构和设备w便于描述一个 或多个方面。另外,要理解,被描述为由某些系统组件执行的功能可由多个组件执行。
[0023] 类似地,例如,一组件可被配置成执行被描述为由多个组件实现的功能。
[0024] 此外,术语"或"意指包括性"或"而非互斥性"或"。目P,除非另有指定或从上下文 显而易见,否则短语"X采用A或B"意指任何自然的包括性排列。旨P,短语"X采用A或B" 藉由W下实例中的任何实例得到满足:X采用A;X采用B;或X采用A和B两者。另外,本 申请中和所附权利要求书中所使用的冠词"一"和"一个"一般应被解释为是指"一个或多 个",除非另有指定或从上下文可W清楚指的是单数形式。
[00巧]此外,如本文所使用的,术语"组件"和"系统"旨在包含用使得在被处理器执行时 执行特定功能的计算机可执行指令配置的计算机可读数据存储。计算机可执行指令可包括 例程、功能等等。还要理解组件或系统可W位于单个设备上或跨若干设备分布。另外,如此 处所用的,术语"示例性"旨在表示用作某些事物的图示或示例,而不意图指示优选。
[0026] 本文中描述了制定语义基线的概念。"制定基线"指的是制定针对由静态分析和验 证工具报告的警报/警告的基线。具体地,在给定程序的两个版本P和P'的情况下,基线 问题设及仅向用户报告P'中引入的新警告。在高层面上,制定语义基线设及提取抑制P中 的警告的正确性条件W及将运样的条件注入到P'中。因此,制定语义基线掩盖了P'中与P 中的警告具有相同语义起因的警告。如将在本文中描述的,用于跨程序版本条件提取和注 入的基于抽象解读的框架来制定语义基线。
[0027] 现参考图1,示出了促成从基线程序推断正确性条件并将运样的正确性条件的假 设注入基线程序的后续版本的示例性系统100。系统100包括数据存储设备102,该数据存 储设备102保持计算机可执行程序104的第一版本(基线程序)。数据存储设备102可W 是任何合适的存储设备,诸如但不限于硬盘驱动器、存储器、闪存驱动器、盘等等。系统100 还包括分析器工具106,该分析器工具106被配置成对计算机可执行程序执行静态分析和 验证。例如,分析器工具106可被包括在集成开发环境中。分析器工具106在分析基线程 序时可执行对基线程序的深度语义分析W标识其中的可能隐错。最后,分析器工具106包 括静态分析器组件108,该静态分析器组件108对基线程序执行第一静态分析。静态分析器 组件108可基于对基线程序的第一静态分析而标识出多个警告110,并使得运样的警告被 保持在数据存储设备102中。警告110中的每一警告可对应于基线程序中的相应位置(代 码行)。示例性警告可包括例如空指针异常、除W零错误、数组越界警告、违反由基线程序的 开发者提出的断言合约等等。
[0028] 分析器工具106还可包括条件推断器组件112,该条件推断器组件112为警告110 中的每一警告推断对应的正确性条件。
[0029] 类似地,当基线程序中假设了对应于某警告的正确性条件时,该正确性条件可在 静态分析器组件108对基线程序执行静态分析时使得该警告被抑制。
[0030] 数据存储设备102还可包括数据库114,并且由条件推断器组件112推断出的正 确性条件116可被保持在数据库114中。一般来说,正确性条件116是基线程序的周围环 境(例如,调用程序、其他方法、本机调用、物理环境等)应当满足的条件,否则在执行基线 程序中可发生错误。
[0031] 基线程序的开发者可指示期望抑制警告110中的至少一个警告发生,使得在开发 者修订基线程序时仅向开发者提供由对基线程序的修订引起的新警告。
[0032] 分析器工具106还包括接收器组件118,该接收器组件118从数据库114接收(由 条件推断器组件112推断出的)正确性条件。分析器工具106还包括插入器组件120,该插 入器组件120将该条件的假设插入程序122的第二版本(被称为新程序)。目P,插入器组件 120将假设的条件插入该新程序,使得静态分析器组件108在对该新程序执行静态分析时 将该假设的条件124考虑在内。因此,抑制了从基线程序向新程序传播的"旧"错误,同时 向开发者126提供由新程序中包括的修订引起的"新"警告。在示例性实施例中,插入器组 件120可在新程序中的方法调用处插入某条件的假设。在另一示例中,插入器组件120可 在新程序中的功能入口点处插入某条件的假设。分析器工具106可使得在计算设备的显示 屏128上向开发者126呈现运样的新警告。随后,开发者126可选择是否修复运些新存在 的警告。
[0033]由此,静态分析器组件108可对新程序执行第二静态分析,其中该新程序包括与 在采取对基线程序的第一静态分析时标识出的相应警告110相对应的经假设的条件124。 因此,如果静态分析器组件108向开发者126输出一警告,并将运样的警告显示在显示屏 128上,则运样
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1