Source: https://patents.google.com/patent/US9069901
Timestamp: 2018-02-22 21:03:09
Document Index: 312068251

Matched Legal Cases: ['application No. 61', 'art 410', 'art 420', 'art 410', 'art 420', 'art 410', 'art 420', 'arts 410', 'art 420', 'art 410', 'art 410', 'art 420']

US9069901B2 - Software and framework for reusable automated testing of computer software systems - Google Patents
Software and framework for reusable automated testing of computer software systems
US9069901B2
US9069901B2 US12909820 US90982010A US9069901B2 US 9069901 B2 US9069901 B2 US 9069901B2 US 12909820 US12909820 US 12909820 US 90982010 A US90982010 A US 90982010A US 9069901 B2 US9069901 B2 US 9069901B2
US12909820
US20120047489A1 (en )
Methods, software, frameworks, and systems for automating test procedures for a computer processing system. An embodiment of the method includes steps of determining a plurality of available automated test procedures, determining a plurality of available test options, and generating a plurality of test specifications. Each test specification may include option data corresponding to one of the available test options as well as procedure data corresponding to one of the available automated test procedures. The present invention advantageously supports reuse and extensibility of automated test procedures for a variety of configurations.
The present application claims priority to U.S. provisional patent application No. 61/375,217 filed Aug. 19, 2010 entitled CUSTOMIZED REPLICATION OF LEGACY TEST SUITES identifying Arunkumaran Varadharajan as inventor.
The present invention generally relates to automated testing of computer software systems. More specifically, embodiments of the present invention pertain to reusable and customizable software, frameworks, and systems for automated testing.
In computer programming, unit testing is a method by which individual units of source code are tested to determine if they are fit for use. A “unit” is conventionally the smallest testable part of an application. In procedural programming a unit may be an individual function or procedure. Ideally, each test case is independent from the others: substitutes like method stubs, mock, objects, fakes and test harnesses can be used to assist testing a module in isolation. Unit tests are typically written and run by software developers to ensure that code meets its design and behaves as intended. Its implementation can vary from being very manual (pencil and paper) to being formalized as part of build automation.
The goal of unit testing is to isolate each part of the program and show that the individual parts are correct. A unit test provides a strict, written contract that the piece of code must satisfy. As a result, it affords several benefits. Unit tests find problems early in the development cycle. The procedure is to write test cases for all functions and methods so that whenever a change causes a fault, it can be quickly identified and fixed. Readily-available unit tests make it easy for the programmer to check whether a piece of code is still working properly.
Test-driven development (TDD) is a software development process that relies on the repetition of a very short development cycle: first the developer writes a failing automated test case that defines a desired improvement or new function, then produces code to pass that test and finally refactors the new code to acceptable standards. The tests contain assertions that are either true or false. Passing the tests confirms correct behavior as developers evolve and refactor the code. Developers often use testing frameworks, such as JUnit for Java-based software, NUnit for Microsoft .Net-based software, to create and automatically run sets of test cases. Various automated testing frameworks have come to be known collectively as xUnit. These frameworks allow testing of different units of software, such as functions and classes. The main advantage of xUnit frameworks is that they provide an automated solution with no need to write the same tests many times, and no need to remember what should be the result of each test.
Most of the legacy features in a test-driven development organization are accompanied by an extensive suite of comprehensive tests validating and verifying their behavior. The automated tests validate and verify the behavior of the system as it is developed. In addition, existing tests provide valuable regression coverage to ensure that extensions, bug fixes, and other modifications do not break existing functionality. However, many existing tests may be applicable to new features and new configurations, so a framework to support reuse and extensibility of automated test procedures for a variety of configurations is desirable.
FIG. 3 illustrates a method for examining the applicability of a plurality of automated test procedures for a plurality of test options according to one embodiment.
FIG. 4 illustrates two chart types and a software object having a plurality of automated test procedures applicable to one or both chart types according to an exemplary embodiment.
FIG. 5 illustrates another method for examining the applicability of a plurality of automated test procedures for a plurality of test options using procedure annotations according to one embodiment.
FIG. 6 illustrates a method for executing automated test procedures according to one embodiment.
FIG. 7 illustrates an exemplary framework for examining the applicability of a plurality of automated test procedures for a plurality of test options and for executing automated test procedures according to one embodiment.
FIG. 1 and FIG. 2 show exemplary computer systems where an easily extensible and customizable test framework is advantageous. FIG. 1 illustrates an environment wherein a multi-tenant database system might be used. As illustrated in FIG. 1 (and in more detail in FIG. 2) any user systems 12 might interact via a network 14 with a multi-tenant database system (MTS) 16. The users of those user systems 12 might be users in differing capacities and the capacity of a particular user system 12 might be entirely determined by the current user. For example, where a salesperson is using a particular user system 12 to interact with MTS 16, that user system has the capacities allotted to that salesperson. However, while an administrator is using that user system to interact with MTS 16, that user system has the capacities allotted to that administrator.
Several elements in the system shown in FIG. 1 include conventional, well-known elements that need not be explained in detail here. For example, each user system 12 could include a desktop personal computer, workstation, laptop, PDA, cell phone, or any WAP-enabled device or any other computing device capable of interfacing directly or indirectly to the Internet or other network connection. User system 12 typically runs an HTTP client, e.g., a browsing program, such as Microsoft's Internet Explorer browser, Mozilla.org's Firefox™ browser, Google's Chrome browser, Opera's browser, or a WAP-enabled browser in the case of a cell phone, PDA or other wireless device, or the like, allowing a user (e.g., subscriber of a CRM system) of user system 12 to access, process and view information and pages available to it from MTS 16 over network 14. Each user system 12 also typically includes one or more user interface devices, such as a keyboard, a mouse, touch screen, pen or the like, for interacting with a graphical user interface (GUI) provided by the browser on a display (e.g., monitor screen, LCD display, etc.) in conjunction with pages, forms and other information provided by MTS 16 or other systems or servers. As discussed above, the exemplary systems are suitable for use with the Internet, which refers to a specific global internetwork of networks. However, it should be understood that other networks can be used instead of the Internet, such as an intranet, an extranet, a virtual private network (VPN), a non-TCP/IP based network, any LAN or WAN or the like.
In a system as described above, a very large number of automated test procedures may be used. The automated tests validate and verify the behavior of the system as it is developed. In addition, existing tests provide valuable regression coverage to ensure that extensions, bug fixes, and other modifications do not break existing functionality. However, many existing tests may be applicable to new features and new configurations, so a framework is provided to support reuse and extensibility of automated test procedures for a variety of configurations.
FIG. 3 shows an exemplary method 300 for automated software testing. At step 301, a set of available test options is obtained. The test option generally comprises data describing different features, data, or other configurations used to select which test procedures to use and/or as a parameter to direct the execution of a test procedure. For example, a set of test options may correspond to various subclasses of a parent class in an object-oriented programming system. Alternately, the test options by correspond to different report types, display options, or other configurations to be tested. The test options may be obtained from a database, configuration file, or other data source. The test options may also be “hard coded” in a programming language.
At step 302, a set of available test procedures are obtained. Each test procedure may have associated with it data, code, or other means to associate it with one or more of the test options. The set of test procedures may be obtained from a database, configuration file, or other data source. The set of test procedures may also be “hard coded” in a programming language. In a preferred embodiment, the test procedures may be obtained using the Java reflection API to obtain a list of methods in an object.
In steps 310-320, the method “loops through” each of the available test option values. In steps 311-314, the method executes a nested loop through each of the available test procedures. Thus, the method traverses all combinations of test option and test procedure. It will be recognized that nesting of loops may be reversed, or other traversal methods familiar to those skilled in the art, may be applied to equal effect. Within the loops, at step 312, the current test option is compared to the current test procedure to determine whether the procedure is applicable for the option.
For example, the MTS of FIGS. 1 and 2 may present reports with similar but different chart options. FIG. 4 shows exemplary charts Bar Chart 410 and Pie Chart 420. ChartTestMethods object 400 has test procedures 401-402. Bar Chart 410 and Pie Chart 420 are both chart objects that may be tested by methods 401-405. Thus, at step 301, the method may obtain two available test options corresponding to the two chart types, and at step 302 the method may obtain references to methods 401-405. At step 312; the method may determine that “testLegend” method 401 is applicable to both Bar Chart 410 and Pie Chart 420 to test legends 412 and 422. Step 312 may also determine that “testCaption” method 402 is also applicable to both charts 410 and 420, while “testPieSizes” method 403 is only applicable to Pie Chart 420 and “testAxes” method 404 and “testBarSizes” method 405 is applicable only to Bar Chart 410.
For each method that is applicable to a test option, at step 313 the option/procedure pair may be saved as a “test specification” and added to a suite of test specifications to be executed. At step 330, after each combination has been evaluated, the suite may be returned.
FIG. 5 shows another exemplary method 500. Similar to the method 300 in FIG. 3, at step 501, a set of available test options is obtained, and a set of available test procedures are obtained at step 502. Steps 501-530 loops through each of the available test option values and steps 510-520 execute a nested loop through each of the available test procedures. Thus, steps 511-514 are executed for each combination of test option and test procedure.
At step 511, the method obtains an “annotation” for the current procedure. In the Java programming language, annotations provide data about a program that is not part of the program itself. They generally have no direct effect on the operation of the code they annotate, although some annotations are available to be examined at runtime. The automated testing procedures (e.g., procedures 401-405 in FIG. 4) may each include one or more annotations which may define the test options or other conditions for which the procedure is applicable. Thus, at step 512 the annotation may be evaluated for the current test options (e.g., the test option value or a derivative thereof may be passed to a procedure defined by the annotation implementation). At step 513 the result of the annotation evaluation examination is evaluated to determine whether the current procedure is applicable for the current test option. If so, then at step 514 the option/procedure pair (e.g., a “test specification”) may be added to the suite of test specifications to be executed. After loops 501-530 and 510-520 are complete, the method returns the suite of test specifications at step 540.
FIG. 6 shows an exemplary method 600 for executing automated test procedures. At step 601 the method obtains a test suite (e.g., a set of test specifications including test option/procedure pairs). Steps 602-610 loop through the set of test specifications. At step 603, the test option value of the current test specification is applied (e.g., by setting an option value in an object, passing the test option value as a parameter to the test procedure, etc.). At step 604, the test procedure is executed with respect to the test option value. For example, referring again to FIG. 4, “testCaption” procedure 402 may verify a caption location in different locations for Bar Chart 410 and Pie Chart 420. In some cases, the test procedure may operate identically for all option values. For example, “testLegend” procedure 401 may perform the same tests for Bar Chart legend 412 and Pie Chart legend 422. At step 605, the test results are stored for later analysis. After the conclusion of loop 602-610, the method returns all of the results at step 620.
FIG. 7 shows an exemplary framework 700 for automating test procedures according to the present invention. Frame work 700 is based on the JUnit framework for unit testing in the Java programming language. JUnit provides a TestCase class 702 which defines a fixture to run multiple tests. To define a test case a test developer implements a subclass of TestCase and defines instance variables that store the state of the fixture. JUnit also provides a TestSuite class for collecting tests to be run. JUnit provides different test runners (e.g. TestRunner 701) which can run a test suite and collect the results. A test runner either expects a static method “suite” as an entry point to get a test to run or it will extract the suite automatically.
Framework 700 includes a test suite generator 750 configured to generate a suite of test specifications. The test specifications include option data corresponding to one of a set of test options and procedure data corresponding to a test procedure. In this exemplary embodiment, test suite generator 750 defines a test option interface 751 for the generic description of test options which a suite will depend upon. The framework will use this interface to get the test options available for a suite. A test options setter interface 752 is also defined to pass test option data to the test suite procedures at runtime.
ChartTests object 710 extends (directly or indirectly) the JUnit TestCase class to provide a plurality of methods 712 for testing charts. ChartTests object 710 defines ChartTestOptions 711 as an implementation of the generic TestOptions interface 751. ChartTests object 710 also implements the generic TestOptionsSetter interface 752 to receive test option data at runtime.
In general, the JUnit TestRunner 701 is provided reference to one or more TestCase objects such as ChartTests object 710. TestRunner 701 attempts to call a static “suite” method on the TestCase object to obtain a plurality of TestCase instances to run. The operation of framework 700 after the “suite” method is executed on ChartTests object 720 will now be described with respect to method 500 of FIG. 5. At step 501, ChartTests object 710 calls a “makeSuite” method on TestSuiteGenerator 750. ChartTests 710 also passes a reference to itself. At step 502, TestSuiteGenerator 750 uses the Java reflection API to obtain a list of methods ChartTests object 710 and selects all of the methods whose names begin with “test.”
In steps 501-530 TestSuiteGenerator 750 loops through each of the available test option values and at steps 510-520 TestSuiteGenerator 750 executes a nested loop through each of the ChartTestMethods 712. Thus, steps 511-514 are executed for each combination of test option and test procedure.
At step 511, TestSuiteGenerator 750 obtains a Java annotation object for the current procedure using the Java Annotation API. At step 512 TestSuiteGenerator 750 evaluates the annotation for the current test options (e.g., the test option value or a derivative thereof may be passed to a procedure defined by the annotation implementation). At step 513 TestSuiteGenerator 750 examines the result of the annotation evaluation to determine whether the current procedure is applicable for the current test option. If so, then at step 514 the option/procedure pair (e.g., a “test specification”) may be added to a suite of test specifications to be executed. The JUnit TestSuite API supports groups of TestCase object instances rather than option/procedure pairs. Therefore, in a preferred embodiment TestSuiteGenerator 750 may create an instance of the ChartTests object, add that instance to the JUnit TestSuite, and map that instance (e.g., using a Java HashMap object) to the option/procedure pair (e.g., using a Java Pair object). After loops 501-530 and 510-520 are complete, at step 540, TestSuiteGenerator 750 returns the TestSuite to the static ChartTests “suite” method, which may then return the TestSuite to TestRunner 701.
After generating the suite of TestCase objects (in this case, ChartTests object instances), TestRunner 701 may proceed to execute the tests. The operation of framework 700 to execute the tests will now be described with respect to method 600 of FIG. 6. Step 601 of obtaining a test suite corresponds to the test suite generation methods described herein. TestRunner 701 may then call a “runTests” method on the JUnit TestSuite object which now contains a plurality of instances of ChartTests 710. The TestSuite iterates over the set of ChartTests 710 instances in loop 602-610. At step 602, the TestSuite calls a “runTest” method on the ChartTests 710 instance, when then calls a “runTest” method on TestSuiteGenerator 750. TestSuiteGenerator 750 obtains the option/procedure pair associated with the instance of ChartTests 710. At step 603, TestSuiteGenerator uses the TestOptionsSetter interface 752 implemented by ChartTests 710 to set the current test option, and then executes the test procedure implemented by ChartTests 710. At step 605, the result of the test procedure execution is stored using a JUnit TestResult object.
1. A method of reusing automated test procedures in a computer processing system, the method comprising:
obtaining a plurality of available automated test procedures by calling a static method on a TestCase object to obtain a plurality of methods for testing, the available automated test procedures comprising existing tests that may be applicable to new features or new configurations;
obtaining a plurality of test options to be tested, each option of the plurality of test options comprising option data including an option value; and
for each combination of a current option of the plurality of test options and a current procedure of the plurality of available automated test procedures:
obtaining, by a test suite generator, an annotation for the current procedure, the annotation defining test options or other conditions for which the current procedure is applicable, wherein the annotation does not affect operation of the current procedure;
evaluating, by the test suite generator, the annotation with respect to the option data corresponding to the current option to determine whether the current procedure is applicable for the current option; and
if the current procedure is applicable for the current option:
generating a test specification corresponding to the combination of the current option and the current procedure, the test specification comprising the option data corresponding to the current option and procedure data corresponding to the current procedure;
adding the test specification corresponding to the combination of the current option and the current procedure to a suite of test specifications to be executed, wherein execution of the test specification results in the procedure data corresponding to the current procedure being executed with respect to the option value of the current option, wherein
generating the test specification comprises:
creating an instance of the TestCase object corresponding to the current procedure; and
mapping the instance of the TestCase object to the option data and the current procedure data; and
execution of the test specification comprises:
setting a current test option of the instance of the TestCase object to the option value; and
executing the current procedure implemented by the TestCase object.
2. The method of claim 1, wherein obtaining the plurality of available test procedures comprises searching for procedure implementations in a software object.
3. The method of claim 1, wherein each of the test options comprises a type of software object to test.
4. The method of claim 3, wherein generating the plurality of test specifications comprises determining which of the available automated test procedures are applicable to each of the types of software objects to test.
5. The method of claim 1, wherein the plurality of test options comprise the new features or the new configurations.
6. The method of claim 1, wherein the plurality of test options comprise extensions, bug fixes, and modifications.
7. The method of claim 1, wherein the plurality of test options correspond to types of reports generated by a multi-tenant database system.
8. The method of claim 1, wherein the plurality of test options correspond to per-tenant configurable options.
selecting the test specification from the suite;
obtaining the option value corresponding to the option associated with the selected test specification; and
executing the procedure data associated with the selected test specification, wherein the procedure data uses the option value to return a test result.
the plurality of available automated test procedures comprise a plurality of methods for testing charts; and
the plurality of test options comprise different chart types.
the option value comprises a parameter to direct the execution of the procedure data; and
the execution of the procedure data comprises passing the option value as the parameter to the current procedure at runtime.
creating an instance of a test object corresponding to the current procedure; and
mapping the instance of the test object to the option data and the procedure data; and
setting a current test option of the instance of the test object to the option value; and
executing the current procedure implemented by the test object.
13. The method of claim 1, wherein each option of the plurality of test options comprises a subclass of a parent class in an object-oriented programming system.
14. The method of claim 1, wherein each option of the plurality of test options comprises a different report type or display option.
15. A multi-tenant on-demand database system comprising processing hardware and storage, wherein the processing hardware is configured to:
obtain a plurality of available automated test procedures by calling a static method on a TestCase object to obtain a plurality of methods for testing, the available automated test procedures comprising existing tests that may be applicable to new features or new configurations;
obtain a plurality of test options to be tested, each option of the plurality of test options comprising option data including an option value; and
obtain an annotation for the current procedure, the annotation defining test options or other conditions for which the current procedure is applicable, wherein the annotation does not affect operation of the current procedure;
evaluate the annotation with respect to the option data corresponding to the current option to determine whether the current procedure is applicable for the current option; and
generate a test specification corresponding to the combination of the current option and the current procedure by creating an instance of the TestCase object corresponding to the current procedure and mapping the instance of the TestCase object to the option data and the current procedure data, the test specification comprising the option data corresponding to the current option and procedure data corresponding to the current procedure;
add the test specification corresponding to the combination of the current option and the current procedure to a suite of test specifications to be executed, wherein execution of the test specification comprises setting a current test option of the instance of the TestCase object to the option value and executing the current procedure implemented by the TestCase object, and execution of the test specification results in the procedure data corresponding to the current procedure being executed with respect to the option value of the current option.
16. A non-transitory media capable of storing program code executable by a computer processing system to:
generate a suite of test specifications to be executed by:
obtaining an annotation for the current procedure, the annotation defining test options or other conditions for which the current procedure is applicable, wherein the annotation does not affect operation of the current procedure;
evaluating the annotation with respect to the option data corresponding to the current option to determine whether the current procedure is applicable for the current option; and
adding the test specification corresponding to the combination of the current option and the current procedure to the suite of test specifications, wherein execution of the test specification results in the procedure data corresponding to the current procedure being executed with respect to the option value of the current option, wherein:
17. The non-transitory media of claim 16, wherein the program code is executable by the computer processing system to evaluate the annotation with respect to the option to determine whether the procedure is applicable for the option by comparing a name of the procedure to a value of the option.
18. The non-transitory media of claim 16, wherein the program code is executable by the computer processing system to obtain the plurality of available test procedures by searching for procedure implementations in a software object.
19. The non-transitory media of claim 16, wherein:
the computer processing system comprises a multi-tenant on-demand database system; and
the plurality of test options correspond to types of reports generated by the multi-tenant on-demand database system.
20. The non-transitory media of claim 16, wherein:
the plurality of test options correspond to per-tenant configurable options.
US12909820 2010-08-19 2010-10-21 Software and framework for reusable automated testing of computer software systems Active 2032-07-03 US9069901B2 (en)
US37521710 true 2010-08-19 2010-08-19
US12909820 US9069901B2 (en) 2010-08-19 2010-10-21 Software and framework for reusable automated testing of computer software systems
US20120047489A1 true US20120047489A1 (en) 2012-02-23
US9069901B2 true US9069901B2 (en) 2015-06-30
ID=45595073
US12909820 Active 2032-07-03 US9069901B2 (en) 2010-08-19 2010-10-21 Software and framework for reusable automated testing of computer software systems
US (1) US9069901B2 (en)
US9158665B2 (en) * 2012-05-31 2015-10-13 Vmware, Inc. Unit test of multi-threaded object-oriented applications using mocks
US8856745B2 (en) * 2012-08-01 2014-10-07 Oracle International Corporation System and method for using a shared standard expectation computation library to implement compliance tests with annotation based standard
US8843897B2 (en) 2012-08-01 2014-09-23 Oracle International Corporation System and method for using an abstract syntax tree to encapsulate the descriptive assertions in an annotation based standard into a code based library
US20040059420A1 (en) 2000-02-04 2004-03-25 Michelson Gary Karlin Expandable push-in arcuate interbody spinal fusion implant with tapered configuration during insertion
[Online]; [published on Apr. 22, 2008]; [retrieved on Feb. 26, 2010]; retrieved from http://en.wikipedia.org/wiki/Flat-file-database.
[Online]; [published on Apr. 25, 2008]; [retrieved on Feb. 26, 2010]; retrieved from http://en.wikipedia.org/wiki/Relational-database.
[Online]; [published on Oct. 16, 2008]; [retrieved on Feb. 26, 2010]; retrieved from http://en.wikipedia.org/wiki/Customer-Relationship-Management.
[Online]; [published on Oct. 17, 2008]; [retrieved on Feb. 26, 2010]; retrieved from http://en.wikipedia.org/wiki/Push-technology.
First named inventor: Bezar, Eric, U.S. Appl. No. 12/569,603, filed Sep. 2, 2010.
First named inventor: Calahan, Patrick, U.S. Appl. No. 12/954,556, filed Nov. 24, 2010.
First named inventor: Doshi, Kedar, U.S. Appl. No. 12/167,991, filed Jul. 3, 2008.
First named inventor: Durdik, Paul, U.S. Appl. No. 12/549,349, filed Aug. 27, 2009.
First named inventor: Pin, Olivier, U.S. Appl. No. 12/895,833, filed Sep. 30, 2010.
First named inventor: Press, William A., U.S. Appl. No. 12/850,502, filed Aug. 4, 2010.
First named inventor: Tanaka, Jay, U.S. Appl. No. 12/831,196, filed Jul. 6, 2010.
First named inventor: Tanaka, Jay, U.S. Appl. No. 12/831,209, filed Jul. 6, 2010.
First named inventor: Williams, Alexis, U.S. Appl. No. 13/028,236, filed Feb. 16, 2011.
First named inventor: Yancey, Scott, U.S. Appl. No. 12/132,409, filed Jun. 3, 2008.
First named inventor: Yancey, Scott, U.S. Appl. No. 12/197,979, filed Aug. 25, 2008.
First named inventor: Yancey, Scott, U.S. Appl. No. 12/636,658, filed Dec. 11, 2009.
First named inventor: Yancey, Scott, U.S. Appl. No. 12/636,675, filed Dec. 11, 2009.
Jeffrey Brown ("Change Chart Type by Using Data Validation" 2009). *
Jeffrey Brown, Change Chart Type by Using Data Validation, 2009. *
Lee et al: "Composition of executable business process models by combining business rules and process flows", Expert Systems With Application, Oxford, GB, vol. 33, No. 1, Dec. 22, 2006, pp. 221-229.
Mietzer et al: "Combining Different Multi-tenancy Patterns in Service Oriented Applications", IEE International Enterprise Distributed Object Computing Conference, NJ, USA, Sep. 1, 2009, pp. 131-140.
Notification of Transmittal of the International Search Report and the Written Opinion of the International Searching Authority, or the Declaration. International Application No. PCT/US2010/050021. International Filing Date: Sep. 23, 2010.
Wang et al: "A Study and Performance Evaluation of the Multi-Tenant Data Tier Design Patterns for Service Oriented Computing", IEE International Conference on E-Business Engineering, NJ, USA, Oct. 22, 2008, pp. 94-101.
Wang et al: "Integrated Constraint Violation Handling for Dynamic Services Composition", IEE International Conference on Services Computing, NJ, USA, Sep. 21, 2009, pp. 168-175.
Wermelinger et al: "Using coordination contracts for flexible adaptation to changing business rules", Proceedings of the Sixth International Workshop on Software Evolution, NJ, USA, Sep. 1, 2003, pp. 115-120.
US20120047489A1 (en) 2012-02-23 application
US20090089039A1 (en) 2009-04-02 System and method of emulating functionality of a web service
Shafique et al. 2010 A systematic review of model based testing tool support
Garousi et al. 2013 A systematic mapping study of web application testing
US20100005455A1 (en) 2010-01-07 Managing software dependencies during software testing and debugging
US7596720B2 (en) 2009-09-29 Application health checks
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:VARADHARAJAN, ARUNKUMARAN;REEL/FRAME:025177/0327