确定由代码改变引起的不利影响的可能性的制作方法

文档序号:6501681阅读:182来源:国知局
专利名称:确定由代码改变引起的不利影响的可能性的制作方法
技术领域
本发明涉及软件开发领域,以及涉及展示出复杂性的大规模计算机程序。本发明特别涉及确定由在程序中的其它地方的代码改变引起的程序的其它组件中的不利影响的可能性。
背景技术
任何大的软件产品/程序多数通常由大的、许多的以及可能在地理上分布的程序员团队来开发。这存在许多挑战。挑战之一是要确保由一个组件(或部分)引入的代码改变不影响其它相关组件(或部分)的正确执行。这些组件的相关性可以源于引用类型,或源于消费由该类型产生的数据。典型地,由于不完整的规格说明或由于规格说明未更新,导致并不准确地知道各组件之间的相关。
该问题的一个解决方法是手工尝试识别不利影响(导致错误),但是这对于复杂软件是非常不切实际的。
在1997年12月2日授权给Humelsine等人的美国专利5,694,540教导了作为回归测试来运行计算机程序的一组测试,其提供对由全回归(full regression)而获得的测试水平的逼近。一个修改请求与测试用例(case)相关联,并且由修改而引起改变的文件被记录。与该修改所修改的文件相关联的测试用例被运行。
在2003年1月23日公开的Sparks等人的美国专利公开2003/0018950A1中描述了一种方法,其中如果检测到代码改变,则动态重新载入类。开发者可以看到编译(build)/封装(package)步骤之后的改变结果。
这些已知的方法仅仅提供了预测不利影响的部分解决方案。还需要一种自动方法,以更完全地检测由代码改变引起的在其它程序组件中的不利影响。

发明内容
鉴于有关软件的最有用的信息能够由计算机程序中的类集的一些类单独导出,这些类是很重要的。识别软件中的重要类,以及任何相关类。测试用例被定义并与所有类相关联。对一个类的代码改变引起一个或多个相关测试用例的运行。任何相关类的相应一个或多个测试用例也被运行。如果它们运行成功(在获得期望的结果方面),那么在第一类中引入的改变很有可能不影响相关类的正确执行。
因此,关键是如果给定类被改变,则指出哪些类将受到影响的能力。如果一个类依赖于被改变的类,那么该类可能受到影响。相关可以是直接的,由于它直接引用被改变的类;也可以是间接的,由于它消费由其它类产生或修改的数据。


图1是描述类相关的图示。
图2是初始化过程的流程图。
图3是确定由代码改变引起的不利影响的可能性的流程图。
图4示出了一组类的继承结构。
图5是适于执行参考图2-4描述的技术的计算机系统的示意图。
具体实施例方式
术语的定义类在面向对象编程语言中的任何类型(如,Java中的类和接口)都是“类”(Java是Sun Microsystem有限公司的商标)。
测试用例测试用例用于验证软件的正确性。这些测试用例可以是各种类型的,例如“单元测试”、“功能测试”、“系统测试”。这些统称为“测试用例”。
相关考虑图1给出的例子。由于A引用B,因此类A具有对类B的直接相关。类C修改由类D表示(represent)的持久化数据,该数据被类E消费,类E继而修改由类F表示的持久化数据。所述数据(类F)被类G消费。因此,类E和类G具有对类C的间接相关。类C中的任何改变都可以潜在地影响类E和G。
概述将利用作为面向对象编程语言的一种的Java编程语言的例子给出本发明的实施例。
如图2所示本方法广义上包括初始步骤。
找到软件的引用结构(步骤10)。接着,识别软件的重要类(步骤12)。这些重要类包括用于表示持久化数据的类(例如,在J2EE环境中的Entity bean)。接下来,找到对重要类的引用(步骤14)以及找到针对每个重要类而调用的方法(步骤16)。
现在,确定软件的相关结构(步骤18),这导致识别直接相关类(步骤20)和间接相关类(步骤22)。通过搜索持久化数据的产生者/消费者关系来识别间接相关。数据的产生者是对表示持久化数据的类进行非只读调用(可能附加一些只读调用)的类,而数据的消费者是对表示持久化数据的类进行只读调用的类。
现在,定义每个类的一个或多个测试用例(步骤24)。这涉及详细说明将要执行的一组步骤以及在每一步期望获得的结果。这些测试用例的设计者是熟练的程序员,并且这些测试用例的特性依赖于软件高层规格说明。在执行中,如果所有步骤都给出了所期望的结果,那么测试用例被认为是成功的。测试用例与“重要”和相关类相关联(步骤26)。
现在参考图3,当特定类的代码被改变时(步骤30),与其相关联的一个或多个测试用例被运行(步骤32)。该类型的相关(即,直接和间接)类也被找到(步骤34),并且相关联的测试用例被运行(步骤36)。如果类不是重要类,那么将不会运行任何相关联的测试用例。
如果任何测试用例失败(步骤38),那么采取适当的动作(步骤40),否则处理结束(步骤42)。这种动作可以包括通知程序员,他可以决定是否保留在代码中作出的改变。
如果开发者希望保留该改变,那么将采取的进一步的动作是通知测试用例运行失败的类的所有者,包括引发该失败的代码改变的细节。
详细实现识别重要类通常,大的软件程序会通过提供重要业务类必须扩展/执行的类和/或接口的集合来定义重要类的模板。这些模板作为开始点。例如,在IBM WebSphere商业套件中的一些重要业务类/接口是控制器指令接口、控制器指令实现类、任务指令接口、任务指令实现类等等。(IBM和WebSphere是IBM公司的商标)。每个控制器指令接口必须或者直接或者通过扩展其它接口来扩展称为com.ibm.commerce.command.ControllerCommand的特定接口,该接口于是作为控制器指令接口。
为了识别重要类,源代码(或目标代码)被扫描以便找到类名称及其超类(该类扩展和/或实现的类)。接着使用该信息建立继承结构图。在一种形式中,该图是如图4所示的有向无环图50。如果节点B是节点A的超类,那么在该图中节点B 52是节点A 54的直接子孙。如果节点C 60是节点B的直接或间接子孙,那么节点D 56是节点A的间接子孙,其中节点B是节点D的直接或间接子孙。节点G 62不是任何其它节点的子孙或超类。开始点的所有直接或间接子孙都是重要类。从每个开始点开始,使用深度优先搜索或宽度优先搜索从图中找到重要类型。对于节点B 52为开始点的情况,重要类是类B自身以及类D和E。
找到对给定类的引用存在可用于找到对给定类的引用的许多标准实用程序。此外,这些实用程序也能够指示正访问给定类的哪些成员。通过使用任何这样的实用程序,在给定类中的每个方法都由如上所识别的重要类的成员访问集(可能是有序的)来表示。生成整个胞元图(cell graph),然后进行过滤以便移除所有不在重要类集中的类。
适当的实用程序在由以色列海法的IBM海法研究实验室出版的文献A Guide to the Information Added by Document Enhancer forJava中进行了描述。该实用程序可以从以下网址下载http://www.haifa.il.ibm.com/projects/systems/ple/DEJava/index.html。
使用对重要类的引用信息找到相关直接相关是容易被找到的。如果存在对给定类的引用,那么它就是一个直接相关。
为了检测间接相关,要找到表示持久化数据的类。用户必须在开始点的集合中提供表示持久化数据的类的模板,并且指出这些模板表示持久化数据。以这些开始点作为直接或间接子孙的所有类被找到并被标记为表示持久化数据的类。例如,在典型的J2EE环境中,持久化数据由Entity Bean表示。因此,所有Entity Bean的集合表示软件与之进行交互的持久化数据。然后,通过寻找对Entity Bean的非只读调用来找到修改持久化数据的类。这样,数据的产生者被识别。数据的消费者是对Entity Bean进行只读调用的类。给出数据的生产者/消费者关系,间接相关性被找到。
计算机硬件和软件图5是可被用于实现此处描述的诊断技术的计算机系统100的示意图。计算机系统100可以被认为是程序员工作站。计算机软件在计算机系统100上安装的适当的操作系统下运行,以便协助执行所述技术。该计算机软件使用任何适当的计算机编程语言来编程,并且可以被认为包括用于实现特定步骤的各种软件代码装置。
计算机系统100的组件包括计算机120、键盘110以及鼠标115和视频显示器190。计算机120包括处理器140、存储器150、输入/输出(I/O)接口160、165、视频接口145和存储设备155。
处理器140是运行操作系统和在操作系统下执行的计算机软件的中央处理单元(CPU)。存储器150包括随机访问存储器(RAM)和只读存储器(ROM),并且在处理器140的指示下使用。
视频接口145连接到视频显示器190并且提供用于在视频显示器190上显示的视频信号。操作计算机120的用户输入从键盘110和鼠标115提供。存储设备155可以包括盘驱动器或任何其它适当的存储介质。
计算机120的每一个组件都连接到包括数据、地址和控制总线的内部总线130上,使得计算机120的组件经由总线130彼此连接。
计算机系统100可以通过输入/输出(I/O)接口165利用到由因特网180表示的网络的通信信道185连接到一个或多个其它类似计算机。这样,分布的团队可以就从其它位置编写或驻留的代码部分来进行合作。
计算机软件可以记录在便携式存储介质上,其中计算机软件程序可以由计算机系统100从存储设备155中访问得到。替代地,计算机软件也可以由计算机120直接从因特网180上访问得到。在任意一种情况下,用户都可以利用键盘110和鼠标115与计算机系统100交互,以便操作在计算机120上执行的所编程计算机软件。
计算机系统的其它配置或类型可以等同地用于实现所描述的技术。上面描述的计算机系统110仅仅是作为适于执行所描述的技术的特定类型的系统的例子而进行描述的。
结论作为一种工具,本方法极大地减少了对在分布式开发环境中的代码进行管理所需的调试工作。
权利要求
1.一种用于确定在计算机程序中由代码改变引起的不利影响的可能性的方法,包括步骤识别在计算机程序中的重要类;确定所述重要类的直接和间接相关类;将测试用例与所述重要类和所述直接相关类相关联;以及对于针对重要类的指定代码改变运行所有所述相关联的测试用例;以及如果任何测试用例的运行失败,则指示不利影响的可能性。
2.根据权利要求1的方法,其中重要类的识别包括建立所述程序的类名称和超类的继承结构,并从中识别所述结构的开始点及该开始点的直接和间接子孙。
3.根据权利要求2的方法,其中确定相关类包括在所述程序中找到对所述重要类的引用;找到由所述重要类调用的方法;以及确定并入所述相关类的所述方法的相关结构。
4.根据权利要求3的方法,其中确定所述相关结构还包括识别直接相关和间接相关类,所述间接相关类表现出持久化数据的产生者/消费者关系。
5.根据权利要求1的方法,其中指示不利影响的步骤包括生成程序输出。
6.一种数据处理系统,包括存储程序的存储器,所述程序具有多个类;用户输入,通过该输入可以进行程序代码改变;处理器,用于识别所述类中的重要类,确定所述重要类的直接和间接相关类,以及将测试用例与所述类和所述直接相关类相关联;并且其中对于通过所述用户输入输入的针对类的给定代码改变,所述处理器运行所有所述相关联的测试用例;并且所述系统进一步包括输出装置,如果任何测试用例运行失败,则由该输出装置生成指示不利影响的可能性的程序输出。
7.根据权利要求6的数据处理系统,其中所述处理器进一步用于通过建立所述程序的类名称和超类的继承结构来识别重要类,并且从中识别所述结构的开始点及该开始点的直接和间接子孙。
8.根据权利要求7的数据处理系统,其中所述处理器进一步用于通过在所述程序中找到对所述重要类的引用,找到由所述重要类调用的方法,以及确定并入所述相关类的所述方法的相关性结构。
9.根据权利要求8的数据处理系统,其中所述处理器进一步用于通过识别直接相关和间接相关类来确定所述相关结构,所述间接相关类表现出持久化数据的产生者/消费者关系。
10.一种计算机程序,包括适于执行权利要求1-5中任何一项的步骤的计算机程序代码。
全文摘要
鉴于有关软件的最有用的信息能够由计算机程序中的类集的一些类单独导出,这些类是很重要的。识别软件中的重要类,以及任何相关类。测试用例被定义并与所有类相关联。对一个类的代码改变引起一个或多个相关测试用例的运行。任何相关类的相应一个或多个测试用例也被运行。如果它们运行成功(在获得期望的结果方面),那么在第一类中引入的改变很有可能不影响相关类的正确执行。
文档编号G06F9/44GK1890632SQ200480035898
公开日2007年1月3日 申请日期2004年11月16日 优先权日2003年12月4日
发明者拉维·科塔里, 纳特瓦尔·莫达尼 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1