CN102402481B - 异步程序代码的模糊测试 - Google Patents

异步程序代码的模糊测试 Download PDF

Info

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
Application number
CN201110317876.5A
Other languages
English (en)
Other versions
CN102402481A (zh
Inventor
E·梅杰
D·A·马诺列斯库
J·W·戴尔
J·范格格
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Priority to US12/898,724 priority Critical patent/US9015667B2/en
Priority to US12/898,724 priority
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN102402481A publication Critical patent/CN102402481A/zh
Application granted granted Critical
Publication of CN102402481B publication Critical patent/CN102402481B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error 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/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases

Abstract

描述了异步程序代码的模糊测试。此处描述了将事件源、信道、处理器以及消费者表示为应用程序中的第一级实体的模糊测试系统。对与事件相关的实体进行抽象允许通过对来自应用程序内的事件进行插入、丢弃、重新排序以及延迟来进行模糊。这转变为定位受测试的区域以及以对称方式执行模糊的能力。在一些实施例中,模糊测试系统测试并发异步和基于事件的代码,并能够基于给定的统计分布来生成事件流。将事件、事件源、过滤器、以及汇点表示为第一级对象提供了对于事件处理器的简单访问,并有助通过在源和汇点之间引入事件过滤器来实现模糊。因此,模糊测试系统采用异步行为改进了应用程序和API的可测试性,并提供了用于将模糊测试引入这些应用程序中的统一框架。

Description

异步程序代码的模糊测试
技术领域
[0001] 本申请涉及模糊测试,尤其涉及异步程序代码的模糊测试。
背景技术
[0002] 现代软件开发经常涉及异步编程。多核中央处理单元(CPU)、网络、分布式系统、 传感器等等都导致了异步。这对应于增加了等级的基于事件的编程,其中每个异步实体通 过引发事件来与其它实体交互。例如,鼠标移动生成封装光标位置的图形用户界面(GUI) 事件;XmlHttpRequest调用的完成生成发出结果可用信号的事件;以及博客帖子的发布产 生通知感兴趣方新内容可用的事件。通常,这些事件是不相关的。例如,对应于移动鼠标的 ⑶I事件是独立于发出异步XmlHttpRequest调用完成的信号的事件而引发的。
[0003] 测试基于事件的系统涉及验证程序是否表现得如预料中的由不相关的源进行而 引发的事件一致。这是一个难题,因为对所有可能的排列进行验证呈现组合式的爆发。因 此,测试器越来越依赖于模糊测试或模糊,这涉及随机生成来自受测试的应用程序外部的 事件,并验证该应用程序是否按规定地响应。模糊测试可提供对于给定的工作量来说宽得 多的覆盖,当预算和/或时间短缺时尤其有利。
[0004] 模糊测试难以被引入某些应用程序。例如,应用程序可不提供用于挂钩事件源和 汇点的简单的输入点。其它时候,容易产生某些类型的输入(例如,调用注册的事件处理 器),但难以可靠地产生事件的顺序以测试记录的、延迟的、复制的、和/或丢失的事件。向 应用程序引入模糊测试通常每次都被不同地处理,并且每个应用程序程序员可在在新的应 用程序中再次执行模糊测试之前重复被执行过许多类型的工作。
发明内容
[0005] 此处描述了将事件源、信道、处理器以及消费者表示为应用程序中的第一级实体 的模糊测试系统。对与事件相关的实体进行抽象允许通过对来自应用程序内的事件进行插 入、丢弃、重新排序以及延迟来进行模糊。这转变为定位受测试的区域以及以对称方式执行 模糊的能力。在一些实施例中,模糊测试系统测试并发异步和基于事件的代码,并能够基于 给定的统计分布来生成事件流。模糊测试系统将事件源连接到事件过滤器。每个过滤器通 过将传输函数或转换应用于它的输入事件流来生成事件流。传输函数由测试程序员选择并 且可延迟、记录、丢弃、选择子集、跳过、插入新事件等等。事件汇点是处理事件的元素。
[0006] 将事件、事件源、过滤器、汇点表示为第一级对象在数个方面影响模糊。首先,它提 供了对事件处理器的简便访问。模糊可从源经过过滤器流入汇点,或者可直接插入到过滤 器。其次,它有助于通过引入源和汇点之间的事件过滤器来实现模糊。通过诸如插入和丢 弃之类的操作,模糊测试系统可以对称方式模拟模糊尝试覆盖的大量的情况,包括应用程 序如何处理表面上不相关的事件流之间的相关性和/或因果性。因此,模糊测试系统采用 异步行为改进了应用程序和API的可测试性,并提供了用于将模糊测试引入这些应用程序 中的统一框架。
[0007] 提供本发明内容以便以简化的形式介绍将在以下具体实施方式中进一步描述的 一些概念。本发明内容并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用 于限制所要求保护主题的范围。
附图说明
[0008] 图1是示出在一个实施例中的模糊测试系统的各组件的框图。
[0009] 图2是示出一个实施例中模糊测试系统对事件进行过滤的处理的流程图。
[0010] 图3是描述在一实施例中模糊测试系统生成来自接口约定的测试的过程的流程 图。
[0011] 图4是示出一个实施例中使用模糊测试系统的事件数据从源到汇点的流的方框 图。
具体实施方式
[0012] 此处描述了将事件源、信道、处理器以及事件汇点表示为应用程序中的第一级实 体的模糊测试系统。该应用程序中的所有事件处理需要这些抽象。对与事件相关的实体进 行抽象允许通过对来自应用程序内的事件进行插入、丢弃、重新排序以及延迟来进行模糊。 这转变为定位受测试的区域以及以对称方式执行模糊的能力。在一些实施例中,模糊测试 系统可通过对观察得到的集合的模糊来测试并发异步以及基于事件的代码,并能够基于给 定的统计分布来生成事件流。
[0013] 事件源生成第一级事件的流。例如,按键在每次它被按下时引发一事件;类似的, 网络接收器在每次网络分组抵达时引发一事件。模糊测试系统将事件源连接到事件过滤 器。每个过滤器通过将传输函数或转换应用于它的输入事件流来生成事件流。传输函数由 测试程序员选择并且可延迟、记录、丢弃、选择子集、跳过、插入新事件等等。事件汇点是处 理事件的元素。这些事件汇点将对事件作出反应的行为进行封装。这是作为测试主体的代 码所驻留的地方。
[0014] 将事件、事件源、过滤器、汇点表示为第一级对象在数个方面影响模糊。首先,它提 供了对事件处理器的简便访问。经模糊的事件数据可从源经过过滤器流入汇点,或者可被 直接插入到过滤器(例如,产生用于测试的伪源)。其次,它方便了通过引入源和汇点之间 的事件过滤器来实现模糊。通过诸如插入和丢弃之类的操作,模糊测试系统可以对称方式 模拟模糊尝试覆盖的大量的情况,包括应用程序如何处理表面上不相关的事件流之间的相 关性和/或因果性。
[0015] 模糊动作的特定示例是时机改变、展开事件、使事件在时间上更靠近、丢弃事件、 将事件改变成例外、模拟过早中止、以及交换值。对于异步编程,问题与传统对输入的模糊 相当不同,因为系统需要考虑时间的概念,但大多数同步API相对于输入个别输入元素的 时间是不变的。模糊测试系统允许不仅操纵事件的内容,而且还允许操纵事件抵达时间中 的时机和关系。因此,模糊测试系统采用异步行为改进了应用程序和API的可测试性,并提 供了用于将模糊测试引入这些应用程序中的统一框架。
[0016] 图1是示出在一个实施例中的模糊测试系统的各组件的框图。系统100包括事件 抽象组件110、事件过滤器组件120、源接口组件130、汇点接口组件140、统计分布组件150、 测试存储组件160、约定分析组件170以及模糊语法组件180。此处更详细地描述了这些组 件中的每一个。
[0017] 事件抽象组件110提供包裹了待测试的每个事件源和事件汇点的对象。对象提供 能够被如一个或多个测试所指定那样操纵的每个源和汇点的第一级表示。在一些实施例 中,组件提供IObservable接口和IObserver接口以表示事件源和事件汇点供测试,其中应 用程序中的任何类可从IObservable接口和IObserver接口中继承。在一个实施例中,以 下伪代码声明示出了这两个接口。
[0018] interface IObservable<T> { void Subscribe(IObserver<T>); }; interface IObserver<T> { void OnNext(T); void OnError(Exception); void OnCompleted(); };
[0019] IObservable接口允许特定观察者订阅实现该接口的任何对象,诸如异步对象的 集合。IObserver接口提供用于处理操纵的多个步骤(OnNext)、处理诸如例外之类的错误 情况(OnError)、以及处理操纵的完成(OnCompleted)的功能。这些通用接口允许对各种类 型的基于事件的软件代码的建模。
[0020] 事件过滤器组件120管理在一个或多个事件源和事件汇点之间运行的一个或多 个过滤器,以当事件经过源和汇点之间时修改事件。过滤器可操纵事件数据或时机。例如, 过滤器可通过修改数据、用不同数据替换数据、改变后续事件的顺序、重复事件数据、减缓 事件数据至事件汇点的传递、加速事件数据等等来操纵事件数据。测试程序员可编写测试 来实现想要用于特定软件应用程序的任何类型的过滤器。作为另一示例,过滤器可通过使 一个事件在另一个事件被传递时延迟、将事件传递延伸至接口约定所保证的阈值之外、比 平常更快速地传递事件、修改依存的事件数据以在相关事件数据之前或之后到达等等来操 纵事件时机。在异步软件组件中,测试事件时机可以与测试核心事件处理功能一样有用。时 机问题经常是最难标识和解决的,并且具有用于修改事件时机和验证正确的应用程序行为 的可重复的测试框架使得软件应用程序更强健。
[0021] 源接口组件130通过统一接口将一个或多个事件源连接到事件过滤器,该统一接 口从事件源接收事件数据并将事件数据提供给事件过滤器。源接口可包括一个或多个用于 订阅事件源的功能,诸如此处所描述的订阅(Subscribe)功能。源接口组件130允许事件 过滤器在事件数据抵达目标事件汇点前截取事件数据,使得事件过滤器可操纵或转换事件 数据并将经修改的数据提供给事件汇点(或者在丢弃事件的例子中抛弃数据)。
[0022] 汇点接口组件140通过统一接口将事件过滤器连接到一个或多个事件汇点,该统 一接口允许过滤器将事件数据提供给事件汇点。汇点接口可包括一个或多个功能用于提 供进行中的事件数据(例如OnNext)、错误情况(例如OnError)、以及流结束数据(例如 OnCompleted)。汇点接口组件140允许事件过滤器向汇点提供符合特定测试的任何偏好的 事件数据。事件数据可来自从一个或多个事件源或由测试创建的事件输入中截取的数据。
[0023] 统计分布组件150为测试创建遵循确定的统计分布的伪随机事件数据。例如,测 试作者可能想要对一个或多个事件类型中的一定比例进行模糊以确保对各种事件处理编 程代码的期望的覆盖。统计分布组件150可基于关于一个或多个接口和接口约定以及其它 因素有关的信息来自动确定适当的分布。可选地或另外地,测试作者可手动指定组件150 的统计分布的比例或其它度量,以用于生成事件数据和/或事件数据转换。在一些实施例 中,统计分布组件150可存储用于生成特定测试运行和分布的种子和其它信息,使得尽管 是随机生成的,但特定运行可容易地重复以重新产生经标识的故障或其它问题。
[0024] 测试存储组件160在数据存储中存储一个或多个测试。数据存储可包括一个或多 个文件、文件系统、硬盘驱动器、存储区域网络(SAN)、数据库、基于云的存储服务、或其他存 储设施。测试存储组件160可存储一个或多个事件过滤器、由可配置过滤器执行的事件转 换、期望的结果、手动生成的输入数据、以及由测试作者确定的其它信息以供执行测试。测 试存储组件160还可记录每个测试运行并存储与用于重新产生检测到的错误的每个测试 运行有关的信息。
[0025] 约定分析组件170自动生成一个或多个测试并基于接收到的接口约定对期望的 结果进行验证。程序员经常定义接口所遵守的约定,以在用各种方式调用该接口时将期望 的行为告诉接口的用户。例如,接口约定可指定特定方法不崩溃,而更详细的约定信息可包 括所执行的语法(例如,OnCompleted跟在OnNext之后)、对于特定输入所预期的输出、预 期的输入或输出的特定时间分布、确保的响应时间等等。约定分析组件170使用这一信息 既可通过模糊输入事件数据(或具体地创建无效数据)创建测试,也可验证响应于经模糊 的输入的行为是否遵守所指定的接口约定。组件170还使用约定信息来确定事件数据的统 计分布以提供给统计分布组件150。在一些情况下,组件170可有意地生成不满足接口约定 的事件的序列,以观察所产生的行为。
[0026] 模糊语法组件180接收用于生成经模糊的输入的语法。在一些实施例中,系统100 可揭示用于生成经模糊的输入的语法,该语法不是随机的,但却是由测试作者精心编写的。 语法可包括生成无效输入、特定事件类型、特定事件时机、以及对特定测试案例有用的其它 数据的命令。
[0027]其上实现模糊测试系统的计算设备可包括中央处理单元、存储器、输入设备(例 如,键盘和定点设备)、输出设备(例如,显示设备)和存储设备(例如,盘驱动器或其他非 易失性存储介质)。存储器和存储设备是可以编码有实现或启用系统的计算机可执行指令 (例如,软件)的计算机可读的存储介质。此外,数据结构和消息结构可被存储或经由诸如 通信链路上的信号等数据传送介质发送。可以使用各种通信链路,诸如因特网、局域网、广 域网、点对点拨号连接、蜂窝电话网络等。
[0028] 系统的各实施例可以在各种操作环境中实现,操作环境包括个人计算机、服务器 计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费电子产品、 数码相机、网络PC、小型计算机、大型计算机、包括任意上述系统或设备中的分布式计算机 环境、机顶盒、片上系统(S0C)等。计算机系统可以是蜂窝电话、个人数字助理、智能电话、 个人计算机、可编程消费电子设备、数码相机等。
[0029] 该系统可以在由一个或多个计算机或其他设备执行的诸如程序模块等计算机可 执行指令的通用上下文中描述。一般而言,程序模块包括执行特定任务或实现特定抽象数 据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可以在各个实施例 中按需进行组合或分布。
[0030] 图2是示出一个实施例中模糊测试系统对事件进行过滤的处理的流程图。在块 210中开始,系统接收描述涉及过滤异步事件的一个或多个测试的测试信息。例如,测试作 者可指定用于特定用途的测试遍历,诸如登记测试或重新产生特定软件缺陷。测试信息可 包括一个或多个过滤器、与将产生的事件时机有关的信息、将提供给特定事件汇点的事件 等等。
[0031] 在块220中继续,系统通过连接事件源和事件汇点之间的过滤器来设置一个或多 个事件过滤器。例如,系统可提供延迟、重新排序、或丢弃事件的过滤器,并且可在特定事件 源和事件汇点之间如测试信息所指示地连接过滤器,以检查系统对于过滤器施加的条件的 响应。当事件源和事件汇点附连到统一接口时,过滤器可实现一汇点状的接口并将其连接 到事件源(例如,订阅该源)并且过滤器可实现源状的接口并将其连接到事件汇点。以此 方式,过滤器位于事件源和事件汇点之间并且可在事件抵达事件汇点之前修改和/或创建 事件。
[0032] 继续至块230,系统启动具有包括事件源和事件汇点的异步行为的目标应用程序。 应用程序可执行各种各样的任务,并且系统可与各种类型的应用程序一起使用。与启动应 用程序有关的步骤根据特定应用程序的目的和类型而改变。例如,监听一特定端口上的通 信的网络应用程序可通过调用该应用程序并与同接收和发送分组有关的事件挂钩来启动。 具有用户接口的应用程序可被调用并且挂钩于同处理诸如鼠标事件之类的用户交互有关 的事件以执行特定测试。系统可组合许多类型的事件的测试来检测未预见的交互或事件处 理软件代码之间的依存性(诸如难以检测的与时机有关的交互或依存性)。
[0033] 继续至块240,系统通过事件过滤器从事件源接收源事件。源事件可表示多种类型 的动作,诸如用户接口通知、网络分组抵达、之前启动的进程等等。过滤器接收事件源,因为 过滤器被连接到事件源并作为对事件汇点的中介。继续至块250,系统通过修改事件对通过 事件过滤器的源事件进行转换。修改可包括操纵事件数据和/或修改事件时机,使得事件 数据在与没有过滤器时事件抵达的时间不同的时间抵达事件汇点。过滤器可加速或减缓事 件、重新排列事件、复制事件、丢弃事件等等。
[0034] 继续至块260,系统将经修改的源事件从事件过滤器提供给事件汇点。事件汇点包 含用于特定类型的事件的事件处理软件代码。例如,对于鼠标点击事件,事件汇点可确定用 户点击的是用户界面中的什么项目。对于网络接收事件,事件汇点可确定抵达的分组类型 并基于该分组类型采取行动。继续至块270,系统记录描述被提供给事件汇点的事件数据以 及事件汇点如何响应于该事件数据的信息。例如,系统可验证事件汇点没有引起例外或崩 溃、事件汇点提供了正确的返回值、事件汇点在规定的时间段内处理了事件,等等。日志信 息可稍后被用于重新产生测试遍历的结果或响应于模糊测试报告软件代码的通过率。
[0035] 继续至判定框280,如果存在更多待处理的事件,则系统循环到框240来接收下一 事件,否则系统继续至框290。系统可运行一预定时间段,直至用户退出正在测试的应用程 序,或者直至达到另一终止条件,诸如接收到特定的错误。只要测试还在运行,系统根据测 试指令接收并转换事件并且向指定的事件汇点提供经转换的事件(或在测试丢弃的事件 的情况下抛弃事件)。尽管出于示出方便的目的显示为顺序的,但系统可同时处理多个事 件,并且在异步测试的情况下,可有意尝试在同一时间传递许多事件或采用相对于其它事 件的特定时机。
[0036] 继续至块290,系统对测试给出结论并报告记录的信息。系统可将测试信息存储在 数据库中供稍后分析或提供用户接口,通过该用户接口,测试作者可动态地监视并接收测 试结果。在框290之后,这些步骤结束。
[0037]图3是描述在一实施例中模糊测试系统生成来自接口约定的测试的过程的流程 图。在块310中开始,系统接收接口约定,接口约定指定接口的一个或多个基于事件的方法 以及接口的至少一个期望的对于异步事件的响应。例如,接口作者可提供描述期望的接口 行为的接口定义和属性。行为可关于期望的返回值、响应时间、保证时机、或接口响应于特 定输入的其它响应。
[0038] 继续至块320,系统确定一个或多个边缘条件,边缘条件标识用来对接口测试期望 的响应的输入事件条件。例如,系统可标识在指示不再有事件期望会抵达的完成信号之前 事件抵达的最后的可能时机。系统还可标识依赖于可接受值的边界的输入值。良好响应于 边缘条件的接口通常良好地响应于良好地落在期望的参数内的值。以另一方式分布的话, 软件代码中的许多错误响应于位于可接受值的值的外部的边缘处的输入值。
[0039] 继续至块330,系统生成包含确定的一个或多个边缘条件的模糊输入值的统计分 布。例如,系统可生成将产生一定百分比的无效数据、一定百分比的恰位于可接受的阈值之 内的值、以及最后的百分比的将在可接受范围内的值。统计分布可还考虑事件时机,事件时 机指定了一定数量的事件将在期望的时机之外抵达、一定数量的事件将在有效时机的边缘 上抵达而剩余数量的事件将在可接受时机范围内抵达。在一些实施例中,系统可生成马尔 科夫模型并将事件过滤器作为提供事件输入的状态机。可用一组最可能的输入或最不可能 的输入来生成马尔科夫模型以提供应用程序的测试的想要的分布。
[0040] 继续至块340,系统创建对从事件源接收的事件进行转换以产生由生成的统计分 布指定的一个或多个输入值的一个或多个事件过滤器。例如,如果分布指定一些事件将被 延迟以供测试,则系统创建延迟一个或多个指定类型的事件的事件过滤器。过滤器可接收 来自事件源的事件,留住该事件一指定或随机的间隔,并随后将所留住的事件发送给事件 汇点。类似地,系统可创建用于其他类型的转换的过滤器,诸如复制事件、加速事件、丢弃事 件等等。
[0041] 继续至块350,系统生成包括生成的统计分布和所创建的事件过滤器的测试。例 如,系统可提供使用由测试装置提供的语法的脚本,该语法告诉测试装置如何用所提供的 事件过滤器产生想要的统计分布。继续至块360,系统存储所生成的测试用于稍后检索一个 或多个测试运行。每个测试运行可随机地对事件进行模糊以产生想要的统计分布并验证对 各种各样的数据类型和时机的正确处理。在框360之后,这些步骤结束。
[0042]图4是示出一个实施例中使用模糊测试系统的事件数据从源到汇点的流的方框 图。事件数据来源于事件源410。注意到,在一些情况下,测试可在事件过滤器中生成不是 来源于事件源的数据。在应用程序的典型操作中,事件数据从事件源410直接流到事件汇 点430,。出于测试目的,模糊测试系统在事件源和事件汇点之间引入一个或多个事件过滤 器420。事件源410和事件汇点430提供用于订阅和提供事件数据的统一接口,并因此把它 们自己借给事件过滤器420的简单定义和插入,这修改了常规的事件处理过程。事件过滤 器420可以测试作者为特定测试指定的任何方式对事件数据进行转换。应用程序边界440 显示了可位于应用程序内的区域。事件源410可来源于应用程序内部或外部。例如,网络 分组和用户鼠标移动是来源于应用程序外部的事件,而以由应用程序内部的事件汇点430 的处理而告终。诸如定时器之类的其它事件可来源于应用程序内。模糊450从事件源410 处开始并且在事件过滤器420内进行,以向事件汇点430提供经模糊的事件数据。事件数 据可由事件过滤器420操纵来测试事件汇点430对各种预期的和非例程的条件的处理。
[0043] 在一些实施例中,模糊测试系统如此处所描述地修改事件时机。对于异步程序代 码,由于与时机相关的情况而发生了许多故障。例如,程序作者可能没有充分考虑程序代码 如何对在例外之后、在指示没有更多事件将抵达的完成事件之后、或在从事件源退订之后 抵达的事件进行反应。诸如一个数据值在另一数据值之前或之后抵达之类的时机依存性可 揭示程序代码中不正确的期望或对于线程安全而言不适当的锁定行为。
[0044] 在一些实施例中,模糊测试系统对事件进行加速。由于系统不能以比系统从事件 源接收事件更快的速度将事件提供给事件汇点,系统可对事件排队以提供一次地或时间上 靠近在一起的高速提速来将事件提供给事件汇点。系统还可以普通速率但减慢事件汇点的 处理的方式来提供事件,诸如通过修改事件汇点的线程优先级、操作控制事件汇点的时机 源、暂停及在一段延迟之后恢复事件汇点的线程,等等。
[0045] 从上文将会认识到,虽然在此已出于说明目的描述了模糊测试系统的特定实施 例,但是可以做出各种修改而不背离本发明的精神和范围。因此,本发明只受所附权利要求 限制。

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所述的系统,其特征在于,所述源接口组件被进一步配置成包括用 于订阅事件源的一个或多个功能,以允许事件过滤器在事件数据抵达目的事件汇点之前截 取事件数据,使得事件过滤器可操作或转换事件数据并将经修改的数据提供给事件汇点或 丢弃数据。
CN201110317876.5A 2010-10-06 2011-10-09 异步程序代码的模糊测试 Active CN102402481B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
US12/898,724 US9015667B2 (en) 2010-10-06 2010-10-06 Fuzz testing of asynchronous program code
US12/898,724 2010-10-06

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 (23)

* Cited by examiner, † Cited by third party
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
EP3224724A1 (en) * 2014-11-24 2017-10-04 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
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

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101425035A (zh) * 2007-11-01 2009-05-06 韩国电子通信研究院 用于检查软件的漏洞的设备和方法

Family Cites Families (30)

* Cited by examiner, † Cited by third party
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
US20100131921A1 (en) * 2008-11-25 2010-05-27 Microsoft Corporation Exposing asynchronous mechanisms as first-class events
US20100131556A1 (en) 2008-11-25 2010-05-27 Microsoft Corporation Unified event programming and queries
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

Patent Citations (1)

* Cited by examiner, † Cited by third party
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
Holzmann The model checker SPIN
JP2018185808A (ja) ブロックチェーンに基づくスマート契約をテストする装置及び方法
US8365149B2 (en) Debugger for a declarative event-driven programming model
Raffelt et al. Dynamic testing via automata learning
US7881440B2 (en) Method for automatic graphical profiling of a system
Tahat et al. Regression test suite prioritization using system models
US9442822B2 (en) Providing a visual representation of a sub-set of a visual program
US8397216B2 (en) Compiler for a declarative event-driven programming model
De Pauw et al. Visual debugging for stream processing applications
US10067859B2 (en) Constructing test-centric model of application
CN110750458A (zh) 大数据平台测试方法、装置、可读存储介质及电子设备
US11169910B2 (en) Probabilistic software testing via dynamic graphs
Endo Model based testing of service oriented applications
TW201629768A (zh) 基礎架構規則產生技術
US9256700B1 (en) Public service for emulation of application load based on synthetic data generation derived from preexisting models
Bohlin et al. Regular inference for communication protocol entities
CN104484173B (zh) 基于TPL Dataflow的状态监控方法及装置
US11204860B2 (en) Methods and apparatuses for generating smart contract test case
JP2014056490A (ja) 通信データ解析装置、その方法、プログラム
US20210318947A1 (en) Methods and apparatuses for generating smart contract test case
Skelin et al. Towards translating FSM-SADF to timed automata
KR101866826B1 (ko) 게임 서버의 운용 에스펙트 호출 방법
Ward A framework for the automation of discrete-event simulation experiments

Legal Events

Date Code Title Description
PB01 Publication
C06 Publication
SE01 Entry into force of request for substantive examination
C10 Entry into substantive examination
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.

C41 Transfer of patent application or patent right or utility model
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150728

GR01 Patent grant
C14 Grant of patent or utility model