|Publication number||US7908590 B1|
|Application number||US 11/559,356|
|Publication date||Mar 15, 2011|
|Filing date||Nov 13, 2006|
|Priority date||Mar 2, 2006|
|Publication number||11559356, 559356, US 7908590 B1, US 7908590B1, US-B1-7908590, US7908590 B1, US7908590B1|
|Inventors||Jeehong Min, Matthew David Love, Wayne P. Ariola, Jr.|
|Original Assignee||Parasoft Corporation|
|Export Citation||BiBTeX, EndNote, RefMan|
|Patent Citations (39), Non-Patent Citations (3), Referenced by (24), Classifications (8), Legal Events (2)|
|External Links: USPTO, USPTO Assignment, Espacenet|
This patent application is a continuation of U.S. patent application Ser. No. 11/552,831, filed Oct. 25, 2006, now abandoned which claims the benefit of the filing date of U.S. Provisional Patent Application Ser. No. 60/778,696, filed on Mar. 2, 2006 and entitled “SYSTEM AND METHOD FOR AUTOMATICALLY CREATING TEST CASES THROUGH A REMOTE CLIENT,” the entire content of which is hereby expressly incorporated by reference. This patent application is also related to U.S. patent application Ser. No. 11/396,168, filed on Mar. 30, 2006, and entitled “SYSTEM AND METHOD FOR TEST GENERATION.”
The present invention relates generally to testing computer software; and more particularly to a system and method for creating test cases through a remote client.
The problem of writing error-free computer programs has plagued programmers since the beginning. Sophisticated schemes for automatically discovering program errors and bugs of all kinds, including lexical, syntactic, semantic and logical, have been developed.
Reliable and successful software is developed through sound, efficient and thorough testing. However, software testing is labor intensive and expensive and accounts for a substantial portion of commercial software development costs.
At the same time, software testing is critical and necessary to achieving quality software. Typically, software testing includes test case generation, test case execution and validation, and regression testing.
Most of software developers understand that the longer an error is allowed to remain in the software before it is discovered, the more expensive it becomes to fix. With vigilant testing from the earliest phases of the software lifecycle, software development teams find errors earlier and reduce the likelihood of discovering the error further down in the software lifecycle. Early detection reduces the cost of fixing each error, which in turn, reduces the cumulative cost of fixing the thousands of errors that typically surface in the course of a project.
For example, for testing of a complex web application, the application is deployed in a staging server environment for comprehensive testing before deployment to a live production environment. The web application is itself multi-tiered, complex and is comprised of other multi-tiered components. As such, integration and deployment of new versions of the web application on the staging environment is not trivial. In this context, the traditional feedback loop between quality assurance (QA) team and development team faces serious challenges.
In a software test cycle, when the software is first tested, a bug may be found and reported. The bug is then reproduced, fixed and verified to prevent it from occurring again. In an ideal setting, the QA team is able to verify that the requirements of the application are satisfied by the web application deployed on the staging server. Those requirements that are not met, for example bugs, are documented and the list of bugs is passed to development team. The development team then fixes these bugs. The web application with the bug fixes is re-deployed on the staging server and is verified by QA team to make sure that all the requirements are met. This can be an iterative process by which the number of bugs is reduced to zero.
What many companies face is a lengthy, drawn out cycle to re-deploy the web application on the staging server due to the complex nature of the web application and ensuing integration issues. As a result, it becomes difficult for the development team to correlate the bug with specific code to reproduce the bug, and to verify that the bug has been fixed. The development team is not able to test its code in the context of the web application. Even if this was possible, the number of times that the code is updated in the web application must be minimized. Therefore, there is a need for an effective way to reproduce, fix, and verify the bug outside the staging server environment.
In one embodiment, the present invention is a method and system for generating test cases for a computer program. The method and system include invoking execution of the computer program via a remote client; monitoring the execution of the computer program; collecting information about execution path of the computer program; stopping the execution of the computer program via the remote client; and generating one or more test cases utilizing the collected information. In one embodiment, the remote client is a computer test tool. In one embodiment, the test cases are unit test cases, in which the stubs are automatically generated. In one embodiment, the computer program is a web application.
In one embodiment, the present invention enables automatic creation of code level, for example, programming languages such as JAVA™, test cases via the exercise of a Web App Server through a remote client. The method and system of the present invention allow a QA team to perform a web application testing on a staging server environment and generate test artifacts that enable the development team to properly reproduce, fix, and verify the bugs outside of the staging server environment.
Accordingly, the QA team is able to give the development team more than just a bug report. The QA team can give the development team information about what happened at the code level. This information about what happened at the code level can be converted to an executable code that reproduces the bug. This code is executed outside of the context of a staging server environment. Because the bug can be reproduced by executing the code in a developer environment, the bug can be fixed and verified within the developer environment. When the requirements are met during QA testing, regression tests at the code level are automatically created. The QA team thus creates regression tests that increase the comprehensiveness and coverage of the code. These regression tests can be used by the development team to effectively aid during modification of the code.
In one embodiment, the method and system of the invention can also be used to create code level regression tests that represent the actual use case scenarios. The invention enables rapid, automated creation of code level regression test cases that may be hard to write from scratch.
In one embodiment, the web application is a JAVA™ application being tested. The web application may be integrated with other web applications or connected to various back end data bases. In one embodiment, the sniffer lies dormant until it is turned on by the remote client.
The remote client can be other test tools, such as SOAtest™, and WebKing™ from Parasoft® Corp. For example, SOAtest™ is used if the web application is exposed as a web service, while WebKing™ may be used for typical web applications with a web interface. Users exercise the web application by sending requests to the web application through either SOAtest™ or WebKing™. For the rest of this document, focus is on SOAtest™ usage as an illustrative example of the remote client. SOAtest™ emulates a web service consumer by sending requests and receiving responses. Each request to the web application causes some portion of the code to be exercised. U.S. patent application Ser. No. 10/214,209, filed Aug. 7, 2002, and entitled “System And Method For Testing Of Web Services,” the entire context of which is hereby incorporated by reference, describes SOAtest™ in detail.
While the QA person is using SOAtest™ to test the web application, she may notice undesirable behavior or bug in the web application. At this point, she turns on the sniffer by sending a message from SOAtest™ to the sniffer. She then resends the request(s) that causes the undesirable behavior to show up. As the code is exercised again, the sniffer collects information from the JVM. Some of the information gathered include what classes are exercised, what methods are called, what the input parameters to those methods are, what the return parameters are, and the like. After the request(s) have been sent and the responses received, the QA person turns the sniffing off by sending another message to the Sniffer.
For example, data can be acquired for processes ran on Java VM using Debugger Interface (DI), Profiler Interface (PI), or Tool Interface (TI) for Sun Microsystem's™ Java Development Kit™ (JDK). Alternatively, the source or the binary code can be instrumented. Also, the combination of the above mentioned data acquisition means can be employed. Such profiling interfaces provide data about method invocation sequence and argument values. For JAVA™ applications, these interfaces are known as Java Virtual Machine Profiler Interface (JVMPI), Java Virtual Machine Debugger Interface (JVMDI), and Java Virtual Machine Tools Interface (JVMT).
The driver program then initializes a recorder module 311. Control events 307 and 309 are sent to the recorder. These events may be sent by the driver 302, the monitored program, or both. Example of control events include, “Start Recording” 310, and “Stop Recording” 312. Events also control the granularity of recorded data. For example, “Record method calls”, “Record method calls and objects”, etc. Execution data 308 is then sent to the recorder 311.
Recorder 311 may send control events to the monitored program 305 or the driver 302. These events may be, for example, data granularity control events like, turning on/off object recording, execution control events like, “suspend execution” or “kill”. Execution data is then processed by the recorder and stored in an Execution Record Database 312. The tested program is prepared for recording (303) by appending arguments for the launch to enable the required program type interfaces. The prepared program is then launched in 304, and terminated in 306.
Record method calls (406) including
For each unique method type + name + signature
Invocation data (402, 403)
Data uniquely identifying a thread in
which the method is invoked
Instance object on which the method was
invoked (if instance method)
origin (the way to generate
instance of the object in its
order (place) of the method invocation
amongst other method invocations (regardless
of the thread)
Method's return value (404)
Method execution context information
Information about the objects and processes the
method would interact with, e.g., information
about an application server the method will
Environmental variables information
Record object's calling sequence (calling sequence that
lead to the creation of the object in its current state)
(407). For example,
Object o = ObjectConstructor( );
In one embodiment, sequence is implied form the temporal recording of the sequence of calls, that is, no notion of child/parent calls is recorded per se, but rather, is implied from the recorded sequence). The Recorder Event Listener 405 writes events sequentially to the Execution Record Database 408, which preserves the order of events for later processing by a test generation system.
The collected information is then sent to the remote client at the end of testing. In one embodiment, the collected information is in a proprietary binary format. The collected information or sniffed artifacts are then given to a developer. From the sniffed artifacts, the execution path through the code is then reconstructed. Based on the execution path, code level test cases can be created that exercise the code in the same way as the requests from the remote client. In one embodiment, the output format of the code level test cases is industry standard JUnit™ test case format.
In one embodiment, the sniffer records method invocation events that were made by the QA analyst, at the code level. The necessary information to recreate the calling sequence/execution path is thus made available. The invention reads and correlates the method invocation events recorded in a result file as well as deserializing objects within the file. In one embodiment, relevant method invocation events such as, method entry, exit, call and called are considered.
These events are achieved through bytecode instrumentation. The first two, method entry and exit are used for calling sequences and recording of input parameters used so that the made method invocation can be recreated. There may be instances where stubs (i.e. placeholder method calls) are needed. The method call event specifies that a call is about to be made so that the test can stub the call to that method.
In one embodiment, objects may be added to the Object Repository using one or more of the following methods,
In one embodiment, for each tested method, the Test Generating System 603:
In one embodiment, the input stimulus to generated unit tests include:
In one embodiment, the outcomes are:
In one embodiment, the object inputs and outcomes are generated based on calling sequences and filtering data. Test generation system has an option to limit number of calls in the sequence leading to the object creation to improve performance. Effectively, the object states which require more than a maximal allowed number of method calls are not used in test generation.
Objects from the Object Repository may contain a snapshot of the recorded state and can be reloaded in a unit test at some point using the Object Repository API.
In one embodiment, filtering data for generation and generation options may include:
As an example, during execution of a JAVA™ application, the present invention monitors the Java Virtual Machine and produces functional unit tests based on what it observes by generating unit tests in JAVA™ source code that use the JUnit framework and contain test stimulus derived from recorded runtime data. These tests can then be validated and executed as part of the testing infrastructure to ensure that the code is operating to specification.
In one embodiment, the generated test cases are arranged correctly to reflect the execution path taken by the QA analyst. Therefore, if the QA analyst sniffed a sequence of actions that caused a bug, the invention will recreate that sequence. This will show the developers what they need to do to reproduce the bug.
As described above, test classes that represent the sequence of method invocations taken by the QA analyst can now be created. Accordingly, a test method for each method invocation is created. If a method invocation returns an object, a regression control for the object can be created. In other words, the object's component fields are examined and checked to assure that they match the expected values.
In one embodiment, the calling sequence is reconstructed using the events mentioned before. Serialized objects from the Java Development Kit (JDK) will be recreated using some predefined calling sequences of public JDK API for those types of objects. For example, a serialized Vector of Strings can be recreated as a calling sequence that includes the Vector constructor and an add invocation for each String. Objects from the JDK that have not been serialized are stubbed. Objects whose constructors have been recorded are recreated using that same constructor and input values. If the constructor has not been recorded, the object is stubbed. Using this calling sequence a set of intermediate test cases are generated.
The set of intermediate test cases are then executed through a test case refinement process. The test execution refinement process is used to collect additional runtime data about the test cases. In one embodiment, preliminary JUnit source code is generated to execute in a JUnit environment and record additional data. The runtime test data may include coverage related to tests to support removing tests that do not increase coverage with respect to the tests that are already present. In one embodiment, an intermediate test run is executed and the outcomes of the method invocations are recorded. The invention then takes those outcomes and translates them into JUnit™ assertions (e.g., junit.framework), which are used as regression controls. When creating assertions for a return object, its accessor methods such as getXXX( ) is XXX( ) toString( ) and the like are of interest. In the intermediate test run accessor methods that have not been called yet are also called so that the coverage is optimized. In one embodiment, the result of this process is a regression JUnit™ test suite.
It will be recognized by those skilled in the art that various modifications may be made to the illustrated and other embodiments of the invention described above, without departing from the broad inventive scope thereof. It will be understood therefore that the invention is not limited to the particular embodiments or arrangements disclosed, but is rather intended to cover any changes, adaptations or modifications which are within the scope and spirit of the invention as defined by the appended claims.
|Cited Patent||Filing date||Publication date||Applicant||Title|
|US5371883 *||Mar 26, 1993||Dec 6, 1994||International Business Machines Corporation||Method of testing programs in a distributed environment|
|US5778169 *||Aug 7, 1995||Jul 7, 1998||Synopsys, Inc.||Computer system having improved regression testing|
|US5784553||Apr 30, 1997||Jul 21, 1998||Parasoft Corporation||Method and system for generating a computer program test suite using dynamic symbolic execution of JAVA programs|
|US6002871 *||Oct 27, 1997||Dec 14, 1999||Unisys Corporation||Multi-user application program testing tool|
|US6067639||Nov 9, 1995||May 23, 2000||Microsoft Corporation||Method for integrating automated software testing with software development|
|US6085029||Aug 21, 1996||Jul 4, 2000||Parasoft Corporation||Method using a computer for automatically instrumenting a computer program for dynamic debugging|
|US6182245 *||Aug 31, 1998||Jan 30, 2001||Lsi Logic Corporation||Software test case client/server system and method|
|US6249882 *||Jun 15, 1998||Jun 19, 2001||Hewlett-Packard Company||Methods and systems for automated software testing|
|US6298353 *||Nov 19, 1998||Oct 2, 2001||International Business Machines Corporation||Checking serialization compatibility between versions of java classes|
|US6336217 *||Dec 30, 1998||Jan 1, 2002||International Business Machines Corporation||Systems, methods and computer program products for end-to-end software development process automation|
|US6434628 *||Aug 31, 1999||Aug 13, 2002||Accenture Llp||Common interface for handling exception interface name with additional prefix and suffix for handling exceptions in environment services patterns|
|US6539396 *||Aug 31, 1999||Mar 25, 2003||Accenture Llp||Multi-object identifier system and method for information service pattern environment|
|US6643652 *||Jan 12, 2001||Nov 4, 2003||Saba Software, Inc.||Method and apparatus for managing data exchange among systems in a network|
|US6748583 *||Dec 27, 2000||Jun 8, 2004||International Business Machines Corporation||Monitoring execution of an hierarchical visual program such as for debugging a message flow|
|US6775824 *||Jan 12, 2000||Aug 10, 2004||Empirix Inc.||Method and system for software object testing|
|US6817010 *||Dec 27, 2000||Nov 9, 2004||International Business Machines Corporation||Monitoring messages during execution of a message flow|
|US6895578||Jan 6, 2000||May 17, 2005||Parasoft Corporation||Modularizing a computer program for testing and debugging|
|US6934934 *||Jan 12, 2000||Aug 23, 2005||Empirix Inc.||Method and system for software object testing|
|US6966013||May 2, 2002||Nov 15, 2005||International Business Machines Corporation||Method and system for performing automated regression tests in a state-dependent data processing system|
|US6993747 *||Aug 14, 2000||Jan 31, 2006||Empirix Inc.||Method and system for web based software object testing|
|US6999956 *||Nov 15, 2001||Feb 14, 2006||Ward Mullins||Dynamic object-driven database manipulation and mapping system|
|US7000224 *||Apr 13, 2000||Feb 14, 2006||Empirix Inc.||Test code generator, engine and analyzer for testing middleware applications|
|US7167870||May 8, 2002||Jan 23, 2007||Sun Microsystems, Inc.||Software development test case maintenance|
|US7237231||Mar 10, 2003||Jun 26, 2007||Microsoft Corporation||Automatic identification of input values that expose output failures in a software object|
|US7299453 *||Nov 14, 2002||Nov 20, 2007||International Business Machines Corporation||Testing measurements|
|US7340725||Mar 31, 2004||Mar 4, 2008||Microsoft Corporation||Smart test attributes and test case scenario in object oriented programming environment|
|US7373636||May 8, 2003||May 13, 2008||Accenture Global Services Gmbh||Automated software testing system and method|
|US7478365||Jan 13, 2004||Jan 13, 2009||Symphony Services Corp.||Method and system for rule-based generation of automation test scripts from abstract test case representation|
|US7584455 *||May 12, 2004||Sep 1, 2009||Microsoft Corporation||Predicate-based test coverage and generation|
|US7594220 *||Jun 21, 2002||Sep 22, 2009||National Instruments Corporation||Configuration diagram with context sensitive connectivity|
|US20020087950||Sep 25, 2001||Jul 4, 2002||International Business Machines Corporation||Capturing snapshots of a debuggee's state during a debug session|
|US20020120918 *||Dec 27, 2000||Aug 29, 2002||International Business Machines Corporation||Monitoring messages during execution of a message flow|
|US20030037316 *||Jun 21, 2002||Feb 20, 2003||National Instruments Corporation||Configuration diagram with context sensitive connectivity|
|US20030041288||Aug 6, 2002||Feb 27, 2003||Adam Kolawa||Method and system for dynamically invoking and/or checking conditions of a computer test program|
|US20040041827||Aug 30, 2002||Mar 4, 2004||Jorg Bischof||Non-client-specific testing of applications|
|US20040044992||Sep 3, 2002||Mar 4, 2004||Horst Muller||Handling parameters in test scripts for computer program applications|
|US20050166094||Nov 3, 2004||Jul 28, 2005||Blackwell Barry M.||Testing tool comprising an automated multidimensional traceability matrix for implementing and validating complex software systems|
|US20050229044 *||May 12, 2004||Oct 13, 2005||Microsoft Corporation||Predicate-based test coverage and generation|
|US20060101404||Oct 22, 2004||May 11, 2006||Microsoft Corporation||Automated system for tresting a web application|
|1||*||Title: Automatic Unit Test Data Generation Using Mixed-Integer Linear Programming and Execution Trees, author: Lapierre et al, source: IEEE, dated: Aug. 30, 1999.|
|2||*||Title: Formal Verification of digital systems by automatic reduction of data paths, source: IEEE, dated: Aug. 6, 2002.|
|3||*||Title: Using the information: incorporating positive feedback information into the testing process, author: Kwok Ping Chan et al, source: IEEE, dated: Sep. 19, 2003.|
|Citing Patent||Filing date||Publication date||Applicant||Title|
|US8127275 *||Feb 25, 2008||Feb 28, 2012||Parasoft Corporation||System and method for recording the state of variables and objects when running unit tests|
|US8245194 *||Oct 17, 2007||Aug 14, 2012||International Business Machines Corporation||Automatically generating unit test cases which can reproduce runtime problems|
|US8356285 *||Mar 31, 2009||Jan 15, 2013||Oracle America, Inc.||Facilitated introspection of virtualized environments|
|US8510716 *||Nov 14, 2007||Aug 13, 2013||Parasoft Corporation||System and method for simultaneously validating a client/server application from the client side and from the server side|
|US8572579 *||Aug 19, 2010||Oct 29, 2013||Oracle International Corporation||Break on next called function or method in java debugger agent|
|US8607205 *||Mar 1, 2007||Dec 10, 2013||International Business Machines Corporation||Automatic generation of functional emulators for web service|
|US8732676 *||Aug 29, 2008||May 20, 2014||Parasoft Corporation||System and method for generating unit test based on recorded execution paths|
|US8739126 *||Nov 16, 2010||May 27, 2014||Salesforce.Com, Inc.||Web services environment testing framework|
|US8756579 *||Nov 30, 2008||Jun 17, 2014||Appcelerator, Inc.||Client-side and server-side unified validation|
|US8813034 *||Dec 30, 2010||Aug 19, 2014||Sap Ag||System and method for testing a software unit of an application|
|US8893089 *||Oct 8, 2007||Nov 18, 2014||Sap Se||Fast business process test case composition|
|US8949795||Aug 23, 2012||Feb 3, 2015||International Business Machines Corporation||Generating test cases for covering enterprise rules and predicates|
|US8972939 *||Apr 13, 2007||Mar 3, 2015||United Services Automobile Association (Usaa)||Systems and methods for processing and producing content for web sites|
|US9043440 *||Dec 16, 2010||May 26, 2015||Hewlett-Packard Development Company, L.P.||Automatic WSDL download of client emulation for a testing tool|
|US20080086348 *||Oct 8, 2007||Apr 10, 2008||Rajagopa Rao||Fast business process test case composition|
|US20080216059 *||Mar 1, 2007||Sep 4, 2008||Lakshminarasimha Moudgal||Automatic Generation of Functional Emulators for Web Service|
|US20080256517 *||Oct 17, 2007||Oct 16, 2008||International Business Machines Corporation||Method and System for Automatically Generating Unit Test Cases Which Can Reproduce Runtime Problems|
|US20090172664 *||Jan 2, 2008||Jul 2, 2009||International Business Machines Corporation||Adding a profiling agent to a virtual machine to permit performance and memory consumption analysis within unit tests|
|US20100251238 *||Sep 30, 2010||Sun Microsystems, Inc.||Facilitated introspection of virtualized environments|
|US20120047493 *||Aug 19, 2010||Feb 23, 2012||Oracle International Corporation||Break on next called function or method in java debugger agent|
|US20120059919 *||Nov 16, 2010||Mar 8, 2012||Salesforce.Com, Inc.||Web services environment testing framework|
|US20120158911 *||Jun 21, 2012||Leiba Anna||Automatic wsdl download of client emulation for a testing tool|
|US20120173929 *||Jul 5, 2012||Uwe Bloching||System and method for testing a software unit of an application|
|US20140245070 *||Feb 27, 2013||Aug 28, 2014||International Business Machines Corporation||Automated execution of functional test scripts on a remote system within a unit testing framework|
|U.S. Classification||717/124, 717/127, 717/126, 717/131, 717/130|
|Jan 28, 2011||AS||Assignment|
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:MIN, JEEHONG;LOVE, MATTHEW DAVID;ARIOLA, WAYNE P., JR.;SIGNING DATES FROM 20110125 TO 20110127;REEL/FRAME:025712/0390
Owner name: PARASOFT CORPORATION, CALIFORNIA
|Jul 25, 2014||FPAY||Fee payment|
Year of fee payment: 4