CN1542622A - 软件构件中无效调用序列的自动测定 - Google Patents
软件构件中无效调用序列的自动测定 Download PDFInfo
- Publication number
- CN1542622A CN1542622A CNA2004100346167A CN200410034616A CN1542622A CN 1542622 A CN1542622 A CN 1542622A CN A2004100346167 A CNA2004100346167 A CN A2004100346167A CN 200410034616 A CN200410034616 A CN 200410034616A CN 1542622 A CN1542622 A CN 1542622A
- Authority
- CN
- China
- Prior art keywords
- action
- calling sequence
- unusual
- computer
- calling
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 119
- 238000012360 testing method Methods 0.000 claims abstract description 20
- 230000009471 action Effects 0.000 claims description 55
- 238000004590 computer program Methods 0.000 claims description 13
- 230000008901 benefit Effects 0.000 description 8
- 230000015654 memory Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 230000006870 function Effects 0.000 description 7
- 230000000875 corresponding effect Effects 0.000 description 6
- 230000005055 memory storage Effects 0.000 description 6
- 238000004891 communication Methods 0.000 description 4
- 230000014509 gene expression Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000004075 alteration Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000007689 inspection Methods 0.000 description 2
- 239000003607 modifier Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000000712 assembly Effects 0.000 description 1
- 238000000429 assembly Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002787 reinforcement Effects 0.000 description 1
- 230000001568 sexual effect Effects 0.000 description 1
- 238000001228 spectrum Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
-
- 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/3688—Test management for test execution, e.g. scheduling of test suites
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
对象的计算机化测试以鉴别导致异常的一个或多个调用序列。自动产生一组潜在操作(由方法和相关联的参数值组成)。参数发生器可供给更有可能导致投掷异常的有趣参数值。使用操作集合中的操作来自动构造许多调用序列,这作为该序列中的步骤。然后使用对象的新实例来执行每个调用序列。若异常被投掷,则可发行这样的报告,其包含对评估该异常适当与否有帮助的信息。这个信息可包括该异常类型以及导致该投掷异常的无效调用序列。该无效调用序列也可被最小化,以帮助测试者评估根本原因和该异常的适当性。
Description
技术领域
本发明涉及软件开发技术。更具体的说,本发明涉及用于测试对象以鉴别导致投掷异常(thrown exceptions)的调用序列的机制。
背景技术
计算机已经引起了我们工作和娱乐方式的变革。有许许多多的功能和应用可以通过响应软件应用程序的执行而由通用计算系统来实现。然而,计算系统的效用和功能性确实依赖于源代码的正确编码,该源代码被编译或解释为实际由处理器执行的二进制指令。若存在代码错误,则这通常会导致与期望功能性的偏差。
目前,人们做了非常大的努力,在软件应用程序发送到市场的前后适当地减少许多软件程序中未期望功能性偏差的数量。然而,软件程序设计员和设计者的创造力已经产生了更为复杂和强大的软件应用程序。随着软件应用程序复杂性的增加,通常也增加了需要来产生该软件应用程序的源代码行的数量。
以更有组织的方式来起草源代码的一个方法是使用面向对象的程序设计,以促使在存储器中产生运行时间对象。这些对象具有与它们相关联的方法。例如,被称作“文件”的特定类对象可具有许多与之相关联的方法,它允许文件上的操作。例如,有关类“文件”对象的适当操作可为打开、读、写、关闭或检查文件的状态。每个这些方法可具有零个或更多与之相关联的允许参数。例如,“读”方法可包括这样的参数,其表达有多少文件字节要读和/或从哪里开始读,以及类似的事件。具有特定参数的方法通常被称为“操作”。同样的,具有零参数的方法即使没有参数,其通常也被称为“操作”。对象通常也具有相关联的数据。在上面介绍的文件对象范例中,该文件本身(加上潜在的通常被称为“元数据”的某些相关联的数据)可为该对象数据。
尽管面向对象的程序设计已经提供了对程序设计任务的有效组织,但是不可避免的人为误差会被引入到源代码的至少早期版本中。为了减少软件应用程序的性能偏差,我们通常对该软件应用程序进行测试以鉴别任何性能偏差。特别对面向对象的程序设计而言,我们也可对单独对象的适当操作进行测试。
即使在对象的正常和适当操作期间,该对象还是可能意外遇到其不能处理的情形。特定的操作序列(也称作“调用序列”)可导致这样的情形。例如,假设在构造文件对象之后,某人以伪代码形式表达的这样的顺序来调用下面的调用序列:打开(文件名)、关闭(文件名)、写(文件名)……该文件对象将不能够实现该写操作,这是由于为了写到该文件,该文件需要为打开状态,而且由于在前一个操作中刚刚关闭该文件。导致不能实现调用序列操作的调用序列在这里被称作“无效调用序列”。
当由于无效调用序列而产生这样的错误时,对象“投掷异常”。这意味着该对象通知运行时间环境已经出现错误,而且关于未来参考显示和/或注意该异常。通常关于不同的探测错误有不同的异常。特定的异常类型可相应于特定的一个或多个对象方法。
例如,文件对象的打开方法可具有“文件未被发现”异常,以说明由于该文件未被发现故不能打开该文件。文件对象的读(或写)方法可具有“文件读”(“file read”)(或“文件写”(“file write”))错误,以指出尽管该文件已经打开,某些关于读(或写)的操作还是已经失败了。文件对象的读(或写)方法也可具有“文件已经关闭”(“file closed already”)错误,以指出该文件已经关闭,这样不能读(或写到)该文件。文件对象的关闭方法可具有“文件已经关闭”错误,以指出该文件已经关闭了,而且这样其不能被再次关闭。文件对象的检查状态方法可具有“文件未打开”(“file not open”)异常,以指出由于该文件未打开故不能访问该文件状态。
适当异常的投掷允许程序设计员决定为什么未获得适当的操作。若在适当的时间未投掷异常,则在投掷对最初问题的代表性较小的未期望异常之前,对象可继续进行关于一个或多个进一步操作的操作。因此,对象通过响应相应的探测错误而投掷适当的异常是重要的。测试软件应用程序的一个方面是确定对象通过响应无效调用序列而投掷正确的异常(right exception)。
实行这个的一个传统方法是使人员测试者手动产生无效调用序列,对该对象执行该调用序列,校验投掷正确的异常,然后关于其它的无效调用序列重复该过程。由于这依赖于测试者的想象力和努力以提出潜在的无效调用序列,所以这个可能是非常耗费时间的。另外,尽管测试者进行了勇敢的努力,但是该测试者提出的无效调用序列集合还是可能是不完整的。因此,可能有利的是用于对象的测试以便通过自动化程度更高的方式来探测无效调用序列的机制。
发明内容
通过本发明的原理克服具有本领域优先状态的前述问题,该本发明的原理是旨在用于自动测试对象以鉴别一个或多个导致异常的调用序列的机制的。产生可由该对象执行的一组可能的操作。每个对象包括一个或多个方法。每个方法包括与之相关联的零个或更多参数类型。若方法包括零参数,则该方法可被直接包括在可由对象执行的该组操作中。若该方法包括一个或多个参数类型,则产生相应每个参数类型的一组有趣参数。该产生的参数被用来填写该方法中的适当参数类型,以从而产生可由对象执行的更多操作。
该关于给定参数类型产生的参数被设计用来促进要被投掷的异常。例如,若该方法要用相关联的参数类型“读”,该相关联的参数类型是代表要读的字节数的整数。减1的该整数(如“-1”)可被用作有趣参数,其原因是由于读取负信息量不具有逻辑意义,所以其应该导致要被投掷的异常。
使用这个可能操作池(pool),自动构造调用序列。然后使用对象执行调用序列。若异常被投掷,则可发布这样的报表,其指定对评估该异常恰当与否有帮助的信息。这个信息可包括异常类型以及导致该投掷异常的调用序列。
可选择的是,可通过从调用序列移除一个或多个操作,然后决定相同的异常是否被投掷来最小化该调用序列。如果是那样的话,也可报告该最小化的调用序列。通过最小化导致异常被投掷的调用序列,测试者可更直观的评估该投掷异常的根本原因。
这个过程同可能仅看见最终报表的测试者一起自动出现。因此,由于该方法不依靠人们所需要的实质的时间和努力以产生无效调用序列,所以测试者的时间可更适合集中在评估投掷异常的适当性上,而不是产生并执行该无效调用序列。
本发明的附加特征和优点将在下面的说明中阐明,而且从该说明中,部分本发明的附加特征和优点会是明显的,或者我们可通过本发明的实践来弄清楚该特征和优点。可借助于尤其在附加权利要求书中指出的工具和组合来了解和获得本发明的特征和优点。通过下面的说明和附加权利要求书,本发明的这些和其它特征会变得更完全的显而易见,或者我们可通过在下文中阐明的本发明的实践来弄清楚该特征。
附图说明
为了说明可获得本发明的上述和其它优点和特征的方式,将给出上面简要描述的本发明更为特定的说明,这是通过参考在附图中阐明的上面简要描述的本发明更为特定说明的特定实施例的。应当认识到这些附图仅描述本发明的典型实施例,因此其并不被认为是对其范围的限制,我们将结合附加的特征和详细内容,通过使用附图来说明和解释本发明,该附图包含:
图1依照本发明的原理,示意性的阐明执行对象测试的计算机系统以及相关联的模块和数据结构;
图2依照本发明的原理阐明用于测试对象的方法的流程图;
图3阐明用于自动产生参数的方法;以及
图4阐明可实现本发明原理的合适计算系统的更详细的原理图。
具体实施方式
本发明涉及用于对象的测试,以鉴别导致异常的一个或多个调用序列的方法、系统和计算机程序产品。使用该方法和与该方法相关联的参数类型来产生可由对象执行的一组操作。参数发生器可向更有可能导致投掷异常的特定参数类型供给有趣参数值。使用在该组操作中作为序列中步骤的操作来自动构造许多调用序列。然后使用新的对象实例(instance)来执行每个调用序列。若异常被投掷,则可发布这样的报表,其包含对评估该异常适当与否有帮助的信息。这个信息可包括异常类型以及导致该投掷异常的调用序列。
本发明的实施例可包含包括不同计算机硬件和软件的专用或通用计算机,我们在下面对此做了更详细的讨论。特别的,在本发明范围内的实施例包括计算机可读媒体,该计算机可读媒体用于运载或包含保存于计算机可执行指令或数据结构。这样的计算机可读媒体可为能够由通用或专用计算机存取的任何可用媒体。作为例子,但非限制,这样的计算机可读媒体可包含RAM、ROM、EEPROM、CD-ROM或其它物理存储媒体,这诸如光盘存储器、磁盘存储器或其它磁存储装置、或者可被用来运载或保存想得到的程序代码方式的任何其它媒体,这是以计算机可执行指令或数据结构形式的,而且其可由通用或专用计算机存取。当在网络或到计算机的另一个通信连接(或者是硬连线、无线,或者是硬连线或无线的组合)上传递或提供信息时,计算机适当的查看作为计算机可读媒体的连接。这样,任何这样的连接就适当的被称为计算机可读媒体。上面的组合也应被包括在计算机可读媒体的范围内。计算机可执行指令例如包含这样的指令和数据,其促使通用计算机、专用计算机或者诸如GPU这样的专用处理装置来执行确定的功能或功能组。
我们将在诸如由网络环境中的计算机执行的程序模块这样的计算机可执行指令的通用上下文中来描述本发明,尽管这一点并不是必要的。一般,程序模块包括例程、程序、对象、构件、数据结构等等,其执行特定的任务或实现特定的抽象数据类型。
图1依照本发明的原理,示意性的阐明计算系统100和相关联的模块和数据结构,其协作化互相作用,以执行对象的自动化测试。该计算系统可为能够面对软件对象执行操作的任何计算系统。下面关于图4阐明并描述了这样的计算系统的一个例子。然而,本领域熟练的技术人员在评审这个说明之后会认识到,任何计算系统可用合适的软件和/或硬件来实现本发明的特征。
计算系统100正在测试对象105,以自动鉴别无效调用序列。如前面提到的,在对象上执行的无效调用序列促使该对象投掷异常。然后测试者可将他或她的注意力集中到适当的异常是否已经被投掷这个问题上,而不是得担心产生无效调用序列,并在该对象上执行那些无效调用序列。
对象105具有更突出的轮廓以表现出这个对象是被测试的项。计算系统100中的另一个矩形元素(如操作发生模块101、参数发生模块102、调用序列发生模块103、执行模块104和最小化模块106)代表可执行模块,其促进对象105的测试。卷形元素(scrolled elements)(如方法111、操作集合114以及调用序列115代表促进对象105测试的数据。如我们在面向对象的程序设计领域中按照惯例知道的,对象105包括一个或多个方法以及可选择的数据。例如,对象105包括方法111和116。
将进一步参考图2来说明这些不同构件的共同交互作用,其依照本发明的原理阐明用于测试对象以鉴别无效调用序列的方法200的流程图。因此,将频繁参考图2来说明图1。
方法200包括鉴别一组关于对象的一个或多个期望异常的可选动作(动作201)。使用虚线框来阐明该动作201,以强调该动作的选择性。例如,关于其中对象105是文件的上面的例子,期望异常可包括“文件未被发现”、“文件读”、“文件写”、“文件已经关闭”以及“文件未打开”异常。可通过简单的相信有关与该对象相关联异常的源而鉴别这些异常。例如,手册、白皮书或其它文档可鉴别异常。也可通过在测试中检查关于对象的源代码来手工的鉴别异常。也可使用检查关于对象的或者源代码、中间格式码,或者二进制指令的软件来自动鉴别关于对象的异常。用于检查二进制指令的结构以鉴别异常的方法在联合拥有的共同待定的美国专利申请序列号10/413,254中被做说明,其申请于本专利申请的同一天,并被冠以标题“软件组合装置的非侵略性基于规则的二进制分析”(“Non-Invasive Rule-Based Binary Analysis ofSoftware Assemblies”),其专利申请作为参考全面合并于此。
方法200也包括功能的、面向结果的步骤,其用于自动鉴别导致异常的无效调用序列(步骤202)。这个步骤可包括用于完成这个结果的任何相应的动作。然而,在阐明的图2实施例中,该步骤包括相应动作203、204、205和206。
明确的说,产生可由对象执行的可能操作的集合或池(动作203)。参考图1,这可通过操作发生模块101来完成。由操作发生模块101产生的操作高度依赖于测试中由对象提供的方法。因此,操作发生模块101接收对象105的方法111作为输入。可能有一个或多个由对象提供的方法。然而,在图1中阐明的特定例子中,方法111包括方法111A、111B、111C,这包含在由垂直椭圆111D表示的潜在的其它方法当中。
对不需要任何参数的任何方法而言,该方法可被直接包括在可能的操作114的集合中。然而,大多数方法需要一个或多个参数,每个参数具有特定的参数类型。例如,参数类型可包括整(型)、浮点数(型)、数组(型)、串(型)、布尔值(型)以及对程序设计和测试领域中对那些非常熟悉的技术人员或普通的技术人员而言类似的类型。对任何给定的参数类型,参数发生模块产生兴趣参数,其较该类型的随机选择的参数而言更有可能导致异常出现。
例如,对整数参数类型而言,数值-1、+1、0和+20,000,000,000可能更有可能导致异常出现。例如,文件对象的读方法可具有整数参数类型,以表达要读的字节数。由于读负一字节的信息不具逻辑意义,所以“-1”整数值应导致异常。由于读零字节的信息将会是无效动作,所以“0”整数值将最有可能导致异常。“+20,000,000,000”应导致异常,这是在假定这个数值大于该文件大小的情况下出现的。若文件在进行读操作时被关闭,则“+1”整数值(或关于该问题的任何其它的正整数值)可导致异常出现。
图3阐明用于产生参数值的方法300。该参数类型被提供为到方法300的输入(动作301)。然后,产生最初有趣参数。例如,对整数参数值而言,“-1”、“+1”、“0”以及“+20,000,000,000”是有趣整数值类型。然后,最初产生的数值可被提供到修改器(modifier)(动作303),其可用操作来修改该参数,以导至具有相同参数类型的一列参数。例如,适合整数参数类型的操作可包括加“+”、减“-”、除“/”和乘。例如,加法操作可导至这样的数值,它们是-2(来自-1+-1)、0(来自-1++1)、-1(来自-1+0)、19,999,999,999(来自-1+20,000,000,000)、+2(来自+1++1)、+1(来自+1+0)、20,000,000,001(来自1+20,000,000,000)、0(来自0+0)、+20,000,000,000(来自0+20,000,000,000)以及40,000,000,000(来自20,000,000,000+20,000,000,000)。然后,副本被移除(动作304)。动作302、303和304可只被执行一次,或按箭头306表示的而被重复,以形成“有趣”参数值(动作305)。
最初产生参数值302的动作和修改参数值303的动作高度依赖于参数类型是什么。可由对什么可能产生异常有经验的技术人员来决定有趣参数值。例如,对串型而言,任意串(如“foo”)可能为一个参数,过长串可为另一个串,控制字符可为另一个,等等。对具有特定维数的数组类型而言,可递归式产生比指定维数小的数组,可产生与特定维数大小相同的数组,以及可产生比指定维数大的数组。布尔值是更直截了当的例子,其中有趣布尔值可简单的为“真”或“假”。对浮点数值而言,当对着1E1000执行对象操作时,1E1000应产生算术(或溢出/下溢)异常。1E-1000的情况应相同。若该浮点要被视为该对象的分母,则1E-1000的情况可相同。
可通过执行导至相同参数类型数值的操作来修改数值。例如,对串而言,操作可能将使所有的大写字母、小写字体以及另一个操作倒转。同样,串可具有“得到所有后续事件”(“get all subsequences”)操作,其中接收串“abc”的操作将提供串“a”、“ab”以及“abc”。对数组而言,加、减、叉积、点积可为操作,对浮点数值而言,加、减、除和乘可为操作。
产生更有可能产生异常的参数的过程是高度主观的。产生这样参数的任何方法符合本发明原理的范畴,甚至蛮力随机(brute force)发生也会足够。然而,将更有可能导致异常投掷的选择参数通过增加产生的无效调用序列的百分比而提高效率。
再次参考图1,参数发生由操作发生模块101以及参数发生模块102表示,该操作发生模块101将参数类型112供给到参数发生模块102,该参数发生模块102将相应参数类型112的特定有趣参数113返回到操作发生模块101。然后,操作发生模块101将特定参数类型的特定数值置于方法中该特定参数类型所属的位置。对方法中的每个参数进行此项工作,以产生操作。然后,该操作被包括在可由对象105执行的可能操作114的池中。
参考图1,操作集合114包括,例如,操作114A,操作114B、操作114C、操作114D、操作114E、操作114F以及由垂直椭圆114G表示的潜在的许多其它操作,其中,操作114A包括聚集方法111A的参数113A,操作114B包括聚集方法111B的参数113B,操作114C包括聚集方法111C的参数113C,操作114D包括聚集方法111A的参数113D,操作114E包括聚集方法111B的参数113E,操作114F包括聚集方法111C的参数113F。该操作集合包括与3个不同方法111A、111B和111C相关联的操作。然而,该发明的原理也适合具有单个方法的对象。如果是那样的话,该差异将会是该操作集合将包括单个方法的操作,但具有潜在的不同参数。
操作集合114被提供到调用序列发生模块103,以允许方法200继续进行从该操作集合自动构造操作的调用序列的动作(动作204)。至少有3个用于产生给定长度调用序列的不同策略:完全策略、随机策略和成对策略。
完全策略包括产生足够的调用序列,使有相应操作序列的每个可能排列的调用序列,其具有给定长度而且能得自属于该操作集合的操作。这个完全策略对小的调用序列和对从中提取的小的操作集合来说是有效的。然而,对较长的调用序列和/或较大的操作集合来说,该完全策略变得在指数上处理程度更强。
随机策略包括通过从操作集合随机的选择操作来构造有限数量的调用序列。这允许调用序列被测试,而不必担心每个可能的调用序列被测试。然而,这个优点也是这个策略的缺点。明确的说,并不是所有的调用序列都被测试,因此某些异常可能被遗漏。
另一个策略包括调用序列的成对测试。明确的说,一旦已经产生具有给定的邻近操作对的调用序列,则不产生具有相同邻近操作对的调用序列。相同的技术可被应用到3个、4个等等这样的邻近对。在这个理论后,我们通常会思考,一般而言,具有相同邻近操作对的调用序列与其它调用序列相比更有可能产生相同的异常,并且这样在测试中具有较低效用。用于执行这样成对测试的方法在联合拥有的共同未决的美国专利申请序列号10/385,255中被做说明,其申请于2003年3月10日,并被冠以标题“暴露软件对象中输出失效的输入值的自动标识”(“Automatic Identification of Input Values that ExposeOutput Failures in a Software Object”),其专利申请作为参考全面合并于此。
参考图2,产生的调用序列由调用序列115表示,其包括,例如,调用序列115A、115B、115C、115D、115E和115F。调用序列115F被扩展以阐明3个操作长的调用序列的特定例子。调用序列115F中的操作包括操作114E、114B和114F。
对产生的每个调用序列而言,然后方法200使用对象自动执行操作的调用序列(动作205)。这可通过执行模块104来完成,该执行模块104接收调用序列、执行对象105上的该调用序列,随后检测任何的异常。某些调用序列可能不导致异常。然而,对无效调用序列而言,然后方法200包括自动鉴别异常被投掷为执行调用序列结果的动作(动作206)。例如,执行模块104接收来自对象105的异常。这个接收可直接出现,或甚至通过运行时间环境的其它构件来间接出现。
可选择的是,使用最小化模块106来最小化调用序列,以鉴别也导致相同异常的长度减少的调用序列。这可通过测试调用序列中的每个操作子集并同时保持调用序列中的连续依存关系来完成。若调用序列的长度长的话,这可能证明处理加强任务。另一个选项是从产生异常的最初调用序列移除一个操作,以决定任何大小减少的调用序列是否也产生该异常。若没有,则产生该异常的最初调用序列被认为是已经被最小化了。否则,也产生该异常的一个或多个大小减少的调用序列也同样的由一个等等沿着大小减少的调用序列树减少,这种情况直到调用序列被发现,当其被减少时,不管什么操作被移除,它也不导致异常时才停止。
然后方法200包括报告异常出现以及导致该异常的调用序列的动作(动作207)。若该调用序列被最小化,则其可为被报告的最小化的调用序列,或者也许产生该异常的最初调用序列以及该最小化的调用序列均可被报告。若在动作201中鉴别期望异常,则其也可被报告该异常是否是其中一个鉴别的异常。
为了减少操作集合中操作的数量,一旦使用一个或多个调用序列检测到关于给定方法的所有期望异常,则基于该方法的操作可潜在的被从任何进一步的调用序列排除。若即使在检测到该异常之后,该方法还是没有准备好报告(如也许是当该方法要在报告之前最小化该调用序列时的情况下),若一个还没有被构造好并已经一直在执行该调用序列,则过程返回到构造另一个调用序列的动作。另外,即使在报告该异常和调用序列之后,该过程也可重复。可选择的是,该过程可通过重建可由对象执行的操作集合而重复,如在具有特定相关联方法的操作被移除的时候,这是由于与该方法相关联的操作已经被全部检测到了。
因此,我们已经说明了方法、系统和用于实现该方法的计算机程序产品,其中无效调用序列被自动鉴别,以帮助测试者当对象产生不适当的异常时鉴别。本领域熟练的技术人员也将认识到本发明可在具有许多类型的计算机系统配置的网络计算环境中应用,该具有许多类型的计算机系统配置的网络计算环境包括个人计算机、手提式装置、多处理器系统、基于微处理器的或可编程消费者电子装置、网络PC、小型计算机、大型计算机以及类似的装置。本发明也可应用在分布式计算环境中,那里由通过通信网络连接的(或者通过硬布线连接、无线连接,或者通过硬布线或无线连接的组合)本地和远程处理装置来执行任务。在分布式计算环境中,程序模块既可位于本地存储器存储装置中,也可位于远程存储器存储装置中。
图4和下面的讨论意指提供用于实现本发明确定元件的合适计算环境的简要、概括性的说明。然而,应当被强调的是本发明不必被限制在任何特定的计算机化系统,其可应用于广泛领域的计算机化系统。
依照一个实施例,本发明包括保存计算机可执行指令的一个或多个计算机可读媒体,这诸如可由计算装置执行的程序模块。一般的,程序模块包括例程、程序、对象、构件、数据结构等等,其执行特定的任务或实现特定的抽象数据类型。计算机可执行指令、相关联的数据结构以及程序模块代表用于执行这里说明的方法步骤的程序代码方法的例子。这样的可执行指令或相关联数据结构的特定序列代表用于实现在这样的步骤中说明的功能的相应动作的例子。
本领域熟练的技术人员将认识到本发明可应用在网络计算环境中,除单独计算装置之外,该网络计算环境具有许多类型的计算机系统配置,这包括个人计算机、手提式装置、多处理器系统、基于微处理器的或可编程消费者电子装置、网络PC、小型计算机、大型计算机、其构件,以及类似的装置。本发明也可应用在分布式计算环境中,那里由通过通信网络连接的(或者通过硬布线连接、无线连接,或者通过硬布线或无线连接的组合)本地和远程处理装置来执行任务。在分布式计算环境中,程序模块既可位于本地存储器存储装置中,也可位于远程存储器存储装置中。
特别参考图4,用于实现本发明确定元件的范例系统包括以传统计算机420形式的通用计算系统,这包括处理单元421、包含计算机可读媒体的系统存储器422以及将包括系统存储器422的不同系统构件联结到处理单元421的系统总线423。系统总线423可为任何几种类型的总线结构,这包括存储器总线或存储器控制器、外围总线以及使用任何多种总线体系结构的本地总线。系统存储器包括只读存储器(ROM)424和随机存取存储器(RAM)425。基本输入/输出系统(BIOS)426包含诸如在启动阶段帮助在计算机420中的元件之间传递信息的基本例程,该基本输入/输出系统(BIOS)可被保存在ROM 424中。
计算机420也可包括用于读自和写到硬磁盘439的硬磁盘驱动器427,用于读自或写到可移除磁盘429的硬磁盘驱动器428,以及用于读自或写到诸如CD-ROM或其它光媒体这样的可移除光盘431的光盘驱动器430。硬磁盘驱动器427、磁盘驱动器428和光盘驱动器430分别通过硬盘驱动器接口432、磁盘驱动器接口433以及光驱动器接口434与系统总线423相连。该驱动器和其相关联的计算机可读媒体提供计算机可执行指令、数据结构、程序模块和关于计算机420其它数据的非易失性存储。这些存储媒体也可被用来保存将修正系数与伽马数值(gamma values)相关联的数据结构,这如上所述。尽管这里说明的范例环境使用硬磁盘439、可移除磁盘429以及可移除光盘431,用于保存数据的其它类型的计算机可读媒体还是可以被使用,这包括盒式磁带、闪速存储器卡、数字多用途盘、伯努利编码磁带(Bernoulli cartridges)、RAM、ROM,以及类似的装置。
包含一个或多个程序模块的程序代码方法可被保存在硬盘439、磁盘429、光盘431、ROM 424或RAM 425上,这包括操作系统435、一个或多个应用程序436、其它程序模块437以及程序数据438。操作发生模块101、参数发生模块102、调用序列发生模块103、执行模块104以及最小化模块106代表其它程序模块437的例子。另外,方法111、操作集合114以及调用序列115代表程序数据438的例子。
用户可通过键盘440、点击设备442、或诸如传声器、操纵杆、游戏垫、圆盘式卫星电视天线、扫描仪或类似装置这样的其它输入装置(未示出)将命令和信息输入到计算机420中。这些和其它的输入装置一般通过与系统总线423联结的串行端口接口446与处理单元421相连。作为选择,该输入装置可通过诸如并行端口、游戏端口或通用串行总线架构(USB)这样的其它接口连接。监视器447或另一个显示装置也与通过诸如视频适配器448这样的接口与系统总线423相连。在这个上下文中,视频适配器448被认为包括如上述的GPU。除监视器之外,个人计算机通常包括诸如扬声器和打印机这样的其它外围输出装置(未示出)。
计算机420可在使用到诸如远程计算机449a和449b这样的一个或多个远程计算机逻辑连接的网络化环境中工作。远程计算机449a和449b每个可为另一个个人计算机、服务器、路由器、网络PC、对等装置或其它普通网络节点,而且其通常包括许多或所有的上面相对于计算机420说明的元件,尽管仅有存储器存储装置450a和450b以及其相关联的应用程序436a和436b已经在图4中被阐明。图4中描述的逻辑连接包括本地网(LAN)451和广域网(WAN)452,其在这里作为例子提出,并非限制。这样的网络环境在办公室区域(office-wide)或全企业计算机网络、局内网和国际互联网中是常见的。
当在LAN网络环境中使用计算机420时,计算机420通过网络接口或适配器453与本地网451相连。当在WAN网络环境中使用计算机420(译者注:原文这里为computer 20,我想这里应为computer 420)时,计算机420可包括调制解调器454、无线连接、或者用于在诸如国际互联网这样的广域网452上确立通信的其它装置。调制解调器454可为内置或外置的,其通过串行端口接口446与系统总线423相连。在网络化环境中,相对于计算机420描述的程序模块或其部分可被保存在远程存储器存储装置中。应当认识到所示网络连接是范例性的,而且在广域网452上确立通信的其它装置可被使用。
在不背离本发明主旨或本质特征的前提下,本发明可具体体现在其它特定的形式中。说明的实施例将在所有方面被认为仅是例证性的,并非限制性的。因此,本发明的范围由附加权利要求书表明,而不是由前述的说明来表明。属于权利要求书等价技术方案的含义和范围的所有变化在其范畴内是可被接受的。
Claims (27)
1.在能够执行对象的计算系统中,用于测试所述对象以鉴别导致异常的一个或多个调用序列的方法,所述方法包含如下:
自动产生可由所述对象执行的一组操作,每个操作包括所述对象的方法以及与所述对象相关联的零个或更多参数的动作;
自动从所述操作集合构造操作调用序列的动作;
使用所述对象自动执行所述操作调用序列的动作;
自动鉴别异常被投掷为执行所述调用序列的结果的动作;
报告所述异常的所述出现以及导致所述异常的所述调用序列的动作。
2.如权利要求1的方法,其特征在于,所述调用序列是当前调用序列,构造调用序列的所述动作包含:
将一个或多个操作从也导致所述异常的先前调用序列移除的动作。
3.如权利要求2的方法,其特征在于,报告所述异常的所述出现的所述动作进一步包含如下:
也报告所述先前调用序列的动作。
4.如权利要求2的方法,进一步包含如下:
重复关于一个或多个减小的调用序列构造、执行和鉴别的所述动作,其中一个或多个操作被从所述当前调用序列移除,其中对每个所述一个或多个减小的调用序列而言,鉴别异常是否出现的所述动作包含鉴别所述异常不出现的动作。
5.如权利要求1的方法,进一步包含如下:
重复关于从所述操作集合构造的每个多数调用序列而自动构造、执行、鉴别并报告的所述动作。
6.如权利要求1的方法,进一步包含,重复关于每个多数调用序列而自动产生、构造、执行、鉴别并报告的所述动作。
7.如权利要求1的方法,进一步包含如下:
鉴别一组一个或多个期望异常的动作。
8.如权利要求7的方法,其特征在于,报告的所述动作进一步包含:
报告所述投掷异常是否是一个或多个期望异常所述集合的其中一个的动作。
9.如权利要求7的方法,其特征在于,鉴别一组一个或多个异常的所述动作包含:
通过在测试中检查关于所述对象的文档编制或源代码而手工的鉴别一个或多个异常的所述集合的动作。
10.如权利要求7的方法,其特征在于,鉴别一组一个或多个异常的所述动作包含如下:
使用软件程序自动鉴别一个或多个异常的所述集合,以检查所述对象的所述结构的动作。
11.如权利要求10的方法,其特征在于,使用软件程序自动鉴别一个或多个异常的所述集合以检查所述对象的所述结构的所述动作,包含:
自动检查所述对象的所述源代码的动作。
12.如权利要求10的方法,其特征在于,使用软件程序自动鉴别一个或多个异常的所述集合以检查所述对象的所述结构的所述动作,包含:
自动检查所述对象的所述机器可读指令的动作。
13.如权利要求1的方法,其特征在于,所述对象具有多个相关联的方法、所述操作集合包括所述相关联方法中的不只一个。
14.如权利要求1的方法,其特征在于,所述自动产生可由所述对象执行的操作集合的所述动作包含如下关于每个至少所述多数相关联方法,其执行如下:
产生用于所述相关联方法的一组一个或多个参数的一个或多个集合的动作;以及
将通过把所述相关联的方法同关于所述相关联方法的一个或多个参数的每个集合组合起来而获得的那些操作包括在所述操作集合内的动作。
15.如权利要求14的方法,其特征在于,一个或多个参数的所述集合包括应该导致投掷异常的参数。
16.如权利要求1的方法,其特征在于,所述对象具有单个相关联的方法,所述操作集合包括所述单个方法。
17.计算机程序产品,在能够执行对象的计算系统中使用,所述计算机程序产品用于实现有关测试所述对象以鉴别导致异常的一个或多个调用序列的方法,且所述计算机程序产品包含具有计算机可执行指令的一个或多个计算机可读媒体,该计算机可执行指令当被处理器执行的时候,使所述计算系统执行:
产生可被所述对象执行的一组操作,每个操作包括所述对象的方法以及与所述对象相关联的零个或更多参数;
从所述操作集合构造操作的调用序列;
使用所述对象执行操作的所述调用序列;
鉴别异常被投掷为执行所述调用序列的结果;以及
报告所述异常的所述出现以及导致所述异常的所述调用序列。
18.如权利要求17的计算机程序产品,其特征在于,所述一个或多个计算机可读媒体是物理媒体。
19.如权利要求18的计算机程序产品,其特征在于,所述物理媒体是非易失性存储媒体。
20.如权利要求18的计算机程序产品,其特征在于,所述物理媒体是非易失性系统存储器。
21.如权利要求17的计算机程序产品,其特征在于,所述调用序列是当前的调用序列,所述一个或多个计算机可读媒体进一步具有计算机可执行指令,该计算机可执行指令当被处理器执行时,使所述计算系统执行如下:
将一个或多个操作从也导致所述异常的先前调用序列移除。
22.如权利要求21的计算机程序产品,其特征在于,所述一个或多个计算机可读媒体进一步具有计算机可执行指令,该计算机可执行指令当被处理器执行时,使所述计算系统执行如下:
重复关于一个或多个减小的调用序列的所述构造、执行和鉴别,其中一个或多个操作被从所述当前的调用序列移除,其中这关于每个所述一个或多个减小的调用序列。
23.如权利要求17的计算机程序产品,其特征在于,所述一个或多个计算机可读媒体进一步具有计算机可执行指令,该计算机可执行指令当被处理器执行时,使所述计算系统执行如下:
重复关于从所述操作集合构造的每个多数调用序列的所述构造、执行、鉴别以及报告。
24.如权利要求17的计算机程序产品,其特征在于,所述一个或多个计算机可读媒体进一步具有计算机可执行指令,该计算机可执行指令当被处理器执行时,促使所述计算系统执行如下:
鉴别一组一个或多个期望异常。
25.如权利要求17的计算机程序产品,其特征在于,所述一个或多个计算机可读媒体进一步具有计算机可执行指令,该计算机可执行指令当被处理器执行时,使所述计算系统执行如下:
产生用于所述相关联方法的一组一个或多个参数的一个或多个集合;以及
将通过把所述相关联的方法与关于所述相关联方法的一个或多个参数的每个集合组合起来而获得的那些操作包括在所述操作集合内。
26.在能够执行所述对象的计算系统中,用于测试所述对象以鉴别导致异常的一个或多个调用序列的方法,所述方法包含如下:
自动鉴别导致异常的无效调用序列的步骤;以及
报告所述异常的所述出现以及导致所述异常的所述无效调用序列的动作。
27.如权利要求26的方法,其特征在于,自动鉴别导致异常的无效调用序列的所述步骤包含:
自动产生可由所述对象执行的一组操作,每个操作包括所述对象的方法以及与所述对象相关联的零个或更多参数的动作;
从所述操作集合自动构造操作的调用序列的动作;
使用所述对象自动执行操作的所述调用序列的动作;
自动鉴别异常被投掷为执行所述调用序列的结果的动作。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/413,276 US7216337B2 (en) | 2003-04-14 | 2003-04-14 | Automatic determination of invalid call sequences in software components |
US10/413,276 | 2003-04-14 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1542622A true CN1542622A (zh) | 2004-11-03 |
CN100454271C CN100454271C (zh) | 2009-01-21 |
Family
ID=32908296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2004100346167A Expired - Fee Related CN100454271C (zh) | 2003-04-14 | 2004-04-14 | 软件构件中无效调用序列的自动测定 |
Country Status (5)
Country | Link |
---|---|
US (1) | US7216337B2 (zh) |
EP (1) | EP1469392A3 (zh) |
JP (1) | JP4684573B2 (zh) |
KR (1) | KR101066706B1 (zh) |
CN (1) | CN100454271C (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100373326C (zh) * | 2005-09-13 | 2008-03-05 | 华为技术有限公司 | 一种自动化测试系统及其方法 |
CN100407668C (zh) * | 2005-12-09 | 2008-07-30 | 华为技术有限公司 | 测试命令字测试序列调度方法 |
CN100454272C (zh) * | 2006-05-30 | 2009-01-21 | 上海科泰世纪科技有限公司 | 软件构件处理错误信息的方法 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7334154B2 (en) * | 2004-06-18 | 2008-02-19 | Microsoft Corporation | Efficient changing of replica sets in distributed fault-tolerant computing system |
CN100405324C (zh) * | 2006-05-12 | 2008-07-23 | 中国科学院计算技术研究所 | 在微处理器用户态随机验证中实现核心态程序验证的方法 |
US9021417B2 (en) * | 2007-07-06 | 2015-04-28 | International Business Machines Corporation | Generating a subset model from a model |
US8250524B2 (en) * | 2007-12-21 | 2012-08-21 | Microsoft Corporation | Contract programming for code error reduction |
US8782607B2 (en) | 2009-02-20 | 2014-07-15 | Microsoft Corporation | Contract failure behavior with escalation policy |
US8397217B2 (en) * | 2010-02-22 | 2013-03-12 | International Business Machines Corporation | Integrating templates into tests |
US8589892B2 (en) * | 2010-11-21 | 2013-11-19 | International Business Machines Corporation | Verification of speculative execution |
US8914776B2 (en) * | 2012-05-17 | 2014-12-16 | Microsoft Corporation | Assisting development tools through inserted code statements |
US10055209B2 (en) * | 2015-01-12 | 2018-08-21 | Red Hat, Inc. | Resource closing |
CN106294164B (zh) * | 2016-08-15 | 2019-02-19 | 中国银行股份有限公司 | 一种代码检查方法及装置 |
CN106874764B (zh) * | 2017-01-16 | 2019-10-29 | 南开大学 | 一种基于回调函数建模自动生成Android应用回调序列的方法 |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH05342054A (ja) * | 1992-06-05 | 1993-12-24 | Hitachi Ltd | 言語処理プロセッサのテスト方式 |
US5565316A (en) * | 1992-10-09 | 1996-10-15 | Educational Testing Service | System and method for computer based testing |
US5794043A (en) * | 1992-12-17 | 1998-08-11 | Siemens Aktiengesellschaft | Method for testing at least one class of an object-oriented program on a computer |
US5390325A (en) * | 1992-12-23 | 1995-02-14 | Taligent, Inc. | Automated testing system |
US5371883A (en) * | 1993-03-26 | 1994-12-06 | International Business Machines Corporation | Method of testing programs in a distributed environment |
US5737609A (en) | 1994-10-18 | 1998-04-07 | Marcam Corporation | Method and apparatus for testing object-oriented programming constructs |
US5740440A (en) | 1995-01-06 | 1998-04-14 | Objective Software Technology | Dynamic object visualization and browsing system |
JPH08212105A (ja) * | 1995-02-02 | 1996-08-20 | Casio Comput Co Ltd | プログラム管理装置 |
US5581696A (en) * | 1995-05-09 | 1996-12-03 | Parasoft Corporation | Method using a computer for automatically instrumenting a computer program for dynamic debugging |
US5784553A (en) | 1996-01-16 | 1998-07-21 | Parasoft Corporation | Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs |
JPH09330248A (ja) * | 1996-06-12 | 1997-12-22 | Hitachi Ltd | Gui制御プログラムのイベントテスト方式 |
JPH1139169A (ja) | 1997-07-18 | 1999-02-12 | Toshiba Corp | コンパイル方法,コンパイラ,例外ハンドラ及びプログラム記憶媒体 |
US6425118B1 (en) * | 1997-07-18 | 2002-07-23 | Compaq Computer Corporation | System for automatically generating tests to ensure binary compatibility between software components produced by a source-to-source computer language translator |
US6601018B1 (en) * | 1999-02-04 | 2003-07-29 | International Business Machines Corporation | Automatic test framework system and method in software component testing |
US6301701B1 (en) * | 1999-11-10 | 2001-10-09 | Tenfold Corporation | Method for computer-assisted testing of software application components |
US6983380B2 (en) * | 2001-02-06 | 2006-01-03 | Networks Associates Technology, Inc. | Automatically generating valid behavior specifications for intrusion detection |
JP2002278795A (ja) * | 2001-03-21 | 2002-09-27 | Hitachi Software Eng Co Ltd | オブジェクト指向開発用テスト支援方法および装置 |
JP2002304303A (ja) | 2001-04-05 | 2002-10-18 | Hitachi Ltd | 例外処理方法 |
CN1184565C (zh) * | 2001-04-13 | 2005-01-12 | 互慧科技股份有限公司 | 软件诊断系统与方法 |
US6766481B2 (en) * | 2001-04-24 | 2004-07-20 | West Virginia High Technology Consortium Foundation | Software suitability testing system |
US7017150B2 (en) | 2001-08-20 | 2006-03-21 | Sun Microsystems, Inc. | Method and apparatus for automatically isolating minimal distinguishing stimuli in design verification and software development |
US7150008B2 (en) * | 2002-10-25 | 2006-12-12 | Microsoft Corporation | Non-invasive rule-based binary analysis of software assemblies |
-
2003
- 2003-04-14 US US10/413,276 patent/US7216337B2/en active Active
-
2004
- 2004-03-19 EP EP04006712A patent/EP1469392A3/en not_active Ceased
- 2004-04-13 KR KR1020040025472A patent/KR101066706B1/ko active IP Right Grant
- 2004-04-14 JP JP2004119505A patent/JP4684573B2/ja not_active Expired - Fee Related
- 2004-04-14 CN CNB2004100346167A patent/CN100454271C/zh not_active Expired - Fee Related
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100373326C (zh) * | 2005-09-13 | 2008-03-05 | 华为技术有限公司 | 一种自动化测试系统及其方法 |
CN100407668C (zh) * | 2005-12-09 | 2008-07-30 | 华为技术有限公司 | 测试命令字测试序列调度方法 |
CN100454272C (zh) * | 2006-05-30 | 2009-01-21 | 上海科泰世纪科技有限公司 | 软件构件处理错误信息的方法 |
Also Published As
Publication number | Publication date |
---|---|
JP4684573B2 (ja) | 2011-05-18 |
KR20040089583A (ko) | 2004-10-21 |
EP1469392A3 (en) | 2009-03-04 |
CN100454271C (zh) | 2009-01-21 |
EP1469392A2 (en) | 2004-10-20 |
KR101066706B1 (ko) | 2011-09-21 |
JP2004318887A (ja) | 2004-11-11 |
US7216337B2 (en) | 2007-05-08 |
US20040205725A1 (en) | 2004-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Babić et al. | Fudge: fuzz driver generation at scale | |
Smaragdakis et al. | Introspective analysis: context-sensitivity, across the board | |
US9971590B2 (en) | Package design and generation | |
Tan et al. | Efficient and precise points-to analysis: modeling the heap by merging equivalent automata | |
US8464208B2 (en) | Capturing and utilizing specific module dependency information | |
Barrett et al. | 6 years of SMT-COMP | |
CN100454271C (zh) | 软件构件中无效调用序列的自动测定 | |
Dufour et al. | Blended analysis for performance understanding of framework-based applications | |
US8707263B2 (en) | Using a DSL for calling APIS to test software | |
US20110258593A1 (en) | Static type checking against external data sources | |
US8549502B2 (en) | Compiler with user-defined type inference rules | |
CN1744061A (zh) | 校验对数据存储器的动态生成操作 | |
CN1457041A (zh) | 为一个自然语言理解系统用来自动注解训练数据的一个系统 | |
US20130145347A1 (en) | Automatic modularization of source code | |
Breivold et al. | A systematic review of studies of open source software evolution | |
Blot et al. | Empirical comparison of search heuristics for genetic improvement of software | |
Campos et al. | EvoSuite at the SBST 2019 tool competition | |
CN1295778C (zh) | 一种验证芯片硬件行为与软件模拟行为的一致性的方法 | |
Kinneer et al. | Sofya: A flexible framework for development of dynamic program analyses for Java software | |
US20050204338A1 (en) | Standard application development framework | |
US7533314B2 (en) | Unit test extender | |
Sodhi et al. | An insight on software features supporting software transplantation: a systematic review | |
Du Bousquet et al. | Reusing a JML specification dedicated to verification for testing, and vice-versa: case studies | |
Harrison | Code generation with roslyn | |
Bockisch | An efficient and flexible implementation of aspect-oriented languages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
ASS | Succession or assignment of patent right |
Owner name: MICROSOFT TECHNOLOGY LICENSING LLC Free format text: FORMER OWNER: MICROSOFT CORP. Effective date: 20150514 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20150514 Address after: Washington State Patentee after: MICROSOFT TECHNOLOGY LICENSING, LLC Address before: Washington State Patentee before: Microsoft Corp. |
|
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090121 |