CN1890632B - 确定由代码改变引起的不利影响的可能性的方法和系统 - Google Patents

确定由代码改变引起的不利影响的可能性的方法和系统 Download PDF

Info

Publication number
CN1890632B
CN1890632B CN2004800358980A CN200480035898A CN1890632B CN 1890632 B CN1890632 B CN 1890632B CN 2004800358980 A CN2004800358980 A CN 2004800358980A CN 200480035898 A CN200480035898 A CN 200480035898A CN 1890632 B CN1890632 B CN 1890632B
Authority
CN
China
Prior art keywords
class
important
important class
program
indirect
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.)
Expired - Fee Related
Application number
CN2004800358980A
Other languages
English (en)
Other versions
CN1890632A (zh
Inventor
拉维·科塔里
纳特瓦尔·莫达尼
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN1890632A publication Critical patent/CN1890632A/zh
Application granted granted Critical
Publication of CN1890632B publication Critical patent/CN1890632B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

鉴于有关软件的最有用的信息能够由计算机程序中的类集的一些类单独导出,这些类是很重要的。识别软件中的重要类,以及任何相关类。测试用例被定义并与所有类相关联。对一个类的代码改变引起一个或多个相关测试用例的运行。任何相关类的相应一个或多个测试用例也被运行。如果它们运行成功(在获得期望的结果方面),那么在第一类中引入的改变很有可能不影响相关类的正确执行。

Description

确定由代码改变引起的不利影响的可能性的方法和系统
技术领域
本发明涉及软件开发领域,以及涉及展示出复杂性的大规模计算机程序。本发明特别涉及确定由在程序中的其它地方的代码改变引起的程序的其它组件中的不利影响的可能性。
背景技术
任何大的软件产品/程序多数通常由大的、许多的以及可能在地理上分布的程序员团队来开发。这存在许多挑战。挑战之一是要确保由一个组件(或部分)引入的代码改变不影响其它相关组件(或部分)的正确执行。这些组件的相关性可以源于引用类型,或源于消费由该类型产生的数据。典型地,由于不完整的规格说明或由于规格说明未更新,导致并不准确地知道各组件之间的相关。
该问题的一个解决方法是手工尝试识别不利影响(导致错误),但是这对于复杂软件是非常不切实际的。
在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仅仅是作为适于执行所描述的技术的特定类型的系统的例子而进行描述的。
结论
作为一种工具,本方法极大地减少了对在分布式开发环境中的代码进行管理所需的调试工作。

Claims (9)

1.一种用于确定在计算机程序中由代码改变引起的不利影响的可能性的方法,包括步骤:
识别在计算机程序中的重要类,其中重要类包括用于表示持久化数据的类;
通过搜索持久化数据的产生者/消费者关系来确定所述重要类的直接和间接相关类;
将测试用例与所述重要类和所述直接相关类相关联;以及
对于针对重要类的指定代码改变:运行所有所述相关联的测试用例;以及如果任何测试用例的运行失败,则指示不利影响的可能性。
2.根据权利要求1的方法,其中重要类的识别包括:建立所述程序的类名称和超类的继承结构,并从中识别所述结构的开始点及该开始点的直接和间接子孙。
3.根据权利要求2的方法,其中确定所述重要类的直接和间接相关类包括:在所述程序中找到对所述重要类的引用;找到由所述重要类调用的方法;以及确定并入所述直接和间接相关类的所述重要类调用的方法的相关结构。
4.根据权利要求3的方法,其中确定所述相关结构还包括:识别直接相关和间接相关类,所述间接相关类表现出持久化数据的产生者/消费者关系。
5.根据权利要求1的方法,其中指示不利影响的步骤包括生成程序输出。
6.一种数据处理系统,包括:
存储程序的存储器,所述程序具有多个类;
用户输入,通过该输入可以进行程序代码改变;
处理器,用于识别所述类中的重要类,其中重要类包括用于表示持久化数据的类,通过搜索持久化数据的产生者/消费者关系来确定所述重要类的直接和间接相关类,以及将测试用例与所述类和所述直接相关类相关联;并且
其中对于通过所述用户输入输入的针对类的给定代码改变,所述处理器运行所有所述相关联的测试用例;并且
所述系统进一步包括:
输出装置,如果任何测试用例运行失败,则由该输出装置生成指示不利影响的可能性的程序输出。
7.根据权利要求6的数据处理系统,其中所述处理器进一步用于通过建立所述程序的类名称和超类的继承结构来识别重要类,并且从中识别所述结构的开始点及该开始点的直接和间接子孙。
8.根据权利要求7的数据处理系统,其中所述处理器进一步用于通过在所述程序中找到对所述重要类的引用,找到由所述重要类调用的方法,以及确定并入所述直接和间接相关类的所述所述重要类调用的方法的相关性结构。
9.根据权利要求8的数据处理系统,其中所述处理器进一步用于通过识别直接相关和间接相关类来确定所述相关结构,所述间接相关类表现出持久化数据的产生者/消费者关系。
CN2004800358980A 2003-12-04 2004-11-16 确定由代码改变引起的不利影响的可能性的方法和系统 Expired - Fee Related CN1890632B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/727,890 US7536678B2 (en) 2003-12-04 2003-12-04 System and method for determining the possibility of adverse effect arising from a code change in a computer program
US10/727,890 2003-12-04
PCT/EP2004/052974 WO2005055051A2 (en) 2003-12-04 2004-11-16 Determining the possibility of adverse effects arising from a code change

Publications (2)

Publication Number Publication Date
CN1890632A CN1890632A (zh) 2007-01-03
CN1890632B true CN1890632B (zh) 2010-08-04

Family

ID=37579163

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2004800358980A Expired - Fee Related CN1890632B (zh) 2003-12-04 2004-11-16 确定由代码改变引起的不利影响的可能性的方法和系统

Country Status (3)

Country Link
US (1) US7536678B2 (zh)
CN (1) CN1890632B (zh)
WO (1) WO2005055051A2 (zh)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE10335989B4 (de) * 2003-08-01 2019-07-11 Kw-Software Gmbh Online-Änderungen von CIL-Code-Programmen für die Industrieautomatisierung
US20070226546A1 (en) * 2005-12-22 2007-09-27 Lucent Technologies Inc. Method for determining field software reliability metrics
JP2008003985A (ja) * 2006-06-26 2008-01-10 Dainippon Screen Mfg Co Ltd 開発支援システム、開発支援方法および開発支援プログラム
US8307337B2 (en) * 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US7865872B2 (en) * 2006-12-01 2011-01-04 Murex S.A.S. Producer graph oriented programming framework with undo, redo, and abort execution support
US8191052B2 (en) 2006-12-01 2012-05-29 Murex S.A.S. Producer graph oriented programming and execution
US8332827B2 (en) 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support
US8296741B1 (en) * 2007-03-05 2012-10-23 Google Inc. Identifying function-level code dependency by simulating runtime binding
CN101859274B (zh) * 2009-04-07 2013-06-05 西门子(中国)有限公司 一种进行模糊测试的方法及系统
US8566844B2 (en) * 2009-11-03 2013-10-22 Disney Enterprises, Inc. Generalized event and response system (GEARS)
US8429605B2 (en) * 2009-12-30 2013-04-23 The United States Of America As Represented By The Secretary Of The Navy Finite state machine architecture for software development
US20110173591A1 (en) * 2010-01-13 2011-07-14 Target Brands, Inc. Unit Test Generator
US8326813B2 (en) * 2010-01-20 2012-12-04 Siemens Product Lifecycle Management Software, Inc. System and method for data management
US8661454B2 (en) * 2010-01-26 2014-02-25 Target Brands, Inc. System and method for receiving and transmitting event information
CN102075508B (zh) * 2010-09-02 2014-01-29 北京神州绿盟信息安全科技股份有限公司 针对网络协议的漏洞挖掘系统和方法
WO2013115797A1 (en) * 2012-01-31 2013-08-08 Hewlett-Packard Development Company L.P. Identifcation of a failed code change
US9122740B2 (en) 2012-03-13 2015-09-01 Siemens Product Lifecycle Management Software Inc. Bulk traversal of large data structures
US9652495B2 (en) 2012-03-13 2017-05-16 Siemens Product Lifecycle Management Software Inc. Traversal-free updates in large data structures
US9223683B1 (en) * 2012-05-03 2015-12-29 Google Inc. Tool to analyze dependency injection object graphs for common error patterns
US10026064B2 (en) 2013-09-13 2018-07-17 Microsoft Technology Licensing, Llc Automatically recommending updates based on stored lifecycle information
US9830142B2 (en) 2013-09-13 2017-11-28 Microsoft Technology Licensing, Llc Automatic installation of selected updates in multiple environments
US9665359B2 (en) 2013-09-13 2017-05-30 Microsoft Technology Licensing, Llc Automatically resolving conflicts after installation of selected updates in a computer system
US9626176B2 (en) 2013-09-13 2017-04-18 Microsoft Technology Licensing, Llc Update installer with technical impact analysis
US10175975B2 (en) * 2015-02-18 2019-01-08 Red Hat Israel, Ltd. Self-mending software builder
US10740222B2 (en) * 2018-10-23 2020-08-11 Sap Se Intelligent unitizer test plug-in

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5694540A (en) * 1994-12-15 1997-12-02 Lucent Technologies Inc. Automated software regression test and compilation system
WO1998057260A1 (en) 1997-06-13 1998-12-17 True Software, Inc. Systems and methods for scanning and modeling dependencies in software applications
US6336217B1 (en) * 1998-12-30 2002-01-01 International Business Machines Corporation Systems, methods and computer program products for end-to-end software development process automation
US6609128B1 (en) * 1999-07-30 2003-08-19 Accenture Llp Codes table framework design in an E-commerce architecture
US6601233B1 (en) * 1999-07-30 2003-07-29 Accenture Llp Business components framework
US20030018950A1 (en) * 2001-06-02 2003-01-23 Malcom Sparks Dynamic redeploying environment for the rapid iterative development of software applications
US20040024807A1 (en) * 2002-07-31 2004-02-05 Microsoft Corporation Asynchronous updates of weakly consistent distributed state information
US7512929B2 (en) * 2003-09-19 2009-03-31 Lattix Inc. Apparatus and method for managing design of a software system using dependency structure

Also Published As

Publication number Publication date
WO2005055051A3 (en) 2005-08-25
US20050125776A1 (en) 2005-06-09
CN1890632A (zh) 2007-01-03
WO2005055051A2 (en) 2005-06-16
US7536678B2 (en) 2009-05-19

Similar Documents

Publication Publication Date Title
CN1890632B (zh) 确定由代码改变引起的不利影响的可能性的方法和系统
US5854932A (en) Compiler and method for avoiding unnecessary recompilation
US9411556B1 (en) Template dependency inlining
CN100474252C (zh) 在编译过程中表示和检查程序组件的一致性的可扩展类型系统
EP0664027B1 (en) Program modeling system
US5956479A (en) Demand based generation of symbolic information
US9047583B2 (en) Ontology context logic at a key field level
JP5354602B2 (ja) プロデューサグラフ指向のプログラミング及び実行
US5961610A (en) Systems, methods and apparatus for generating and controlling display of medical images
US7500149B2 (en) Generating finite state machines for software systems with asynchronous callbacks
US8276118B2 (en) Depicting changes to structures in an integrated development environment
US20030023961A1 (en) Method and apparatus for displaying compiler-optimizated code
CN109117164B (zh) 基于关键元素差异性分析的微服务更新方法及系统
EP1145124A1 (en) Platform independent memory image analysis architecture for debugging a computer program
CN103718155A (zh) 运行时系统
CA2144875A1 (en) Incremental linker system
US7689979B1 (en) Methods and apparatus to improve application launch time
JP2010511233A (ja) プロデューサグラフ指向のプログラミングフレームワークにおけるパラレル化及びインスツルメンテーション
CN101410798A (zh) 用于生成应用数据编辑器的方法和系统
WO2016163901A1 (en) An apparatus for processing an abstract syntax tree being associated with a source code of a source program
WO2016181368A1 (es) Método implementado por computador que expone aplicaciones tipo software a partir de especificaciones de diseño
KR101615295B1 (ko) 클래스 파일 내에 네이티브 코드를 임베드시킴으로써 가상 머신에서의 플랫폼 의존성 루틴의 적용
CN113238795A (zh) 组件发布方法、装置、电子设备、存储介质及程序产品
MX2008003417A (es) Acciones de control definidas en forma declarativa.
Rana Python: Simple though an Important Programming language

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
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20100804

CF01 Termination of patent right due to non-payment of annual fee