| <html> | 
 |  | 
 | <head> | 
 | <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> | 
 | <title>Using TPTP to Automate Functional Testing</title> | 
 |  | 
 | <link rel=Stylesheet type="text/css" media=all | 
 | 	href="../Article-TPTPAutomateFunctionalTesting/default_style.css"> | 
 | <link rel="stylesheet" href="../article.css" type="text/css" /> | 
 | </head> | 
 |  | 
 | <body> | 
 | <h1>Using TPTP to Automate Functional Testing</h1> | 
 |  | 
 | <div class="summary"> | 
 | <h2>Summary</h2> | 
 | This article provides an overview and some details of the design of a | 
 | functional test automation solution that was built using testing | 
 | frameworks available within the TPTP Testing Tools Project. | 
 |  | 
 | <div class="author">By Govin Varadarajan & Kim Letkeman, IBM | 
 | Canada</div> | 
 | <div class="copyright">Copyright © 2007 International | 
 | Business Machines Corp.</div> | 
 | <div class="date">March 29, 2007</div> | 
 | </div> | 
 |  | 
 | <div class="content"> | 
 | <h1>Introduction</h1> | 
 |  | 
 | <p>This paper discusses the design of a functional and performance | 
 | testing solution using TPTP [1] and TPTP Automated GUI Recorder [2].   | 
 | This solution is used within the Rational Modeling Platform groups Test | 
 | Automation system (RMPTAS) [5] to execute functional and performance | 
 | tests.  The Test Automation System is an end-to-end testing framework, | 
 | supporting the execution of multiple types of tests and including a | 
 | front-end viewer (a web interface for displaying the test results) and a | 
 | back-end (a database to store results from test executions).</p> | 
 |  | 
 | <h2><a name="_Toc154289790">Background and Philosophy</a></h2> | 
 |  | 
 | <p>The Rational Modeling team has had automated tests for a long | 
 | time, but these tests required significant maintenance and their | 
 | framework required too much baby-sitting to really be called <i>automated.</i></p> | 
 |  | 
 | <p>So the team began again from scratch with these basic guidelines:</p> | 
 |  | 
 | <ul> | 
 | 	<li>The system must reliably see every relevant build and must | 
 | 	respond without manual intervention</li> | 
 | 	<li>The system must be easily maintained, which required that it | 
 | 	be a modular design and that it use well-supported components</li> | 
 | 	<li>Writing automated tests must be easy … that is, | 
 | 	unnecessary barriers to entry must be eliminated</li> | 
 | 	<li>There must be as little extra overhead for developers as | 
 | 	possible, i.e. no extra applications to install</li> | 
 | 	<li>Tests should be able to verify everything, not just GUI | 
 | 	results, so a white box flavor is desirable</li> | 
 | 	<li>It must be possible to validate test executions without the | 
 | 	use of technologies such as bitmap comparison that render the test | 
 | 	cases brittle.</li> | 
 | </ul> | 
 |  | 
 | <p>The fundamental goal for the test automation solution is to | 
 | relieve developers of the burden of manual regression testing. | 
 | Regression testing is extremely repetitive, and developers find it | 
 | boring after the first time through. Running regression tests eventually | 
 | becomes a study in quick and painless execution, which of course means | 
 | that issues are missed.</p> | 
 |  | 
 | <p>The result is false negatives, where a failure is missed simply | 
 | because the developer glazes over from too deep a familiarity with the | 
 | test cases. Ironically, false positives are also common, where failures | 
 | are caught in later regression tests, leading development to incorrectly | 
 | assume a recent break and to waste a lot of debugging time.</p> | 
 |  | 
 | <h2><a name="_Toc154289791">Technology</a></h2> | 
 |  | 
 | <p>For the automation framework, a custom perl-script-based solution | 
 | was rejected as it has proven unreliable in the past. Instead, the | 
 | Software Test Automation Framework (STAF), an open-source solution from | 
 | IBMs Automated Integration and Middleware division was chosen as a | 
 | well-supported automation infra-structure. </p> | 
 |  | 
 | <p>For the test scripting language and supporting tools, several | 
 | approaches were examined. Abbot, a tool allowing automation of | 
 | keystrokes and mouse events, was explored in depth because of its | 
 | ability to be run in the developers environment with minimal overhead. | 
 | Tests can be crafted using the familiar JUnit style. Where Abbot came up | 
 | short was in support (none) and script recording (awkward using the | 
 | related Costello tools.)</p> | 
 |  | 
 |  | 
 | <p>External applications were also examined, and are in fact | 
 | supported in our automation framework. Rational Functional Tester (RFT) | 
 | is a powerful test application with a vibrant community and plenty of | 
 | support. However, in a developer's environment, the sheer size of the | 
 | installation is a barrier to entry; as well, RFT is designed to run | 
 | along side of the application under test, requiring very much a black | 
 | box approach. This is perfect for use by dedicated test teams, but is | 
 | not as efficient when used by development teams, as it makes it more | 
 | difficult to use white box techniques for verification points.</p> | 
 |  | 
 | <p>The automation project was turned on its head with the arrival of | 
 | the Automated GUI Recorder (AGR) from the Test and Performance Tools | 
 | Platform (TPTP) open source project. This is a very easy-to-use test | 
 | case recording system that creates simple XML scripts into which | 
 | verification hooks can easily be inserted and tracked by the test | 
 | automation framework. Stylistically, it uses the very familiar JUnit | 
 | framework and is fully extensible. Work is underway to complete the | 
 | missing features (drag and drop and GEF figure and palette support) in | 
 | order to have a complete test automation solution that is not sensitive | 
 | to minor GUI changes for test case verification.</p> | 
 |  | 
 | <p>It is important to clarify what minor GUI changes means in this | 
 | context. An example is a difference in the layout of a diagram between | 
 | two runs of a test case. When bitmap positions are remembered for the | 
 | entire diagram, even tiny changes in position can cause false positives. | 
 | During GUI development cycles, layout algorithms are subject to change, | 
 | which can render the location of an item on the diagram surface | 
 | differently by a few pixels in a subsequent execution. This makes any | 
 | bitmap comparison between the full diagrams brittle. Another source of | 
 | false differences is the slight change in colors that can occur | 
 | throughout the refinement stages of GUI development. Bitmap comparisons | 
 | are brittle by definition, and get more and more complex as attempts are | 
 | made to become color independent, and to create fuzzy location matching.</p> | 
 |  | 
 | <p>An important aspect of an automated test solution is the ability | 
 | to verify test executions for correctness.  In the earlier | 
 | perl-script-based system, verification was achieved using custom bitmap | 
 | comparison techniques, which were brittle and produced frequent false | 
 | positives.  In the new solution we wanted to avoid the use of bitmap | 
 | comparisons, and instead use custom verification libraries that directly | 
 | examine (using object-based recognition) our data to confirm the | 
 | correctness of the previous step(s.)  The AGRs verification support via | 
 | the <i>verification hook mechanism [3] </i>supports our approach because | 
 | it provides a convenient means for invoking custom verification | 
 | libraries that do not use any bitmap comparisons.  Details on the | 
 | "verification hook" based verification mechanism provided by | 
 | AGR may be found in the section entitled "Test Verification" | 
 | later in this article and the AGR User Guide [3].</p> | 
 |  | 
 | <p>Testers and developers can record AGR-based functional tests, | 
 | augmenting them with verification points that use well-tested libraries. | 
 | Included are methods for finding named elements in a model and the like. | 
 | Tests will be expected to follow naming and structure guidelines and to | 
 | be added into our configuration management system, where the automation | 
 | system will pick and execute them on every product build. Both component | 
 | assembly and packaged installation builds are supported. Great care | 
 | should be taken to avoid introducing unnecessary behavior difference in | 
 | your installs, so that your tests can move seamlessly between test | 
 | development and production environments.</p> | 
 |  | 
 | <p><i>Note that, as of March 2007, a solution was found that | 
 | provides a stable and reliable method for recording and playing back | 
 | diagram and palette events. The basic method was to extend the event | 
 | stream to include mouse events from diagram and palette controls. The | 
 | mouse events are anchored to the smallest window possible, which removes | 
 | the brittleness of location as an issue (i.e. location of a figure on a | 
 | diagram is not relevant, only location of the mouse event within the | 
 | figure  a much less brittle method.) The events are played back after | 
 | obtaining the figures edit part. This technique requires that a unique | 
 | identifier be generated for each figure and that the figure be retrieved | 
 | just before playing events destined for it. The details are too complex | 
 | for any further explanation and will require another article. The key | 
 | point is that we feel that the AGR solution is now complete to the level | 
 | needed to fully test our application.</i></p> | 
 |  | 
 | <h1><a name="_Toc154289792">Testing Solution Design</a></h1> | 
 |  | 
 | <p>Our functional test automation solution uses TPTP AGR 4.2.1 to | 
 | record and playback tests and TPTP Automatable Service Framework (ASF) | 
 | to automate the execution of tests and querying of test results.   For | 
 | those who are not very familiar with the TPTP technologies that are used | 
 | in this solution, some back ground information is provided in Appendix | 
 | -A</p> | 
 |  | 
 | <h2>Overview</h2> | 
 |  | 
 | <p>Figure 1 shows a high level view of the solution design with TPTP | 
 | platform components in light green and our custom components in dark | 
 | green.  As seen in Figure 1, the TPTP Testing Tools Project, which is | 
 | based on the TPTP Platform Project; provides means to create and execute | 
 | various types of tests such as JUnit, URL (Web stress testing), AGR and | 
 | Manual tests.  TPTP models test suites containing these types of tests | 
 | in instances of EMF models implementing open-source test data model | 
 | specifications such as the OMGs UML2 Testing Profile (UML2TP).   When | 
 | any of these types of tests are executed, test results become available | 
 | in execution history files which are also EMF model instances. These | 
 | execution history files may be viewed using the Test Log view, reported | 
 | using the integrated and extensible BIRT reports and queried for test | 
 | execution information and results. </p> | 
 |  | 
 | <div class="figure"><img src="images/image001.jpg"><br> | 
 | Figure 1: Test Automation Solution Design</div> | 
 |  | 
 | <p>For test automation, execution of tests may be automated using a | 
 | Test Execution Service that the TPTP Automatable Service Framework (ASF) | 
 | provides.  This service may be invoked using a command-line | 
 | interface/adapter that the service implementation provides.  In order to | 
 | completely automate a test solution, one also needs a mechanism to | 
 | automatically query execution history files.  At the time of developing | 
 | this solution, no suitable facility was available from TPTP for querying | 
 | the execution history files.  Hence, a new ASF service named Model Query | 
 | service was implemented to query execution history files.</p> | 
 |  | 
 | <p>In our functional test automation solution design, AGR tests are | 
 | executed using the ASF Test Execution services command-line | 
 | interface.   Artifacts produced during the execution of the tests are | 
 | semantically verified using a custom Model Verification Library, thereby | 
 | confirming the successful execution of tests.  The execution history | 
 | files resulting from the test execution are queried for results using | 
 | the Model Query service that we implemented.  This Model Query service | 
 | is invoked using a command-line interface/adapter that is provided by | 
 | the service implementation.  The information obtained upon querying the | 
 | execution histories is written to a log file for further use, although | 
 | alternatively this information could be directly written to a database | 
 | using another ASF service (referred to as database mutation service, in | 
 | Figure 1).  The RMPTAS reads the log file and populates a database with | 
 | the test results.</p> | 
 |  | 
 | <p>While the above section provides an over view of the solution | 
 | design, the next few sections describe the various components of the | 
 | test automation solution design in some detail.</p> | 
 |  | 
 | <h2><a name="_Toc154289793">Test Execution Service</a></h2> | 
 |  | 
 | <p>As mentioned above, ASF provides a test execution service for the | 
 | programmatic launch, execution and generation of test results.  With the | 
 | test execution service, tests can be launched using a headless Eclipse | 
 | from ant scripts, shell scripts and arbitrary programs.  Multiple tests | 
 | can be run at the same time given enough memory on the executing machine | 
 | (each service execution currently requires a separate Eclipse host | 
 | instance).  Even if tests are running on remote machines using TPTP | 
 | remote test execution features and deployment, the service consumers | 
 | machine is the machine that runs the Eclipse host instances.</p> | 
 |  | 
 | <p>Thus, in the design of our automatable functional and performance | 
 | testing solution, functional tests are developed using AGR.  TPTP | 
 | captures the developed test suites in instances of the TPTP Testing | 
 | Profile model (serialized as compressed XMI in *.testsuite files).   The | 
 | Test Execution Service provided by TPTP Automatable Service Framework | 
 | (ASF) is used to execute the test suites using the command-line | 
 | interface that the service implementation provides.</p> | 
 |  | 
 | <h2><a name="_Toc154289794">Workspace Creator</a> Application</h2> | 
 |  | 
 | <p>Upon attempting to use the ASF test execution service via the | 
 | command-line interface/adapter one will quickly realize that one needs | 
 | to provide the location of an Eclipse workspace containing the test | 
 | suites as one of the arguments.    Thus we designed and implemented a | 
 | workspace creator application (rich client platform application) that | 
 | when given an Eclipse plug-in containing the test suites | 
 | produces/creates an Eclipse workspace containing the test plug-in. This | 
 | application also provides a command-line interface/adapter in order to | 
 | facilitate easy invocation from within our test automation system.  | 
 | Thus, RMPTAS gathers the plug-ins containing the test suites from source | 
 | control, invokes the workspace creator to create Eclipse workspaces with | 
 | the test plug-ins and then invokes the test execution service to execute | 
 | the tests.  This is followed by a call to the model query service to | 
 | query the test execution results (test execution history serialized as | 
 | compressed XMI in *.execution files).</p> | 
 |  | 
 | <h2><a name="_Toc154289795">Model Query Service</a></h2> | 
 |  | 
 | <p>The execution of the test suites result in the creation of | 
 | instances of TPTP Execution History model (serialized as compressed XMI | 
 | in *.execution files).   Execution of one test suite produces one | 
 | instance of the Execution History model.  We implemented an Execution | 
 | History model query service that runs on the ASF to extract the required | 
 | results from the Execution History model instances.   To enable the | 
 | RMPTAS to use the service from the command line a command-line | 
 | interface/adapter was implemented.  The model query service queries the | 
 | Execution History and Testing Profile model instances to obtain all the | 
 | required result items (see Appendix-A for details of TPTP data models).  | 
 | The result items that are gathered from model instances include name of | 
 | the test suite, names of test cases with in the test suite, test case | 
 | verdicts  pass/fail/inconclusive and any messages (exception, stack | 
 | traces…etc) available from failed test cases.    The time taken by | 
 | the system to execute each test case in a test suite can also be | 
 | gathered from the Execution History model instances.  Presently, no | 
 | other performance related parameters, such as memory consumed, are | 
 | available in the Execution History model.  However, users can monitor | 
 | the target host (Linux and Windows) using the TPTP monitoring tools.  It | 
 | is understood that TPTP is working on integrating system monitoring with | 
 | test execution. Also, there is a feature enhancement request on AGR to | 
 | support gathering such values. When this feature enhancement is | 
 | implemented one should be able to gather other performance related data | 
 | from the Execution History model instances.</p> | 
 |  | 
 | <p>As mentioned earlier, in the current design the results are | 
 | written to a log file that is read by a database population utility that | 
 | RMPTAS already has in place.  An alternative to the design would have | 
 | been to use a database mutation service (based on ASF) to directly | 
 | populate the results in a database.  However, the former was chosen in | 
 | order to reuse some of the functionality that was already available | 
 | within RMPTAS.</p> | 
 |  | 
 | <h2><a name="_Toc154289796">Test Verification</a></h2> | 
 |  | 
 | <p>Besides providing a mechanism to record and play back user | 
 | interactions with the graphical user interface, AGR provides some basic | 
 | test verification infrastructure.  With this infrastructure, users can | 
 | ascertain simple things such as presence or absence of menu items using | 
 | AGR verification-by-selection mechanism.  AGR also supports a | 
 | "verification hook" based test verification mechanism.  To use | 
 | this test verification mechanism a test developer typically inserts a | 
 | verification point name during the test recording process (for a | 
 | tutorial on AGR, please see [3]).  This verification point is captured | 
 | as a JUnit method within a verification class associated with the test | 
 | suite, which extends from the JUnit framework.</p> | 
 |  | 
 | <p>The verification hook based verification mechanism is used in the | 
 | present solution design to semantically verify the contents of the | 
 | models produced during the execution of functional tests on IBM Rational | 
 | Modeling tools, such as Rational Software Architect; using a custom | 
 | Model Verification Library. This verification library has been designed | 
 | such that it can be easily invoked from within the Java-hook methods | 
 | with just a couple of lines of code.  Test case developers may use and | 
 | contribute to this test verification library and/or write new | 
 | verification libraries for their particular test verification needs.</p> | 
 |  | 
 | <p>Here is an example to further substantiate the above.  In this | 
 | example, a user action of creating a UML Class in a modeling project is | 
 | recorded as an AGR test case.  The system creates a class named | 
 | "Class1" by default. </p> | 
 |  | 
 | <div class="figure"><img src="images/image002.jpg"><br> | 
 | Figure 2: User gesture of recording the creation of a UML Class using | 
 | AGR</div> | 
 |  | 
 | <p>While Figure 2 shows the user gesture, Figure 3 shows the XML | 
 | script that is generated by AGR in the test case for this user action.   | 
 | The reference to the verification hook method that was inserted during | 
 | the test case recording may be seen in the XML macro associated with | 
 | this test case (this is marked in red and bold in the script in Figure | 
 | 3). This verification hook is invoked when the test case is executed.</p> | 
 |  | 
 | <div class="figure" style="margin-left:10px;margin-right:10px"> | 
 | <div style="text-align:left"><pre> | 
 | <macro version="0.1" > | 
 | 	<shell descriptive="Modeling - ModelerClassDiagram..."  | 
 | 		id="org.eclipse.ui.internal.WorkbenchWindow" return-code="-1" > | 
 | 		<command descriptive="AModelingProject" type="item-select"  | 
 | 			contextId="view/org.eclipse.ui.navigator.ProjectExplorer"  | 
 | 			widgetId="org.eclipse.swt.widgets.Tree#{{/}}-{{1.0}}" > | 
 | 			<item path="org.eclipse.swt.widgets.TreeItem#{{/AModelingProject}}-{{1.0}}"/> | 
 | 		</command> | 
 | 		<command type="focus" contextId="view/org.eclipse.ui.navigator.ProjectExplorer"  | 
 | 			widgetId="org.eclipse.swt.widgets.Composite#1" /> | 
 | 		<command descriptive="Package1" type="item-select"  | 
 | 			contextId="view/org.eclipse.ui.navigator.ProjectExplorer"  | 
 | 			widgetId="org.eclipse.swt.widgets.Tree#{{/}}-{{1.0}}" > | 
 | 			<item path="com.ibm.xtools.uml.navigator.ModelServerElement0|1||0||2|"/> | 
 | 		</command> | 
 | 		<command descriptive="Class" type="select"  | 
 | 			contextId="popup/view/org.eclipse.ui.navigator.ProjectExplorer/org.eclipse.swt.widgets.Tree#{{/}}-{{1.0}}"  | 
 | 			widgetId="org.eclipse.ui.internal.PluginActionContributionItem#{{Add &UML-&Class}}-{{0.8}}{{0|7}}-{{0.6}}{{true}}-{{0.1}}{{30}}-{{0.1}}{{Ar&tifact}}-{{0.2}}{{&Component}}-{{0.2}}" > | 
 | 			<parent widgetId="com.ibm.xtools.modeler.ui.actions.AddUMLMenu"/> | 
 | 		</command> | 
 | 		<font color="red"><strong><command type="verification"  | 
 | 			contextId="view/org.eclipse.ui.navigator.ProjectExplorer"  | 
 | 			location="/com.ibm.xtools.test.automation.samples.all.agrtests/src"  | 
 | 			resource="com.ibm.xtools.test.automation.samples.all.agrtests.verify.ModelerClassDiagramVerifier"  | 
 | 			hook="verifyClassCreation:Qorg.eclipse.ui.IViewPart;"/></strong></font> | 
 | 		<command type="wait" /> | 
 | 	</shell> | 
 | </macro> | 
 | </pre></div> | 
 | Figure 3: AGR test case XML macro for creating a UML Class</div> | 
 | <p>Figure 4 provides the details of the JUnit verification hook | 
 | method.  With in this JUnit method, one may see the call being made to | 
 | the custom model verification library  ModelVerifier, that is used to | 
 | semantically verify and assert that a UML Class named "Class1" | 
 | that was created during the test case execution is indeed present within | 
 | a UML Model named "Blank Model.emx".</p> | 
 |  | 
 |  | 
 |  | 
 | <div class="figure"><img src="images/image003.gif"> <br> | 
 | Figure 4:  JUnit verification hook method associated with the AGR test | 
 | case recording</div> | 
 |  | 
 | <p>One may specify any number of verification points while recording | 
 | a test case, although only one is specified in the above example.  If a | 
 | test developer chooses to do more than one concrete action within a | 
 | single test case, it may be beneficial to use multiple verification | 
 | points with each one located within the test case immediately after the | 
 | concrete action.  This will help in quick and easy debugging of any | 
 | problems encountered during test case execution.</p> | 
 |  | 
 | <p>The next section provides an over view of the work flow of how | 
 | AGR test developers in the Rational Modeling Platform Team could | 
 | contribute tests to be executed by RMPTAS.</p> | 
 |  | 
 | <h1><a name="_Toc154289797">Test </a>Execution in RMPTAS</h1> | 
 |  | 
 | <p>This section describes how developers and testers contribute | 
 | tests to be run by the RMPTAS. A test organization similar to that | 
 | specified in the AGR User Guide [3] will be followed while developing | 
 | the functional tests.   In this test organization, a plug-in project | 
 | (whose name ends with a ".agrtests") holds both the AGR test | 
 | suites and its verification code.  The test suites are contained within | 
 | a folder named "test-resources" and the verification code is | 
 | contained in a package within the "src" directory.   The | 
 | "test-resources" folder may contain any number of test suites | 
 | with a corresponding verification class containing its verification hook | 
 | methods within the "src" folder.  An example of such a | 
 | configuration may be found in Figure 5.</p> | 
 |  | 
 | <div class="figure"><img src="images/image004.jpg"><br> | 
 | Figure 5: Organization of AGR Based Functional and Performance Tests</div> | 
 |  | 
 | <p>The simple steps that any functional test developer would need to | 
 | follow for contributing tests to be executed by the RMPTAS are:</p> | 
 | <ul> | 
 | 	<li>Set up test development environment with AGR and Model | 
 | 	Verification library (or any other verification library that is needed) | 
 | 	and a standalone Agent Controller (although the IAC will suffice).</li> | 
 |  | 
 | 	<li>Start the standalone Agent Controller.</li> | 
 |  | 
 | 	<li>Create a plug-in project whose name ends with | 
 | 	".agrtests".</li> | 
 |  | 
 | 	<li>Create functional tests using AGR, Model verification library | 
 | 	and any other custom verification libraries.</li> | 
 |  | 
 | 	<li>Test developed functional tests in Quick and Standard modes to | 
 | 	ensure that they execute properly.</li> | 
 |  | 
 | 	<li>Submit code into source control.</li> | 
 | </ul> | 
 |  | 
 | <p>RMPTAS will automatically pick up the test plug-ins from source | 
 | control, create entries in the database for any new tests found, execute | 
 | the tests and gather results.</p> | 
 |  | 
 | <h1>Some Known Issues with AGR</h1> | 
 |  | 
 | <p>While AGR has become much more stable than when it was originally | 
 | released as a Technology Preview item over a year ago, this section | 
 | lists some of the presently known issues in AGR.  It may be worth noting | 
 | that while the problems listed below were found with TPTP4.2.1 and 4.3, | 
 | it is understood that some of the issues are slated to be resolved (or | 
 | already resolved) in the current release of TPTP (TPTP 4.4). </p> | 
 |  | 
 | <h3>Known Problems with AGR 4.2.1 and 4.3</h3> | 
 | <ol> | 
 | 	<li>If the location of a widget is different between the test | 
 | 	development and test execution environments, the test cases fail to | 
 | 	execute on an "item-select" command.  The default adaptive | 
 | 	widget resolver must be robust and capable of dealing with cases such | 
 | 	as this (<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=128271">Bug | 
 | 	128271</a>, <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=163943">Bug | 
 | 	163943</a>).  These defects have been addressed in TPTP4.3 AGR and TPTP4.4 | 
 | 	AGR.  See the section on AGR in Appendix-A for details on how AGR | 
 | 	resolves items in a tree. | 
 | 	<blockquote>As an aside, it is in the authors' experience | 
 | 	that some test case developers tend to copy XML script from another | 
 | 	similar test case in order to save time instead of creating test cases | 
 | 	from scratch.   This not necessarily works all the time.  One of the | 
 | 	reasons is that stated as a problem in item#1 above. That is, the index | 
 | 	of the tree item that the test developer wants to work with in the new | 
 | 	test case may not necessarily be the same as the item in the test case | 
 | 	that was copied from.  Note: Initial trials with TPTP4.4 AGR indicate | 
 | 	that more robust widget resolving mechanism has indeed been implemented | 
 | 	and the problem stated in Item#1 seems to have been resolved.</blockquote> | 
 | 	</li> | 
 |  | 
 | 	<li>A similar problem is encountered due to any small change in | 
 | 	the GUI, such as when index of an item changes in a tree.  In the | 
 | 	example below (see Figures 6, 7 & 8), the index of the Package | 
 | 	element  "Package1" is different in the two cases.  As a | 
 | 	result, for example: when one tries to select  "Package1" and | 
 | 	create a UML Class element (using the test case script in Figure 3 | 
 | 	above) within it, one will quickly notice that the test (Figure 3) | 
 | 	passes in one case (Figure 6) but fails in the others (Figure 7 & | 
 | 	Figure 8).  AGR needs to be fairly resilient to gracefully handle such | 
 | 	simple changes in the GUI. | 
 | 	<blockquote> | 
 | 	<div class="figure"><img src="images/image005.gif"><br> | 
 | 	Figure 6: Package Element "Package1" is the third element | 
 | 	within Blank Model</div> | 
 |  | 
 | 	<div class="figure"><img src="images/image006.jpg"><br> | 
 | 	Figure 7: Package Element "Package1" is the first element | 
 | 	within Blank Model</div> | 
 |  | 
 | 	<div class="figure"><img src="images/image007.jpg"><br> | 
 | 	Figure 8: Package Element "Package1" is the sixth element | 
 | 	within Blank Model</div> | 
 | 	</blockquote> | 
 | 	</li> | 
 |  | 
 | 	<li>Difference in the state of tree items makes the test cases to | 
 | 	fail.  For example: when a tree item is already open during test case | 
 | 	development, a test case developer may directly select an item | 
 | 	contained within the already open tree item.  Suppose, the environment | 
 | 	where the test is executed has that tree closed; then the test case | 
 | 	fails on an "item-select" command as it is unable to select | 
 | 	the item within the closed tree.  The default adaptive widget resolver | 
 | 	must be robust and capable of dealing with cases such as this (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=164197">Bug | 
 | 	164197</a>). This defect has been addressed in TPTP4.4 AGR. | 
 | 	<blockquote>Workaround: A possible workaround solution is | 
 | 	to always expand the parent item first and then select the child which | 
 | 	you want to edit and modify it. Even in the case where the parent is | 
 | 	already expanded, one can close the expansion and then re-expand the | 
 | 	parent and the recording should play back successfully.</blockquote> | 
 |  | 
 | 	<blockquote>As an aside, while it is understood that it is | 
 | 	necessary to develop the test cases in an environment that is exactly | 
 | 	the same as the one in which the test case will be executed, this is a | 
 | 	very big constraint and often very difficult to maintain.</blockquote> | 
 | 	</li> | 
 | 	<li>Inability to deal with unexpected pop-up messages (such as | 
 | 	"capability enablement prompt", for example) that does not | 
 | 	appear on the development environment while the test case is developed, | 
 | 	however it appears on the runtime environment when the test case is | 
 | 	executed.  Since this is an unexpected dialog and has the focus, the | 
 | 	system does not know how to proceed further and fails during test case | 
 | 	execution (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=168754">Bug | 
 | 	168754</a>). This defect has been slated to be addressed in TPTP4.4 AGR. | 
 |  | 
 | 	<blockquote>Workaround: A possible work around for this | 
 | 	issue is to enable all capabilities up front in a separate test case | 
 | 	before the actual tests.</blockquote> | 
 | 	</li> | 
 | 	<li>The difference in the name of menu items between platforms | 
 | 	(Linux and Windows) renders AGR test cases non-portable from one | 
 | 	platform to another.  For example: "File > New" on Windows | 
 | 	has a different order of shortcut keys compared to that on Linux.  Due | 
 | 	to this reason, the test cases developed on one platform do not | 
 | 	necessarily execute on the other platform (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=170375">Bug | 
 | 	170375</a>  and <a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=159725">Bug | 
 | 	159725</a>).  The former defect has been slated to be addressed by TPTP in | 
 | 	TPTP4.4 AGR.</li> | 
 |  | 
 | 	<li>AGR does not provide a mechanism for listening to events from | 
 | 	user interactions with native dialogs.  An example of a native dialog | 
 | 	is the file dialog that appears when users click on a browse button (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=164192">Bug | 
 | 	164192</a>).  A target date for a fix to this problem has not yet been | 
 | 	decided.</li> | 
 |  | 
 | 	<li>In order to minimize test recorders sensitivity to UI | 
 | 	changes, a feature called "Object Mine" was recently | 
 | 	introduced.  This feature helps keep the test macro modifications to a | 
 | 	minimum when widget IDs need to be changed  (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=144763">Bug | 
 | 	144763</a> ).  This feature enhancement was introduced in TPTP4.3 AGR</li> | 
 |  | 
 | 	<blockquote>Note: With the object mine feature enabled, a | 
 | 	test developer needs to be cautious to not take short cuts such as | 
 | 	copy/paste test cases when recording a test case that is similar to one | 
 | 	that was recorded earlier (for example: recording the creation of a UML | 
 | 	Class versus the creation of a UML Interface in Rational Software | 
 | 	Architect). When the object mine feature is enabled, some of the common | 
 | 	information gets captured in the object mine and thus copying just the | 
 | 	information from one test case macro to another will not always work | 
 | 	correctly.  To avoid any problems, it was found best not to follow any | 
 | 	such short cuts, but rather generate all test cases with appropriate | 
 | 	user gestures.</blockquote> | 
 |  | 
 | 	<li>Very often developers develop new Eclipse plug-ins and AGR | 
 | 	test plug-ins containing test cases that test the new features provided | 
 | 	by the new plug-ins in the same workspace.  In such a case, the | 
 | 	run-time environment that is launched on executing the AGR tests does | 
 | 	not contain the features provided by the new plug-in contained in the | 
 | 	development workspace.  AGR needs to make it easier for users to run | 
 | 	AGR test suites against plug-ins that are included in the workspace (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=165526">Bug | 
 | 	165526</a>).  A target date for a fix to this problem has not yet been | 
 | 	decided.</li> | 
 | </ol> | 
 |  | 
 | <h3>AGR Feature Enhancements:</h3> | 
 |  | 
 | <ol> | 
 |  | 
 | 	<li>AGR presently does not support GEF based recording/replay (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=133099">Bug | 
 | 	133099</a> ).  This feature enhancement work is in progress.</li> | 
 |  | 
 | 	<li>AGR presently does not support drag/drop (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=148184"> Bug | 
 | 	148184</a> ).  This feature enhancement work is in progress.</li> | 
 |  | 
 | 	<li>Enable automated performance testing of Eclipse applications | 
 | 	using the Automated GUI Recorder (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=134747">Bug | 
 | 	134747</a> ). This feature enhancement has not yet been targeted to any | 
 | 	TPTP release.</li> | 
 |  | 
 | 	<li>Inability to create a TPTP test suite containing different | 
 | 	types of TPTP tests  such as a mixture of  TPTP AGR tests, TPTP JUnit | 
 | 	tests, TPTP Manual tests… etc. (<a | 
 | 		href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=123277">Bug | 
 | 	123277</a>).  This feature enhancement has not yet been targeted to any | 
 | 	TPTP release.</li> | 
 | </ol> | 
 |  | 
 | <h2><a name="_Toc154289798">Concluding Remarks</a></h2> | 
 |  | 
 | <p>At the time of writing this paper, AGR is still a Technology | 
 | Preview feature and has a few issues that need to be fixed, but is seen | 
 | to have a very strong potential for being used as a reliable tool for | 
 | functional testing of Eclipse based applications. Work is underway to | 
 | provide GEF support in open source in order to provide a complete | 
 | automated testing environment. Initial trials with TPTP4.4 AGR indicate | 
 | that several of the problems listed in the "Some Known Issues with | 
 | AGR" section may have been resolved.  Thus, an update to this | 
 | article will be issued soon after TPTP4.4 GA.</p> | 
 |  | 
 | <p>Users/extenders interested in getting involved with the TPTP | 
 | project may find the information at the following articles useful. | 
 | <p> | 
 | <ul> | 
 | 	<li><a | 
 | 		href="http://www.eclipse.org/tptp/home/project_info/general/buildon.html">"Building | 
 | 	on TPTP"</a></li> | 
 | 	<li><a | 
 | 		href="http://www.eclipse.org/tptp/home/project_info/general/contribute_or_feedback.html">"Contributing | 
 | 	to TPTP"</a></li> | 
 | </ul> | 
 |  | 
 |  | 
 | <h2><a name="_Toc154289799">Acknowledgements</a></h2> | 
 |  | 
 | <p>The authors wish to thank Daniel Leroux, Yves Grenier, David | 
 | Lander, Ali Mehregani, Scott Schneider, Paul Slauenwhite, Joseph P | 
 | Toomey, Christian Damus, Duc Luu and Tao Weng.</p> | 
 |  | 
 | <h2><a name="_Toc154289800">Background on the authors</a></h2> | 
 |  | 
 | <p>Govin Varadarajan joined IBM in 2003 with over 5 years of work | 
 | experience in the software industry developing network management and | 
 | automated resource management/provisioning software solutions.  His | 
 | responsibilities with the IBM Rational Modeling Division include | 
 | development of test automation solutions, assessing and reporting on the | 
 | quality of modeling products. He has a Masters degree in Computer | 
 | Science from Queens University and two other Masters degrees in the | 
 | fields of Aerospace and Civil Engineering besides a Bachelor degree in | 
 | Civil Engineering. </p> | 
 |  | 
 | <p>Kim Letkeman joined IBM in 2003 with 24 years in large financial | 
 | and telecommunications systems development. He is the development lead | 
 | for the Rational Modeling Platform team.</p> | 
 |  | 
 | <h2><a name="_Toc154289801">References</a></h2> | 
 |  | 
 | <p>[1] Anon, "Eclipse Test & Performance Tools Platform | 
 | Project (TPTP)", <a href="http://www.eclipse.org/tptp">http://www.eclipse.org/tptp</a></p> | 
 |  | 
 |  | 
 |  | 
 | <p>[2] Anon, "Technology Preview: Automated GUI | 
 | Recording", <a | 
 | 	href="http://www.eclipse.org/tptp/home/downloads/downloads.php">http://www.eclipse.org/tptp/home/downloads/downloads.php</a></p> | 
 |  | 
 |  | 
 |  | 
 | <p>[3] Anon, "TPTP AGR User Guide",</p> | 
 |  | 
 | <p><a | 
 | 	href="http://www.eclipse.org/tptp/test/documents/userguides/Intro-Auto-GUI-4-2-0.html">http://www.eclipse.org/tptp/test/documents/userguides/Intro-Auto-GUI-4-2-0.html</a></p> | 
 |  | 
 | <p><a | 
 | 	href="http://www.eclipse.org/tptp/test/documents/userguides/Intro-Auto-GUI-4-3-0.html">http://www.eclipse.org/tptp/test/documents/userguides/Intro-Auto-GUI-4-3-0.html</a></p> | 
 |  | 
 |  | 
 |  | 
 | <p>[4] Chan, E and Nagarajan, G, "Profile your Java application | 
 | using the Eclipse Test and Performance Tools Platform (TPTP)", | 
 | EclipseCon 2006, <a | 
 | 	href="http://www.eclipsecon.org/2006/Sub.do?id=all&type=tutorial">http://www.eclipsecon.org/2006/Sub.do?id=all&type=tutorial</a></p> | 
 |  | 
 |  | 
 |  | 
 | <p>[5] Yves Grenier, David Lander and Govin Varadarajan, | 
 | "Rational Modeling Platform Test Automation System", IBM | 
 | Ottawa Lab.</p> | 
 |  | 
 |  | 
 |  | 
 | <p>[6] Kaylor, A, "The Eclipse Test and Performance Tools | 
 | Platform", Dr. Dobbs Portal, <a | 
 | 	href="http://www.ddj.com/184406283">http://www.ddj.com/dept/opensource/184406283</a></p> | 
 |  | 
 |  | 
 |  | 
 | <p>[7] Schneider, S.E and Toomey, J, "Achieving Continuous | 
 | Integration with the Eclipse Test and Performance Tools Platform | 
 | (TPTP):  Using TPTP Automatable Services to continually test and report | 
 | on the health of your system", EclipseCon 2006, <a | 
 | 	href="http://www.eclipsecon.org/2006/Sub.do?id=all&type=tutorial">http://www.eclipsecon.org/2006/Sub.do?id=all&type=tutorial</a></p> | 
 |  | 
 |  | 
 |  | 
 | <p>[8] Slauenwhite, P, "Testing Applications Using the Eclipse | 
 | Test and Performance Tools Platform (TPTP)", EclipseCon 2006, <a | 
 | 	href="http://www.eclipsecon.org/2006/Sub.do?id=all&type=tutorial">http://www.eclipsecon.org/2006/Sub.do?id=all&type=tutorial</a></p> | 
 |  | 
 |  | 
 |  | 
 | <p>[9] Slauenwhite, P, "Problem Determination of J2EE Web | 
 | Applications Using the Eclipse Test and Performance Tools Platform | 
 | (TPTP)", EclipseCon 2006, <a | 
 | 	href="http://www.eclipsecon.org/2006/Sub.do?id=all&type=tutorial">http://www.eclipsecon.org/2006/Sub.do?id=all&type=tutorial</a></p> | 
 |  | 
 |  | 
 |  | 
 | <h1><a name="_Toc154289803">Appendix A: Technology in the | 
 | Functional Test Automation </a>Solution</h1> | 
 |  | 
 | <p>This section provides background information on the technologies | 
 | used within the functional test automation solution.</p> | 
 |  | 
 | <h2><a name="_Toc154289804">TPTP</a></h2> | 
 |  | 
 | <p>In 2004, the Eclipse Tools project named Hyades was promoted to | 
 | an Eclipse Project and renamed "Eclipse Test & Performance | 
 | Tools Platform Project (TPTP)". TPTP is an Open-source platform for | 
 | Automated Software Quality tools including reference implementations for | 
 | testing, tracing and monitoring software systems.   It addresses the | 
 | entire test and performance life cycle, from early testing to production | 
 | application monitoring, including test editing and execution, | 
 | monitoring, tracing, profiling, and log analysis capabilities.<b> </b>The | 
 | platform is designed to facilitate integration with tools used in the | 
 | different processes of a software lifecycle under an Eclipse environment | 
 | [1].  </p> | 
 |  | 
 |  | 
 |  | 
 | <p>TPTP defines four sub projects  Platform, Testing Tools, Trace | 
 | & Profiling and Monitoring.  The sub-project that is most relevant | 
 | to this paper is the Testing Tools sub-project. This sub-project extends | 
 | the TPTP Platform and provides a common framework for testing tools | 
 | thereby integrating disparate test types and execution environments.  It | 
 | includes test tool reference implementations for Manual testing, JUnit | 
 | and JUnit Plug-in testing, URL testing and Automated GUI | 
 | Recording/Playback. <a name="OLE_LINK1">[1]. </a>The TPTP platform | 
 | shares data through OMG-defined models.   These models are described in | 
 | the next section.</p> | 
 |  | 
 | <h2><a name="_Toc154289805">TPTP Data Models</a></h2> | 
 |  | 
 | <p>TPTP implements four core EMF data models  Trace, Log, | 
 | Statistical and Test.  These models are used as an integration point | 
 | within TPTP. The TPTP User Interface and Execution Environment are built | 
 | on these data models.  Model loaders consuming structured XML fragments | 
 | originating from a variety of sources [4, 7, 8 and 9] populate these | 
 | models.</p> | 
 |  | 
 |  | 
 |  | 
 | <p>The model that is most relevant for this paper is the Test | 
 | model.  So, only this model will be described in some detail.  The Test | 
 | model consists of Testing Profile (see Figure 9), Behavioral and | 
 | Execution History data models (see Figure 10).   The Testing Profile | 
 | data model provides a reference implementation of the UML2 Test | 
 | Profiles standalone MetaObject Facility model (UML2TP MOF).   UML2TP | 
 | MOF provides a definition model for the creation, definition and | 
 | management of test artifacts such as Test suites, Test cases and | 
 | Datapools.   The Behavioral model implements the UML2 interactions | 
 | meta-model.  This model is used for defining the behavior of test suites | 
 | such as loops, invocations and synchronization.  The Execution History | 
 | is a model for the creation, definition, management and persistence of | 
 | test executions over time.   The execution of a test suite results in | 
 | the creation of an execution history.  Execution History models include | 
 | information about the tests that were deployed and executed, information | 
 | about where it was executed (locations), verdicts, attachments, messages | 
 | and console output from test executions. </p> | 
 |  | 
 |  | 
 |  | 
 | <div class="figure"><img src="images/image008.jpg"><br> | 
 | Figure 9: UML diagram of Testing Profile model (from [7])</div> | 
 |  | 
 | <div class="figure"><img src="images/image009.jpg"><br> | 
 | Figure 10: UML diagram of Execution History model (from [7])</div> | 
 |  | 
 | <h2><a name="_Toc154289806">TPTP Agent Controller</a></h2> | 
 |  | 
 | <p>By feeding data into the models described in the above section, | 
 | tools open up possibilities for interaction with editors and viewers | 
 | that are designed around these models.  The data models are supported by | 
 | a common framework for accessing data-collection and test-execution | 
 | agents.  In the context of TPTP, an "agent" is defined as a | 
 | logical object that exposes services through the TPTP Agent Controller.  | 
 | In TPTP, these agents run in a separate process from the Agent | 
 | Controller (though multiple agents can exist within a single process). </p> | 
 |  | 
 |  | 
 |  | 
 | <p>TPTP provides a client library that manages communications with | 
 | an Agent Controller that can be running locally or on a remote system.  | 
 | The Agent Controller is a process (daemon on UNIX and service on | 
 | Windows) that resides on each deployment host and provides the mechanism | 
 | by which client applications can either launch new host processes, or | 
 | attach to agents that coexist within existing host processes. The client | 
 | can reside on the same host as the Agent Controller, or it can be | 
 | remote.  The test assets are deployed to the remote machine using the | 
 | Agent Controllers file transfer service. The Agent Controller provides | 
 | a server that has the capability to launch and manage local or remote | 
 | applications from a local TPTP workbench.  The Agent Controller manages | 
 | access to and control of agents running on the target system. </p> | 
 |  | 
 |  | 
 |  | 
 | <p>The Agent controller may be run as a stand-alone server/service | 
 | to deploy and execute tests either locally or remotely.  TPTP workbench | 
 | also provides a feature called the Integrated Agent Controller (IAC) | 
 | that is used to launch tests locally from the TPTP workbench.   The | 
 | biggest benefit of having Integrated Agent Controller is the | 
 | simplification in the usage of TPTP functionalities in the local | 
 | scenario by removing the dependencies on the local Agent Controller. For | 
 | example: there is no need to install and configure the local Agent | 
 | Controller when launching tests locally from the TPTP workbench.   IAC | 
 | provides the entry-level functionalities of the standalone Agent | 
 | Controller.  To get the full functionalities, the standalone Agent | 
 | Controller is still the way to go.  IAC is packaged in the TPTP Platform | 
 | Runtime install image and therefore no separate install step is | 
 | required.  The Integrated Agent Controller does not require any | 
 | configuration, but the user can configure it in the preferences page.  | 
 | Unlike the stand-alone Agent Controller which requires the user to enter | 
 | information such as the path for the Java executable, the IAC will | 
 | determine the required information from Eclipse workbench during | 
 | startup.</p> | 
 |  | 
 |  | 
 |  | 
 | <h2><a name="_Toc154289807">TPTP Automated GUI Record</a>er</h2> | 
 |  | 
 | <p>TPTP Automated GUI Recorder (AGR) allows users to record and | 
 | playback user interactions under the Eclipse platform. The purpose of | 
 | the feature is to allow users to automate functional test cases for | 
 | applications developed under the Eclipse environment.   This section | 
 | will only provide a quick overview of the AGR feature since a | 
 | well-written user guide for the same may be found on the TPTP web site | 
 | [3].   </p> | 
 |  | 
 |  | 
 |  | 
 | <p>During the test case recording phase, AGR captures the user | 
 | gestures as XML based scripts. The so recorded script is replayed when | 
 | the test case is executed.   AGR provides a simple "VCR-type" | 
 | interface to record test cases.   The recorded test cases may be | 
 | executed either in Quick mode or Standard Mode.  In Quick mode, the | 
 | tests are executed in the test development workbench.  This is typically | 
 | used to quickly verify that a test case was properly recorded.  In the | 
 | Standard mode the test cases are run on a run-time workbench using a | 
 | launch configuration. </p> | 
 |  | 
 |  | 
 |  | 
 | <p>AGR supports two types of test verification mechanisms  | 
 | verification by selection and verification via | 
 | "verification-hook" defined within a verification class that | 
 | extends from JUnit framework.  Verification by selection is typically | 
 | used for simple verification tasks such as ensuring the presence of a | 
 | menu item.  The idea behind this method of verification is that if the | 
 | system is able to select an item, then it means that the item exists.    | 
 | Verification by verification-hook is a mechanism that uses a method | 
 | (hook) in a JUnit based verification class to provide the verification | 
 | functionality.  The support for verification-hook based verification | 
 | basically opens the door to the use of different verification libraries | 
 | that users may implement. On the test case recording interface, the test | 
 | case developer provides the name of the verification hook method that | 
 | will be used to verify the test case execution.</p> | 
 |  | 
 | <p>Once the test cases are defined, the user needs to define a | 
 | behavior that specifies how the test cases are to be executed.  A | 
 | behavior typically includes invocations and loops.  TPTP supports both | 
 | local and remote deployment and execution of tests.  If the tests are to | 
 | be executed remotely the user has to define the remote context for the | 
 | test suite execution.  Defining a context for test suite execution | 
 | typically requires the user to create a deployment specifying what needs | 
 | to be executed (the artifact containing the test suite and possible | 
 | datapool) and where it needs to be executed (the location).  If such a | 
 | deployment is not created, the default is local execution. </p> | 
 |  | 
 |  | 
 |  | 
 | <p>In order to minimize test recorders sensitivity to UI changes, | 
 | an optional feature that may be enabled while recording an AGR test case | 
 | called "Object Mine" was introduced in TPTP 4.3 AGR.  This | 
 | feature helps keep the test macro modifications to a minimum when widget | 
 | IDs need to be changed.  However, as mentioned in the "known | 
 | problems" section some problems may result when a test case | 
 | developer tries to copy/paste test macros with Object Mine feature | 
 | enabled.</p> | 
 |  | 
 |  | 
 |  | 
 | <p>As explained in the section entitled "Widget Resolving | 
 | Mechanism" of the AGR User Guide [3], AGR resolves widgets based on | 
 | a number of properties that are defined on the widget.  These properties | 
 | are specified in an XML file named "widgetReg.xml" that is | 
 | typically located at | 
 | "<ECLIPSE-HOME>/plugins/org.eclipse.tptp.test.auto.gui/auto-gui/".  | 
 | This file is read by AGRs default widget resolver mechanism  adaptive | 
 | widget resolver, to determine how a particular widget is to be | 
 | resolved.  A weight attribute associated with each of the widget | 
 | property indicates how well it identifies the widget.   During widget | 
 | resolution time AGR determines the correct widget by matching the | 
 | cumulative weight of a widget against the "maxThreshold" | 
 | attribute value provided in the widgetReg.xml file against the | 
 | appropriate widget class.   If widgetReg.xml does not contain any | 
 | details for the widget in question, then default values are used for | 
 | widget resolution.  AGR also supports a user-defined widget resolving | 
 | mechanism.  It provides an extension point that allows clients to | 
 | register their own personal widget resolvers. </p> | 
 |  | 
 |  | 
 |  | 
 | <p>It was noticed that the default widget resolution support | 
 | provided in TPTP4.2.0/TPTP4.2.1/TPTP4.2.2 and TPTP4.3 were insufficient | 
 | and resulted in problem situations as described in the "Known | 
 | Issues" section.  However, initial trials with TPTP4.4 AGR indicate | 
 | that such issues have been fixed.  The TPTP AGR feature is presently a | 
 | Technology Preview item [2].    At the time of writing this paper, some | 
 | suggestions have been made for making TPTP AGR feature more robust and | 
 | are being implemented.  RCP support is impending.</p> | 
 |  | 
 |  | 
 |  | 
 | <h2><a name="_Toc154289808">TPTP Automatable Service Framework</a></h2> | 
 |  | 
 | <p>TPTP provides an Automatable Service Framework (ASF) that | 
 | features support for the provision and consumption of Eclipse hosted | 
 | TPTP services from disparate environments.  Given that these services | 
 | are fundamentally black-box components that publish themselves via | 
 | extensions (with an associated specification of supported properties and | 
 | a behavioral contract) it is possible to create a new service provider | 
 | implementing the same service.  This implementation approach allows for | 
 | a loose and dynamic binding between the service consumer and service | 
 | provider. Users can develop automation client adapters that adapt new | 
 | service consumer paradigms into the standard automation client | 
 | interfaces provided in TPTP. Thus, using the ASF it is possible to take | 
 | a program functionality that is typically limited to running inside of | 
 | an isolated Eclipse instance and expose it publicly to consumers outside | 
 | of the Eclipse environment by wrapping it with TPTP automatable service | 
 | abstractions [7].</p> | 
 |  | 
 |  | 
 |  | 
 | <p>At the time of writing this paper, TPTP provides a Test Execution | 
 | service and various client adapters (Java, CLI and Ant) to invoke the | 
 | service.  It also provides very rudimentary implementations of services | 
 | for interpreting Test Execution History models and for publishing test | 
 | results.</p> | 
 |  | 
 | </div> | 
 |  | 
 | </body> | 
 |  | 
 | </html> |