blob: bcfbeb82324c82d1cdc4aee07c7431fc7efcbdbe [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:ContentDescription xmi:version="2.0"
xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.5/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.0" xmi:id="-ejZeo5A3u76_1K4bqoFH6g"
name=",_J-T2kG6ZEdueuJFacHVsEA" guid="-ejZeo5A3u76_1K4bqoFH6g" authors="Pierre Berlandier"
changeDate="2007-08-15T10:59:33.812-0700" version="1.0.0">
<copyrightStatement href="uma://_NFyDwAjqEdyj5bYZ0eCR5g#_hRkAkAjqEdyj5bYZ0eCR5g"/>
<mainDescription>&lt;h1 style=&quot;MARGIN: 0cm 0cm 12pt 21.6pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;mso-bidi-font-size: 16.0pt; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>1&lt;span style=&quot;FONT: 7pt 'Times New Roman'&quot;>&lt;font&#xD;
size=&quot;5&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font>&lt;/span>&lt;/span>&lt;/span> Introduction&lt;/font>&lt;/a>&#xD;
&lt;/h1>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The process of testing a conventional piece of software is usually implemented by first elaborating a test plan, which&#xD;
leads to the design of various test suites (1), then running these test suites on a regular basis to ensure the&#xD;
correctness and stability of the system through its development and maintenance.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
A test case is generally composed of pair of data sets: the input data and the corresponding (expected) output&#xD;
data.&lt;span style=&quot;mso-spacerun: yes&quot;>&amp;nbsp;&lt;/span> Executing a test case consists in submitting the input data to the&#xD;
system and comparing the &lt;i style=&quot;mso-bidi-font-style: normal&quot;>actual&lt;/i> output to the &lt;i&#xD;
style=&quot;mso-bidi-font-style: normal&quot;>expected&lt;/i> output: if they match, the test case execution is considered&#xD;
successful.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The initial investment required in creating the test cases, especially the part about manually devising the expected&#xD;
output values is usually non-negligible.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
However, this investment gets quickly amortized since the same test suite executions are repeated over time for&#xD;
regression testing purpose. Also and more importantly, the expected values of a test case do not change, unless the&#xD;
system requirements themselves are changing, which should rarely occur in a conventional system.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
This assumption does not hold true for business rule based systems. Indeed, the essence of business rules engines and&#xD;
the reason why they have been brought into the enterprise software picture is to provide a quick turnaround for&#xD;
frequent business requirement changes and adjustments. Still, the ability to quickly implement and deploy incremental&#xD;
changes that comes with the business rules paradigm does not exonerate us from applying a stringent unit-testing and&#xD;
quality assurance process.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
With business rules based systems, the problem that we face is that we need to preserve the rapid implementation and&#xD;
deployment of changes while still running the set of test cases necessary to ensure the system correctness. If we&#xD;
decide to stick with the standard approach of comparing expected versus actual results, we need to review and update&#xD;
the expected values of the test cases whenever the requirements are updated and a new rule set is deployed. As we&#xD;
mentioned before, devising the expected results of test cases is a step which requires a significant time investment&#xD;
from a group of precious business Subject Matter Experts (SME).&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
These experts are often a scarce resource, which can hardly, if at all, be supplemented by external contractors. It is&#xD;
thus essential for the organization IT group to find a way to partly automate the testing of incremental changes in a&#xD;
rule based application. We present here a testing&lt;a id=&quot;XE_changing_the_rule_of_testing__guideline&quot;&#xD;
name=&quot;XE_changing_the_rule_of_testing__guideline&quot;>&lt;/a> approach which does not replace, but complements the use of&#xD;
expected results. It is based on the comparison of the output from the currently tested and deployed rule set (referred&#xD;
to as the &lt;i style=&quot;mso-bidi-font-style: normal&quot;>champion&lt;/i> rule set) with the output from the updated rule set&#xD;
currently being tested (referred to as the &lt;i style=&quot;mso-bidi-font-style: normal&quot;>challenger&lt;/i> rule set).&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The concept of pass/fail is based on an equivalence function which semantics is specific to a test suite and which&#xD;
determines, for a given test case, if the difference between the output from the champion and the challenger rule set&#xD;
is acceptable or not.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
This incremental difference (or &lt;i style=&quot;mso-bidi-font-style: normal&quot;>delta&lt;/i>) testing approach is more declarative&#xD;
and local than the traditional one; the question we have to ask ourselves while designing the test cases is now &lt;i&#xD;
style=&quot;mso-bidi-font-style: normal&quot;>“what changes from the previous version should we expect in the output”&lt;/i> rather&#xD;
than the traditional &lt;i style=&quot;mso-bidi-font-style: normal&quot;>“what output should we expect”&lt;/i>. The main benefit is&#xD;
that testing does not depend on the SME resources to define and update the test cases. Also, the approach allows the&#xD;
quick definition and execution of large sets of tests cases, making quality assurance for rule sets more realistic and&#xD;
thorough.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
In the following sections, we present in more details the concept, the benefits and the implementation of the&#xD;
delta-testing approach for business rules.&#xD;
&lt;/p>&#xD;
&lt;h1 style=&quot;MARGIN: 0cm 0cm 12pt 21.6pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;mso-bidi-font-size: 16.0pt; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>2&lt;span style=&quot;FONT: 7pt 'Times New Roman'&quot;>&lt;font&#xD;
size=&quot;5&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font>&lt;/span>&lt;/span>&lt;/span> Application in Mortgage Lending&lt;/font>&lt;/a>&#xD;
&lt;/h1>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
We selected mortgage underwriting (and pre-qualification) as a supporting application domain example for our&#xD;
presentation. Mortgage underwriting applications are especially relevant to delta-testing because changes to the&#xD;
business rules are frequent and incremental. This is particularly true in the sub-prime lending area, where&#xD;
underwriting guidelines changes often come out weekly, to adjust to ever new and creative lending options and also&#xD;
heavy competition among lenders.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Some example of data involved in mortgage underwriting is the type of property (e.g. Condominium, Single Family&#xD;
Residence, Manufactured Homes), the FICO score of the applicant,&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Extensive information on the domain (data dictionary, XML DTDs) can be found at &lt;a href=&quot;http://www.mismo.org/&quot;>&lt;font&#xD;
color=&quot;#005DA0&quot;>http://www.mismo.org&lt;/font>&lt;/a>, the site for the Mortgage Industry Standards Maintenance Organization,&#xD;
which maintains electronic commerce standards for the mortgage industry.&#xD;
&lt;/p>&lt;br class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot; />&#xD;
&lt;br />&#xD;
&lt;br class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot; />&#xD;
&lt;br />&#xD;
&lt;h1 style=&quot;MARGIN: 0cm 0cm 12pt 21.6pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;mso-bidi-font-size: 16.0pt; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>3&lt;span style=&quot;FONT: 7pt 'Times New Roman'&quot;>&lt;font&#xD;
size=&quot;5&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font>&lt;/span>&lt;/span>&lt;/span> Delta Testing&lt;/font>&lt;/a>&#xD;
&lt;/h1>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The data flow of a conventional testing framework is presented on &lt;span&#xD;
style=&quot;mso-field-code: ' REF _Ref114287457 h '&quot;>Figure &lt;span style=&quot;mso-no-proof: yes&quot;>1&lt;/span>&lt;/span>. The framework&#xD;
involves a single rule engine which runs the tested rule set and two sets of user data input: the test cases input data&#xD;
and the expected output data.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
&lt;img height=&quot;304&quot; alt=&quot;&quot; src=&quot;./../../images/conventional_testing.gif&quot; width=&quot;592&quot; />&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoCaption&quot; style=&quot;MARGIN: 6pt 0cm 6pt 11.35pt; TEXT-ALIGN: center&quot; align=&quot;center&quot;>&#xD;
&lt;a>&lt;strong>Figure&lt;/strong>&lt;/a> &lt;strong>&lt;span style=&quot;mso-bookmark: _Ref114287457&quot;>&lt;span&#xD;
style=&quot;mso-no-proof: yes&quot;>1&lt;/span>&lt;/span>: Conventional Testing Framework&lt;/strong>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
By contrast, the delta testing framework involves two rule engines, one for the champion rule set and the other for the&#xD;
challenger rule set, and a single set of user data input, which is the test cases data input.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
&lt;img height=&quot;440&quot; alt=&quot;&quot; src=&quot;./../../images/delta_testing.gif&quot; width=&quot;600&quot; />&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoCaption&quot; style=&quot;MARGIN: 6pt 0cm 6pt 11.35pt; TEXT-ALIGN: center&quot; align=&quot;center&quot;>&#xD;
&lt;strong>Figure &lt;span style=&quot;mso-no-proof: yes&quot;>2&lt;/span>: Delta Testing Framework&lt;/strong>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
While the response comparison process in a conventional testing framework is always based on strict equality, delta&#xD;
testing needs to use a more flexible notion of equivalence. Using equality leads to &lt;i&#xD;
style=&quot;mso-bidi-font-style: normal&quot;>qualitative&lt;/i> delta testing. Using a custom equivalence function leads to &lt;i&#xD;
style=&quot;mso-bidi-font-style: normal&quot;>quantitative&lt;/i> delta testing. These two approaches and their specific use are&#xD;
detailed in the following sections.&#xD;
&lt;/p>&#xD;
&lt;h2 style=&quot;MARGIN: 12pt 0cm 6pt 28.8pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;FONT-FAMILY: 'Arial Bold'; mso-fareast-font-family: 'Arial Bold'; mso-bidi-font-family: 'Arial Bold'&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>&lt;em>&lt;font size=&quot;5&quot;>3.1&lt;/font>&lt;/em>&lt;span&#xD;
style=&quot;FONT: 7pt 'Times New Roman'&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/span> &lt;em>&lt;font size=&quot;5&quot;>Qualitative&#xD;
Delta Testing&lt;/font>&lt;/em>&lt;/font>&lt;/a>&#xD;
&lt;/h2>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The simplest way to exploit delta-testing is to test for strict equality between all the output values from the&#xD;
champion and challenger rule set. The qualitative indication is whether or not the changes implemented by the&#xD;
challenger rule set are affecting the outcome of the test case execution. As a result, we get a partition of the test&#xD;
cases in (1) the set which yield an identical output and (2) the set which yield a different output.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Qualitative testing can be used to assess the following:&#xD;
&lt;/p>&#xD;
&lt;ul style=&quot;MARGIN-TOP: 0cm&quot; type=&quot;disc&quot;>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>Correctness of a rules refactoring exercise&lt;/b>: as in regular software&#xD;
lifecycle, rule set lifecycle includes refactoring where the rules are refined, the rule packages restructured and&#xD;
the rule flow redesigned in order to accommodate the application needs for extensions or performances. After the&#xD;
refactoring is complete, we should test that all possible input produces the same output through the champion and&#xD;
challenger rule set. The refactoring exercise is successful if none of the test cases output differ between the&#xD;
champion (original) and the challenger (refactored) rule sets.&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>Stability of the system and extent of change:&lt;/b> after a business&#xD;
requirement change has been implemented in a rule set, it is easy to come up with a set of test cases that should&#xD;
show some impact from the change and another set that should not shown any impact from the change. By running the&#xD;
latter set through delta-testing, we can decide on the stability of the system through the change. By running the&#xD;
former, we can verify that the region of the solution space that we intended to update was properly targeted.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h2 style=&quot;MARGIN: 12pt 0cm 6pt 28.8pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;FONT-FAMILY: 'Arial Bold'; mso-fareast-font-family: 'Arial Bold'; mso-bidi-font-family: 'Arial Bold'&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>&lt;em>&lt;font size=&quot;5&quot;>3.2&lt;/font>&lt;/em>&lt;span&#xD;
style=&quot;FONT: 7pt 'Times New Roman'&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/span> &lt;em>&lt;font size=&quot;5&quot;>Quantitative&#xD;
Delta Testing&lt;/font>&lt;/em>&lt;/font>&lt;/a>&#xD;
&lt;/h2>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
By using quantitative delta-testing, i.e. by actually examining the difference in value between the output from the&#xD;
champion and the challenger rule sets, we can achieve more specific testing and increase the usefulness and coverage of&#xD;
our testing.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Here, instead of using a strict equality criterion, we are testing that the difference between the value from the&#xD;
champion output and the value from the challenger output is equal to a certain expectation such as a constant offset&#xD;
value.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
For example, the base rates for mortgage products are often required to change. To test that the change is correctly&#xD;
implemented, we simply need an equivalence function which compares the difference between the base rate of the champion&#xD;
and the challenger and compares it to the base rate difference that should be introduced by the rules change.&#xD;
&lt;/p>&lt;br class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot; />&#xD;
&lt;br />&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
While requirement changes are frequent in business rules, they are often repetitive in nature and can be categorized in&#xD;
a set of recurrent types of changes, such as change in base rate or, change in the set of underwriting conditions, etc…&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
&lt;span style=&quot;mso-spacerun: yes&quot;>&amp;nbsp;&lt;/span>So, after a few cycles of requirement changes, we end up with a set&#xD;
equivalence functions implemented as a “comparison tool-box” that we can reuse to test most of the future requirement&#xD;
changes.&#xD;
&lt;/p>&#xD;
&lt;h1 style=&quot;MARGIN: 0cm 0cm 12pt 21.6pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;mso-bidi-font-size: 16.0pt; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>4&lt;span style=&quot;FONT: 7pt 'Times New Roman'&quot;>&lt;font&#xD;
size=&quot;5&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font>&lt;/span>&lt;/span>&lt;/span> Intensive Test Cases Definition&lt;/font>&lt;/a>&#xD;
&lt;/h1>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
We have shown in the previous sections that by using delta-testing, we can perform some quality assurance without&#xD;
having to deal with expected values. By using intensive test case definitions from domains, we now show how we can&#xD;
generate large amount of test cases from concise descriptions.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
In most cases, the variable values in a business application either belong to a finite discrete domain (e.g. &lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>PropertyType&lt;/font>&lt;/span>&lt;/span> in &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>[SingleFamily, Condominium, Townhouse,&#xD;
…]&lt;/font>&lt;/span>&lt;/span>) or can be discretized in buckets from which a representative value can be selected (e.g. &lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>CreditScore&lt;/font>&lt;/span>&lt;/span> in &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>[499, 500, 550, …]&lt;/font>&lt;/span>&lt;/span>&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-family: 'Courier New'&quot;>or&lt;/span>&lt;/span>&lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>LTV&lt;/font>&lt;/span>&lt;/span> &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-family: 'Courier New'&quot;>in&lt;/span>&lt;/span>&lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>[60.0, 65.0,&#xD;
70.0, …]&lt;/font>&lt;/span>&lt;/span>).&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
This aspect is key in setting up intensive (versus extensive) descriptions of large sets of test case input data. An&#xD;
extensive description of the test cases input values consists in listing all the values for all the variables involved&#xD;
in the input data set. For example, test cases can be defined by the following tuples:&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;Domain&quot; style=&quot;MARGIN: 6pt 0cm 0pt 36pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot; size=&quot;3&quot;>TC1 = {{CreditScore, 700}, {PropertyType, Condominium}, …}&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;Domain&quot; style=&quot;MARGIN: 6pt 0cm 0pt 36pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot; size=&quot;3&quot;>TC2 = {{CreditScore, 700}, {PropertyType, SingleFamily}, …}&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;Domain&quot; style=&quot;MARGIN: 6pt 0cm 0pt 36pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot; size=&quot;3&quot;>TC3 = {{CreditScore, 750}, {PropertyType, Condominium}, …}&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;Domain&quot; style=&quot;MARGIN: 6pt 0cm 0pt 36pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot; size=&quot;3&quot;>TC4 = {{CreditScore, 750}, {PropertyType, SingleFamily}, …}&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
An intensive description consists in listing all the desired values for each variable (sub-domains), and adjoining a&#xD;
strategy that traverses the cross-product of these sub-domains to generate the extensive version of the test cases. For&#xD;
example, the above 4 test cases can be represented intensively by the following description.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;Domain&quot; style=&quot;MARGIN: 6pt 0cm 0pt 36pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot; size=&quot;3&quot;>TC&lt;sub>1...4&lt;/sub> =&lt;span style=&quot;mso-tab-count: 1&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&#xD;
{{CreditScore,{700, 750}},&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;Domain&quot; style=&quot;MARGIN: 6pt 0cm 0pt 72pt; TEXT-INDENT: 36pt&quot;>&#xD;
&lt;font size=&quot;3&quot;>&lt;font face=&quot;Courier New&quot;>&lt;span style=&quot;mso-spacerun: yes&quot;>&amp;nbsp;&lt;/span>{PropertyType,{Condominium,&#xD;
SingleFamily}}, …}&lt;/font>&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
This definition is concise and the number of test cases it represents grows exponentially by adding values in the&#xD;
sub-domains. For example, adding 2 values to the &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>PropertyType&lt;/font>&lt;/span>&lt;/span>&#xD;
sub-domain and 3 values to the &lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>CreditScore&lt;/font>&lt;/span>&lt;/span> leads to 20 different test cases instead of 4.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Let us suppose that a guideline change for the &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>Condominium&lt;/font>&lt;/span>&lt;/span> property&#xD;
type has been implemented and we need to test the updated rule set. We know that for all property type other than &lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>Condominium&lt;/font>&lt;/span>&lt;/span>, no change in the output should occur, and that for the &lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>Condominium&lt;/font>&lt;/span>&lt;/span> type, two specific conditions should be added to the output. We can&#xD;
thus devise 2 sets of test cases:&#xD;
&lt;/p>&#xD;
&lt;ul style=&quot;MARGIN-TOP: 0cm&quot; type=&quot;disc&quot;>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
The first set has a sub-domain reduced to &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>[Condominium]&lt;/font>&lt;/span>&lt;/span> for&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>PropertyType&lt;/font>&lt;/span>&lt;/span>, and we’ll make sure that, for test cases in this set, there&#xD;
are 2 more conditions in the challenger output than in the champion output.&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
The second set has a sub-domain for &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>PropertyType&lt;/font>&lt;/span>&lt;/span>&#xD;
which includes all the possible property types except &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>Condominium&lt;/font>&lt;/span>&lt;/span>, and&#xD;
we’ll make sure that, for test cases in this set, the champion and challenger outputs are identical.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Using intensive test case definition is completing the delta-testing approach by allowing the creation of large number&#xD;
of test case input data without having to spell out each individual test case. The intensive definition prescribes&#xD;
which possible values can be used in the test case data. The actual construction of the test cases is left to an&#xD;
automated enumeration mechanism.&#xD;
&lt;/p>&#xD;
&lt;h1 style=&quot;MARGIN: 0cm 0cm 12pt 21.6pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;mso-bidi-font-size: 16.0pt; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>5&lt;span style=&quot;FONT: 7pt 'Times New Roman'&quot;>&lt;font&#xD;
size=&quot;5&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font>&lt;/span>&lt;/span>&lt;/span> Extensive Test Case Definition&lt;/font>&lt;/a>&#xD;
&lt;/h1>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
One of the best sources of test cases for systems running in production is obviously the application database which&#xD;
logs the system client transactions. The most significant business data combinations can be obtained in large numbers&#xD;
from this database.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Delta testing makes it possible to profit from this large set of test cases, mainly through quantitative delta testing.&#xD;
Tens of thousand real life test cases can be extracted from the database and executed each time a new rule set is to be&#xD;
released to verify the extent of the rule change, as described in the Qualitative Delta Testing section.&#xD;
&lt;/p>&#xD;
&lt;h1 style=&quot;MARGIN: 0cm 0cm 12pt 21.6pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;mso-bidi-font-size: 16.0pt; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>6&lt;span style=&quot;FONT: 7pt 'Times New Roman'&quot;>&lt;font&#xD;
size=&quot;5&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font>&lt;/span>&lt;/span>&lt;/span> Sample Test Harness Implementation&lt;/font>&lt;/a>&#xD;
&lt;/h1>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
We propose here some highlights of a sample practical implementation of the delta testing harness. It allows the&#xD;
selection of a champion and a challenger rule set file, and the execution of a batch of test suites defined in a batch&#xD;
file.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
For each test suite, two Excel (CSV) files are generated: one which records the test cases input data which produce an&#xD;
equivalent output through the comparison function and the other which records the test case input data which produce a&#xD;
non-equivalent output.&#xD;
&lt;/p>&#xD;
&lt;h2 style=&quot;MARGIN: 12pt 0cm 6pt 28.8pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;FONT-FAMILY: 'Arial Bold'; mso-fareast-font-family: 'Arial Bold'; mso-bidi-font-family: 'Arial Bold'&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>&lt;em>&lt;font size=&quot;5&quot;>6.1&lt;/font>&lt;/em>&lt;span&#xD;
style=&quot;FONT: 7pt 'Times New Roman'&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/span> &lt;em>&lt;font size=&quot;5&quot;>Batch File&#xD;
Definition&lt;/font>&lt;/em>&lt;/font>&lt;/a>&#xD;
&lt;/h2>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The batch file is composed of a set of test suite definitions. Each line of the batch file can either be blank, or a&#xD;
comment line (line which first non-blank character is #) or a test suite definition of one of the two forms below:&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 10.0pt&quot;>&lt;font face=&quot;Courier New&quot;>INT &amp;lt;output&amp;gt; &amp;lt;domains&amp;gt;&#xD;
&amp;lt;order&amp;gt; &amp;lt;count&amp;gt; [&amp;lt;comparator&amp;gt; [&amp;lt;arg&lt;sub>1&lt;/sub>&amp;gt; …&#xD;
&amp;lt;arg&lt;sub>n&lt;/sub>&amp;gt;]]&lt;/font>&lt;/span>&lt;/b>&lt;/span>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 10.0pt&quot;>&lt;font face=&quot;Courier New&quot;>EXT &amp;lt;output&amp;gt; &amp;lt;testcases&amp;gt;&#xD;
&amp;lt;count&amp;gt; [&amp;lt;comparator&amp;gt; [&amp;lt;arg&lt;sub>1&lt;/sub>&amp;gt; … &amp;lt;arg&lt;sub>n&lt;/sub>&amp;gt;]]&lt;/font>&lt;/span>&lt;/b>&lt;/span>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The &lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt&quot;>INT&lt;/span>&lt;/b> prefix is for test suites using intensive&#xD;
test case definition, while &lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt&quot;>EXT&lt;/span>&lt;/b> is for test suites using extensive test&#xD;
case definition.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The test suite parameters definitions are:&#xD;
&lt;/p>&#xD;
&lt;ul style=&quot;MARGIN-TOP: 0cm&quot; type=&quot;disc&quot;>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>&amp;lt;output&amp;gt;&lt;/font>&lt;/span>&lt;/b>&lt;/span>: the prefix used to generate the name of the Excel&#xD;
files. Two files named &lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>&amp;lt;output&amp;gt;_EQUIVALENT.csv&lt;/font>&lt;/span>&lt;/span> and &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>&amp;lt;output&amp;gt;_DIFFERENT.csv&lt;/font>&lt;/span>&lt;/span> are generated as the result of running the&#xD;
test suite.&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>&amp;lt;domains&amp;gt;&lt;/font>&lt;/span>&lt;/b>&lt;/span>: the name of the file which contains the definition of&#xD;
the sub-domains of values for each necessary variable. Each line of a domain file should either be blank, or a&#xD;
comment line, or a sub-domain definition of the form:&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm 3pt 36pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>&lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&amp;lt;variable&amp;gt; = &amp;lt;value&lt;/span>&lt;/span>&lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;sub>&lt;span style=&quot;FONT-SIZE: 11pt&quot;>1&lt;/span>&lt;/sub>&lt;/span>&lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&amp;gt; … &amp;lt;value&lt;/span>&lt;/span>&lt;span class=&quot;DomainChar&quot;>&lt;sub>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt&quot;>n&lt;/span>&lt;/sub>&lt;/span>&lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&amp;gt;&lt;/span>&lt;/span>&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;ul style=&quot;MARGIN-TOP: 0cm&quot; type=&quot;disc&quot;>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span style=&quot;FONT-SIZE: 11pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>&amp;lt;testcases&amp;gt;&lt;/font>&lt;/span>&lt;/b>&lt;/span>&lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-family: 'Courier New'&quot;>: the name of the CSV&#xD;
file which contains one test case definition (set of attribute values) per row.&lt;/span>&lt;/span>&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>&amp;lt;order&amp;gt;&lt;/font>&lt;/span>&lt;/b>&lt;/span>: the order in which the sub-domains should be traversed&#xD;
to generate the test cases. The value is one of &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>DFS&lt;/font>&lt;/span>&lt;/span> or &lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>RANDOM&lt;/font>&lt;/span>&lt;/span>. The &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>DFS&lt;/font>&lt;/span>&lt;/span> order will&#xD;
traverse the set of domains in depth first order, thus guarantying that all tuples are visited once and only once.&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>RANDOM&lt;/font>&lt;/span>&lt;/span> order will repeatedly choose a value at random in each sub-domain.&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>&amp;lt;count&amp;gt;&lt;/font>&lt;/span>&lt;/b>&lt;/span>: the number of test cases to submit for evaluation out of&#xD;
the ones that can be generated from the sub-domains. In the case of &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>DFS&lt;/font>&lt;/span>&lt;/span> order, if the&#xD;
size of the cross-product of the sub-domains is smaller than the requested count, the execution stops after all&#xD;
test cases from the cross-product have been submitted for evaluation.&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>&amp;lt;comparator&amp;gt;&lt;/font>&lt;/span>&lt;/b>&lt;/span> is an optional parameter which is the name of the&#xD;
comparator class to use to evaluate the equivalence of outputs. The class should implement a common interface&#xD;
defining the equivalence function (see class &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>ResponseComparator&lt;/font>&lt;/span>&lt;/span> in the section).&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l3 level1 lfo2; tab-stops: list 36.0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>&lt;span class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&amp;lt;arg&lt;/span>&lt;/b>&lt;/span>&lt;span class=&quot;DomainChar&quot;>&lt;b&#xD;
style=&quot;mso-bidi-font-weight: normal&quot;>&lt;sub>&lt;span style=&quot;FONT-SIZE: 11pt&quot;>i&lt;/span>&lt;/sub>&lt;/b>&lt;/span>&lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;b style=&quot;mso-bidi-font-weight: normal&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&amp;gt;&lt;/span>&lt;/b>&lt;/span>&lt;/font> are optional additional arguments&#xD;
to pass to the constructor of the comparator class. If no comparator parameter is specified, a default “strict&#xD;
equality” comparator class is used.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h2 style=&quot;MARGIN: 12pt 0cm 6pt 28.8pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;FONT-FAMILY: 'Arial Bold'; mso-fareast-font-family: 'Arial Bold'; mso-bidi-font-family: 'Arial Bold'&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>&lt;em>&lt;font size=&quot;5&quot;>6.2&lt;/font>&lt;/em>&lt;span&#xD;
style=&quot;FONT: 7pt 'Times New Roman'&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/span> &lt;em>&lt;font size=&quot;5&quot;>Batch File&#xD;
Example&lt;/font>&lt;/em>&lt;/font>&lt;/a>&#xD;
&lt;/h2>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm 6pt&quot;>&#xD;
Below is an example of the content of a batch file with 4 test suites, testing 2 main business requirement changes:&#xD;
&lt;/p>&#xD;
&lt;div&#xD;
style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-element: para-border-div&quot;>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;># Test suite for release 2.5.1&lt;/font>&#xD;
&lt;/p>&lt;br class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot; />&#xD;
&lt;br />&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;># Testing requirement &quot;decrease base rate by 15bps&quot;&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>#&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>INT base rel251.domains RANDOM 1000 BaseRateComparator -0.15&lt;/font>&#xD;
&lt;/p>&lt;br class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot; />&#xD;
&lt;br />&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;># Testing requirement &quot;decrease minimum rate for FIXED products by 25bps&quot;&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>#&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>INT min15x15 rel251.domains RANDOM 500 MinimumRateComparator FIXED15x15 -0.25&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>INT min30x30 rel251.domains RANDOM 500 MinimumRateComparator FIXED30x30 -0.25&lt;/font>&#xD;
&lt;/p>&lt;br class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot; />&#xD;
&lt;br />&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;># Running regression tests&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>#&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>EXT regression regression.csv 5000&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;/div>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
This example shows the use of 2 comparator classes: &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>BaseRateComparator&lt;/font>&lt;/span>&lt;/span>&#xD;
and &lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>MinimumRateComparator&lt;/font>&lt;/span>&lt;/span>. These comparators (equivalence functions) are dedicated&#xD;
to test respectively a change (increase or decrease) of base rates and a change (increase or decrease) of minimum rates&#xD;
for a given mortgage product. Once implemented, these comparators can be reused for all such routine changes.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
While the first 3 test suites are using an intensive test case definition through a domain file, the last test suite&#xD;
uses the &lt;span style=&quot;FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt&quot;>regression.csv&lt;/span> file as the set of&#xD;
extensive test case definition. This test suite does not specify any custom comparator and will thus use the default&#xD;
strict equality.&#xD;
&lt;/p>&#xD;
&lt;h2 style=&quot;MARGIN: 12pt 0cm 6pt 28.8pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;FONT-FAMILY: 'Arial Bold'; mso-fareast-font-family: 'Arial Bold'; mso-bidi-font-family: 'Arial Bold'&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>&lt;em>&lt;font size=&quot;5&quot;>6.3&lt;/font>&lt;/em>&lt;span&#xD;
style=&quot;FONT: 7pt 'Times New Roman'&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/span> &lt;em>&lt;font size=&quot;5&quot;>Domains File&#xD;
Example&lt;/font>&lt;/em>&lt;/font>&lt;/a>&#xD;
&lt;/h2>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm 6pt&quot;>&#xD;
Below is an excerpt of a domains file:&#xD;
&lt;/p>&#xD;
&lt;div&#xD;
style=&quot;BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 4pt; PADDING-BOTTOM: 1pt; BORDER-LEFT: windowtext 1pt solid; PADDING-TOP: 1pt; BORDER-BOTTOM: windowtext 1pt solid; mso-border-alt: solid windowtext .5pt; mso-element: para-border-div&quot;>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>State = CALIFORNIA MARYLAND VIRGINIA DELAWARE HAWAII MICHIGAN FLORIDA LOUISIANA&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>PropertyValue = 60000 100000 110000 120000 150000 160000 200000 300000 400000&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>Ltv = 65 70 75 80 85 90 95 100&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>CreditScore = 500 580 600 639 640 700 720 750 760&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>DocumentationType = FullDocumentation NoDocumentation Reduced&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>PurchaseType = Purchase Refinance Other&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>PropertyType = SingleFamily Condominium Townhouse Modular PUD&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;code&quot; style=&quot;MARGIN: 0cm 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot;>PropertyUsageType = Investor Primary Residence SecondHome&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;/div>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Note that when using the &lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>RANDOM&lt;/font>&lt;/span>&lt;/span> traversal order for domain, the same value can be repeated multiple&#xD;
times for a given variable, so that the probability distribution is different for different values.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
For example, if we want to reflect that most of the time, the &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>PropertyType&lt;/font>&lt;/span>&lt;/span> value is&#xD;
&lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>SFR&lt;/font>&lt;/span>&lt;/span>, we can specify the following sub-domain:&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;Domain&quot; style=&quot;MARGIN: 6pt 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Courier New&quot; size=&quot;3&quot;>PropertyType = SingleFamily Condominium Modular PUD PUD PUD&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
&lt;a>This example gives&lt;/a> &lt;span style=&quot;mso-bookmark: _Ref106618144&quot;>&lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>PUD&lt;/font>&lt;/span>&lt;/span> a 50% chance of&#xD;
being selected in the test cases generation process versus a 16.7% chance for the other property types..&lt;/span>&#xD;
&lt;/p>&#xD;
&lt;h1 style=&quot;MARGIN: 0cm 0cm 12pt 21.6pt&quot;>&#xD;
&lt;span style=&quot;mso-bookmark: _Ref106618144&quot;>&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;mso-bidi-font-size: 16.0pt; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>7&lt;span style=&quot;FONT: 7pt 'Times New Roman'&quot;>&lt;font&#xD;
size=&quot;5&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font>&lt;/span>&lt;/span>&lt;/span> Test Harness Design&lt;/font>&lt;/a>&lt;/span>&#xD;
&lt;/h1>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The class structure of the test harness that supports delta-testing is illustrated on &lt;span&#xD;
style=&quot;mso-field-code: ' REF _Ref106678587 h '&quot;>Figure &lt;span style=&quot;mso-no-proof: yes&quot;>3&lt;/span>&lt;/span>. &lt;span&#xD;
class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>TestHarness&lt;/font>&lt;/span>&lt;/span> is the central class from which the rule sets are loaded and the&#xD;
batch test file is run. It uses 2 instances of &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>RuleHarness&lt;/font>&lt;/span>&lt;/span>, one for&#xD;
the champion, one for the challenger, which are representing the 2 engine instances.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The &lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>TestCaseIterator&lt;/font>&lt;/span>&lt;/span> class is an abstract class with 2 concrete subclasses: &lt;span&#xD;
style=&quot;FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt&quot;>IntensiveTestCaseIterator&lt;/span> is responsible for&#xD;
implementing an iterator which, given a domains file, iterates over the tuples of values which can be produced from the&#xD;
sub-domains. ExtensiveTestCaseIterator is responsible for implementing an iterator through the tuples of values defined&#xD;
by each row of a given CSV file. A tuple is represented by an instance of the &lt;span class=&quot;DomainChar&quot;>&lt;span&#xD;
style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font face=&quot;Courier New&quot;>RequestHolder&lt;/font>&lt;/span>&lt;/span> class,&#xD;
which provides a mapping function to the actual request object from the application BOM.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
The &lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>ResponseComparator&lt;/font>&lt;/span>&lt;/span> class is an abstract class which declares the equivalence&#xD;
function &lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>areEquivalent&lt;/font>&lt;/span>&lt;/span> between 2 instances of the response object from the application&#xD;
BOM. The &lt;span class=&quot;DomainChar&quot;>&lt;span style=&quot;FONT-SIZE: 11pt; mso-bidi-font-size: 12.0pt&quot;>&lt;font&#xD;
face=&quot;Courier New&quot;>ExactComparator&lt;/font>&lt;/span>&lt;/span> subclass performs the strict equality comparison between 2&#xD;
response objects. Other specific comparator classes are implemented for quantitative testing.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Note that our sample implementation of the test harness is making a heavy use of Java reflection to traverse and&#xD;
compare the content of the responses from the rule engines.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm; TEXT-ALIGN: center&quot; align=&quot;center&quot;>&#xD;
&lt;img height=&quot;544&quot; alt=&quot;&quot; src=&quot;./../../images/harness_class_diagram.gif&quot; width=&quot;600&quot; />&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoCaption&quot; style=&quot;MARGIN: 6pt 0cm 6pt 11.35pt; TEXT-ALIGN: center&quot; align=&quot;center&quot;>&#xD;
&lt;a>&lt;strong>Figure&lt;/strong>&lt;/a> &lt;strong>&lt;span style=&quot;mso-bookmark: _Ref106678587&quot;>&lt;span&#xD;
style=&quot;mso-no-proof: yes&quot;>3&lt;/span>&lt;/span>: Test Harness Class Diagram&lt;/strong>&#xD;
&lt;/p>&#xD;
&lt;h1 style=&quot;MARGIN: 0cm 0cm 12pt 21.6pt&quot;>&#xD;
&lt;a>&lt;font color=&quot;#005DA0&quot;>&lt;span&#xD;
style=&quot;mso-bidi-font-size: 16.0pt; mso-fareast-font-family: Arial; mso-bidi-font-family: Arial&quot;>&lt;span&#xD;
style=&quot;mso-list: Ignore&quot;>8&lt;span style=&quot;FONT: 7pt 'Times New Roman'&quot;>&lt;font&#xD;
size=&quot;5&quot;>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/font>&lt;/span>&lt;/span>&lt;/span> Conclusion&lt;/font>&lt;/a>&#xD;
&lt;/h1>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
While business rules based applications usually receive proper testing on their initial release, we often fail to plan&#xD;
for (and even sometime to realize) that:&#xD;
&lt;/p>&#xD;
&lt;ul style=&quot;MARGIN-TOP: 0cm&quot; type=&quot;disc&quot;>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l0 level1 lfo3; tab-stops: list 36.0pt&quot;>&#xD;
The initial business requirements will change because it is the essence the business rules based systems, and test&#xD;
cases will have to be revised accordingly.&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l0 level1 lfo3; tab-stops: list 36.0pt&quot;>&#xD;
The rapid pace of changes is essential to the organization and while it can usually be sustained on the&#xD;
implementation side, it should not be slowed-down by the QA process.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
Add to this the scarcity of SMEs able to maintain the test case base, and we obviously need a testing paradigm that is&#xD;
not solely based on the comparison of &lt;i style=&quot;mso-bidi-font-style: normal&quot;>actual&lt;/i> against &lt;i&#xD;
style=&quot;mso-bidi-font-style: normal&quot;>expected&lt;/i> results.&#xD;
&lt;/p>&#xD;
&lt;p class=&quot;MsoNormal&quot; style=&quot;MARGIN: 3pt 0cm&quot;>&#xD;
We proposed a framework that is based instead on the comparison of &lt;i style=&quot;mso-bidi-font-style: normal&quot;>champion&lt;/i>&#xD;
against &lt;i style=&quot;mso-bidi-font-style: normal&quot;>challenger&lt;/i> results. Among the expected benefits are:&#xD;
&lt;/p>&#xD;
&lt;ul style=&quot;MARGIN-TOP: 0cm&quot; type=&quot;disc&quot;>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l2 level1 lfo4; tab-stops: list 36.0pt&quot;>&#xD;
To free the testing team from the burden of maintaining expected results, thus accelerating the testing process and&#xD;
reducing the bottleneck for rapid change deployment.&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l2 level1 lfo4; tab-stops: list 36.0pt&quot;>&#xD;
To makes test writing more technical, thus more manageable by a business-agnostic QA department.&#xD;
&lt;/li>&#xD;
&lt;li class=&quot;MsoNormal&quot; style=&quot;MARGIN: 6pt 0cm 0pt; mso-list: l2 level1 lfo4; tab-stops: list 36.0pt&quot;>&#xD;
To support the production and execution of high volume of test cases through intensive test case definitions, thus&#xD;
improving the coverage of the QA process.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;div style=&quot;mso-element: footnote-list&quot;>&#xD;
&lt;br clear=&quot;all&quot; />&#xD;
&lt;hr align=&quot;left&quot; width=&quot;33%&quot; size=&quot;1&quot; />&#xD;
&lt;div id=&quot;ftn1&quot; style=&quot;mso-element: footnote&quot;>&#xD;
&lt;p class=&quot;MsoFootnoteText&quot; style=&quot;MARGIN: 6pt 0cm 0pt&quot;>&#xD;
&lt;font face=&quot;Times New Roman&quot;>&lt;u>&lt;font color=&quot;#800080&quot;>(1)&lt;/font>&lt;/u> We use the term test suite for a&#xD;
collection of test cases dedicated to the test of a specific system feature.&lt;/font>&#xD;
&lt;/p>&#xD;
&lt;/div>&#xD;
&lt;/div></mainDescription>
</org.eclipse.epf.uma:ContentDescription>