随机码生成的制作方法

文档序号:6554429阅读:309来源:国知局
专利名称:随机码生成的制作方法


详细描述参考以下附图。
图1示出了可在其中实现随机码生成的网络环境。
图2示出了随机码生成的示例实现的操作流程。
图3示出了根据随机码生成示例实现的示例统计表。
图4示出了能够实现随机码生成的系统的示例。
具体实施例方式
此处描述了基于真实世界代码的随机码生成。
图1示出了可在其中实现随机码生成的示例网络环境。更具体地,客户机设备105、服务器设备110、“其它”设备115和数据源130中的任何一个能够进行如此处所述的随机码生成120。而且,设备105、110、115和130可以通过网络125彼此通信地耦合。从而,随机码生成120可以由设备105、110、115和130中的任何一个基于之前本地生成的或在设备105、110、115和130中任何其它设备上生成的方法来实现。
客户机设备105可以是各种常规计算设备中的至少一种,包括但不限于,台式个人计算机(PC)、工作站、大型计算机、因特网装置、机顶盒和媒体设备。而且,客户机设备105可以是能够通过有线和/或无线链路与网络125相关联的任何设备中的至少一种,包括但不限于,个人数字助理(PDA)、膝上型计算机、手机等。此外,客户机设备105可以表示各种数量的上述客户机设备和/或其组合。“其它”设备115也可以由客户机设备105的以上示例的任一个来实现。
服务器设备110可以向客户机设备105或“其它”设备115提供各种数据和/或功能的任一种。数据可以是公众可用的或者受限的,例如仅限于某些用户或仅当支付了适当的订阅或许可费。服务器设备110可以是网络服务器、应用程序服务器、网络刀片服务器中的至少一种,或者是其任何组合。通常,服务器设备110是作为内容来源的任何设备,而客户机设备105是通过网络125或者通过离线介质接收这样的内容的任何设备。然而,根据此处所述的示例实现,服务器设备105和客户机设备110可以互换地作为发送主机或接收主机。“其它”设备115也可以由服务器设备110的上述示例中的任何一个实现。
“其它”设备115还可以是能够根据此处所述的一个或多个示例进行随机码生成120的任何设备。即,“其它”设备115可以是在受管执行环境或测试环境中能够基于至少一个其它已知应用程序、程序、函数或可编程和可执行代码的其它组合的采样来随机生成方法或其部分的任何可使用软件的计算或处理设备。这样,“其它”设备115可以是含有操作系统、解释器、转换器、编译器的计算或处理设备,或其上实现的受管执行环境。这些示例不旨在以任何方式限制,从而不应该以这样的方式解释。
网络125可以表示各种常规网络拓扑结构中的任一种,它可以包括任何有线和/或无线网络。网络125还可以利用各种常规网络协议中的任一种,包括公共和/或专有的协议。例如,网络125可以包括因特网、内联网或者一个或多个局域网(LAN)中的至少一部分。
数据源130可以表示各种常规计算设备中的任何一个,包括台式个人计算机(PC),它能够结合以面向对象的代码编写或不以面向对象的代码编写的应用程序、程序、函数或可编程和可执行代码的其它组合来进行随机码生成120。或者,数据源130也可以是工作站、大型计算机、因特网装置、机顶盒、媒体设备、个人数字助理(PDA)、膝上型计算机、手机等中的任何一个,它们能够向另一个工作站传输应用程序、程序或函数的至少一部分。而且,尽管数据源130可以是基于其可判定随机码生成120的应用程序、程序或函数的代码的来源,但是数据源130可被认为至少是由随机码生成120实现所得的方法或其部分的来源。不考虑实现,可以从数据源130向设备105、110和115的任一个发送可被用作随机码生成120的基础的已知方法、应用程序、程序或函数,作为通过网络125的在线通知的一部分或作为离线通知的一部分。
随机码生成120可以包括利用真实世界代码的(即,已知的)统计分类来随机生成在词法上有效且同样含有真实世界结构特征的代码(此后被称为“代码”)。这样,例如在测试环境中,可以通过接收和/或执行含有实际顾客应用程序(即,真实世界代码)的特征的随机生成的代码来测试处理组件,从而向该组件提供逼真的测试情形。反过来,该组件产生逼真的测试结果。而且,除了测试环境之外,当在非受管执行环境或受管执行环境中实现时,随机码生成120含有其它相关性。
图2示出了作为根据真实世界代码特征和性质的随机码生成120(见图1)的示例实现的操作流程200。
代码205至少指的是方法、应用程序、程序、函数或可编程和可执行代码的其它组合。根据至少一个示例,代码205可以是“真实世界代码”(即,已知的代码),包括中间语言(后文称为“IL”)或汇编语言。IL和汇编语言均可用作高级源代码和目标(即,机器可读)代码中间的中介。
然而,代码205不限于IL和汇编语言的示例。相反,为了实现随机码生成120,代码205可以用各种已知语言中的任何一种来编写,可对这些已知语言统计地采样多个特征中的至少一个。这样的特征可以包括代码205的语言所特有的词汇和构造性质。这样的词汇特征和构造性质的非限制示例可以包括方法结构、方法流程控制结构、方法数据流程、指令频率、对象类型使用、不安全代码使用、普通类型使用、循环使用、异常处理或框架使用。
构造器210可被视为可在其中实现随机代码生成120的至少一部分的组件或模块。与构造器210相关联的各种操作可以由采样器215和模型生成器220单独或者共同执行。或者,与构造器210相关联的操作可以由组件或模块自身或由组件和模块与其中包含或关联该模块的网络节点(即,由其中包含或关联构造器210的一个或多个处理器)协作来执行。在其它实现中,构造器210的操作,包括采样器215和模型生成器220的那些操作,可以被单独的或者彼此结合地实现为硬件、固件或硬件、固件和软件的组合。
而且,构造器210的组件或模块可以被提供为如图2所示的公共环境中的分离的组件或模块。然而,构造器210的至少一个替换实施例可将相应的组件或模块部署在分离的处理环境中。甚至,构造器210的组件或模块可以被提供为单个组件或模块。
采样器215可以例如从服务器设备110或数据源130(见图1)接收代码205。如上所述,可以用例如IL或汇编语言代码来提供代码205。通常,采样器215然后能够至少对于用于编写代码205的语言的前述词汇特征和构造性质来产生代码205的统计分类。更具体地,对作为代码205接收的任何应用程序、程序、函数或可编程和可执行代码的其它组合,采样器215能够产生指示关于代码205的例如变量、指令、结构、使用、规则等(包括但不限于,出现次数、百分比等)的统计表。而且,由采样器215产生的代码205的统计表可以是作为代码205接收的各个应用程序、程序、函数或可编程和可执行代码的其它组合的统计模型,或者是作为代码205接收的多个方法、应用程序、程序、函数或可编程和可执行代码的其它组合的总计统计模型。
模型生成器220可以利用从采样器215中接收到的前述统计表,来生成至少一个新的应用程序、程序、函数或可编程和可执行代码的其它组合。模型生成器220可以了解代码205的语言所特有的词汇特征和结构性质。从而,模型生成器220能够利用由采样器215所产生的统计表来指引用于随机生成代码的方法。更具体地,可以通过根据代码205的语言的结构性质安排代码205的语言所特有的词汇来随机生成代码的多个排列,所有这些都是在从采样器215接收到统计表的一个或多个模型之后判定的。
目标组件225可以是接收由构造器210,尤其是模型生成器220所随机生成的代码的组件或模块。目标组件225可以从在测试环境中接收由模型生成器220随机生成的代码中获益。即,取决于作为代码205接收至构造器210的方法、应用程序、程序、函数或可编程和可执行代码的其它组合的量,模型生成器220可以随机生成百万甚至十亿数量级的代码。这样,可以至少在词汇和结构方面将目标组件225展示给类似于真实世界代码的高数量级测试代码。
图3示出了根据依照真实世界代码特征和性质的随机代码生成120(见图1)的示例实现的示例统计表300。更具体地,统计表300可以表示在构造器210处接收的代码205的一个或多个词汇特征和结构性质的统计分类。
统计表300的列305示出示例词汇特征和结构性质的非限制性集合,包括方法结构305a、方法流程控制结构305b、方法数据流程305c、指令频率305d、对象类型使用305e、不安全代码使用305f、普通类型使用305g、循环使用305h、异常处理305i和框架使用305j。
列310、315、320和325可以表示列305中示出的前述词汇和结构特征的示例采样。例如,列310可以表示参数A的统计分类,参数A可以是作为代码205接收的单个实体的指定词汇特征或结构性质;列315可以是作为代码205接收的多个方法、应用程序、程序、函数或可编程和可执行代码的其它组合的参数A的总计。类似地,列320可以表示参数B的统计分类,参数B可以是作为代码205接收的单个实体的另一词汇特征或结构性质;而列325可以是作为代码205接收的多个方法、应用程序、程序、函数或可编程和可执行代码的其它组合的参数B的总计。当然,表300在结构和内容方面可以具有众多变化。这样,图3的表300仅作为代码205的统计分类的示例来呈现。
以下是可以在表300中至少按照计数和频率来采样的示例词汇特征和构造性质的非排他清单和描述。
方法结构305a对于代码205,方法结构305a的统计分类可以包括方法的大小;栈的深度;返回类型;形参(例如,简单类型、对象类型、无用单元收集类型(在受管执行环境中)、数组和值类型);实例类型;静态类型;外部方法的使用;外部字段的使用;特殊调用类型(例如,可变形参长度调用)或平台调用类型调用的使用。
内部方法控制流程结构305b对于代码205,内部方法控制流程结构305b的统计分类可以包括分支的使用;前向/后向分支的比率;条件分支的使用;循环的创建;以及异常处理流程控制(受管执行环境中)的使用。
内部方法数据流程305c,它涉及代码205中的类型流程的各方面对于代码205,内部方法数据流程的统计分类可以包括诸如关于单用途、多用途变量的统计量的传统编译器数据流程分析;单次赋值、多次赋值变量;输入参数至局部变量的流程;子方法返回数据至局部变量的流程;值传入局部变量至对子方法调用的参数的流程;来自局部变量的值传至流程控制决策的流程;来自局部变量的值传至返回类型的流程;取用的变量的地址;传入静态和实例变量的流程;从静态和实例变量传出的流程;以及栈空的点的数量和位置。
指令频率305d对于代码205,指令频率305d的统计分类可以包括特定指令的使用的数值采样;协同其它指令对特定指令的使用的采样;可验证和不可验证指令的平衡的采样;以及地址组成类型的采样。
对象类型使用305e对于代码205,对象类型305e的统计分类可以包括所使用对象的来源;以及所使用对象的类型,包括但不限于赋值、装箱/拆箱、访问、执行虚拟访问和普通类型。
不安全代码的使用305f对于代码205,不安全代码使用305f的统计分类可以包括关于代码205中不安全代码的细节,以及关于其地址解析的细节。
代码205中普通类型的使用305g。
循环细节305h对于代码205,循环细节的统计统计可包括循环控制变量;死循环;循环中的异常处理(受管执行环境中);循环中的抛出器;循环中的调用;以及从循环内部的数组访问。
异常处理(受管执行环境中)305i对于代码205,异常处理305h的统计分类包括对以下的描述过滤器;尝试的大小;捕捉的大小;结束的大小;方法大小的百分比;每一询问中的调用;以及来自局部变量/栈的数据进入异常处理的流程。
框架使用305j对于代码205,框架使用的统计分类可以包括装箱的描述;循环的描述;数组检验的描述;简单实例成员存取器的描述;类型强制转换的描述;复制对象的描述;局部定位器的描述;开关的描述;以及分解数组和调用的描述。
提供以上列出和描述的词汇特征和结构性质仅作为示例。表300的替换示例可以包括上述特征以及被认为对一种实现随机码生成120有意义的其它特征的各种组合。
图4示出了可在其中实现随机码生成120(见图1)的示例系统400。更具体地,系统400示出了在受管执行环境415中可以如何实现随机码生成120。以下通过参考图2和图3的元素来描述系统400。然而,提供系统400的这样的构造和配置仅作为示例,且不应被推断为以任何方式限制。
受管执行环境415可以为应用程序提供一个或多个例程以在操作系统中适当地执行,因为方法、应用程序、程序、函数或可编程和可执行代码的其它组合可能要求另一软件系统以便执行。因此,这样的代码可以调用一个或多个受管执行环境例程,这些例程可以驻留在应用程序和操作系统之间,而受管执行环境例程可以调用适当的操作系统例程。
受管执行环境被开发来增强在包括服务器、台式计算机、膝上型计算机以及移动处理设备的主机等越来越多的处理设备上的软件执行的可靠性。受管执行环境可以向运行在处理设备(例如,以上参考图1描述的设备105、110、115和130)上的应用程序提供抽象和服务层。受管执行环境还可以提供具有包括出错处理和自动存储器管理能力的这一应用程序。受管执行环境的示例可以包括Visual Basic运行时执行环境;用于运行例如Java例程的Java虚拟机运行时执行环境;或者用于在执行调用例程之前将例如Microsoft.NETTM编译为机器语言的公共语言运行库(CLR)。
如上参考图2描述的代码205可以指的是至少例如以IL或汇编语言编写的方法、应用程序、程序、函数或可编程和可执行代码的其它组合的一个或多个。
如上参考图2描述的构造器210可以指的是用于实现随机码生成120的至少一部分的一个或多个组件。根据非受管执行环境中的至少一个示例实现,在非受管执行环境中,构造器210可以访问数据源以接收代码205。或者,在受管执行环境中的至少一个示例可以包括构造器210访问执行引擎420来接收代码205。
执行引擎420至少在受管执行环境中可以指的是指示如何管理和操纵代码205的代码205的一部分。
不论构造器210如何接收代码205,构造器210可以实现示例进程200(见图2),通过该进程产生统计表300(见图3)。即,构造器210可以为作为代码205接收的一个或多个方法、应用程序、程序、函数或可编程和可执行代码的其它组合产生统计模型。该统计模型至少可以包括代码205的词汇特征和构造性质的分类。
构造器210还可以利用基于代码205的词汇特征和构造性质的统计表300,以通过根据在统计表300的一个或多个模型上判定的代码205所特有的构造性质安排词汇来随机生成多个代码的排列。
根据测试环境至少一个示例,在受管执行环境415中,构造器210然后可以将由构造器210随机生成的代码提交给编译器425。这样,通过经受由构造器210随机生成的无数可能的代码组合,可以测试编译器425处理代码的不同组合以及揭露程序设计隐错的能力。
编译器425可以被认为仅是可由构造器210生成的代码205的排列的得分的目标对象的一个示例。然而,代码随机生成可能有目的地(虽然不是排他地)旨在用于测试目的。因此,根据图4的至少一个替换示例,随机生成的代码的目标可以是受管执行环境415内的任何组件或模块,对其可以通过接收以与真实世界代码相同的方式读取和构造的随机生成的代码的得分(至少在百万的数量级上)来完成该有目的的测试。
测试器430可以指的是在非受管执行环境或受管执行环境415内收集编译器425或随机生成代码的替换目标对象的测试数据的组件或模块。
从而,通过根据词汇或语法和构造性质,随机生成以类似真实世界的方法、应用程序、程序、函数或可编程和可执行代码的其它组合构造的代码,非受管和受管执行环境中的测试均可以变得更有目的和更有效。
以上关于图1-4所述的示例可以在含有组件的计算环境中实现,组件包括但不限于,一个或多个处理器、系统存储器以及耦合各种系统组件的系统总线。而且,计算环境可以包括可被各种组件的任一个访问的各种计算机可读介质,且包括易失性和非易失性介质、可移动和不可移动介质。
此处可以在诸如由一台或多台计算机或其它设备执行的程序模块等的计算机可执行指令的通用语境中描述各种模块和技术。一般而言,程序模块包括例程、程序、对象、组件、数据结构等,用于执行特定任务或实现特定抽象数据类型。一般而言,程序模块的功能在各个实施例中可以按照所期望的方式组合或分布。
这些模块和技术的实现可以储存在某一形式的计算机可读介质上或通过其传输。计算机可读介质可以是能够由计算机访问的任何可用介质。作为示例,而非限制,计算机可读介质可以包括“计算机存储介质”和“通信介质”。
“计算机存储介质”包括以任何方法或技术实现的用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁带盒、磁带、磁盘存储或其它磁性存储设备、或能用于存储所需信息且可以由计算机访问的任何其它介质。
“通信介质”通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据。通信介质也包含任何信息传递介质。术语“已调制数据信号”指的是这样一种信号,其一个或多个特征以在信号中编码信息的方式被设定或更改。仅作为非限制性的示例,通信介质包括有线介质,诸如有线网络或直接线连接,以及无线介质,诸如声学、RF、红外线和其它无线介质。上述中任一个的组合也应包括在计算机可读介质的范围之内。
贯穿本说明书对“一个实施例”、“实施例”或“示例实施例”的引用指的是特别描述的特性、结构或特征被包含在本发明的至少一个实施例中。因此,使用这样的短语可以指的是多于仅一个实施例。此外,在一个或多个实施例中可以用任何合适方式组合所述特性、结构或特征。
然而,相关领域的技术人员可以认识到,可以无需一个或多个具体细节或可使用其它方法、资源、材料等来实现本发明。在其它实例中,没有详细示出或描述公知的结构、资源或操作,仅仅是为了避免模糊本发明的各方面。
尽管示出和描述了本发明的示例实施例和应用,但是可以理解,本发明不限于以上所述的精确配置和资源。可以对此处所揭示的本发明的方法和系统的安排、操作和细节进行对本领域技术人员显而易见的各种修改、改变和变化,而不背离所要求保护的本发明的范围。
权利要求
1.一种方法,包括基于采样的方法构造统计表;以及基于所述统计表的构造生成新方法。
2.如权利要求1所述的方法,其特征在于,所述构造是在受管执行环境中执行的。
3.如权利要求1所述的方法,其特征在于,所述采样的方法源于非受管执行环境。
4.如权利要求1所述的方法,其特征在于,所述统计表包括来自已知方法的一个或多个指定参数的总计。
5.如权利要求1所述的方法,其特征在于,所述统计表包括来自已知方法的数据的总计,所述数据包括涉及方法结构、方法流程控制结构、方法数据流程、指令频率、对象类型使用、不安全代码使用、普通类型使用、循环使用、异常处理或框架使用中的至少一个的数据。
6.如权利要求1所述的方法,其特征在于,所述生成包括根据所述统计表的构造汇编中间语言代码。
7.如权利要求1所述的方法,其特征在于,还包括将所述新方法发送至编译器。
8.一种含有一条或多条可执行指令的计算机可读介质,当读取所述指令时,使一个或多个处理器将已知方法采样至中间语言;创建所采样的方法的统计分类;以及基于所采样的方法的统计分类,生成所述中间语言的新方法。
9.如权利要求8所述的计算机可读介质,其特征在于,包括一条或多条可执行指令,使得所述一个或多个处理器还进行编译所述新方法。
10.如权利要求8所述的计算机可读介质,其特征在于,所述创建采样的方法的统计分类的一条或多条可执行指令还使所述一个或多个处理器将所述统计分类与为另一采样的方法创建的统计分类相结合,且创建所述新方法的一条或多条可执行指令还使所述一个或多个处理器基于所结合的统计分类来生成新方法。
11.如权利要求8所述的计算机可读介质,其特征在于,所述采样的方法的统计分类包括涉及方法结构、方法流程控制结构、方法数据流程、指令频率、对象类型使用、不安全代码使用、普通类型使用、循环使用、异常处理或框架使用中的至少一个的数据。
12.如权利要求8所述的计算机可读介质,其特征在于,所述一个或多个处理器在受管执行环境中处理所述一条或多条指令。
13.如权利要求8所述的计算机可读介质,其特征在于,所述一个或多个处理器在非受管执行环境中处理所述一条或多条指令。
14.一种测试器,包括为采样的方法构建统计模型的采样器;以及基于所述统计模型生成新方法的生成器。
15.如权利要求14所述的测试器,其特征在于,还包括将所述新方法转换成机器语言的编译器。
16.如权利要求14所述的测试器,其特征在于,所述采样器用于基于方法结构、方法流程控制结构、方法数据流程、指令频率、对象类型使用、不安全代码使用、普通类型使用、循环使用、异常处理或框架使用中的至少一个,为所述方法构建的统计模型。
17.如权利要求14所述的测试器,其特征在于,所述采样器用于在非受管执行环境中从源接收所述方法。
18.如权利要求14所述的测试器,其特征在于,所述采样器在受管执行环境中从执行引擎接收所述方法。
全文摘要
随机码生成包括利用真实世界代码的统计分类来随机生成词汇和结构上有效的代码。
文档编号G06F9/45GK1821963SQ20061000544
公开日2006年8月23日 申请日期2006年1月17日 优先权日2005年2月17日
发明者B·S·瓦兹沃斯 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1