-
2012-12-04
12/839,627
2010-07-20
US 8,325,880 B1
2012-12-04
-
-
Binh Tieu
2031-07-13
Smart Summary: Automated application testing for voice user interfaces uses special scripts created by exploring a graph of the interface. These scripts are designed to cover all possible situations in the interface by treating its conditions like business rules. Testing can be done quickly by using simulated inputs instead of needing real people to test the system. A gatekeeper intermediary helps make it easier to switch between testing and using the application. This method improves efficiency and reduces errors compared to traditional testing methods that rely on human testers and manual script creation. đ TL;DR
Voice user interfaces can be tested using test scripts generated by traversing a graph using a recursive search technique, such as recursive depth first search. Test data to accompany the test scripts can be generated by treating conditions in states of the interface as business rules, and fully exercising each state during traversal of the graph. Actual testing can be performed in a faster than real time manner by providing simulated input from test scripts, as opposed to requiring actual input from human testers. The interfaces can also be tested using a gatekeeper intermediary which provides for easy transitions between testing and deployment.
Get notified when new applications in this technology area are published.
H04M1/24 IPC
Substation equipment, e.g. for use by subscribers Arrangements for testing
H04M3/08 IPC
Automatic or semi-automatic exchanges Indicating faults in circuits or apparatus
H04M3/22 IPC
Automatic or semi-automatic exchanges Arrangements for supervision, monitoring or testing
The disclosure set forth herein can be used to implement technology in the field of automated system testing.
Voice user interface applications have become commonplace, as businesses seek to communicate with their customers over a medium that customers are comfortable with (voice) while minimizing the resources necessary to support that communication (primarily operators). While there are well developed technologies for supporting these applications once they are operational (e.g., VXML), the technologies used to create these applications, particularly in terms of testing, are not nearly so advanced. Ironically, given the labor saving intent of most voice using interface applications, in many cases testing is performed with actual human testers, rather than using an automated process at all. Further, even in cases where there is some level of automation in the testing process, this automation is generally performed only on the fully deployed system (e.g., robotic callers interacting with a deployed interactive voice response system). This is inefficient, because often the design of an application will be finished before it is ready to be deployed, and so testing must wait until the deployment process is complete, rather than being able to proceed at an earlier stage. Additionally, automation is typically performed using scripts generated by hand, rather than from the original design. Improvements are needed to allow the scripts to be generated from the original designâeliminating errors in manual translation from the specification to the script. As a result, there is a long felt, but unmet need in the art for improvements in the technology that can be used in testing voice user interface applications.
The disclosed technology can be implemented in a variety of manners. For example, based on the disclosure set forth herein, one of ordinary skill in the art could implement a method comprising using a computer readable medium to store a set of data representing a voice user interface comprising a plurality of states and creating a set of test scripts and a set of test data corresponding to the voice user interface. Similarly, the disclosure set forth herein could be used to implement a machine comprising an interactive voice platform and a voice server, where the interactive voice platform is configured to execute a voice user interface application, generate voice processing requests, send evaluation requests to a gatekeeper, and receive responses to the voice processing requests. In such a machine, the gatekeeper could be configured to determine if an evaluation request is made during a live interaction or a test interaction, and, depending on the type of interaction, send a response to the evaluation request based on test data, or send a response to the evaluation request based on communication with a set of back end systems. Of course, other types of machines, compositions of matter, articles of manufacture, and methods could be performed or implemented without undue experimentation by those of ordinary skill in the art based on the disclosure set forth herein. Accordingly, the summary provided above should be treated as illustrative only, and not limiting.
FIG. 1 depicts an architecture in which an intermediary component, referred to as a gatekeeper, is positioned between a voice user interface application and various data sources that can be used by the voice user interface application during testing and/or deployment FIG. 2 depicts an architecture which can be used in testing an interactive voice platform.
FIG. 3 depicts a sample dialog.
FIG. 4 depicts how, in some implementations, a PathRunner can be involved in test execution.
Aspects of the following disclosure can be utilized to generate test cases, generate user interface code, automatically execute the test cases, and simulate back-end data integration based on a voice user interface (VUI) design. While the following disclosure includes a number of concrete examples of how the inventors' technology can be implemented, it should be understood that those examples are provided for illustrative purposes only, and that numerous variations on the disclosed examples will be immediately apparent to one of ordinary skill in the art, and could be implemented without undue experimentation based on the disclosure set forth herein. Accordingly, the following disclosure should be treated as illustrative only, and should not be treated as limiting on the scope of protection accorded by this document, or by any document which is related to this document.
Turning now to FIG. 1, that figure depicts an architecture in which an intermediary application, referred to as a gatekeeper [101], is positioned between a voice user interface application [102], and various data sources that can be used by the voice user interface application during testing and/or deployment. Using a gatekeeper [101] such as shown in FIG. 1, the voice user interface application [102] can be provided with a simple, consistent interface that can be used to evaluate business rules (or perform other necessary data manipulations, such as data reads and/or writes) both during testing and when the application [102] is actually deployed. To illustrate how this might work, consider the code snippets of tables 1 and 2:
| TABLE 2 |
| Requesting a Business |
| Rule During Testing |
| /*Initially, the VUI application makes a | ||
| request for a business rule âCustomer | ||
| Called In Beforeâ: | ||
| */ | ||
| GateKeeper(CustomerCalledInBefore); | ||
| /*The GateKeeper retrieves a value for the | ||
| business rule from the test data: | ||
| */ | ||
| return testData(CustomerCalledInBefore); | ||
| TABLE 1 |
| Requesting a Business |
| Rule During Deployment |
| /*Initially, the VUI Application makes a | |||
| request for a business rule âCustomer | |||
| Called In Beforeâ: | |||
| */ | |||
| GateKeeper(CustomerCalledInBefore); | |||
| /*The GateKeeper makes a call to | |||
| evaluate the business rule: | |||
| */ | |||
| dataDip(CustomerCalledInBefore); | |||
| /*The developer's Java Middleware then | |||
| interacts with appropriate systems such | |||
| as a customer backend database and a | |||
| decision support system to determine a | |||
| response. For example: | |||
| */ | |||
| custObject = customerWsdl...; | |||
| bool = custObject.lastCall < today - 24 | |||
| hours; | |||
| return bool; | |||
As shown in tables 1 and 2, with the gatekeeper [101], the voice user interface application [102] can evaluate the business rule (in this case, whether the customer has called in before) during both deployment and testing using a single call (GateKeeper(CustomerCalleBefore)). At deployment, the gatekeeper [101] could respond to such a call by placing an http request using a request ID indicating the rule to be evaluated, and any arguments that need to be passed to the middleware [104] (in some embodiments, this could allow a single http request to be used for multiple types of request). During testing, the gatekeeper [101] could respond using dummy data (which might be stored in a separate testing database [103], or in a file which could be accessed directly by the gatekeeper [101] itself). The gatekeeper [101] could be easily switched between testing and deployment modes by providing it with a map containing an indexed list of all of the business rules and data requests that are called out by the voice user interface application [102]. The indexed list could specify, for each request, whether to use test data (and, in some implementations, might specify what data to use) or to pass a request to the middleware [104]. Further, in some implementations, use of such a map could allow a gatekeeper [101] to identify and respond to situations when it was configured for testing but is actually being used in a deployment setting. For example, in some cases, a map could have data for different test cases identified on a per-ANI basis. In the event that a gatekeeper [101] is given a request associated with an ANI that is not identified in the test map, or for which it was not provided with test data, the gatekeeper [101] could automatically switch to deployment mode, thereby allowing the voice user interface application [102] to continue working despite the incorrect configuration. As a result, using a gatekeeper [101] could not only help speed development (by enabling testing of an application to take place in parallel with implementation of the middleware [104] used when that application is deployed), but can also provide a useful failsafe for dealing with configuration problems that could take place as a result of, for example, operator error.
Of course, the intermediary approach described above is not limited to being implemented in a gatekeeper [101] that could handle data requests. For instance, it is also possible that using intermediaries can speed testing by providing automatic responses to prompts that would normally require user input. As an illustration of this, consider the diagram of FIG. 2. In FIG. 2, testing of an interactive voice platform [201], such as an interactive voice response system running a voice user interface application [102], takes place using test data [103], a media resource control protocol server [203], and a media resource control protocol proxy server [202] in communication with the interactive voice platform [201]. During deployment, the interactive voice platform [201] would generally be connected directly to the media resource control protocol server [203], and would send requests to that server to recognize statements made by a caller (e.g., translating spoken input into a more manageable form, such as text), and interpret those statements (e.g., matching them with entries in a grammar that determines what actions the voice user interface application will take). During testing, as shown in FIG. 2, this setup is modified by having the interactive voice platform [201] connected to the proxy server [202] (e.g., by changing configuration information in the platform to sent requests to the IP address and port of the proxy server, rather than the MRCP server itself). The proxy server [202] would then receive the recognition requests from the interactive voice platform [201], and instead of actually performing any type of recognition tasks (e.g., speech recognition), it could âfakeâ the recognition by taking test data [103] and providing that to the MRCP server [203] for interpretation. In this way, the testing of the voice user interface application [102] could be accelerated, because the proxy server [202] could simply keep count of how many recognition requests had been made, and provide the appropriate input as indicated by a stored test script, rather than waiting for (and recognizing) a spoken input from a user.
Turning now to the sample dialog of FIG. 3, that sample dialog is provided to help illustrate how information that could be used to test a voice application (e.g., test data used by a proxy MRCP server or a gatekeeper) could be generated. The sample dialog of FIG. 3 presents a trivial case of an interaction which could take place between a user and an automated system. Essentially, the interaction starts [301] when the user calls in. It automatically transitions to the first state [302] for the system, which could be, for example, play a greeting prompt for the user. The system then verifies the user's zip code [303]. If the zip code is incorrect, there is a transition to an error state [305] and the transaction terminates [310]. Otherwise, the system plays a âYour magic number is . . . â prompt [304], and asks the user to pick a number between 1 and 2 [306]. The number is checked [307], and the system transitions to a positive number state [308] or a negative number state [309] depending on the value of the magic number. After the user has been told that he or she has a positive (or negative) number, the transaction terminates by transitioning to the hang up state [310]. A sample test script which could be used in the testing of the application of FIG. 3 is provided in table 3.
| TABLE 3 |
| Sample test script and data |
| for the application of FIG. 3. |
| TESTID: 1756 | ||
| TESTDATA: âCalled In Previouslyâ=True | ||
| TESTDATA: âZipCodeâ=01740 | ||
| STEP 1: EXPECT STATEID AA1000_Business_Rule | ||
| STEP 2: EXPECT PROMPTID AA1000_i_1 | ||
| STEP 3: EXPECT STATEID AA1300_Big_Read | ||
| STEP 4: EXPECT PROMPTID AA1300_i_1 | ||
| STEP 5: EXPECT DATA 01740 | ||
| STEP 6: EXPECT PROMPTID AA1300_i_2 | ||
| STEP 7: EXPECT ASK | ||
| STEP 8: INPUT âNoâ | ||
| STEP 9: EXPECT STATEID AA1350_Wrong_Zip | ||
| STEP 10: EXPECT PROMPTID AA1350 | ||
| STEP 11: EXPECT DISCONNECT | ||
In the test script of table 3, the first entry, TESTID: 1756, provides a unique identifier for the script, which can be used for error reporting in the event that the interaction with the system does not proceed as expected. The second two entries, TESTDATA: âCalled In Previouslyâ=True and âZipCodeâ=01740, provide data that is used to determine how the interaction with the system proceeds. The final entries describe the expected actions by the system given the data provided. After a test is run, these entries can be compared with an audit log generated by an application being tested to make sure that the application's behavior is consistent with its design. For example, after testing the voice user interface application of FIG. 3 with the script of table 3, the expected audit log should show that the transaction took place as indicated in table 4:
| TABLE 4 |
| Sample audit log for running the application |
| of FIG. 3 with the script of table 3. |
| TESTID: 1756 | |||
| TIMESTAMP: September 21, 2009 | |||
| STEP 1: STATEID AA1000_Business_Rule | |||
| STEP 2: PROMPTID AA1000_i_1 | |||
| STEP 3: STATEID AA1300_Big_Read | |||
| STEP 4: PROMPTID AA1300_i_1 | |||
| STEP 5: DATA 01740 | |||
| STEP 6: PROMPTID AA1300_i_2 | |||
| STEP 7: ASK | |||
| STEP 8: INPUT âNoâ | |||
| STEP 9: STATEID AA1350_Wrong_Zip | |||
| STEP 10: PROMPTID AA1350 | |||
| STEP 11: DISCONNECT | |||
In the audit log of table 4, because all of the actual data collected for the steps of the transaction matched the EXPECT data in the script, the system would indicate that the script with TESTID 1756 was successfully passed. If this was not the case (e.g., if one of the values in the audit log had not matched what was expected in the script), then that log could have been flagged as indicating an error, which would later be reviewed by a human so that the operation of the system could be corrected. Of course, other error handling methods could also be used, such as automatically generating a plain text error report for export to an error tracking tool (e.g., Bugzilla, AdminiTrack).
Moving on from the discussion of the illustrative script and audit log from tables 3 and 4, it should be understood that real systems would likely require much more extensive testing than could be provided by the single script of table 3. Indeed, in order to test an application, test scripts and data will preferably be generated which cover each of the following situations: each goto transition is exercised; each application prompt is played; every business rule's true and false paths are exercised; every data element is played; every state is reached; every sub-dialog (entering from and returning to) is exercised; every confirmation is fired; retries and timeouts are hit on every interaction state; all grammar options (speech and DTMF, as appropriate to an application) are exercised; and every global (e.g., OPERATOR, MAIN MENU) is exercised at every interaction state. To illustrate how this could be achieved, consider table 5, which is a state table corresponding to state AA 1000 from FIG. 3.
| TABLE 5 |
| State table corresponding |
| to state AA1000 from FIG. 3. |
| AA1000_Business_Rule | Play Prompt |
| Previous State |
| Start |
| Prompts |
| Conditions and Wording | Prompt ID |
| if caller called IVR previously | |
| âWelcome back to the demo app! Nice to | aa1000_i_1 |
| âsee you again. | |
| else | |
| âWelcome to the demo app! | aa1000_i_2 |
| Condition | Action |
| Always | Go To:AA1300_Big_Read |
| Special Settings |
| Developer Notes |
As shown in table 5, depending on whether the caller previously called the fictitious IVR executing the application of FIG. 3, state AA1000 would have different behaviors, either playing prompt aa1000_iâ1 or prompt aa1000_iâ2. Thus, in order to play all prompts, two test cases could be generated, one with TESTDATA indicating that the caller had called into the IVR previously (e.g., as shown in table 3), and one with TESTDATA showing that the caller had not called in previously. An even larger number of test cases would be generated to handle interaction states. To illustrate, consider table 6, which is a state table corresponding to state AA1100 from FIG. 3.
| TABLE 6 |
| State table corresponding to state AA1100 from FIG. 3. |
| AA1100_Data_Write | Interaction |
| Previous State |
| AA1050_Data_Read |
| Prompts |
| Type | Conditions and Wording | Prompt ID |
| Initial / | Pick a number between 1 and 2 | aa1100_i_1 |
| Retry 1 / | ||
| Timeout 1 | ||
| wrong | That's not between 1 and 2 | aa1100_i_2 |
| Option | Vocabulary | DTMF | Condition-Action | Confirm? |
| One | One | 1 | play wrong | Never |
| magic number = magic | ||||
| number + 1 | ||||
| write out magic number | ||||
| Go To: | ||||
| AA1150_Check_Magic | ||||
| Two | Two | 2 | play wrong | Never |
| magic number = magic | ||||
| number â 1 | ||||
| write out magic number | ||||
| Go To: | ||||
| AA1150_Check_Magic | ||||
| Confirmation Prompts |
| Option | Wording | Prompt ID |
| Special Settings |
| Developer Notes |
To exercise a state such as represented by table 6, multiple scripts would be generated to ensure that each prompt type is played (i.e., the Initial, Retry 1, Timeout 1, and Wrong prompt types). Similarly, multiple scripts could be generated so that the system would be tested with DTMF inputs of both 1 and 2. Further, in cases where a user input is in the form of speech, rather than DTMF input, scripts could also be generated with each of the inputs which would be expected to be included in the recognition grammar used in a state, as well as various outside inputs to test no match conditions. Additionally, in some implementations, the number of test scripts could be increased still further, by duplication for each downstream state in an application. For instance, if four test scripts are needed to exercise state 1, and four test scripts are needed to exercise state 2, then there could be 4Ă4=16 test scripts generated to fully exercise both states. Alternatively, in some implementations, test scripts could be generated so that, once a state was completely exercised, the script would terminate (e.g., provide a HANGUP message), rather than proceeding to exercise the internals of another downstream state. Of course, it should be understood that other approaches to optimizing the efficiency of testing will be immediately apparent to those of ordinary skill in the art, and that the approaches described above are intended to be illustrative only, rather than limiting on the scope of the protection accorded by this document or any related document.
In order to create test scripts, a graph of an application, such as shown in FIG. 3, can be traversed using a search algorithm (e.g., recursive depth first search) which would move through the individual nodes in the graph. Using this approach, the following paths could be created for the application of FIG. 3:
| TABLE 7 |
| Test paths for the application of FIG. 3. |
| AA1000 âAA1300 âAA1050 âAA1100 âAA1150 âAA1200 | [path 1] |
| AA1000 âAA1300 âAA1050 âAA1100 âAA1150 âAA1250 | [path 2] |
| AA1000 âAA1300 âAA1050 âAA1100 âAA1150 âAA1200 | [path 3] |
| AA1000 âAA1300 âAA1050 âAA1100 âAA1150 âAA1250 | [path 4] |
| AA1000 âAA1300 âAA1350 | [path 5] |
String dummy;
Traverse(getStartState( ), dummy);
}
Traverse(State current_state, String previous_path)
{
for(int counter=0; counter<current_state.numTransitions( ); counter++)
{
}
if(current_state.numTransitions( )==0)
{
}
}
Of course, rather than simply outputting the paths being traversed, a real system would be likely be implemented to output scripts which would exercise each state as those states are reached in the traversal. Similarly, in a real system there would generally be some kind of logic included which could detect and respond to looping conditions. For example, there could be data kept for each state which would measure the number of times that state was entered, and what state it was entered from. In such a case, if a state was entered more than a set number (e.g., 3) of times from the same previous state, the transition could be treated as a loop, and dealt with appropriately (e.g., a HANGUP could be added to that path to prevent it from extending to infinity). Additionally, in a real system, there would likely also be provisions made for dealing with subdialogs. For instance, there could be data stored which would remember the calling location when a subdialog is invoked, so that the traversal could âreturnâ to the correct place once the subdialog had been completed. As an example of a further type of additional logic that would likely be included in a real system, in a real system, the individual states would likely have transitions not only to the states that follow them in the application, but also to states that could be entered using global inputs (e.g., MAINMENU, OPERATOR). Other variations and enhancements are also possible, depending on the nature of the processing to be performed in a real system. For example, as set forth below, different systems could use a variety of approaches to handling conditional statements. As a result, it should be understood that the particular optimizations and techniques described are intended to be treated as illustrative only, and not limiting on the scope of protection accorded by this document, or by any document claiming the benefit of this document.
Turning now to the handling of conditions, there are multiple approaches that can be taken to addressing conditions in situations where they are present. In general, conditions in a voice user interface design will be entered by the designer as unrestricted text representing a situation that the designer thinks is significant to the interaction being handled by an application. While this provides substantial flexibility for the designer, it can make handling those conditions difficult, at least relative to handling more structured and uniform information, such as source code for a computer program. To address this difficulty, one approach is to simply treat all conditions as business rules which are either true or false. Using this approach, a condition like âif balance is greater than five dollarsâ could be handled by creating two different TESTDATA entries, one where âBalance is Greater Than Five Dollarsâ is true, and one where it is false, without considering the underlying meaning of the rule (e.g., by creating a variable called balance, and setting it to a value which is or is not greater than five dollars). Using this approach, creating scripts to exercise the internals of a state (at least with respect to creating TESTDATA to determine if conditional prompts are functioning correctly) could be performed using an algorithm such as set forth in the following pseudo-code:
Exercise(State input_state, Script current_script)
{
Script dummy_script;
Condition dummy_condition;
for(int counter=0; counter<input_state.numConditions( ); counter++)
{
}
}
Of course, it should be understood that, in a real system exercising of conditions would likely be performed with a substantially more complex algorithm than that set forth above. For instance, a real algorithm would likely check to make sure that test data being added was not duplicative of data which had previously been added in the traversal path taken to reach the state being exercised (e.g., by adding a check before adding the appropriate script to the global_scripts data structure). A real algorithm could also include truth tables to make sure that all possible combinations of values have been exercised. For example, if a given script uses variables A and B, the path could be tried using values A=t, B=t, then A=f, B=t, then A=t, B=f, then A=f, B=f, to test all possible combinations. Similarly, a real algorithm would also likely include some kind of logic to verify compatibility between scripts created in exercising a state and the path traversed to reach that state. To illustrate, consider the case in which state A, which has an initial prompt that requires âNew Customerâ to be true, transitions to state B, which has at least one prompt that is played only if âNew Customerâ is false. If the traversal path to B through A is associated with âNew Customerâ as being true, then state B could not create a test script with âNew Customerâ as false, and therefore could not test the prompt that required âNew Customerâ to be false. To address this issue, it is possible that some implementations could keep track of whether states which have been visited during script creation had been fully exercised, and could also keep track of which state in a traversal path sets a value which prevents a state from being fully exercised. This would allow the script creation algorithm to backtrack so as to ensure completeness. For example, in the case of states A and B described above, this could take place according to the following series of steps:
Another source of complexity which could be present in a real system is logic which could take into account the meaning of conditions, rather than simply treating everything between a condition word and a delimiter as a true or false business rule. For example, in some cases, processing could be performed on conditions to identify predefined strings, such as logical operators (e.g., AND, OR, NOT, PARENTHESES), and keywords (e.g., words which are consistently used to reflect common relationships in conditions, such as CAMEFROM, or the names of states). In such an implementation, only those portions of a condition which did not match one of the predefined strings would be treated as business rules. To illustrate, using this approach, the condition âif came from MM1000 and delinquent and has called in recentlyâ could be parsed as shown in table 8:
| TABLE 8 |
| Illustrative parsing of âif came from MM1000 |
| and delinquent and has called in recently.â |
| Token Type | Value | |
| Keyword | CAMEFROM | |
| State name | MM1000 | |
| Logical Operator | AND | |
| Business Rule | âDelinquentâ | |
| Logical Operator | AND | |
| Business Rule | Has Called In Recently | |
As an alternative to the above, some systems might handle conditions by controlling how those conditions are created, rather than allowing voice user interface designers to create conditions as unrestricted text as discussed above. For example, in some cases, VUI designers might be provided with a tool which, when it detects that a designer has entered a condition which may be related to a previous condition, will offer a suggestion to the designer. To illustrate, consider the case where a designer enters a condition âif the customer is an old customer,â and there is already a condition of âif the customer is a new customerâ defined for the application being created. If that is the case, the interface design tool might recognize that the condition being entered differs from the previous condition only in substitution of an antonym (i.e., replacing ânewâ with âoldâ), and suggest that the designer use the business rule âif NOT(the customer is a new customer)â, rather than creating a new, and independent business rule. Similarly, such an interface might provide designers with lists of existing variables, thereby avoiding situations where different terms are used for the same concept (e.g., âbalanceâ and âaccount balanceâ). Of course, it is also possible that some implementations might include both specialized interfaces for creating conditions and perform parsing on those conditions once they are created. As a result, the presentation of the options above as alternatives should be understood as being illustrative only, and should not be treated as limiting on the protection accorded by this document, or by any documents claiming the benefit of this document.
As will be apparent to those of ordinary skill in the art, regardless of how test scripts and data are generated, it is likely that there will be a large number of scripts necessary to test even a moderately complicated application. As a result, many systems implemented according to this disclosure will include components that can help manage application testing. One example of such a component is a specialized set of routines, referred to as a PathRunner, which can be used as an interface to manage tests, as well as to run the testing itself. In terms of managing tests, in some implementations, a PathRunner could be configured to support selection and naming of subsets of test scripts for execution. This could allow for test subsets (which could be created automatically based on pre-set parameters, or by a human tester) to be executed in batch to support periodic (e.g., nightly) regression testing, smoke testing, or other types of focused testing (e.g., testing of a particular branch of a dialog, or testing of particular functionality, such as jumping to the main menu from other dialog states). Similarly, in some implementations, a PathRunner could support breakpoint testing, where automated scripts could be used to quickly reach a specified point in a dialog, at which time a human tester could take over, perhaps to help diagnose a potential error which had been identified by earlier testing. A PathRunner could also be used in the evaluation of tests. For example, in some implementations, a PathRunner could automatically compare audit logs of dialogs with the expected steps from a test script, and then present the results to a user in forms such as pass/fail statistics, lists of failed test cases (and steps that failed) or side by side comparisons of scripts and audit logs to assist in identifying problems with the application being tested. These evaluation results could also be stored in a database, which would allow them to be reviewed (and perhaps have the appropriate scripts re-run once the underlying problem is believed to be fixed) at a later date.
With respect to using a PathRunner in actual performance of tests, FIG. 4 shows how, in some implementations, a PathRunner can be involved in test execution. In particular, the PathRunner [401] can be responsible for actually initiating a call to the interactive voice platform [201], for example, by using the session initiation protocol (âSIPâ). Once the call is under way, the testing would proceed as described previously with respect to FIGS. 1 and 2. That is, when the interactive voice platform [201] needed to handle user input (or, more accurately, when it would need to handle user input during deployment, since, during testing, there might not be actual user input provided) it would send a recognition request to a proxy MRCP server [202], which would translate it to an interpretation request for an actual MCRP server [203] using information from a test database [103]. Similarly, when the interactive voice platform [201] required evaluation of a business rule, it could request that evaluation to be performed by a gatekeeper (not shown in FIG. 4), which would use test data to provide the appropriate response based on the test script being run. The test could then be terminated when the interactive voice platform [201] disconnects (e.g., because the user has indicated that a transaction is complete), or when the test script being executed indicates that a user initiated termination (e.g., a HANGUP) is appropriate. In the later case, termination of the test could be achieved by the proxy MRCP server [202], which is the component normally responsible for providing simulated user inputs.
A PathRunner [401] can also be configured to assist a user in preparing for tests. For example, in many instances, an interactive voice platform [201] will be capable of running (or may be used to run) many different voice user interface applications. In such instances, the PathRunner [401] could provide an interface which would allow a user to select an application for testing, which application would then be loaded onto the interactive voice platform [201]. The PathRunner [401] may also be used to help configure the voice user interface application for testing, for example, by specifying that the interactive voice platform [201] should communicate with the proxy MRCP server [202] rather than with the MRCP server [203] that would be used during deployment. Similarly, in some instances, the PathRunner [401] could be configured to actually populate a testing database [103] used by the gatekeeper or the MRCP proxy server [202]. For example, the PathRunner [401] could, in the case where the testing database [103] was organized as a relational database, extract test data and simulated user input from the scripts being tested and use that information to populate the database tables. As a result, it should be understood that the PathRunner [401] as described previously is intended to be illustrative only of how such a component might be implemented in some systems, and should not be treated as implying limitations on the protection afforded by this document, or by any document claiming the benefit of this document.
In addition to variations in the functions of different components used to implement the technology described herein, there are also broad variations in the types of hardware systems which different implementations could utilize. For example, the activities described with respect to generation of test cases could be performed using a processor which would retrieve instructions corresponding to those activities from a memory (e.g., a hard drive, solid state memory, optical memory, or other types of devices which could store information so that it could be retrieved at some later time), execute them, and, based on that execution manipulate the values of data stored in the memory (e.g., by creating files storing test scripts). This processor could be part of a single system that would perform all activities as described above, could be part of a multi-processor system, or could even be part of a multi-computer system, in the case where the cooperative efforts of different types of computer systems were pooled to implement the technology described herein.
While the above disclosure has set forth various examples of how the inventors' technology (or various aspects thereof) could be implemented, it should be understood that those examples are intended to be illustrative only, and not limiting. Accordingly, instead of limiting the protection accorded by this document, or by any document which is related to this document, to the material explicitly disclosed herein, the protection should be understood to be defined by the following claims, which are drafted to reflect the scope of protection sought by the inventors in this document when the terms in those claims which are listed below under the label âExplicit Definitionsâ are given the explicit definitions set forth therein, and the remaining terms are given their broadest reasonable interpretation as shown by a general purpose dictionary. To the extent that the interpretation which would be given to the claims based on the above disclosure or the incorporated priority documents is in any way narrower than the interpretation which would be given based on the âExplicit Definitionsâ and the broadest reasonable interpretation as provided by a general purpose dictionary, the interpretation provided by the âExplicit Definitionsâ and broadest reasonable interpretation as provided by a general purpose dictionary shall control, and the inconsistent usage of terms in the specification or priority documents shall have no effect.
When used in the claims, an âapplicationâ should be understood to refer to a program which performs a specific function or functions. For example, Microsoft WORD is a type of âapplicationâ which has the functions of allowing a user to create new documents, and allowing a user to retrieve and edit already existing documents.
When used in the claims, a âback end systemâ should be understood to refer to systems, such as databases or servers, which may be used to support interactions with users, but which do not directly interact with users themselves.
When used in the claims, âbased onâ should be understood to mean that something is determined at least in part by the thing that it is indicated as being âbased on.â When something is completely determined by a thing, it will be described as being âbased EXCLUSIVELY onâ the thing.
When used in the claims, a âbusiness ruleâ should be understood to refer to a statement which is logically meaningful to a business, but which is treated essentially as a placeholder for testing purposes.
When used in the claims, the âcardinalityâ of a set should be understood to refer to the number of elements in the set.
When used in the claims, a âcomparisonâ should be understood to refer to a determination of similarities and/or differences between two or more things.
When used in the claims, a âcomputerâ should be understood to refer to a device or group of devices which is capable of performing one or more logical and/or physical operations on data to produce a result.
When used in the claims, âcomputer executable instructionsâ should be understood to refer to data which can be used to specify physical or logical operations which can be performed by a computer.
When used in the claims, a âcomputer readable mediumâ should be understood to mean any object, substance, or combination of objects or substances, capable of storing data or instructions in a form in which they can be retrieved and/or processed by a device. A computer readable medium should not be limited to any particular type or organization, and should be understood to include distributed and decentralized systems however they are physically or logically disposed, as well as storage objects of systems which are located in a defined and/or circumscribed physical and/or logical space.
When used in the claims, a âconditionâ should be understood to refer to something which acts as a trigger for something else. For example, if a prompt is played only for a new customer, then the caller being a new customer is a condition which, if satisfied (along with the caller being in the right state), will result in the prompt being played.
When used in the claims, the act of âconfiguringâ a computer should be understood to mean providing the computer with specific data (which may include instructions) which can be used in performing the specific acts the computer is being âconfiguredâ to do. For example, installing Microsoft WORD on a computer âconfiguresâ that computer to function as a word processor, which it does using the instructions for Microsoft WORD in combination with other inputs, such as an operating system, and various peripherals (e.g., a keyboard, monitor, etc. . . . ).
When used in the claims, a statement that there is a âconnectionâ between states should be understood to mean that a user can move from one state to a state it is âconnectedâ to without having to move through any other intervening states.
When used in the claims, âcoordinatingâ things should be understood to refer to the act of identifying things as corresponding to each other.
When used in the claims, a statement that something âcorrespondsâ to something else should be understood to mean that the thing has a 1:1 or MANY:1 relationship with the thing it âcorrespondsâ to.
When used in the claims, to âcreateâ something should be understood to mean causing that thing to come into being.
When used in the claims, âdataâ should be understood to mean information which is represented in a form which is capable of being processed, stored and/or transmitted.
When used in the claims, a âdatabaseâ should be understood to refer to a collection of data stored on a computer readable medium in a manner such that the data can be retrieved by a computer. The term âdatabaseâ can also be used to refer to the computer readable medium itself (e.g., a physical object which stores the data) based on the context.
When used in the claims, a âdiscrepancyâ should be understood to refer to an instance of difference or inconsistency.
When used in the claims, âduringâ should be understood as a modifier indicating that an event takes place during a time in which another event is ongoing.
When used in the claims, an âevaluation requestâ for a condition should be understood to mean a request to determine whether or not the condition should be treated as satisfied.
When used in the claims, to âexecuteâ an instruction should be understood to refer to the act of performing the operation called for by that instruction.
When used in the claims, a âgatekeeperâ should be understood to refer to an application or module which serves an intermediary between an entity (e.g., another application or module) which requires some service from an external resource, and the external resource itself.
When used in the claims, an âinitial stateâ should be understood to refer to a state in which an interaction begins, for example, a default state.
When used in the claims, to âinitiateâ something should be understood to refer to the act of beginning it, or setting it going.
When used in the claims, an âinteractive voice platformâ should be understood to refer to a system which is operable to support voice interactions with a user, and which is configured with data specifying actions the interactive voice platform should take during a voice interaction.
When used in the claims, an âinterpretation requestâ should be understood to refer to a request to classify a linguistic input (e.g., a transcription of words spoken by a user) according to its meaning.
When used in the claims, a âlabelâ should be understood to refer to a string of characters which can be used for identification.
When used in the claims, a âlive interactionâ should be understood to refer to an interaction which takes place between unaffiliated parties. For example, an interaction in which a member of the public calls an interactive voice response system in order to change his or her account data is a âlive interaction.â By contrast, a âtest interactionâ is one which takes place between affiliated parties (e.g., two systems owned or controlled by the same entity, a system owned by an entity who employs a human tester, etc) which is used to evaluate whether a party which will be responsible for the interaction (e.g., an interactive voice response system) is suitable for âlive interactions.â
When used in the claims, a âlogâ should be understood to refer a record of some activity or activities.
When used in the claims, a thing's âmeaningâ should be understood to refer to information conveyed by or included in the thing.
When used in the claims, a âmeans for generating a set of test data based on the set of data representing the voice user interfaceâ should be understood as a means for performing the specified function of âgenerating a set of test data based on the set of data representing the voice user interfaceâ under the provisions of 35 U.S.C. §112 ¶ 6. Algorithms which can be used to perform this function when used to configure a computer are described in, for example, the discussion of creating TESTDATA by exercising states in a voice user interface.
When used in the claims, a âmeans for generating a set of test scripts based on the set of data representing the voice user interfaceâ should be understood as a means for performing the specified function of âgenerating a set of test scripts based on the set of data representing the voice user interfaceâ under the provisions of 35 U.S.C. §112 ¶ 6. Algorithms which can be used to perform this function when used to configure a computer are described in, for example, the discussion of creating test scripts by tracing a graph of a voice user interface using a recursive search algorithm.
When used in the claims, a âmeans for providing data using a single interface during both test interactions and live interactionsâ should be understood as a means for performing the specified function of âproviding data using a single interface during both test interactions and live interactionsâ under the provisions of 35 U.S.C. §112 ¶ 6. Algorithms which can be used to perform this function when used to configure a computer are described in, for example, the discussion of a gatekeeper which can provide a consistent interface for both live interactions and testing.
When used in the claims, a âmeans for responding to voice processing requests during test interactions based on simulated inputâ should be understood as a means for performing the specified function of âresponding to voice processing requests during test interactions based on simulated inputâ under the provisions of 35 U.S.C. §112 ¶ 6. Algorithms which can be used to perform this function when used to configure a computer are described in, for example, the discussion of use of the proxy server in the context of FIG. 2.
When used in the claims, the verb âoutputâ (and various forms thereof) should be understood to refer to the act of producing or turning out something. For example, âoutputting an errorâ should be understood to include adding the error (or an indication thereof) to a log, displaying an error message on a user interface, setting an error flag, as well as similar acts.
When used in the claims, âperformâ should be understood to refer to the act of starting and carrying something through.
When used in the claims, a âprocessorâ should be understood to mean a device (or combination of devices) which can read instructions and perform operations (or cause operations to be performed) based on those instructions.
When used in the claims, a âproxy serverâ should be understood to refer to a device which stands in for an actual server and which provides responses to inputs which would otherwise be sent to the server. It should be understood that a proxy server can be implemented as a distinct physical device, or may be implemented as a process running on the same device that would be used as the server. An example of a proxy server is a server which serves as an intermediary between an application which requests data and a back end system which can provide responses to those requests.
When used in the claims, a ârecognition requestâ should be understood to refer to a request for a voice input to be converted from spoken words to text.
When used in the claims, a statement that something ârepresentsâ something else should be understood to mean that one thing stands for the other in some context, or that one thing is equivalent to that which it ârepresents.â
When used in the claims, a ârules engineâ should be understood to refer to an application which configures a computer to be able to process and execute rules. It should be understood that the ârules engineâ is used to execute arbitrary rules, which are not necessarily known at the time the ârules engineâ is deployed, rather than simply executing hard coded rules which might be part of the ârules engineâ itself.
When used in the claims, ârunningâ an application should be understood to refer to the act of executing instructions for that application.
When used in the claims, âsendâ should be understood to refer to an entity or device making a thing available to one or more other entities or devices. It should be understood that the word sending does not imply that the entity or device sending a thing has a particular destination selected for that thing; thus, as used in this application, a message could be sent using the well known prior art method of writing the message on a piece of paper, placing the paper in a bottle, and throwing the bottle into the ocean. Of course, the above example is not intended to imply that the word sending is restricted to situations in which a destination is not known. Thus, sending a thing refers to making that thing available to one or more other devices or entities, regardless of whether those devices or entities are known or selected by sender.
When used in the claims, a âsetâ of things should be understood to refer to a number, group, or combination of zero or more things of similar nature, design, or function. When the âsetâ is not necessarily countable (e.g., a set of data) then the âsetâ should be understood to refer to an identifiable portion of the not necessarily countable thing (e.g., data).
When used in the claims, a âsimulated inputâ should be understood to refer to an input which is used as a stand in for input that might be provided during a live interaction.
When used in the claims, a âstateâ should be understood to refer to a discrete logical location which defines a stage or condition.
When used in the claims, the verb âstoreâ (and various forms thereof) should be understood to refer to the act of preserving or maintaining, however brief in duration that act might be.
When used in the claims, a âscriptâ should be understood to refer to data that defines activities by one or more participants in an interaction. Similarly, a âtest scriptâ should be understood to refer to a script which defines activities in an interaction used to test or evaluate something (e.g., an application which is intended to support the interaction). In the claims, a âtest scriptâ will often be accompanied by âtest data,â which is data used to evaluate the thing being tested.
When used in the claims, âtransformingâ should be understood to refer to the act of changing a thing into something else, such as by deriving something from something else.
When used in the claims, the verb âuseâ (and various forms thereof) should be understood to mean employing the thing âusedâ for some purpose.
When used in the claims, a âvoice processing requestâ should be understood to refer to a request to provide data in a form suitable for use by a computer system based on voice input provided by a user. It should be understood that, in a test interaction, a âvoice processing requestâ might not actually be tied to voice input, but might instead be tied to a point in an interaction where voice input would be expected if the interaction were live.
When used in the claims, a âvoice serverâ should be understood to refer to a server which is configured to respond to recognition requests by recognizing words in the input provided, and/or to respond to interpretation requests by determining the meaning of the linguistic input provided.
When used in the claims, a âvoice user interfaceâ should be understood to refer to a user facing portion of a system or application which allows the user to communicate with and/or control the system or application.
1. A method comprising:
a) using a computer readable medium to store a set of data representing a voice user interface comprising a plurality of states;
b) based on executing a set of computer executable instructions by a processor, creating a set of test scripts and a set of test data corresponding to the voice user interface;
c) wherein:
i) the plurality of states comprises a first state comprising a condition;
ii) creating the set of test scripts and the set of test data comprises creating a business rule corresponding to the condition;
iii) the set of test scripts comprises:
a first script corresponding to test data in which the business rule is set to true; and,
a second test script corresponding to test data in which the business rule is set to false;
d) wherein the method comprises:
A) engaging in a plurality of test interactions with an interactive voice platform running an application corresponding to the voice user interface, wherein each test interaction from the plurality of test interactions is performed according to a test script from the set of test scripts, and wherein each test interaction from the plurality of test interactions comprises:
I) based on a voice processing request from the interactive voice platform, sending a simulated input from the test script;
II) based on an evaluation request for a condition from the interactive voice platform, sending a value for a business rule corresponding to the condition;
III) creating a log comprising:
actions performed; and
information received,
by the interactive voice platform during the test interaction;
B) for each test interaction from the plurality of test interactions:
I) performing a comparison of the log created for the test interaction and the test script for the test interaction; and
II) if the comparison of the log created for the test interaction and the test script for the test interaction indicates a discrepancy, outputting an error.
2. The method of claim 1, wherein:
a) the interactive voice platform is configured to send voice processing requests to a proxy server;
b) the voice processing requests sent to the proxy server comprise a recognition request;
c) the proxy server is configured to:
i) coordinate the recognition request with corresponding simulated input;
ii) send an interpretation request comprising the corresponding simulated input to a voice server; and
iii) send the result of the interpretation request to the interactive voice platform.
3. The method of claim 1, wherein:
a) the interactive voice platform is configured to send evaluation requests to a gatekeeper during both test interactions and live interactions;
b) the gatekeeper is configured to:
i) determine if an evaluation request is made during a test interaction or a live interaction;
ii) if the evaluation request is made during a test interaction, provide a response to the evaluation request based on test data corresponding to the test interaction; and
iii) if the evaluation request is made during a live interaction, provide a response to the evaluation request based on communication with a set of back end systems comprising one or more of:
a database; and
a rules engine.
4. The method of claim 1, wherein creating the business rule corresponding to the condition is performed by transforming the condition into a label without accounting for the condition's meaning.
5. A machine comprising:
a) an interactive voice platform; and
b) a voice server;
wherein:
1) the interactive voice platform is configured to:
i) execute a voice user interface application;
ii) based on execution of the voice user interface application:
generate voice processing requests; and
send evaluation requests to a gatekeeper;
iii) receive responses to the voice processing requests, wherein the responses to the voice processing requests are based on processing by the voice server;
2) the gatekeeper is configured to:
i) determine if an evaluation request is made during a test interaction or a live interaction;
ii) if the evaluation request is made during a test interaction, provide a response to the evaluation request based on test data corresponding to the test interaction; and
iii) if the evaluation request is made during a live interaction, provide a response to the evaluation request based on communication with a set of back end systems comprising one or more of:
a database; and
a rules engine.
6. The machine of claim 5 wherein:
a) the interactive voice platform is configured to send the voice processing requests to a proxy server;
b) the proxy server is configured to:
i) receive a recognition request from the interactive voice platform;
ii) generate an interpretation request based on the recognition request and a set of test inputs;
iii) send the interpretation request to the voice server;
iv) receive a response to the interpretation request from the voice server; and
v) send a response to the recognition request received from the interactive voice platform based on the response to the interpretation request received from the voice server.
7. The machine of claim 6 further comprising a processor communicatively connected with a computer readable medium, the computer readable medium having stored thereon a set of instructions executable by the processor and operable to configure a computer comprising the processor to perform a set of tasks comprising:
a) initiate a test interaction with the voice user interface application;
b) provide the gatekeeper test data corresponding to the test interaction;
c) provide the set of test inputs to the proxy server, wherein the set of simulated inputs corresponds to the test interaction; and
d) terminate the interaction in response to receiving a termination message from the proxy server.
8. The machine of claim 7, wherein:
a) the interactive voice platform is configured to create a log comprising:
i) actions performed during the test interaction;
ii) information received during the test interaction;
b) the set of instructions executable by the processor is further operable to configure a computer comprising the processor to:
i) perform a comparison of the log created for the test interaction and a test script for the test interaction; and
ii) if the comparison of the log created for the test interaction and the test script for the test interaction indicates a discrepancy, output an error.
9. A method comprising:
a) using a computer readable medium to store a set of data representing a voice user interface comprising a plurality of states;
b) based on executing a set of computer executable instructions by a processor, creating a set of test scripts and a set of test data corresponding to the voice user interface;
c) wherein:
i) the plurality of states comprises a first state comprising a condition;
ii) creating the set of test scripts and the set of test data comprises creating a business rule corresponding to the condition;
iii) the set of test scripts comprises:
a first script corresponding to test data in which the business rule is set to true; and,
a second test script corresponding to test data in which the business rule is set to false;
d) wherein:
A) the voice user interface comprises:
I) the plurality of states; and
II) a plurality of transitions, each transition from the plurality of transitions representing a connection between states from the plurality of states;
B) creating the set of test scripts comprises identifying a set of unreachable states from the plurality of states, wherein the set of unreachable states comprises all states from the plurality of states which cannot be reached by starting at an initial state and following one or more transitions from the set of transitions; and
C) the method comprises, if the cardinality of the set of unreachable states is greater than zero, outputting an error.