CN102402481B - 异步程序代码的模糊测试 - Google Patents
异步程序代码的模糊测试 Download PDFInfo
- Publication number
- CN102402481B CN102402481B CN201110317876.5A CN201110317876A CN102402481B CN 102402481 B CN102402481 B CN 102402481B CN 201110317876 A CN201110317876 A CN 201110317876A CN 102402481 B CN102402481 B CN 102402481B
- Authority
- CN
- China
- Prior art keywords
- event
- source
- meeting point
- filter
- test
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3692—Test management for test results analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0751—Error or fault detection not based on redundancy
- G06F11/0754—Error or fault detection not based on redundancy by exceeding limits
- G06F11/076—Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Debugging And Monitoring (AREA)
Abstract
描述了异步程序代码的模糊测试。此处描述了将事件源、信道、处理器以及消费者表示为应用程序中的第一级实体的模糊测试系统。对与事件相关的实体进行抽象允许通过对来自应用程序内的事件进行插入、丢弃、重新排序以及延迟来进行模糊。这转变为定位受测试的区域以及以对称方式执行模糊的能力。在一些实施例中,模糊测试系统测试并发异步和基于事件的代码,并能够基于给定的统计分布来生成事件流。将事件、事件源、过滤器、以及汇点表示为第一级对象提供了对于事件处理器的简单访问,并有助通过在源和汇点之间引入事件过滤器来实现模糊。因此,模糊测试系统采用异步行为改进了应用程序和API的可测试性,并提供了用于将模糊测试引入这些应用程序中的统一框架。
Description
技术领域
本申请涉及模糊测试,尤其涉及异步程序代码的模糊测试。
背景技术
现代软件开发经常涉及异步编程。多核中央处理单元(CPU)、网络、分布式系统、传感器等等都导致了异步。这对应于增加了等级的基于事件的编程,其中每个异步实体通过引发事件来与其它实体交互。例如,鼠标移动生成封装光标位置的图形用户界面(GUI)事件;XmlHttpRequest调用的完成生成发出结果可用信号的事件;以及博客帖子的发布产生通知感兴趣方新内容可用的事件。通常,这些事件是不相关的。例如,对应于移动鼠标的GUI事件是独立于发出异步XmlHttpRequest调用完成的信号的事件而引发的。
测试基于事件的系统涉及验证程序是否表现得如预料中的由不相关的源进行而引发的事件一致。这是一个难题,因为对所有可能的排列进行验证呈现组合式的爆发。因此,测试器越来越依赖于模糊测试或模糊,这涉及随机生成来自受测试的应用程序外部的事件,并验证该应用程序是否按规定地响应。模糊测试可提供对于给定的工作量来说宽得多的覆盖,当预算和/或时间短缺时尤其有利。
模糊测试难以被引入某些应用程序。例如,应用程序可不提供用于挂钩事件源和汇点的简单的输入点。其它时候,容易产生某些类型的输入(例如,调用注册的事件处理器),但难以可靠地产生事件的顺序以测试记录的、延迟的、复制的、和/或丢失的事件。向应用程序引入模糊测试通常每次都被不同地处理,并且每个应用程序程序员可在在新的应用程序中再次执行模糊测试之前重复被执行过许多类型的工作。
发明内容
此处描述了将事件源、信道、处理器以及消费者表示为应用程序中的第一级实体的模糊测试系统。对与事件相关的实体进行抽象允许通过对来自应用程序内的事件进行插入、丢弃、重新排序以及延迟来进行模糊。这转变为定位受测试的区域以及以对称方式执行模糊的能力。在一些实施例中,模糊测试系统测试并发异步和基于事件的代码,并能够基于给定的统计分布来生成事件流。模糊测试系统将事件源连接到事件过滤器。每个过滤器通过将传输函数或转换应用于它的输入事件流来生成事件流。传输函数由测试程序员选择并且可延迟、记录、丢弃、选择子集、跳过、插入新事件等等。事件汇点是处理事件的元素。
将事件、事件源、过滤器、汇点表示为第一级对象在数个方面影响模糊。首先,它提供了对事件处理器的简便访问。模糊可从源经过过滤器流入汇点,或者可直接插入到过滤器。其次,它有助于通过引入源和汇点之间的事件过滤器来实现模糊。通过诸如插入和丢弃之类的操作,模糊测试系统可以对称方式模拟模糊尝试覆盖的大量的情况,包括应用程序如何处理表面上不相关的事件流之间的相关性和/或因果性。因此,模糊测试系统采用异步行为改进了应用程序和API的可测试性,并提供了用于将模糊测试引入这些应用程序中的统一框架。
提供本发明内容以便以简化的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
附图说明
图1是示出在一个实施例中的模糊测试系统的各组件的框图。
图2是示出一个实施例中模糊测试系统对事件进行过滤的处理的流程图。
图3是描述在一实施例中模糊测试系统生成来自接口约定的测试的过程的流程图。
图4是示出一个实施例中使用模糊测试系统的事件数据从源到汇点的流的方框图。
具体实施方式
此处描述了将事件源、信道、处理器以及事件汇点表示为应用程序中的第一级实体的模糊测试系统。该应用程序中的所有事件处理需要这些抽象。对与事件相关的实体进行抽象允许通过对来自应用程序内的事件进行插入、丢弃、重新排序以及延迟来进行模糊。这转变为定位受测试的区域以及以对称方式执行模糊的能力。在一些实施例中,模糊测试系统可通过对观察得到的集合的模糊来测试并发异步以及基于事件的代码,并能够基于给定的统计分布来生成事件流。
事件源生成第一级事件的流。例如,按键在每次它被按下时引发一事件;类似的,网络接收器在每次网络分组抵达时引发一事件。模糊测试系统将事件源连接到事件过滤器。每个过滤器通过将传输函数或转换应用于它的输入事件流来生成事件流。传输函数由测试程序员选择并且可延迟、记录、丢弃、选择子集、跳过、插入新事件等等。事件汇点是处理事件的元素。这些事件汇点将对事件作出反应的行为进行封装。这是作为测试主体的代码所驻留的地方。
将事件、事件源、过滤器、汇点表示为第一级对象在数个方面影响模糊。首先,它提供了对事件处理器的简便访问。经模糊的事件数据可从源经过过滤器流入汇点,或者可被直接插入到过滤器(例如,产生用于测试的伪源)。其次,它方便了通过引入源和汇点之间的事件过滤器来实现模糊。通过诸如插入和丢弃之类的操作,模糊测试系统可以对称方式模拟模糊尝试覆盖的大量的情况,包括应用程序如何处理表面上不相关的事件流之间的相关性和/或因果性。
模糊动作的特定示例是时机改变、展开事件、使事件在时间上更靠近、丢弃事件、将事件改变成例外、模拟过早中止、以及交换值。对于异步编程,问题与传统对输入的模糊相当不同,因为系统需要考虑时间的概念,但大多数同步API相对于输入个别输入元素的时间是不变的。模糊测试系统允许不仅操纵事件的内容,而且还允许操纵事件抵达时间中的时机和关系。因此,模糊测试系统采用异步行为改进了应用程序和API的可测试性,并提供了用于将模糊测试引入这些应用程序中的统一框架。
图1是示出在一个实施例中的模糊测试系统的各组件的框图。系统100包括事件抽象组件110、事件过滤器组件120、源接口组件130、汇点接口组件140、统计分布组件150、测试存储组件160、约定分析组件170以及模糊语法组件180。此处更详细地描述了这些组件中的每一个。
事件抽象组件110提供包裹了待测试的每个事件源和事件汇点的对象。对象提供能够被如一个或多个测试所指定那样操纵的每个源和汇点的第一级表示。在一些实施例中,组件提供IObservable接口和IObserver接口以表示事件源和事件汇点供测试,其中应用程序中的任何类可从IObservable接口和IObserver接口中继承。在一个实施例中,以下伪代码声明示出了这两个接口。
IObservable接口允许特定观察者订阅实现该接口的任何对象,诸如异步对象的集合。IObserver接口提供用于处理操纵的多个步骤(OnNext)、处理诸如例外之类的错误情况(OnError)、以及处理操纵的完成(OnCompleted)的功能。这些通用接口允许对各种类型的基于事件的软件代码的建模。
事件过滤器组件120管理在一个或多个事件源和事件汇点之间运行的一个或多个过滤器,以当事件经过源和汇点之间时修改事件。过滤器可操纵事件数据或时机。例如,过滤器可通过修改数据、用不同数据替换数据、改变后续事件的顺序、重复事件数据、减缓事件数据至事件汇点的传递、加速事件数据等等来操纵事件数据。测试程序员可编写测试来实现想要用于特定软件应用程序的任何类型的过滤器。作为另一示例,过滤器可通过使一个事件在另一个事件被传递时延迟、将事件传递延伸至接口约定所保证的阈值之外、比平常更快速地传递事件、修改依存的事件数据以在相关事件数据之前或之后到达等等来操纵事件时机。在异步软件组件中,测试事件时机可以与测试核心事件处理功能一样有用。时机问题经常是最难标识和解决的,并且具有用于修改事件时机和验证正确的应用程序行为的可重复的测试框架使得软件应用程序更强健。
源接口组件130通过统一接口将一个或多个事件源连接到事件过滤器,该统一接口从事件源接收事件数据并将事件数据提供给事件过滤器。源接口可包括一个或多个用于订阅事件源的功能,诸如此处所描述的订阅(Subscribe)功能。源接口组件130允许事件过滤器在事件数据抵达目标事件汇点前截取事件数据,使得事件过滤器可操纵或转换事件数据并将经修改的数据提供给事件汇点(或者在丢弃事件的例子中抛弃数据)。
汇点接口组件140通过统一接口将事件过滤器连接到一个或多个事件汇点,该统一接口允许过滤器将事件数据提供给事件汇点。汇点接口可包括一个或多个功能用于提供进行中的事件数据(例如OnNext)、错误情况(例如OnError)、以及流结束数据(例如OnCompleted)。汇点接口组件140允许事件过滤器向汇点提供符合特定测试的任何偏好的事件数据。事件数据可来自从一个或多个事件源或由测试创建的事件输入中截取的数据。
统计分布组件150为测试创建遵循确定的统计分布的伪随机事件数据。例如,测试作者可能想要对一个或多个事件类型中的一定比例进行模糊以确保对各种事件处理编程代码的期望的覆盖。统计分布组件150可基于关于一个或多个接口和接口约定以及其它因素有关的信息来自动确定适当的分布。可选地或另外地,测试作者可手动指定组件150的统计分布的比例或其它度量,以用于生成事件数据和/或事件数据转换。在一些实施例中,统计分布组件150可存储用于生成特定测试运行和分布的种子和其它信息,使得尽管是随机生成的,但特定运行可容易地重复以重新产生经标识的故障或其它问题。
测试存储组件160在数据存储中存储一个或多个测试。数据存储可包括一个或多个文件、文件系统、硬盘驱动器、存储区域网络(SAN)、数据库、基于云的存储服务、或其他存储设施。测试存储组件160可存储一个或多个事件过滤器、由可配置过滤器执行的事件转换、期望的结果、手动生成的输入数据、以及由测试作者确定的其它信息以供执行测试。测试存储组件160还可记录每个测试运行并存储与用于重新产生检测到的错误的每个测试运行有关的信息。
约定分析组件170自动生成一个或多个测试并基于接收到的接口约定对期望的结果进行验证。程序员经常定义接口所遵守的约定,以在用各种方式调用该接口时将期望的行为告诉接口的用户。例如,接口约定可指定特定方法不崩溃,而更详细的约定信息可包括所执行的语法(例如,OnCompleted跟在OnNext之后)、对于特定输入所预期的输出、预期的输入或输出的特定时间分布、确保的响应时间等等。约定分析组件170使用这一信息既可通过模糊输入事件数据(或具体地创建无效数据)创建测试,也可验证响应于经模糊的输入的行为是否遵守所指定的接口约定。组件170还使用约定信息来确定事件数据的统计分布以提供给统计分布组件150。在一些情况下,组件170可有意地生成不满足接口约定的事件的序列,以观察所产生的行为。
模糊语法组件180接收用于生成经模糊的输入的语法。在一些实施例中,系统100可揭示用于生成经模糊的输入的语法,该语法不是随机的,但却是由测试作者精心编写的。语法可包括生成无效输入、特定事件类型、特定事件时机、以及对特定测试案例有用的其它数据的命令。
其上实现模糊测试系统的计算设备可包括中央处理单元、存储器、输入设备(例如,键盘和定点设备)、输出设备(例如,显示设备)和存储设备(例如,盘驱动器或其他非易失性存储介质)。存储器和存储设备是可以编码有实现或启用系统的计算机可执行指令(例如,软件)的计算机可读的存储介质。此外,数据结构和消息结构可被存储或经由诸如通信链路上的信号等数据传送介质发送。可以使用各种通信链路,诸如因特网、局域网、广域网、点对点拨号连接、蜂窝电话网络等。
系统的各实施例可以在各种操作环境中实现,操作环境包括个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费电子产品、数码相机、网络PC、小型计算机、大型计算机、包括任意上述系统或设备中的分布式计算机环境、机顶盒、片上系统(SOC)等。计算机系统可以是蜂窝电话、个人数字助理、智能电话、个人计算机、可编程消费电子设备、数码相机等。
该系统可以在由一个或多个计算机或其他设备执行的诸如程序模块等计算机可执行指令的通用上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可以在各个实施例中按需进行组合或分布。
图2是示出一个实施例中模糊测试系统对事件进行过滤的处理的流程图。在块210中开始,系统接收描述涉及过滤异步事件的一个或多个测试的测试信息。例如,测试作者可指定用于特定用途的测试遍历,诸如登记测试或重新产生特定软件缺陷。测试信息可包括一个或多个过滤器、与将产生的事件时机有关的信息、将提供给特定事件汇点的事件等等。
在块220中继续,系统通过连接事件源和事件汇点之间的过滤器来设置一个或多个事件过滤器。例如,系统可提供延迟、重新排序、或丢弃事件的过滤器,并且可在特定事件源和事件汇点之间如测试信息所指示地连接过滤器,以检查系统对于过滤器施加的条件的响应。当事件源和事件汇点附连到统一接口时,过滤器可实现一汇点状的接口并将其连接到事件源(例如,订阅该源)并且过滤器可实现源状的接口并将其连接到事件汇点。以此方式,过滤器位于事件源和事件汇点之间并且可在事件抵达事件汇点之前修改和/或创建事件。
继续至块230,系统启动具有包括事件源和事件汇点的异步行为的目标应用程序。应用程序可执行各种各样的任务,并且系统可与各种类型的应用程序一起使用。与启动应用程序有关的步骤根据特定应用程序的目的和类型而改变。例如,监听一特定端口上的通信的网络应用程序可通过调用该应用程序并与同接收和发送分组有关的事件挂钩来启动。具有用户接口的应用程序可被调用并且挂钩于同处理诸如鼠标事件之类的用户交互有关的事件以执行特定测试。系统可组合许多类型的事件的测试来检测未预见的交互或事件处理软件代码之间的依存性(诸如难以检测的与时机有关的交互或依存性)。
继续至块240,系统通过事件过滤器从事件源接收源事件。源事件可表示多种类型的动作,诸如用户接口通知、网络分组抵达、之前启动的进程等等。过滤器接收事件源,因为过滤器被连接到事件源并作为对事件汇点的中介。继续至块250,系统通过修改事件对通过事件过滤器的源事件进行转换。修改可包括操纵事件数据和/或修改事件时机,使得事件数据在与没有过滤器时事件抵达的时间不同的时间抵达事件汇点。过滤器可加速或减缓事件、重新排列事件、复制事件、丢弃事件等等。
继续至块260,系统将经修改的源事件从事件过滤器提供给事件汇点。事件汇点包含用于特定类型的事件的事件处理软件代码。例如,对于鼠标点击事件,事件汇点可确定用户点击的是用户界面中的什么项目。对于网络接收事件,事件汇点可确定抵达的分组类型并基于该分组类型采取行动。继续至块270,系统记录描述被提供给事件汇点的事件数据以及事件汇点如何响应于该事件数据的信息。例如,系统可验证事件汇点没有引起例外或崩溃、事件汇点提供了正确的返回值、事件汇点在规定的时间段内处理了事件,等等。日志信息可稍后被用于重新产生测试遍历的结果或响应于模糊测试报告软件代码的通过率。
继续至判定框280,如果存在更多待处理的事件,则系统循环到框240来接收下一事件,否则系统继续至框290。系统可运行一预定时间段,直至用户退出正在测试的应用程序,或者直至达到另一终止条件,诸如接收到特定的错误。只要测试还在运行,系统根据测试指令接收并转换事件并且向指定的事件汇点提供经转换的事件(或在测试丢弃的事件的情况下抛弃事件)。尽管出于示出方便的目的显示为顺序的,但系统可同时处理多个事件,并且在异步测试的情况下,可有意尝试在同一时间传递许多事件或采用相对于其它事件的特定时机。
继续至块290,系统对测试给出结论并报告记录的信息。系统可将测试信息存储在数据库中供稍后分析或提供用户接口,通过该用户接口,测试作者可动态地监视并接收测试结果。在框290之后,这些步骤结束。
图3是描述在一实施例中模糊测试系统生成来自接口约定的测试的过程的流程图。在块310中开始,系统接收接口约定,接口约定指定接口的一个或多个基于事件的方法以及接口的至少一个期望的对于异步事件的响应。例如,接口作者可提供描述期望的接口行为的接口定义和属性。行为可关于期望的返回值、响应时间、保证时机、或接口响应于特定输入的其它响应。
继续至块320,系统确定一个或多个边缘条件,边缘条件标识用来对接口测试期望的响应的输入事件条件。例如,系统可标识在指示不再有事件期望会抵达的完成信号之前事件抵达的最后的可能时机。系统还可标识依赖于可接受值的边界的输入值。良好响应于边缘条件的接口通常良好地响应于良好地落在期望的参数内的值。以另一方式分布的话,软件代码中的许多错误响应于位于可接受值的值的外部的边缘处的输入值。
继续至块330,系统生成包含确定的一个或多个边缘条件的模糊输入值的统计分布。例如,系统可生成将产生一定百分比的无效数据、一定百分比的恰位于可接受的阈值之内的值、以及最后的百分比的将在可接受范围内的值。统计分布可还考虑事件时机,事件时机指定了一定数量的事件将在期望的时机之外抵达、一定数量的事件将在有效时机的边缘上抵达而剩余数量的事件将在可接受时机范围内抵达。在一些实施例中,系统可生成马尔科夫模型并将事件过滤器作为提供事件输入的状态机。可用一组最可能的输入或最不可能的输入来生成马尔科夫模型以提供应用程序的测试的想要的分布。
继续至块340,系统创建对从事件源接收的事件进行转换以产生由生成的统计分布指定的一个或多个输入值的一个或多个事件过滤器。例如,如果分布指定一些事件将被延迟以供测试,则系统创建延迟一个或多个指定类型的事件的事件过滤器。过滤器可接收来自事件源的事件,留住该事件一指定或随机的间隔,并随后将所留住的事件发送给事件汇点。类似地,系统可创建用于其他类型的转换的过滤器,诸如复制事件、加速事件、丢弃事件等等。
继续至块350,系统生成包括生成的统计分布和所创建的事件过滤器的测试。例如,系统可提供使用由测试装置提供的语法的脚本,该语法告诉测试装置如何用所提供的事件过滤器产生想要的统计分布。继续至块360,系统存储所生成的测试用于稍后检索一个或多个测试运行。每个测试运行可随机地对事件进行模糊以产生想要的统计分布并验证对各种各样的数据类型和时机的正确处理。在框360之后,这些步骤结束。
图4是示出一个实施例中使用模糊测试系统的事件数据从源到汇点的流的方框图。事件数据来源于事件源410。注意到,在一些情况下,测试可在事件过滤器中生成不是来源于事件源的数据。在应用程序的典型操作中,事件数据从事件源410直接流到事件汇点430,。出于测试目的,模糊测试系统在事件源和事件汇点之间引入一个或多个事件过滤器420。事件源410和事件汇点430提供用于订阅和提供事件数据的统一接口,并因此把它们自己借给事件过滤器420的简单定义和插入,这修改了常规的事件处理过程。事件过滤器420可以测试作者为特定测试指定的任何方式对事件数据进行转换。应用程序边界440显示了可位于应用程序内的区域。事件源410可来源于应用程序内部或外部。例如,网络分组和用户鼠标移动是来源于应用程序外部的事件,而以由应用程序内部的事件汇点430的处理而告终。诸如定时器之类的其它事件可来源于应用程序内。模糊450从事件源410处开始并且在事件过滤器420内进行,以向事件汇点430提供经模糊的事件数据。事件数据可由事件过滤器420操纵来测试事件汇点430对各种预期的和非例程的条件的处理。
在一些实施例中,模糊测试系统如此处所描述地修改事件时机。对于异步程序代码,由于与时机相关的情况而发生了许多故障。例如,程序作者可能没有充分考虑程序代码如何对在例外之后、在指示没有更多事件将抵达的完成事件之后、或在从事件源退订之后抵达的事件进行反应。诸如一个数据值在另一数据值之前或之后抵达之类的时机依存性可揭示程序代码中不正确的期望或对于线程安全而言不适当的锁定行为。
在一些实施例中,模糊测试系统对事件进行加速。由于系统不能以比系统从事件源接收事件更快的速度将事件提供给事件汇点,系统可对事件排队以提供一次地或时间上靠近在一起的高速提速来将事件提供给事件汇点。系统还可以普通速率但减慢事件汇点的处理的方式来提供事件,诸如通过修改事件汇点的线程优先级、操作控制事件汇点的时机源、暂停及在一段延迟之后恢复事件汇点的线程,等等。
从上文将会认识到,虽然在此已出于说明目的描述了模糊测试系统的特定实施例,但是可以做出各种修改而不背离本发明的精神和范围。因此,本发明只受所附权利要求限制。
Claims (15)
1.一种计算机实现的用于使用事件过滤器来对异步目标应用程序进行模糊测试的方法,所述方法包括:
接收(210)描述涉及对异步事件进行过滤的一个或多个测试的测试信息,其中所述事件表示各类型的动作;
通过将过滤器连接在目标应用程序的事件源和事件汇点之间来设置(220)零个或更多个事件过滤器;
启动(230)具有包括事件源和事件汇点的异步行为的所述目标应用程序;
通过一个或多个事件过滤器从事件源接收(240)源事件;
经由所述事件过滤器通过修改事件来转换(250)所述源事件;以及
将经修改的源事件从事件过滤器提供(260)给事件汇点;
存储用于生成特定测试运行和分布的种子,使得特定运行能被重复以重新产生经标识的故障,
其中以上步骤由至少一个处理器来执行。
2.如权利要求1所述的方法,其特征在于,所述接收测试信息包括从测试作者接收用于重新产生软件缺陷的测试遍历。
3.如权利要求1所述的方法,其特征在于,所述接收测试信息包括接收标识用于产生经模糊的测试事件的事件时机的信息。
4.如权利要求1所述的方法,其特征在于,所述设置零个或更多个事件过滤器包括如测试信息所指示地将过滤器连接在特定事件源和事件汇点之间以检查系统对过滤器所施加的条件的响应。
5.如权利要求1所述的方法,其特征在于,所述设置零个或更多个事件过滤器包括将事件过滤器连接到事件源或附连到统一接口的另一事件过滤器以供抽象与事件相关的程序代码。
6.如权利要求1所述的方法,其特征在于,所述事件过滤器:1)位于事件源和事件汇点之间,以及2)在事件抵达事件汇点之前修改或创建事件。
7.如权利要求1所述的方法,其特征在于,所述启动目标应用程序包括测试多种类型的异步事件以检测与时机相关的交互或事件处理软件代码之间的依存性。
8.如权利要求1所述的方法,其特征在于,所述接收源事件包括经由位于事件源和事件汇点之间的一个或多个连接的事件过滤器来接收事件。
9.如权利要求1所述的方法,其特征在于,所述转换源事件包括修改事件传递给事件汇点的时机。
10.如权利要求1所述的方法,其特征在于,所述提供经修改的源事件包括修改事件相对于至少一个其他事件的抵达时机。
11.如权利要求1所述的方法,其特征在于,还包括记录描述被提供给事件汇点的事件数据以及事件汇点如何响应于该事件数据的信息。
12.一种用于对异步程序代码进行模糊测试的计算机系统,所述系统包括:
事件抽象组件(110),其被配置成提供包裹待测试的每个事件源和事件汇点的对象,其中所述对象提供每个源和汇点的表示,所述表示能如一个或多个测试所指定地来操纵;
事件过滤器组件(120),其被配置成管理在一个或多个事件源和事件汇点之间运行的零个或更多个过滤器,以当事件经过源和汇点之间时修改事件,其中所述事件表示各类型的动作;
源接口组件(130),其被配置成通过统一接口将一个或多个事件源连接到事件过滤器,所述统一接口从事件源接收事件数据并将事件数据提供给事件过滤器;
汇点接口组件(140),其被配置成通过统一接口将事件过滤器连接到一个或多个事件汇点,所述统一接口允许过滤器将事件数据提供给事件汇点;
统计分布组件(150),其被配置成为测试创建遵循确定的统计分布的伪随机事件数据,并且进一步被配置成存储用于生成特定测试运行和分布的种子,使得特定运行能被重复以重新产生经标识的故障;以及
测试存储组件(160),其被配置成在数据存储中存储一个或多个测试。
13.如权利要求12所述的系统,其特征在于,所述事件抽象组件被进一步配置成提供一个或多个统一接口,应用程序中与事件相关的对象可从所述统一接口中继承以表示事件源和事件汇点以供测试。
14.如权利要求12所述的系统,其特征在于,所述事件过滤器组件被进一步配置成管理修改事件数据和/或时机以标识软件缺陷的过滤器。
15.如权利要求12所述的系统,其特征在于,所述源接口组件被进一步配置成包括用于订阅事件源的一个或多个功能,以允许事件过滤器在事件数据抵达目的事件汇点之前截取事件数据,使得事件过滤器可操作或转换事件数据并将经修改的数据提供给事件汇点或丢弃数据。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/898,724 | 2010-10-06 | ||
US12/898,724 US9015667B2 (en) | 2010-10-06 | 2010-10-06 | Fuzz testing of asynchronous program code |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102402481A CN102402481A (zh) | 2012-04-04 |
CN102402481B true CN102402481B (zh) | 2015-09-23 |
Family
ID=45884705
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110317876.5A Active CN102402481B (zh) | 2010-10-06 | 2011-10-09 | 异步程序代码的模糊测试 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9015667B2 (zh) |
CN (1) | CN102402481B (zh) |
Families Citing this family (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120095750A1 (en) * | 2010-10-14 | 2012-04-19 | Microsoft Corporation | Parsing observable collections |
US9367432B2 (en) * | 2010-12-24 | 2016-06-14 | Tata Consultancy Services Limited | Testing system |
US9323597B2 (en) * | 2012-08-08 | 2016-04-26 | Peach Fuzzer Llc | Flow based fault testing |
CN103914289B (zh) * | 2012-12-31 | 2017-09-01 | 北京新媒传信科技有限公司 | 一种桌面应用程序的接入方法和装置 |
GB2508447B (en) * | 2013-03-28 | 2014-10-22 | Randomize Ltd | Method and apparatus for testing electronic systems |
CN104850489B (zh) * | 2014-02-13 | 2017-11-28 | 富士通株式会社 | 移动应用测试系统 |
US20150242282A1 (en) * | 2014-02-24 | 2015-08-27 | Red Hat, Inc. | Mechanism to update software packages |
CN104978261B (zh) * | 2014-04-03 | 2018-11-09 | 腾讯科技(深圳)有限公司 | 应用程序的测试方法、装置及系统 |
US9497100B2 (en) * | 2014-05-05 | 2016-11-15 | Ixia | Methods, systems, and computer readable media for providing fuzz testing functionality |
WO2016085443A1 (en) * | 2014-11-24 | 2016-06-02 | Hewlett Packard Enterprise Development Lp | Application management based on data correlations |
US9917924B2 (en) | 2015-03-16 | 2018-03-13 | Keysight Technologies Singapore (Holdings) Pte. Ltd. | Methods, systems, and computer readable media for simplistic visual representation of complex interdependent network protocol fields for network protocol fuzzing and graphical framework for reporting instantaneous system level progress |
US9432394B1 (en) | 2015-03-16 | 2016-08-30 | Ixia | Methods, systems, and computer readable media for converging on network protocol stack vulnerabilities using fuzzing variables, vulnerability ratings and progressive convergence |
US9910766B2 (en) * | 2015-06-01 | 2018-03-06 | Peach Fuzzer Llc | Whitebox network fuzzing |
EP3109763A1 (en) * | 2015-06-24 | 2016-12-28 | Tata Consultancy Services Limited | Method and system for generating functional test cases for software systems |
WO2017023299A1 (en) * | 2015-08-04 | 2017-02-09 | Hewlett Packard Enterprise Development Lp | Composing future tests |
CN105938451A (zh) * | 2015-11-26 | 2016-09-14 | 北京匡恩网络科技有限责任公司 | 不完全反馈模糊测试框架 |
US10331693B1 (en) * | 2016-09-12 | 2019-06-25 | Amazon Technologies, Inc. | Filters and event schema for categorizing and processing streaming event data |
FR3059120B1 (fr) * | 2016-11-21 | 2019-05-10 | Commissariat A L'energie Atomique Et Aux Energies Alternatives | Procede et systeme de detection de vulnerabilite d'un dispositif embarque |
US10089661B1 (en) * | 2016-12-15 | 2018-10-02 | Amazon Technologies, Inc. | Identifying software products to test |
US10496467B1 (en) | 2017-01-18 | 2019-12-03 | Amazon Technologies, Inc. | Monitoring software computations of arbitrary length and duration |
CN108399120B (zh) * | 2017-02-06 | 2021-01-29 | 腾讯科技(深圳)有限公司 | 异步消息监控方法和装置 |
KR102075345B1 (ko) * | 2017-11-06 | 2020-02-10 | 한국전자통신연구원 | 퍼징 수행 시스템, 퍼징용 실행 흐름 정보 추출 장치 및 방법 |
US10915436B2 (en) * | 2018-12-08 | 2021-02-09 | International Business Machines Corporation | System level test generation using DNN translation from unit level test |
US10901877B2 (en) | 2019-05-30 | 2021-01-26 | International Business Machines Corporation | Test regression creating bucket by using package of code to be tested |
CN111124926B (zh) * | 2019-12-25 | 2022-09-16 | 支付宝(杭州)信息技术有限公司 | 模糊测试方法、装置、电子设备及存储介质 |
US11275676B2 (en) * | 2020-04-15 | 2022-03-15 | Baidu Usa Llc | Constraint guided hybrid fuzzing test system for application programs |
DE102020213891A1 (de) * | 2020-11-04 | 2022-05-05 | Robert Bosch Gesellschaft mit beschränkter Haftung | Computerimplementiertes Verfahren und Vorrichtung zur Auswahl einer Fuzzing-Methode zum Testen eines Programmcodes |
WO2024028879A1 (en) * | 2022-08-04 | 2024-02-08 | C2A-Sec, Ltd. | System and method for fuzzing |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101425035A (zh) * | 2007-11-01 | 2009-05-06 | 韩国电子通信研究院 | 用于检查软件的漏洞的设备和方法 |
Family Cites Families (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5628017A (en) * | 1993-03-15 | 1997-05-06 | Microsoft Corporation | Method and system for providing event-response capabilities to pseudocode |
US5999986A (en) * | 1996-05-01 | 1999-12-07 | Microsoft Corporation | Method and system for providing an event system infrastructure |
US6611955B1 (en) | 1999-06-03 | 2003-08-26 | Swisscom Ag | Monitoring and testing middleware based application software |
US6530039B1 (en) | 1999-06-14 | 2003-03-04 | Microsoft Corporation | Porting engine for testing of multi-lingual software |
US6701460B1 (en) | 1999-10-21 | 2004-03-02 | Sun Microsystems, Inc. | Method and apparatus for testing a computer system through software fault injection |
US6925405B2 (en) | 2002-01-09 | 2005-08-02 | International Business Machines Corporation | Adaptive test program generation |
US7296257B1 (en) * | 2002-08-01 | 2007-11-13 | Tymesys Corporation | Techniques for exception handling by rewriting dispatch table elements |
US7191172B2 (en) * | 2003-03-25 | 2007-03-13 | International Business Machines Corporation | Fuzzy location of a testable object in a functional testing tool |
US7797669B1 (en) * | 2004-02-13 | 2010-09-14 | Microsoft Corporation | Analysis of distributed software systems via specification substitution |
US7634759B2 (en) * | 2004-12-01 | 2009-12-15 | Microsoft Corporation | Distributed debugger environment |
US20070006153A1 (en) * | 2005-05-25 | 2007-01-04 | Microsoft Corporation | Extensible testing framework |
US20070074156A1 (en) * | 2005-09-01 | 2007-03-29 | Microsoft Corporation | Componentization of software computer programs |
US20070079288A1 (en) * | 2005-09-30 | 2007-04-05 | Chad Willwerth | System and method for capturing filtered execution history of executable program code |
CN100489858C (zh) * | 2006-02-22 | 2009-05-20 | 国际商业机器公司 | 用于收集数据处理系统中的清单信息的方法和系统 |
US20070203973A1 (en) * | 2006-02-28 | 2007-08-30 | Microsoft Corporation | Fuzzing Requests And Responses Using A Proxy |
US20070266349A1 (en) | 2006-05-09 | 2007-11-15 | Craig Jesse E | Directed random verification |
US8209674B2 (en) * | 2007-02-12 | 2012-06-26 | Microsoft Corporation | Tier splitting support for distributed execution environments |
US8336102B2 (en) * | 2007-06-01 | 2012-12-18 | Microsoft Corporation | Delivering malformed data for fuzz testing to software applications |
US20090132998A1 (en) * | 2007-11-16 | 2009-05-21 | Microsoft Corporation | Debugging multi-execution environment applications |
US8286133B2 (en) * | 2007-12-19 | 2012-10-09 | Microsoft Corporation | Fuzzing encoded data |
US20090228871A1 (en) | 2008-03-10 | 2009-09-10 | Microsoft Corporation | Managing generation of security tests |
US8195983B2 (en) * | 2008-10-22 | 2012-06-05 | International Business Machines Corporation | Method and system for evaluating software quality |
US20100131556A1 (en) | 2008-11-25 | 2010-05-27 | Microsoft Corporation | Unified event programming and queries |
US20100131921A1 (en) * | 2008-11-25 | 2010-05-27 | Microsoft Corporation | Exposing asynchronous mechanisms as first-class events |
US8387016B2 (en) * | 2009-05-01 | 2013-02-26 | Microsoft Corporation | Whitebox trace fuzzing |
US8578342B2 (en) * | 2009-07-14 | 2013-11-05 | International Business Machines Corporation | Fault detection and localization in dynamic software applications requiring user inputs and persistent states |
US8745592B1 (en) * | 2010-01-08 | 2014-06-03 | Google Inc. | Input selection for automatic test suite generation |
US8510715B1 (en) * | 2010-01-26 | 2013-08-13 | Google Inc. | Coverage analysis using sub-instruction profiling |
US8578344B2 (en) * | 2010-06-17 | 2013-11-05 | Microsoft Corporation | Incremental compositional dynamic test generation |
US8453125B2 (en) * | 2010-12-13 | 2013-05-28 | International Business Machines Corporation | Generating inputs for client-server programs for fault-detection and localization |
-
2010
- 2010-10-06 US US12/898,724 patent/US9015667B2/en active Active
-
2011
- 2011-10-09 CN CN201110317876.5A patent/CN102402481B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101425035A (zh) * | 2007-11-01 | 2009-05-06 | 韩国电子通信研究院 | 用于检查软件的漏洞的设备和方法 |
Also Published As
Publication number | Publication date |
---|---|
US20120089868A1 (en) | 2012-04-12 |
US9015667B2 (en) | 2015-04-21 |
CN102402481A (zh) | 2012-04-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102402481B (zh) | 异步程序代码的模糊测试 | |
Tappler et al. | Model-based testing IoT communication via active automata learning | |
CN110928772B (zh) | 一种测试方法及装置 | |
US8365149B2 (en) | Debugger for a declarative event-driven programming model | |
Raffelt et al. | Dynamic testing via automata learning | |
US9442822B2 (en) | Providing a visual representation of a sub-set of a visual program | |
US8397216B2 (en) | Compiler for a declarative event-driven programming model | |
US10067859B2 (en) | Constructing test-centric model of application | |
CA2517632A1 (en) | Method for automatic graphical profiling of a system | |
CN110750458A (zh) | 大数据平台测试方法、装置、可读存储介质及电子设备 | |
US11204860B2 (en) | Methods and apparatuses for generating smart contract test case | |
Lei et al. | A combinatorial testing strategy for concurrent programs | |
CN113590454A (zh) | 测试方法、装置、计算机设备和存储介质 | |
US11169910B2 (en) | Probabilistic software testing via dynamic graphs | |
TW201629768A (zh) | 基礎架構規則產生技術 | |
De Pauw et al. | Visual debugging for stream processing applications | |
US9256700B1 (en) | Public service for emulation of application load based on synthetic data generation derived from preexisting models | |
CN116097226A (zh) | 用于将故障注入分布式系统的装置和方法 | |
CN110362294A (zh) | 开发任务执行方法、装置、电子设备及存储介质 | |
Endo | Model based testing of service oriented applications | |
Bohlin et al. | Regular inference for communication protocol entities | |
JP2014056490A (ja) | 通信データ解析装置、その方法、プログラム | |
CN104484173B (zh) | 基于TPL Dataflow的状态监控方法及装置 | |
Leavitt | End-to-end tracing models: Analysis and unification | |
Nicolaescu et al. | On Adequate Behavior-based Architecture Conformance Checks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150728 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20150728 Address after: Washington State Applicant after: Micro soft technique license Co., Ltd Address before: Washington State Applicant before: Microsoft Corp. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |