当前位置: 首页 > 专利查询>微软公司专利>正文

用于静态分析的中间表示结构制造技术

技术编号:7245505 阅读:174 留言:0更新日期:2012-04-11 18:40
一种用于静态分析的中间表示结构。对源或程序代码的中间表示的分析。访问并静态地分析源或程序代码的初始中间表示的初始版本。对于该初始版本的一个或多个部分,分析组件查询提供了与该部分相对应的补充中间表示的分析时间解决组件。该补充的中间表示提供了有关该部分的进一步的清晰性,并且还被分析。如果找到缺陷,就报告它们。

【技术实现步骤摘要】

本申请涉及对中间表示的静态分析。
技术介绍
为了生成高质量的软件程序,对软件程序的功能性进行测试和分析是非常重要的。动态分析涉及在精心选择的实例上实际运行程序以验证该程序的真实行为。然而,执行动态分析并不是经常可行的,特别是当程序将运行的环境的个体性未知或变化时。仅当程序完成(可能使用短(stub)类和函数)并能运行时才进一步执行动态分析。静态分析在不运行源或程序代码的情况下来对它们进行检查。路径敏感的数据流分析试图彻底且准确地预测在抽象域上的每条路径。这对诊断例如安全或可定域性之类的问题非常有用。在这种路径敏感的数据流分析中,被称为“客户端”的组件可以收集针对该客户端适于检测的问题而特别定义的数据。给予客户端一个中间表示的程序,它由程序语句和控制流边组成。客户端随后为给予输入状态的每个语句计算输出状态。然而,一些函数的中间表示可以丢失、太过复杂或类属的,使得客户端做出或多或少的精确假设,这会导致检测到错误的缺陷(“噪声”),以及漏检真正的缺陷。有时,每次仅分析整个程序的一部分以使得分析可缩放。在这种情况中,丢失外部组件会使得工具过度近似可能的程序行为、引导它们找到错误的缺陷(“噪声”)或丢失真正的缺陷。例如,对外部定义的类的属性的设置和取得在工具想到的属性的值可能不同于先前在相同缺陷路径上设置的属性的值时会引起噪声。对频繁使用的具有公知的行为的外部组件,例如.Net或STL数据结构来说,通常具有太过复杂并且太过庞大而无法完整包括在分析中的代码。然而,如果分析完全通过例如假设任何都可能作为调用外部应用程序接口(API)的结果来近似它们,则它们将引起大量的噪声(或真正缺陷的漏检)。例如,C++STL映射通常被实现为平衡树。要从各种操作的复杂结构中引导出插入(“a”,l),其后是检索(“a”)返回1(假设没有其他代码同时运行)是异常困难的。. Net形式的通用函数参数化中间表示,其中语句被依据类型来参数化。这样的中间表示通常具有类属相关的语句,它们可以取决于具体的实例化而具有不同的含义。例如, 创建参数化类型的对象对于具有参考类型的实例化来说意味着分配堆对象(heap object) 和调用构造函数,而对于具有值类型的实例来说则意味着创建和初始化栈变量。随后,强制工具进入在对经实例化的类属API的每次调用时取决于具体的实例化来理解类属相关的语句的含义的复杂逻辑。
技术实现思路
在此描述的至少一个实施例涉及对源或程序代码的中间表示的分析。根据一个实施例,访问并静态地分析源或程序代码的初始表示的初始版本。对于该初始版本的一个或多个部分,分析组件查询提供了对应于该部分的补充中间表示的分析时间解决(analysis-time resolution)组件。该补充中间表示提供了有关该部分的进一步的清晰性,并且还被分析。如果找到缺陷,就报告它们。根据一个实施例,分析时间解决组件从静态地分析程序的中间表示的分析组件接收查询。分析时间解决组件访问有关程序的信息,所述信息被用于生成程序的补充中间表示,该补充中间表示能够更容易被用于分析所述程序的运作。本
技术实现思路
并不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。附图说明为了描述能够获得上述和其它优点和特征的方式,各实施例的更具体的描述将通过参考各附图来呈现。可以理解,这些附图只描绘了样本实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加属性和细节来描述和解释各实施例,在附图中图1示出可用于采用此处所描述的各实施例的示例计算系统;图2示出在其中使用中间表示来静态地分析代码并在其中向分析时间解决组件查询补充中间表示的环境。图3说明了用于静态地分析源或程序代码的中间表示的方法的流程图。图4示出分析时间解决组件通过生成补充的中间表示来支持对源或程序代码的静态分析的方法的流程图。具体实施例方式根据在此描述的实施例,描述了对源或程序代码的中间表示的分析。访问并静态地分析源或程序代码的初始中间表示的初始版本。对于该初始版本的一个或多个部分,分析组件查询提供了对应于该部分的补充中间表示的分析时间解决组件。该补充的中间表示提供了有关该部分的进一步的清晰性,并且还被分析。如果找到缺陷,就报告它们。首先, 将参考图1来描述关于计算系统的某些介绍性讨论。然后,将参考图2至4来描述静态分析的实施例。首先,参考图1来描述关于计算系统的介绍性讨论。计算系统现在越来越多地采取多种多样的形式。计算系统可以例如是手持式设备、电器、膝上型计算机、台式计算机、大型机、分布式计算系统,或者甚至通常不被视为计算系统的设备。在本说明书以及权利要求书中,术语“计算系统”被广义地定义为包括包含至少一个处理器以及其上能含有可由处理器执行的计算机可执行指令的存储器的任何设备或系统(或其组合)。存储器可以采取任何形式,并可以取决于计算系统的特性和形式。计算系统可以分布在网络环境中,并可包括多个组分计算系统。如图1所示,在其最基本的配置中,计算系统100通常包括至少一个处理单元102 和存储器104。存储器104可以是物理系统存储器,该物理系统存储器可以是易失性、非易失性、或两者的某种组合。术语“存储器”在此也可用来指诸如物理存储介质等非易失性大容量存储。如果计算系统是分布式的,则处理、存储器和/或存储能力也可以是分布式的。 如此处所使用的那样,术语“模块”或“组件”可以指在计算系统上执行的软件对象或例程。 此处所描述的不同组件、模块、引擎,以及服务可以实现为在计算系统上执行的对象或进程5(例如,作为分开的线程)。在随后的描述中,参考由一个或多个计算系统执行的动作描述了各实施例。如果这样的动作是以软件实现的,则执行动作的相关联计算系统的一个或多个处理器响应于已经执行了计算机可执行指令来引导计算系统的操作。这样的操作的示例涉及对数据的操纵。计算机可执行指令(以及被操纵的数据)可以存储在计算系统100的存储器104中。 计算系统100还可包含允许计算系统100例如通过网络110与其他消息处理器通信的通信信道108。计算系统100还可以包括用于将用户界面显示给用户的显示器112。如以下更详细讨论地,本专利技术的各实施例可包括或利用包括诸如例如,一个或多个处理器和系统存储器之类的计算机硬件的专用或通用计算机。本专利技术范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。 这些计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本专利技术的各实施例可包括至少两种完全不同的计算机可读介质计算机存储介质和传输介质。 计算机存储介质包括RAM、ROM、EPROM、CD-ROM或其他光盘存储,磁盘存储或其他磁存储设备,或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链接。当信息通过网络或另一个通信连接(硬连线、无线、或者硬连线或无线的组合)传输或提供给计算机时,该计算机将本文档来自技高网
...

【技术保护点】

【技术特征摘要】
...

【专利技术属性】
技术研发人员:A·格林高泽H·K·罗德
申请(专利权)人:微软公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术